...

Source file src/github.com/klauspost/compress/zstd/decodeheader_test.go

Documentation: github.com/klauspost/compress/zstd

     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  	// Regenerate golden data...
    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  				// errored entries are not set
    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