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