mirror of
https://source.quilibrium.com/quilibrium/ceremonyclient.git
synced 2024-11-14 04:05:17 +00:00
115 lines
3.2 KiB
Go
115 lines
3.2 KiB
Go
|
// Copyright 2012 The LevelDB-Go and Pebble Authors. All rights reserved. Use
|
||
|
// of this source code is governed by a BSD-style license that can be found in
|
||
|
// the LICENSE file.
|
||
|
|
||
|
package base
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"fmt"
|
||
|
"os"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/cockroachdb/pebble/vfs"
|
||
|
"github.com/cockroachdb/redact"
|
||
|
"github.com/stretchr/testify/require"
|
||
|
)
|
||
|
|
||
|
func TestParseFilename(t *testing.T) {
|
||
|
testCases := map[string]bool{
|
||
|
"000000.log": true,
|
||
|
"000000.log.zip": false,
|
||
|
"000000..log": false,
|
||
|
"a000000.log": false,
|
||
|
"abcdef.log": false,
|
||
|
"000001ldb": false,
|
||
|
"000001.sst": true,
|
||
|
"CURRENT": true,
|
||
|
"CURRaNT": false,
|
||
|
"LOCK": true,
|
||
|
"xLOCK": false,
|
||
|
"x.LOCK": false,
|
||
|
"MANIFEST": false,
|
||
|
"MANIFEST123456": false,
|
||
|
"MANIFEST-": false,
|
||
|
"MANIFEST-123456": true,
|
||
|
"MANIFEST-123456.doc": false,
|
||
|
"OPTIONS": false,
|
||
|
"OPTIONS123456": false,
|
||
|
"OPTIONS-": false,
|
||
|
"OPTIONS-123456": true,
|
||
|
"OPTIONS-123456.doc": false,
|
||
|
"CURRENT.123456": false,
|
||
|
"CURRENT.dbtmp": false,
|
||
|
"CURRENT.123456.dbtmp": true,
|
||
|
"temporary.123456.dbtmp": true,
|
||
|
}
|
||
|
fs := vfs.NewMem()
|
||
|
for tc, want := range testCases {
|
||
|
_, _, got := ParseFilename(fs, fs.PathJoin("foo", tc))
|
||
|
if got != want {
|
||
|
t.Errorf("%q: got %v, want %v", tc, got, want)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestFilenameRoundTrip(t *testing.T) {
|
||
|
testCases := map[FileType]bool{
|
||
|
// CURRENT and LOCK files aren't numbered.
|
||
|
FileTypeCurrent: false,
|
||
|
FileTypeLock: false,
|
||
|
// The remaining file types are numbered.
|
||
|
FileTypeLog: true,
|
||
|
FileTypeManifest: true,
|
||
|
FileTypeTable: true,
|
||
|
FileTypeOptions: true,
|
||
|
FileTypeOldTemp: true,
|
||
|
FileTypeTemp: true,
|
||
|
}
|
||
|
fs := vfs.NewMem()
|
||
|
for fileType, numbered := range testCases {
|
||
|
fileNums := []FileNum{0}
|
||
|
if numbered {
|
||
|
fileNums = []FileNum{0, 1, 2, 3, 10, 42, 99, 1001}
|
||
|
}
|
||
|
for _, fileNum := range fileNums {
|
||
|
filename := MakeFilepath(fs, "foo", fileType, fileNum.DiskFileNum())
|
||
|
gotFT, gotFN, gotOK := ParseFilename(fs, filename)
|
||
|
if !gotOK {
|
||
|
t.Errorf("could not parse %q", filename)
|
||
|
continue
|
||
|
}
|
||
|
if gotFT != fileType || gotFN.FileNum() != fileNum {
|
||
|
t.Errorf("filename=%q: got %v, %v, want %v, %v", filename, gotFT, gotFN, fileType, fileNum)
|
||
|
continue
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
type bufferFataler struct {
|
||
|
buf bytes.Buffer
|
||
|
}
|
||
|
|
||
|
func (b *bufferFataler) Fatalf(msg string, args ...interface{}) {
|
||
|
fmt.Fprintf(&b.buf, msg, args...)
|
||
|
}
|
||
|
|
||
|
func TestMustExist(t *testing.T) {
|
||
|
err := os.ErrNotExist
|
||
|
fs := vfs.Default
|
||
|
var buf bufferFataler
|
||
|
filename := fs.PathJoin("..", "..", "testdata", "db-stage-4", "000000.sst")
|
||
|
|
||
|
MustExist(fs, filename, &buf, err)
|
||
|
require.Equal(t, `000000.sst:
|
||
|
file does not exist
|
||
|
directory contains 9 files, 2 unknown, 1 tables, 1 logs, 2 manifests`, buf.buf.String())
|
||
|
}
|
||
|
|
||
|
func TestRedactFileNum(t *testing.T) {
|
||
|
// Ensure that redaction never redacts file numbers.
|
||
|
require.Equal(t, redact.RedactableString("000005"), redact.Sprint(FileNum(5)))
|
||
|
require.Equal(t, redact.RedactableString("000005"), redact.Sprint(DiskFileNum(5)))
|
||
|
}
|