ceremonyclient/pebble/internal/mkbench/write_test.go

114 lines
3.2 KiB
Go
Raw Normal View History

2024-01-03 07:31:42 +00:00
package main
import (
"os"
"path/filepath"
"strings"
"testing"
"github.com/stretchr/testify/require"
)
const testdataSummaryDir = "./testdata/write-throughput/"
var (
testdataSummaryFile = filepath.Join(testdataSummaryDir, summaryFilename)
testdataPerRunSummaryFilenames = []string{
"20211027-pebble-write-size=1024-run_1-summary.json",
"20211028-pebble-write-size=1024-run_1-summary.json",
}
)
func TestParseWrite_FromScratch(t *testing.T) {
maybeSkip(t)
testFn := func(t *testing.T, dataDir string) {
// Set up the output directory for the test.
testDir := t.TempDir()
summaryDir := filepath.Join(testDir, "write-throughput")
err := os.Mkdir(summaryDir, 0700)
require.NoError(t, err)
// Write out the new summary file.
err = parseWrite(dataDir, summaryDir)
require.NoError(t, err)
// Confirm new summary.json file matches what we expect.
err = filesEqual(testdataSummaryFile, filepath.Join(summaryDir, summaryFilename))
require.NoError(t, err)
// The individual per-run *summary.json files are equal.
for _, p := range testdataPerRunSummaryFilenames {
err = filesEqual(filepath.Join(testdataSummaryDir, p), filepath.Join(summaryDir, p))
require.NoError(t, err)
}
}
for _, dir := range dataDirPaths {
t.Run(dir, func(t *testing.T) {
testFn(t, dir)
})
}
}
func TestParseWrite_Existing(t *testing.T) {
maybeSkip(t)
testFn := func(t *testing.T, dataDir string) {
// Set up the output directory for the test.
testDir := t.TempDir()
summaryDir := filepath.Join(testDir, "write-throughput")
err := os.Mkdir(summaryDir, 0700)
require.NoError(t, err)
// Copy all files into the test dir excluding one day.
newDataDir := filepath.Join(testDir, "data")
err = copyDir(dataDir, newDataDir)
require.NoError(t, err)
err = os.RemoveAll(filepath.Join(newDataDir, "20211027"))
require.NoError(t, err)
// Write out the new summary file.
err = parseWrite(newDataDir, summaryDir)
require.NoError(t, err)
// Confirm new summary.json files are NOT equal.
err = filesEqual(testdataSummaryFile, filepath.Join(summaryDir, summaryFilename))
require.Error(t, err)
// The only per-run *summary.json files are for the days we did not remove
// (i.e. 20211028/**-summary.json)
var perRunFiles []string
err = filepath.Walk(summaryDir, func(path string, info os.FileInfo, err error) error {
basename := filepath.Base(path)
if strings.HasSuffix(basename, "-summary.json") {
perRunFiles = append(perRunFiles, basename)
}
return nil
})
require.NoError(t, err)
require.Equal(t, perRunFiles, testdataPerRunSummaryFilenames[1:])
// Re-construct the summary.json file with the full set of data (i.e. the
// original data directory).
err = parseWrite(dataDir, summaryDir)
require.NoError(t, err)
// Confirm the two summary.json files are now equal.
err = filesEqual(testdataSummaryFile, filepath.Join(summaryDir, summaryFilename))
require.NoError(t, err)
// The individual per-run *summary.json files are equal.
for _, p := range testdataPerRunSummaryFilenames {
err = filesEqual(filepath.Join(testdataSummaryDir, p), filepath.Join(summaryDir, p))
require.NoError(t, err)
}
}
for _, dir := range dataDirPaths {
t.Run(dir, func(t *testing.T) {
testFn(t, dir)
})
}
}