...

Source file src/github.com/klauspost/compress/snappy/xerial/fuzz_test.go

Documentation: github.com/klauspost/compress/snappy/xerial

     1  package xerial
     2  
     3  import (
     4  	"bytes"
     5  	"testing"
     6  
     7  	"github.com/klauspost/compress/internal/fuzz"
     8  	"github.com/klauspost/compress/s2"
     9  )
    10  
    11  func FuzzDecode(f *testing.F) {
    12  	fuzz.AddFromZip(f, "testdata/FuzzDecoder.zip", fuzz.TypeGoFuzz, false)
    13  	const limit = 1 << 20
    14  	dst := make([]byte, 0, limit)
    15  	f.Fuzz(func(t *testing.T, data []byte) {
    16  		got, _ := DecodeCapped(dst[:0], data)
    17  		if len(got) > cap(dst) {
    18  			t.Fatalf("cap exceeded: %d > %d", len(got), cap(dst))
    19  		}
    20  	})
    21  }
    22  
    23  func FuzzEncode(f *testing.F) {
    24  	fuzz.AddFromZip(f, "testdata/block-corpus-raw.zip", fuzz.TypeRaw, false)
    25  
    26  	f.Fuzz(func(t *testing.T, data []byte) {
    27  		encoded := Encode(make([]byte, 0, len(data)/2), data)
    28  		decoded, err := Decode(encoded)
    29  		if err != nil {
    30  			t.Errorf("input: %+v, encoded: %+v", data, encoded)
    31  			t.Fatal(err)
    32  		}
    33  		if !bytes.Equal(decoded, data) {
    34  			t.Fatal("mismatch")
    35  		}
    36  
    37  		encoded = EncodeBetter(make([]byte, 0, len(data)/2), data)
    38  		decoded, err = Decode(encoded)
    39  		if err != nil {
    40  			t.Errorf("input: %+v, encoded: %+v", data, encoded)
    41  			t.Fatal(err)
    42  		}
    43  		if !bytes.Equal(decoded, data) {
    44  			t.Fatal("mismatch")
    45  		}
    46  
    47  		encoded = s2.EncodeSnappy(make([]byte, 0, len(data)/2), data)
    48  		decoded, err = Decode(encoded)
    49  		if err != nil {
    50  			t.Errorf("input: %+v, encoded: %+v", data, encoded)
    51  			t.Fatal(err)
    52  		}
    53  		if !bytes.Equal(decoded, data) {
    54  			t.Fatal("mismatch")
    55  		}
    56  	})
    57  }
    58  

View as plain text