1package s3crypto 2 3import ( 4 "bytes" 5 "encoding/hex" 6 "fmt" 7 "io" 8 "io/ioutil" 9 "strings" 10 "testing" 11) 12 13// From Go stdlib encoding/sha256 test cases 14func TestSHA256(t *testing.T) { 15 sha := newSHA256Writer(nil) 16 expected, _ := hex.DecodeString("e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855") 17 b := sha.GetValue() 18 19 if !bytes.Equal(expected, b) { 20 t.Errorf("expected equivalent sha values, but received otherwise") 21 } 22} 23 24func TestSHA256_Case2(t *testing.T) { 25 sha := newSHA256Writer(bytes.NewBuffer([]byte{})) 26 sha.Write([]byte("hello")) 27 expected, _ := hex.DecodeString("2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824") 28 b := sha.GetValue() 29 30 if !bytes.Equal(expected, b) { 31 t.Errorf("expected equivalent sha values, but received otherwise") 32 } 33} 34 35type mockReader struct { 36 err error 37} 38 39func (m mockReader) Read(p []byte) (int, error) { 40 return len(p), m.err 41} 42 43func TestContentLengthReader(t *testing.T) { 44 cases := []struct { 45 reader io.Reader 46 expected int64 47 expectedErr string 48 }{ 49 { 50 reader: bytes.NewReader([]byte("foo bar baz")), 51 expected: 11, 52 }, 53 { 54 reader: bytes.NewReader(nil), 55 expected: 0, 56 }, 57 { 58 reader: mockReader{err: fmt.Errorf("not an EOF error")}, 59 expectedErr: "not an EOF error", 60 }, 61 } 62 63 for _, tt := range cases { 64 reader := newContentLengthReader(tt.reader) 65 _, err := ioutil.ReadAll(reader) 66 if err != nil { 67 if len(tt.expectedErr) == 0 { 68 t.Errorf("expected no error, got %v", err) 69 } else if !strings.Contains(err.Error(), tt.expectedErr) { 70 t.Errorf("expected error %v, got %v", tt.expectedErr, err.Error()) 71 } 72 continue 73 } else if len(tt.expectedErr) > 0 { 74 t.Error("expected error, got none") 75 continue 76 } 77 actual := reader.GetContentLength() 78 if tt.expected != actual { 79 t.Errorf("expected %v, got %v", tt.expected, actual) 80 } 81 } 82} 83