Skip to content
This repository was archived by the owner on Aug 13, 2019. It is now read-only.

Commit 9a0e8f9

Browse files
committed
Add a test for compression
Signed-off-by: Chris Marchbanks <[email protected]>
1 parent 96efac4 commit 9a0e8f9

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

wal/wal_test.go

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,65 @@ func TestSegmentMetric(t *testing.T) {
370370
testutil.Ok(t, w.Close())
371371
}
372372

373+
func TestCompression(t *testing.T) {
374+
const (
375+
segmentSize = pageSize
376+
recordSize = (pageSize / 2) - recordHeaderSize
377+
records = 100
378+
)
379+
380+
uncompressedDir, err := ioutil.TempDir("", "uncompressed")
381+
testutil.Ok(t, err)
382+
defer func() {
383+
testutil.Ok(t, os.RemoveAll(uncompressedDir))
384+
}()
385+
w, err := NewSize(nil, nil, uncompressedDir, segmentSize, false)
386+
testutil.Ok(t, err)
387+
388+
logZeroRecords(t, w, recordSize, records)
389+
testutil.Ok(t, w.Close())
390+
391+
compressedDir, err := ioutil.TempDir("", "uncompressed")
392+
testutil.Ok(t, err)
393+
defer func() {
394+
testutil.Ok(t, os.RemoveAll(compressedDir))
395+
}()
396+
w, err = NewSize(nil, nil, compressedDir, segmentSize, true)
397+
testutil.Ok(t, err)
398+
399+
logZeroRecords(t, w, recordSize, records)
400+
testutil.Ok(t, w.Close())
401+
402+
uncompressedSize, err := dirSize(uncompressedDir)
403+
testutil.Ok(t, err)
404+
compressedSize, err := dirSize(compressedDir)
405+
testutil.Ok(t, err)
406+
407+
testutil.Assert(t, float64(uncompressedSize)*0.75 > float64(compressedSize), "Compressing zeroes should save at least 25%% space")
408+
}
409+
410+
func logZeroRecords(tb testing.TB, w *WAL, recordSize, records int) {
411+
tb.Helper()
412+
buf := make([]byte, recordSize)
413+
for i := 0; i < records; i++ {
414+
testutil.Ok(tb, w.Log(buf))
415+
}
416+
}
417+
418+
func dirSize(path string) (int64, error) {
419+
var size int64
420+
err := filepath.Walk(path, func(_ string, info os.FileInfo, err error) error {
421+
if err != nil {
422+
return err
423+
}
424+
if !info.IsDir() {
425+
size += info.Size()
426+
}
427+
return nil
428+
})
429+
return size, err
430+
}
431+
373432
func BenchmarkWAL_LogBatched(b *testing.B) {
374433
for _, compress := range []bool{true, false} {
375434
b.Run(fmt.Sprintf("compress=%t", compress), func(b *testing.B) {

0 commit comments

Comments
 (0)