ceremonyclient/pebble/metamorphic/parser_test.go
Cassandra Heart 2e2a1e4789
v1.2.0 (#31)
2024-01-03 01:31:42 -06:00

67 lines
1.6 KiB
Go

// Copyright 2019 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 metamorphic
import (
"fmt"
"testing"
"github.com/cockroachdb/datadriven"
"github.com/cockroachdb/pebble/internal/randvar"
"github.com/stretchr/testify/require"
)
func TestParser(t *testing.T) {
datadriven.RunTest(t, "testdata/parser", func(t *testing.T, d *datadriven.TestData) string {
switch d.Cmd {
case "parse":
ops, err := parse([]byte(d.Input), parserOpts{})
if err != nil {
return err.Error()
}
return formatOps(ops)
default:
return fmt.Sprintf("unknown command: %s", d.Cmd)
}
})
}
func TestParserRandom(t *testing.T) {
cfgs := []string{"default", "multiInstance"}
for i := range cfgs {
t.Run(fmt.Sprintf("config=%s", cfgs[i]), func(t *testing.T) {
cfg := defaultConfig()
if cfgs[i] == "multiInstance" {
cfg = multiInstanceConfig()
cfg.numInstances = 2
}
ops := generate(randvar.NewRand(), 10000, cfg, newKeyManager(cfg.numInstances))
src := formatOps(ops)
parsedOps, err := parse([]byte(src), parserOpts{})
if err != nil {
t.Fatalf("%s\n%s", err, src)
}
require.Equal(t, ops, parsedOps)
})
}
}
func TestParserNilBounds(t *testing.T) {
formatted := formatOps([]op{
&newIterOp{
readerID: makeObjID(dbTag, 1),
iterID: makeObjID(iterTag, 1),
iterOpts: iterOpts{},
},
})
parsedOps, err := parse([]byte(formatted), parserOpts{})
require.NoError(t, err)
require.Equal(t, 1, len(parsedOps))
v := parsedOps[0].(*newIterOp)
require.Nil(t, v.lower)
require.Nil(t, v.upper)
}