1package tstorage 2 3import ( 4 "os" 5 "path/filepath" 6 "strconv" 7 "testing" 8 9 "github.com/stretchr/testify/assert" 10 "github.com/stretchr/testify/require" 11) 12 13func Test_diskWAL_append_read(t *testing.T) { 14 var ( 15 op = operationInsert 16 rows = []Row{ 17 {Metric: "metric-1", DataPoint: DataPoint{Value: 0.1, Timestamp: 1600000000}}, 18 {Metric: "metric-2", DataPoint: DataPoint{Value: 0.2, Timestamp: 1600000001}}, 19 {Metric: "metric-1", DataPoint: DataPoint{Value: 0.1, Timestamp: 1600000001}}, 20 {Metric: "metric-2", DataPoint: DataPoint{Value: 0.2, Timestamp: 1600000003}}, 21 } 22 ) 23 // Append rows into wal 24 tmpDir, err := os.MkdirTemp("", "tstorage-test") 25 defer os.RemoveAll(tmpDir) 26 require.NoError(t, err) 27 path := filepath.Join(tmpDir, "wal") 28 29 wal, err := newDiskWAL(path, 4096) 30 require.NoError(t, err) 31 32 // Append into two segments 33 err = wal.append(op, rows[:2]) 34 require.NoError(t, err) 35 36 err = wal.punctuate() 37 require.NoError(t, err) 38 39 err = wal.append(op, rows[2:]) 40 require.NoError(t, err) 41 42 err = wal.flush() 43 require.NoError(t, err) 44 45 // Recover rows. 46 reader, err := newDiskWALReader(path) 47 require.NoError(t, err) 48 err = reader.readAll() 49 require.NoError(t, err) 50 got := reader.rowsToInsert 51 assert.Equal(t, rows, got) 52} 53 54func Test_diskWAL_removeOldest(t *testing.T) { 55 tmpDir, err := os.MkdirTemp("", "tstorage-test") 56 require.NoError(t, err) 57 for i := 0; i < 3; i++ { 58 err := os.Mkdir(filepath.Join(tmpDir, strconv.Itoa(i)), os.ModePerm) 59 require.NoError(t, err) 60 } 61 w := &diskWAL{ 62 dir: tmpDir, 63 } 64 err = w.removeOldest() 65 require.NoError(t, err) 66 files, err := os.ReadDir(w.dir) 67 require.NoError(t, err) 68 want := []string{"1", "2"} 69 got := []string{} 70 for _, f := range files { 71 got = append(got, f.Name()) 72 } 73 assert.Equal(t, want, got) 74} 75