aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/image/compression_test.go
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2022-12-17 11:59:24 +0100
committerDmitry Vyukov <dvyukov@google.com>2022-12-22 10:11:08 +0100
commit8482d3c1035095c89d112c75bfcc2e4095b486bf (patch)
treef2cc2b32e55fd61cbcd03d1b27693fe7c972f07b /pkg/image/compression_test.go
parent412eecf40d514f89060844dc8631f60b80d7bfd2 (diff)
pkg/image: factor out from prog
Move image compression-related function to a separate package. In preperation for subsequent changes that make decompression more complex. Prog package is already large and complex. Also makes running compression tests/benchmarks much faster.
Diffstat (limited to 'pkg/image/compression_test.go')
-rw-r--r--pkg/image/compression_test.go44
1 files changed, 44 insertions, 0 deletions
diff --git a/pkg/image/compression_test.go b/pkg/image/compression_test.go
new file mode 100644
index 000000000..cf18ed340
--- /dev/null
+++ b/pkg/image/compression_test.go
@@ -0,0 +1,44 @@
+// Copyright 2022 syzkaller project authors. All rights reserved.
+// Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
+
+package image
+
+import (
+ "bytes"
+ "fmt"
+ "math/rand"
+ "testing"
+
+ "github.com/google/syzkaller/pkg/testutil"
+)
+
+func TestCompress(t *testing.T) {
+ r := rand.New(testutil.RandSource(t))
+ err := testRoundTrip(r, Compress, Decompress)
+ if err != nil {
+ t.Fatalf("compress/decompress %v", err)
+ }
+}
+
+func TestEncode(t *testing.T) {
+ r := rand.New(testutil.RandSource(t))
+ err := testRoundTrip(r, EncodeB64, DecodeB64)
+ if err != nil {
+ t.Fatalf("encode/decode Base64 %v", err)
+ }
+}
+
+func testRoundTrip(r *rand.Rand, transform func([]byte) []byte, inverse func([]byte) ([]byte, error)) error {
+ for i := 0; i < testutil.IterCount(); i++ {
+ randBytes := testutil.RandMountImage(r)
+ resultBytes := transform(randBytes)
+ resultBytes, err := inverse(resultBytes)
+ if err != nil {
+ return err
+ }
+ if !bytes.Equal(randBytes, resultBytes) {
+ return fmt.Errorf("roundtrip changes data (original length %d)", len(randBytes))
+ }
+ }
+ return nil
+}