github.com/aavshr/aws-sdk-go@v1.41.3/service/s3/cust_integ_object_checksum_test.go (about) 1 //go:build integration 2 // +build integration 3 4 package s3_test 5 6 import ( 7 "bytes" 8 "crypto/md5" 9 "encoding/base64" 10 "fmt" 11 "io" 12 "testing" 13 14 "github.com/aavshr/aws-sdk-go/aws" 15 "github.com/aavshr/aws-sdk-go/service/s3" 16 ) 17 18 func base64Sum(content []byte) string { 19 sum := md5.Sum(content) 20 return base64.StdEncoding.EncodeToString(sum[:]) 21 } 22 23 func SkipTestContentMD5Validate(t *testing.T) { 24 body := []byte("really cool body content") 25 26 cases := []struct { 27 Name string 28 Body []byte 29 Sum64 string 30 RangeGet []int64 31 }{ 32 { 33 Body: body, 34 Sum64: base64Sum(body), 35 Name: "contentMD5validation.pop", 36 }, 37 { 38 Body: []byte{}, 39 Sum64: base64Sum([]byte{}), 40 Name: "contentMD5validation.empty", 41 }, 42 { 43 Body: body, 44 Sum64: base64Sum(body), 45 RangeGet: []int64{0, 9}, 46 Name: "contentMD5validation.range", 47 }, 48 } 49 50 for i, c := range cases { 51 keyName := aws.String(c.Name) 52 req, _ := s3Svc.PutObjectRequest(&s3.PutObjectInput{ 53 Bucket: &integMetadata.Buckets.Source.Name, 54 Key: keyName, 55 Body: bytes.NewReader(c.Body), 56 }) 57 58 req.Build() 59 if e, a := c.Sum64, req.HTTPRequest.Header.Get("Content-Md5"); e != a { 60 t.Errorf("%d, expect %v sum, got %v", i, e, a) 61 } 62 63 if err := req.Send(); err != nil { 64 t.Fatalf("%d, expect no error, got %v", i, err) 65 } 66 67 getObjIn := &s3.GetObjectInput{ 68 Bucket: &integMetadata.Buckets.Source.Name, 69 Key: keyName, 70 } 71 72 expectBody := c.Body 73 if c.RangeGet != nil { 74 getObjIn.Range = aws.String(fmt.Sprintf("bytes=%d-%d", c.RangeGet[0], c.RangeGet[1]-1)) 75 expectBody = c.Body[c.RangeGet[0]:c.RangeGet[1]] 76 } 77 78 getReq, getOut := s3Svc.GetObjectRequest(getObjIn) 79 80 getReq.Build() 81 if e, a := "append-md5", getReq.HTTPRequest.Header.Get("X-Amz-Te"); e != a { 82 t.Errorf("%d, expect %v encoding, got %v", i, e, a) 83 } 84 if err := getReq.Send(); err != nil { 85 t.Fatalf("%d, expect no error, got %v", i, err) 86 } 87 defer getOut.Body.Close() 88 89 if e, a := "append-md5", getReq.HTTPResponse.Header.Get("X-Amz-Transfer-Encoding"); e != a { 90 t.Fatalf("%d, expect response tx encoding header %v, got %v", i, e, a) 91 } 92 93 var readBody bytes.Buffer 94 _, err := io.Copy(&readBody, getOut.Body) 95 if err != nil { 96 t.Fatalf("%d, expect no error, got %v", i, err) 97 } 98 99 if e, a := expectBody, readBody.Bytes(); !bytes.Equal(e, a) { 100 t.Errorf("%d, expect %v body, got %v", i, e, a) 101 } 102 } 103 }