ceremonyclient/pebble/internal/mkbench/ycsb_test.go

79 lines
1.9 KiB
Go
Raw Permalink Normal View History

2024-01-03 07:31:42 +00:00
// 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)
})
}
}