From b4e4e73e00441494d9240b64386b95aaee77f1a8 Mon Sep 17 00:00:00 2001 From: Steven Allen Date: Wed, 25 Mar 2020 19:18:06 -0700 Subject: [PATCH] test(buzhash): fuzz --- buzhash_test.go | 52 +++++++++++++++++++++++++++++++------------------ 1 file changed, 33 insertions(+), 19 deletions(-) diff --git a/buzhash_test.go b/buzhash_test.go index f630cef..07573ba 100644 --- a/buzhash_test.go +++ b/buzhash_test.go @@ -2,7 +2,6 @@ package chunk import ( "bytes" - "fmt" "io" "testing" @@ -11,33 +10,48 @@ import ( func TestBuzhashChunking(t *testing.T) { data := make([]byte, 1024*1024*16) - util.NewTimeSeededRand().Read(data) - r := NewBuzhash(bytes.NewReader(data)) + chunkCount := 0 + rounds := 100 - var chunks [][]byte + for i := 0; i < rounds; i++ { + util.NewTimeSeededRand().Read(data) - for { - chunk, err := r.NextBytes() - if err != nil { - if err == io.EOF { - break + r := NewBuzhash(bytes.NewReader(data)) + + var chunks [][]byte + + for { + chunk, err := r.NextBytes() + if err != nil { + if err == io.EOF { + break + } + t.Fatal(err) } - t.Fatal(err) + + chunks = append(chunks, chunk) } + chunkCount += len(chunks) - chunks = append(chunks, chunk) - } + for i, chunk := range chunks { + if len(chunk) == 0 { + t.Fatalf("chunk %d/%d is empty", i+1, len(chunks)) + } + } - t.Logf("average block size: %d\n", len(data)/len(chunks)) + for i, chunk := range chunks[:len(chunks)-1] { + if len(chunk) < buzMin { + t.Fatalf("chunk %d/%d is less than the minimum size", i+1, len(chunks)) + } + } - unchunked := bytes.Join(chunks, nil) - if !bytes.Equal(unchunked, data) { - fmt.Printf("%d %d\n", len(unchunked), len(data)) - //ioutil.WriteFile("./incorrect", unchunked, 0777) - //ioutil.WriteFile("./correct", data, 0777) - t.Fatal("data was chunked incorrectly") + unchunked := bytes.Join(chunks, nil) + if !bytes.Equal(unchunked, data) { + t.Fatal("data was chunked incorrectly") + } } + t.Logf("average block size: %d\n", len(data)*rounds/chunkCount) } func TestBuzhashChunkReuse(t *testing.T) { -- GitLab