diff options
Diffstat (limited to 'storage/filter/filter_test.go')
-rw-r--r-- | storage/filter/filter_test.go | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/storage/filter/filter_test.go b/storage/filter/filter_test.go new file mode 100644 index 0000000..78d4e7f --- /dev/null +++ b/storage/filter/filter_test.go @@ -0,0 +1,76 @@ +package filter + +import ( + "bytes" + "code.laria.me/petrific/backup" + "code.laria.me/petrific/storage/memory" + "testing" +) + +type XorFilter byte + +func (xf XorFilter) Transform(b []byte) ([]byte, error) { + for i := range b { + b[i] ^= byte(xf) + } + return b, nil +} + +func genTestData(size int) []byte { + data := make([]byte, size) + for i := range data { + data[i] = byte(i & 0xff) + } + return data +} + +func TestXorReverse(t *testing.T) { + orig := genTestData(1 << 20) + + filter := XorFilter(42) + + filtered := make([]byte, len(orig)) + copy(filtered, orig) + + filtered, _ = filter.Transform(filtered) + filtered, _ = filter.Transform(filtered) + + if !bytes.Equal(filtered, orig) { + t.Errorf("orig != filtered:\n{%x}\n{%x}", orig, filtered) + } +} + +func testFilter(t *testing.T, encode, decode Filter) { + base := memory.NewMemoryStorage() + storage := FilterStorage{ + Base: base, + Encode: encode, + Decode: decode, + } + + size := backup.BlobChunkSize*2 + 10 + data := genTestData(size) + + id, err := backup.WriteFile(storage, bytes.NewReader(data)) + if err != nil { + t.Fatalf("Unexpeced error from WriteFile: %s", err) + } + + buf := new(bytes.Buffer) + if err := backup.RestoreFile(storage, id, buf); err != nil { + t.Fatalf("Unexpeced error from RestoreFile: %s", err) + } + + if !bytes.Equal(data, buf.Bytes()) { + t.Errorf("data != buf.Bytes()") + } + +} + +func TestFilterStorage(t *testing.T) { + testFilter(t, XorFilter(42), XorFilter(42)) +} + +func TestPipeFilter(t *testing.T) { + testFilter(t, PipeFilter([]string{"cat"}), PipeFilter([]string{"cat"})) +} |