File: cust_integ_object_checksum_test.go

package info (click to toggle)
golang-github-aws-aws-sdk-go 1.44.133-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bookworm-proposed-updates
  • size: 245,296 kB
  • sloc: makefile: 120
file content (103 lines) | stat: -rw-r--r-- 2,385 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
//go:build integration
// +build integration

package s3_test

import (
	"bytes"
	"crypto/md5"
	"encoding/base64"
	"fmt"
	"io"
	"testing"

	"github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/service/s3"
)

func base64Sum(content []byte) string {
	sum := md5.Sum(content)
	return base64.StdEncoding.EncodeToString(sum[:])
}

func SkipTestContentMD5Validate(t *testing.T) {
	body := []byte("really cool body content")

	cases := []struct {
		Name     string
		Body     []byte
		Sum64    string
		RangeGet []int64
	}{
		{
			Body:  body,
			Sum64: base64Sum(body),
			Name:  "contentMD5validation.pop",
		},
		{
			Body:  []byte{},
			Sum64: base64Sum([]byte{}),
			Name:  "contentMD5validation.empty",
		},
		{
			Body:     body,
			Sum64:    base64Sum(body),
			RangeGet: []int64{0, 9},
			Name:     "contentMD5validation.range",
		},
	}

	for i, c := range cases {
		keyName := aws.String(c.Name)
		req, _ := s3Svc.PutObjectRequest(&s3.PutObjectInput{
			Bucket: &integMetadata.Buckets.Source.Name,
			Key:    keyName,
			Body:   bytes.NewReader(c.Body),
		})

		req.Build()
		if e, a := c.Sum64, req.HTTPRequest.Header.Get("Content-Md5"); e != a {
			t.Errorf("%d, expect %v sum, got %v", i, e, a)
		}

		if err := req.Send(); err != nil {
			t.Fatalf("%d, expect no error, got %v", i, err)
		}

		getObjIn := &s3.GetObjectInput{
			Bucket: &integMetadata.Buckets.Source.Name,
			Key:    keyName,
		}

		expectBody := c.Body
		if c.RangeGet != nil {
			getObjIn.Range = aws.String(fmt.Sprintf("bytes=%d-%d", c.RangeGet[0], c.RangeGet[1]-1))
			expectBody = c.Body[c.RangeGet[0]:c.RangeGet[1]]
		}

		getReq, getOut := s3Svc.GetObjectRequest(getObjIn)

		getReq.Build()
		if e, a := "append-md5", getReq.HTTPRequest.Header.Get("X-Amz-Te"); e != a {
			t.Errorf("%d, expect %v encoding, got %v", i, e, a)
		}
		if err := getReq.Send(); err != nil {
			t.Fatalf("%d, expect no error, got %v", i, err)
		}
		defer getOut.Body.Close()

		if e, a := "append-md5", getReq.HTTPResponse.Header.Get("X-Amz-Transfer-Encoding"); e != a {
			t.Fatalf("%d, expect response tx encoding header %v, got %v", i, e, a)
		}

		var readBody bytes.Buffer
		_, err := io.Copy(&readBody, getOut.Body)
		if err != nil {
			t.Fatalf("%d, expect no error, got %v", i, err)
		}

		if e, a := expectBody, readBody.Bytes(); !bytes.Equal(e, a) {
			t.Errorf("%d, expect %v body, got %v", i, e, a)
		}
	}
}