github.com/mckael/restic@v0.8.3/internal/hashing/reader_test.go (about) 1 package hashing 2 3 import ( 4 "bytes" 5 "crypto/rand" 6 "crypto/sha256" 7 "io" 8 "io/ioutil" 9 "testing" 10 ) 11 12 func TestReader(t *testing.T) { 13 tests := []int{5, 23, 2<<18 + 23, 1 << 20} 14 15 for _, size := range tests { 16 data := make([]byte, size) 17 _, err := io.ReadFull(rand.Reader, data) 18 if err != nil { 19 t.Fatalf("ReadFull: %v", err) 20 } 21 22 expectedHash := sha256.Sum256(data) 23 24 rd := NewReader(bytes.NewReader(data), sha256.New()) 25 n, err := io.Copy(ioutil.Discard, rd) 26 if err != nil { 27 t.Fatal(err) 28 } 29 30 if n != int64(size) { 31 t.Errorf("Reader: invalid number of bytes written: got %d, expected %d", 32 n, size) 33 } 34 35 resultingHash := rd.Sum(nil) 36 37 if !bytes.Equal(expectedHash[:], resultingHash) { 38 t.Errorf("Reader: hashes do not match: expected %02x, got %02x", 39 expectedHash, resultingHash) 40 } 41 } 42 } 43 44 func BenchmarkReader(b *testing.B) { 45 buf := make([]byte, 1<<22) 46 _, err := io.ReadFull(rand.Reader, buf) 47 if err != nil { 48 b.Fatal(err) 49 } 50 51 expectedHash := sha256.Sum256(buf) 52 53 b.SetBytes(int64(len(buf))) 54 b.ResetTimer() 55 for i := 0; i < b.N; i++ { 56 rd := NewReader(bytes.NewReader(buf), sha256.New()) 57 n, err := io.Copy(ioutil.Discard, rd) 58 if err != nil { 59 b.Fatal(err) 60 } 61 62 if n != int64(len(buf)) { 63 b.Errorf("Reader: invalid number of bytes written: got %d, expected %d", 64 n, len(buf)) 65 } 66 67 resultingHash := rd.Sum(nil) 68 if !bytes.Equal(expectedHash[:], resultingHash) { 69 b.Errorf("Reader: hashes do not match: expected %02x, got %02x", 70 expectedHash, resultingHash) 71 } 72 } 73 }