github.com/aavshr/aws-sdk-go@v1.41.3/service/s3/s3crypto/hash_io_test.go (about)

     1  package s3crypto
     2  
     3  import (
     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
    14  func 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  
    24  func 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  
    35  type mockReader struct {
    36  	err error
    37  }
    38  
    39  func (m mockReader) Read(p []byte) (int, error) {
    40  	return len(p), m.err
    41  }
    42  
    43  func 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  }