1package multihash 2 3import ( 4 "bytes" 5 "io" 6 "testing" 7) 8 9type evilReader struct { 10 buffer []byte 11} 12 13func (er *evilReader) Read(buf []byte) (int, error) { 14 n := copy(buf, er.buffer) 15 er.buffer = er.buffer[n:] 16 var err error 17 if len(er.buffer) == 0 { 18 err = io.EOF 19 } 20 return n, err 21} 22 23func TestEvilReader(t *testing.T) { 24 emptyHash, err := Sum(nil, IDENTITY, 0) 25 if err != nil { 26 t.Fatal(err) 27 } 28 r := NewReader(&evilReader{emptyHash}) 29 h, err := r.ReadMultihash() 30 if err != nil { 31 t.Fatal(err) 32 } 33 if !bytes.Equal(h, []byte(emptyHash)) { 34 t.Fatal(err) 35 } 36 h, err = r.ReadMultihash() 37 if len([]byte(h)) > 0 || err != io.EOF { 38 t.Fatal("expected end of file") 39 } 40} 41 42func TestReader(t *testing.T) { 43 44 var buf bytes.Buffer 45 46 for _, tc := range testCases { 47 m, err := tc.Multihash() 48 if err != nil { 49 t.Fatal(err) 50 } 51 52 buf.Write([]byte(m)) 53 } 54 55 r := NewReader(&buf) 56 57 for _, tc := range testCases { 58 h, err := tc.Multihash() 59 if err != nil { 60 t.Fatal(err) 61 } 62 63 h2, err := r.ReadMultihash() 64 if err != nil { 65 t.Error(err) 66 continue 67 } 68 69 if !bytes.Equal(h, h2) { 70 t.Error("h and h2 should be equal") 71 } 72 } 73} 74 75func TestWriter(t *testing.T) { 76 77 var buf bytes.Buffer 78 w := NewWriter(&buf) 79 80 for _, tc := range testCases { 81 m, err := tc.Multihash() 82 if err != nil { 83 t.Error(err) 84 continue 85 } 86 87 if err := w.WriteMultihash(m); err != nil { 88 t.Error(err) 89 continue 90 } 91 92 buf2 := make([]byte, len(m)) 93 if _, err := io.ReadFull(&buf, buf2); err != nil { 94 t.Error(err) 95 continue 96 } 97 98 if !bytes.Equal(m, buf2) { 99 t.Error("m and buf2 should be equal") 100 } 101 } 102} 103