]> Cypherpunks.ru repositories - gostls13.git/blobdiff - src/internal/zstd/zstd_test.go
internal/zstd: use dynamic path resolution for zstd in tests
[gostls13.git] / src / internal / zstd / zstd_test.go
index e5c964c307dd2fe998064393bfad30f12adac027..4ae6f2b3982c1cc3ed88d393255b9b5b1c762393 100644 (file)
@@ -97,6 +97,17 @@ var tests = []struct {
                "",
                "\x28\xb5\x2f\xfd\x00\x00\x15\x00\x00\x00\x00",
        },
+       {
+               "single skippable frame",
+               "",
+               "\x50\x2a\x4d\x18\x00\x00\x00\x00",
+       },
+       {
+               "two skippable frames",
+               "",
+               "\x50\x2a\x4d\x18\x00\x00\x00\x00" +
+                       "\x50\x2a\x4d\x18\x00\x00\x00\x00",
+       },
 }
 
 func TestSamples(t *testing.T) {
@@ -116,6 +127,26 @@ func TestSamples(t *testing.T) {
        }
 }
 
+func TestReset(t *testing.T) {
+       input := strings.NewReader("")
+       r := NewReader(input)
+       for _, test := range tests {
+               test := test
+               t.Run(test.name, func(t *testing.T) {
+                       input.Reset(test.compressed)
+                       r.Reset(input)
+                       got, err := io.ReadAll(r)
+                       if err != nil {
+                               t.Fatal(err)
+                       }
+                       gotstr := string(got)
+                       if gotstr != test.uncompressed {
+                               t.Errorf("got %q want %q", gotstr, test.uncompressed)
+                       }
+               })
+       }
+}
+
 var (
        bigDataOnce  sync.Once
        bigDataBytes []byte
@@ -136,10 +167,17 @@ func bigData(t testing.TB) []byte {
        return bigDataBytes
 }
 
+func findZstd(t testing.TB) string {
+       zstd, err := exec.LookPath("zstd")
+       if err != nil {
+               t.Skip("skipping because zstd not found")
+       }
+       return zstd
+}
+
 var (
        zstdBigOnce  sync.Once
        zstdBigBytes []byte
-       zstdBigSkip  bool
        zstdBigErr   error
 )
 
@@ -149,13 +187,10 @@ var (
 func zstdBigData(t testing.TB) []byte {
        input := bigData(t)
 
-       zstdBigOnce.Do(func() {
-               if _, err := os.Stat("/usr/bin/zstd"); err != nil {
-                       zstdBigSkip = true
-                       return
-               }
+       zstd := findZstd(t)
 
-               cmd := exec.Command("/usr/bin/zstd", "-z")
+       zstdBigOnce.Do(func() {
+               cmd := exec.Command(zstd, "-z")
                cmd.Stdin = bytes.NewReader(input)
                var compressed bytes.Buffer
                cmd.Stdout = &compressed
@@ -167,9 +202,6 @@ func zstdBigData(t testing.TB) []byte {
 
                zstdBigBytes = compressed.Bytes()
        })
-       if zstdBigSkip {
-               t.Skip("skipping because /usr/bin/zstd does not exist")
-       }
        if zstdBigErr != nil {
                t.Fatal(zstdBigErr)
        }
@@ -186,7 +218,7 @@ func TestLarge(t *testing.T) {
        data := bigData(t)
        compressed := zstdBigData(t)
 
-       t.Logf("/usr/bin/zstd compressed %d bytes to %d", len(data), len(compressed))
+       t.Logf("zstd compressed %d bytes to %d", len(data), len(compressed))
 
        r := NewReader(bytes.NewReader(compressed))
        got, err := io.ReadAll(r)