/
put_object.go
104 lines (89 loc) · 2.46 KB
/
put_object.go
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
104
package aws
import (
"crypto/md5"
_ "embed"
"encoding/base64"
"io"
"strings"
"testing"
"github.com/project-n-oss/sidekick/integration_tests/aws/utils"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/service/s3"
)
func (s *AwsSuite) TestPutObject() {
s.Run("Put", s.putObject)
s.Run("PutWrongMD5", s.putObjectWrongMD5)
}
//go:embed put_data.txt
var putData string
func (s *AwsSuite) putObject() {
ctx := s.ctx
t := s.T()
awsBucket := aws.String(utils.Bucket)
awsKey := aws.String("put_data.txt")
region := utils.GetRegionForBucket(t, ctx, utils.Bucket)
s3cSidekick := utils.GetSidekickS3Client(t, ctx, region)
md5Hash := md5.Sum([]byte(putData))
md5HashStr := base64.StdEncoding.EncodeToString(md5Hash[:])
reader := strings.NewReader(putData)
input := &s3.PutObjectInput{
Bucket: awsBucket,
Key: awsKey,
Body: reader,
ContentType: aws.String("text/plain"),
ContentMD5: aws.String(md5HashStr),
}
awsResp, err := s3cSidekick.PutObject(ctx, input)
require.NoError(t, err)
assert.NotNil(t, awsResp)
t.Cleanup(func() {
_, err := s3cSidekick.DeleteObject(ctx, &s3.DeleteObjectInput{
Bucket: awsBucket,
Key: awsKey,
})
require.NoError(t, err)
})
testCases := []struct {
name string
s3c *s3.Client
}{
{name: "sidekick", s3c: s3cSidekick},
}
for _, tt := range testCases {
t.Run(tt.name, func(t *testing.T) {
getObjResp, err := tt.s3c.GetObject(ctx, &s3.GetObjectInput{
Bucket: awsBucket,
Key: awsKey,
})
require.NoError(t, err)
defer getObjResp.Body.Close()
assert.NotNil(t, getObjResp)
retData, err := io.ReadAll(getObjResp.Body)
require.NoError(t, err)
assert.Equal(t, putData, string(retData))
})
}
}
func (s *AwsSuite) putObjectWrongMD5() {
ctx := s.ctx
t := s.T()
awsBucket := aws.String(utils.Bucket)
awsKey := aws.String("put_data.txt")
region := utils.GetRegionForBucket(t, ctx, utils.Bucket)
s3cSidekick := utils.GetSidekickS3Client(t, ctx, region)
md5Hash := md5.Sum([]byte(putData + "wrong"))
md5HashStr := base64.StdEncoding.EncodeToString(md5Hash[:])
reader := strings.NewReader(putData)
input := &s3.PutObjectInput{
Bucket: awsBucket,
Key: awsKey,
Body: reader,
ContentType: aws.String("text/plain"),
ContentMD5: aws.String(md5HashStr),
}
awsResp, err := s3cSidekick.PutObject(ctx, input)
require.Error(t, err)
assert.Nil(t, awsResp)
}