mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-11-10 08:20:23 +00:00
73 lines
1.5 KiB
Go
73 lines
1.5 KiB
Go
package diskv
|
|
|
|
import (
|
|
"compress/flate"
|
|
"fmt"
|
|
"math/rand"
|
|
"os"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func init() {
|
|
rand.Seed(time.Now().UnixNano())
|
|
}
|
|
|
|
func testCompressionWith(t *testing.T, c Compression, name string) {
|
|
d := New(Options{
|
|
BasePath: "compression-test",
|
|
CacheSizeMax: 0,
|
|
Compression: c,
|
|
})
|
|
defer d.EraseAll()
|
|
|
|
sz := 4096
|
|
val := make([]byte, sz)
|
|
for i := 0; i < sz; i++ {
|
|
val[i] = byte('a' + rand.Intn(26)) // {a-z}; should compress some
|
|
}
|
|
|
|
key := "a"
|
|
if err := d.Write(key, val); err != nil {
|
|
t.Fatalf("write failed: %s", err)
|
|
}
|
|
|
|
targetFile := fmt.Sprintf("%s%c%s", d.BasePath, os.PathSeparator, key)
|
|
fi, err := os.Stat(targetFile)
|
|
if err != nil {
|
|
t.Fatalf("%s: %s", targetFile, err)
|
|
}
|
|
|
|
if fi.Size() >= int64(sz) {
|
|
t.Fatalf("%s: size=%d, expected smaller", targetFile, fi.Size())
|
|
}
|
|
t.Logf("%s compressed %d to %d", name, sz, fi.Size())
|
|
|
|
readVal, err := d.Read(key)
|
|
if len(readVal) != sz {
|
|
t.Fatalf("read: expected size=%d, got size=%d", sz, len(readVal))
|
|
}
|
|
|
|
for i := 0; i < sz; i++ {
|
|
if readVal[i] != val[i] {
|
|
t.Fatalf("i=%d: expected %v, got %v", i, val[i], readVal[i])
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestGzipDefault(t *testing.T) {
|
|
testCompressionWith(t, NewGzipCompression(), "gzip")
|
|
}
|
|
|
|
func TestGzipBestCompression(t *testing.T) {
|
|
testCompressionWith(t, NewGzipCompressionLevel(flate.BestCompression), "gzip-max")
|
|
}
|
|
|
|
func TestGzipBestSpeed(t *testing.T) {
|
|
testCompressionWith(t, NewGzipCompressionLevel(flate.BestSpeed), "gzip-min")
|
|
}
|
|
|
|
func TestZlib(t *testing.T) {
|
|
testCompressionWith(t, NewZlibCompression(), "zlib")
|
|
}
|