func TestPrependedBlocks(t *testing.T) { const BLOCKSIZE = 100 const BLOCK_COUNT = 20 checksum := NewFileChecksumGenerator(BLOCKSIZE) file1 := io.LimitReader( readers.NewNonRepeatingSequence(0), BLOCKSIZE*BLOCK_COUNT, ) file2 := io.LimitReader( io.MultiReader( readers.OneReader(BLOCKSIZE), // Off by one block readers.NewNonRepeatingSequence(0), ), BLOCKSIZE*BLOCK_COUNT, ) output1 := bytes.NewBuffer(nil) chksum1, _ := checksum.GenerateChecksums(file1, output1) output2 := bytes.NewBuffer(nil) chksum2, _ := checksum.GenerateChecksums(file2, output2) if bytes.Compare(chksum1, chksum2) == 0 { t.Fatal("Checksums should be different") } weaksize, strongSize := checksum.GetChecksumSizes() sums1, _ := chunks.LoadChecksumsFromReader(output1, weaksize, strongSize) sums2, _ := chunks.LoadChecksumsFromReader(output2, weaksize, strongSize) if len(sums1) != len(sums2) { t.Fatalf("Checksum lengths differ %v vs %v", len(sums1), len(sums2)) } if sums1[0].Match(sums2[0]) { t.Error("Chunk sums1[0] should differ from sums2[0]") } for i, _ := range sums2 { if i == 0 { continue } if !sums1[i-1].Match(sums2[i]) { t.Errorf("Chunk sums1[%v] equal sums2[%v]", i-1, i) } } }
// Test that partial content that ends in the middle of a strong // hash is caught correctly func TestInvalidReaderLength_Strong(t *testing.T) { const BLOCKSIZE = 100 checksum := NewFileChecksumGenerator(BLOCKSIZE) file1 := io.LimitReader( readers.NewNonRepeatingSequence(0), int64(checksum.ChecksumSize())+int64(checksum.WeakRollingHash.Size())+2, ) ws, ss := checksum.GetChecksumSizes() r, err := chunks.LoadChecksumsFromReader(file1, ws, ss) if r != nil || err != chunks.ErrPartialChecksum { t.Error("Expected partial checksum error") } }