...
1 package zstd
2
3 import (
4 "bytes"
5 "encoding/json"
6 "io"
7 "os"
8 "strings"
9 "testing"
10 )
11
12 func TestHeader_Decode(t *testing.T) {
13 zr := testCreateZipReader("testdata/headers.zip", t)
14
15
16 const regen = false
17 golden := make(map[string]Header)
18 if !regen {
19 b, err := os.ReadFile("testdata/headers-want.json.zst")
20 if err != nil {
21 t.Fatal(err)
22 }
23 dec, err := NewReader(nil)
24 if err != nil {
25 t.Fatal(err)
26 }
27 defer dec.Close()
28 b, err = dec.DecodeAll(b, nil)
29 if err != nil {
30 t.Fatal(err)
31 }
32 err = json.Unmarshal(b, &golden)
33 if err != nil {
34 t.Fatal(err)
35 }
36 }
37
38 for i, tt := range zr.File {
39 if !strings.HasSuffix(t.Name(), "") {
40 continue
41 }
42 if testing.Short() && i > 100 {
43 break
44 }
45
46 t.Run(tt.Name, func(t *testing.T) {
47 r, err := tt.Open()
48 if err != nil {
49 t.Error(err)
50 return
51 }
52 defer r.Close()
53 b, err := io.ReadAll(r)
54 if err != nil {
55 t.Error(err)
56 return
57 }
58 want, ok := golden[tt.Name]
59 var got Header
60 err = got.Decode(b)
61 if err != nil {
62 if ok {
63 t.Errorf("got unexpected error %v", err)
64 }
65 return
66 }
67 if regen {
68
69 golden[tt.Name] = got
70 return
71 }
72 if !ok {
73 t.Errorf("want error, got result: %v", got)
74 }
75 if want != got {
76 t.Errorf("header mismatch:\nwant %#v\ngot %#v", want, got)
77 }
78 })
79 }
80 if regen {
81 w, err := os.Create("testdata/headers-want.json.zst")
82 if err != nil {
83 t.Fatal(err)
84 }
85 defer w.Close()
86 enc, err := NewWriter(w, WithEncoderLevel(SpeedBestCompression))
87 if err != nil {
88 t.Fatal(err)
89 }
90 b, err := json.Marshal(golden)
91 if err != nil {
92 t.Fatal(err)
93 }
94 enc.ReadFrom(bytes.NewBuffer(b))
95 enc.Close()
96 t.SkipNow()
97 }
98 }
99
View as plain text