diff --git a/lib/scanner/blocks.go b/lib/scanner/blocks.go index ec6d946c..dea7c030 100644 --- a/lib/scanner/blocks.go +++ b/lib/scanner/blocks.go @@ -9,9 +9,9 @@ package scanner import ( "bytes" "fmt" + "hash/adler32" "io" - "github.com/chmduquesne/rollinghash/adler32" "github.com/syncthing/syncthing/lib/protocol" "github.com/syncthing/syncthing/lib/sha256" ) diff --git a/lib/scanner/blocks_test.go b/lib/scanner/blocks_test.go index 533757e1..dc5c8d3c 100644 --- a/lib/scanner/blocks_test.go +++ b/lib/scanner/blocks_test.go @@ -18,38 +18,51 @@ var blocksTestData = []struct { data []byte blocksize int hash []string + weakhash []uint32 }{ {[]byte(""), 1024, []string{ - "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"}}, + "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"}, + []uint32{0}, + }, {[]byte("contents"), 1024, []string{ - "d1b2a59fbea7e20077af9f91b27e95e865061b270be03ff539ab3b73587882e8"}}, + "d1b2a59fbea7e20077af9f91b27e95e865061b270be03ff539ab3b73587882e8"}, + []uint32{0x0f3a036f}, + }, {[]byte("contents"), 9, []string{ - "d1b2a59fbea7e20077af9f91b27e95e865061b270be03ff539ab3b73587882e8"}}, + "d1b2a59fbea7e20077af9f91b27e95e865061b270be03ff539ab3b73587882e8"}, + []uint32{0x0f3a036f}, + }, {[]byte("contents"), 8, []string{ - "d1b2a59fbea7e20077af9f91b27e95e865061b270be03ff539ab3b73587882e8"}}, + "d1b2a59fbea7e20077af9f91b27e95e865061b270be03ff539ab3b73587882e8"}, + []uint32{0x0f3a036f}, + }, {[]byte("contents"), 7, []string{ "ed7002b439e9ac845f22357d822bac1444730fbdb6016d3ec9432297b9ec9f73", "043a718774c572bd8a25adbeb1bfcd5c0256ae11cecf9f9c3f925d0e52beaf89"}, + []uint32{0x0bcb02fc, 0x00740074}, }, {[]byte("contents"), 3, []string{ "1143da2bc54c495c4be31d3868785d39ffdfd56df5668f0645d8f14d47647952", "e4432baa90819aaef51d2a7f8e148bf7e679610f3173752fabb4dcb2d0f418d3", "44ad63f60af0f6db6fdde6d5186ef78176367df261fa06be3079b6c80c8adba4"}, + []uint32{0x02780141, 0x02970148, 0x015d00e8}, }, {[]byte("conconts"), 3, []string{ "1143da2bc54c495c4be31d3868785d39ffdfd56df5668f0645d8f14d47647952", "1143da2bc54c495c4be31d3868785d39ffdfd56df5668f0645d8f14d47647952", "44ad63f60af0f6db6fdde6d5186ef78176367df261fa06be3079b6c80c8adba4"}, + []uint32{0x02780141, 0x02780141, 0x015d00e8}, }, {[]byte("contenten"), 3, []string{ "1143da2bc54c495c4be31d3868785d39ffdfd56df5668f0645d8f14d47647952", "e4432baa90819aaef51d2a7f8e148bf7e679610f3173752fabb4dcb2d0f418d3", "e4432baa90819aaef51d2a7f8e148bf7e679610f3173752fabb4dcb2d0f418d3"}, + []uint32{0x02780141, 0x02970148, 0x02970148}, }, } func TestBlocks(t *testing.T) { - for _, test := range blocksTestData { + for testNo, test := range blocksTestData { buf := bytes.NewBuffer(test.data) blocks, err := Blocks(buf, test.blocksize, -1, nil) @@ -58,12 +71,12 @@ func TestBlocks(t *testing.T) { } if l := len(blocks); l != len(test.hash) { - t.Fatalf("Incorrect number of blocks %d != %d", l, len(test.hash)) + t.Fatalf("%d: Incorrect number of blocks %d != %d", testNo, l, len(test.hash)) } else { i := 0 for off := int64(0); off < int64(len(test.data)); off += int64(test.blocksize) { if blocks[i].Offset != off { - t.Errorf("Incorrect offset for block %d: %d != %d", i, blocks[i].Offset, off) + t.Errorf("%d/%d: Incorrect offset %d != %d", testNo, i, blocks[i].Offset, off) } bs := test.blocksize @@ -71,10 +84,13 @@ func TestBlocks(t *testing.T) { bs = rem } if int(blocks[i].Size) != bs { - t.Errorf("Incorrect length for block %d: %d != %d", i, blocks[i].Size, bs) + t.Errorf("%d/%d: Incorrect length %d != %d", testNo, i, blocks[i].Size, bs) } if h := fmt.Sprintf("%x", blocks[i].Hash); h != test.hash[i] { - t.Errorf("Incorrect block hash %q != %q", h, test.hash[i]) + t.Errorf("%d/%d: Incorrect block hash %q != %q", testNo, i, h, test.hash[i]) + } + if h := blocks[i].WeakHash; h != test.weakhash[i] { + t.Errorf("%d/%d: Incorrect block weakhash 0x%08x != 0x%08x", testNo, i, h, test.weakhash[i]) } i++ diff --git a/lib/scanner/walk_test.go b/lib/scanner/walk_test.go index 2f051a5b..14eb5a02 100644 --- a/lib/scanner/walk_test.go +++ b/lib/scanner/walk_test.go @@ -428,6 +428,7 @@ func BenchmarkHashFile(b *testing.B) { } } + b.SetBytes(testdataSize) b.ReportAllocs() }