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

79 lines
1.9 KiB
Go

// Copyright 2021 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 main
import (
"os"
"path/filepath"
"testing"
"github.com/stretchr/testify/require"
)
const (
dataDirPath = "./testdata/data"
dataSymlinkedDirPath = "./testdata/data-symlink"
dataJSPath = "./testdata/data.js"
)
var dataDirPaths = []string{dataDirPath, dataSymlinkedDirPath}
func TestParseYCSB_FromScratch(t *testing.T) {
maybeSkip(t)
testFn := func(t *testing.T, dataDir string) {
// Write out a new data.js file from the input data.
fPath := filepath.Join(t.TempDir(), "data.js")
parseYCSB(dataDir, fPath, fPath)
// Confirm the two data.js files are now equal.
err := filesEqual(dataJSPath, fPath)
require.NoError(t, err)
}
for _, dir := range dataDirPaths {
t.Run(dir, func(t *testing.T) {
testFn(t, dir)
})
}
}
func TestYCSB_Existing(t *testing.T) {
maybeSkip(t)
testFn := func(t *testing.T, dataDir string) {
// Set up the test directory.
testDir := t.TempDir()
newDataDir := filepath.Join(testDir, "data")
newDataJS := filepath.Join(testDir, "data.js")
// Copy all files into the test dir excluding one day.
err := copyDir(dataDir, newDataDir)
require.NoError(t, err)
err = os.RemoveAll(filepath.Join(newDataDir, "20211027"))
require.NoError(t, err)
// Construct the data.js file on the test data with a single day removed.
parseYCSB(newDataDir, newDataJS, newDataJS)
// Confirm the two data.js files are not equal.
err = filesEqual(dataJSPath, newDataJS)
require.Error(t, err)
// Re-construct the data.js file with the full set of data.
parseYCSB(dataDir, dataJSPath, newDataJS)
// Confirm the two data.js files are now equal.
err = filesEqual(dataJSPath, newDataJS)
require.NoError(t, err)
}
for _, dir := range dataDirPaths {
t.Run(dir, func(t *testing.T) {
testFn(t, dir)
})
}
}