mirror of
https://source.quilibrium.com/quilibrium/ceremonyclient.git
synced 2024-11-15 04:35:17 +00:00
114 lines
3.2 KiB
Go
114 lines
3.2 KiB
Go
|
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)
|
||
|
})
|
||
|
}
|
||
|
}
|