github.com/cockroachdb/pebble@v0.0.0-20231214172447-ab4952c5f87b/internal/mkbench/ycsb_test.go (about)

     1  // Copyright 2021 The LevelDB-Go and Pebble Authors. All rights reserved. Use
     2  // of this source code is governed by a BSD-style license that can be found in
     3  // the LICENSE file.
     4  
     5  package main
     6  
     7  import (
     8  	"os"
     9  	"path/filepath"
    10  	"testing"
    11  
    12  	"github.com/stretchr/testify/require"
    13  )
    14  
    15  const (
    16  	dataDirPath          = "./testdata/data"
    17  	dataSymlinkedDirPath = "./testdata/data-symlink"
    18  	dataJSPath           = "./testdata/data.js"
    19  )
    20  
    21  var dataDirPaths = []string{dataDirPath, dataSymlinkedDirPath}
    22  
    23  func TestParseYCSB_FromScratch(t *testing.T) {
    24  	maybeSkip(t)
    25  
    26  	testFn := func(t *testing.T, dataDir string) {
    27  		// Write out a new data.js file from the input data.
    28  		fPath := filepath.Join(t.TempDir(), "data.js")
    29  		parseYCSB(dataDir, fPath, fPath)
    30  
    31  		// Confirm the two data.js files are now equal.
    32  		err := filesEqual(dataJSPath, fPath)
    33  		require.NoError(t, err)
    34  	}
    35  
    36  	for _, dir := range dataDirPaths {
    37  		t.Run(dir, func(t *testing.T) {
    38  			testFn(t, dir)
    39  		})
    40  	}
    41  }
    42  
    43  func TestYCSB_Existing(t *testing.T) {
    44  	maybeSkip(t)
    45  
    46  	testFn := func(t *testing.T, dataDir string) {
    47  		// Set up the test directory.
    48  		testDir := t.TempDir()
    49  		newDataDir := filepath.Join(testDir, "data")
    50  		newDataJS := filepath.Join(testDir, "data.js")
    51  
    52  		// Copy all files into the test dir excluding one day.
    53  		err := copyDir(dataDir, newDataDir)
    54  		require.NoError(t, err)
    55  		err = os.RemoveAll(filepath.Join(newDataDir, "20211027"))
    56  		require.NoError(t, err)
    57  
    58  		// Construct the data.js file on the test data with a single day removed.
    59  		parseYCSB(newDataDir, newDataJS, newDataJS)
    60  
    61  		// Confirm the two data.js files are not equal.
    62  		err = filesEqual(dataJSPath, newDataJS)
    63  		require.Error(t, err)
    64  
    65  		// Re-construct the data.js file with the full set of data.
    66  		parseYCSB(dataDir, dataJSPath, newDataJS)
    67  
    68  		// Confirm the two data.js files are now equal.
    69  		err = filesEqual(dataJSPath, newDataJS)
    70  		require.NoError(t, err)
    71  	}
    72  
    73  	for _, dir := range dataDirPaths {
    74  		t.Run(dir, func(t *testing.T) {
    75  			testFn(t, dir)
    76  		})
    77  	}
    78  }