add S3ForcePathStyle support for s3 binding (#1360)

* add S3ForcePathStyle support for s3 binding

Signed-off-by: rainfd <rainfd@live.cn>

* add S3ForcePathStyle unit test

Signed-off-by: rainfd <rainfd@live.cn>
This commit is contained in:
RainFD 2021-12-24 10:58:39 +08:00 committed by GitHub
parent 190a47cd87
commit 0f97b52b90
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 15 deletions

View File

@ -42,14 +42,15 @@ type AWSS3 struct {
}
type s3Metadata struct {
Region string `json:"region"`
Endpoint string `json:"endpoint"`
AccessKey string `json:"accessKey"`
SecretKey string `json:"secretKey"`
SessionToken string `json:"sessionToken"`
Bucket string `json:"bucket"`
DecodeBase64 bool `json:"decodeBase64,string"`
EncodeBase64 bool `json:"encodeBase64,string"`
Region string `json:"region"`
Endpoint string `json:"endpoint"`
AccessKey string `json:"accessKey"`
SecretKey string `json:"secretKey"`
SessionToken string `json:"sessionToken"`
Bucket string `json:"bucket"`
DecodeBase64 bool `json:"decodeBase64,string"`
EncodeBase64 bool `json:"encodeBase64,string"`
ForcePathStyle bool `json:"forcePathStyle,string"`
}
type createResponse struct {
@ -79,10 +80,13 @@ func (s *AWSS3) Init(metadata bindings.Metadata) error {
if err != nil {
return err
}
cfg := aws.NewConfig().WithS3ForcePathStyle(m.ForcePathStyle)
s.metadata = m
s.s3Client = s3.New(session)
s.downloader = s3manager.NewDownloader(session)
s.uploader = s3manager.NewUploader(session)
s.s3Client = s3.New(session, cfg)
s.downloader = s3manager.NewDownloaderWithClient(s.s3Client)
s.uploader = s3manager.NewUploaderWithClient(s.s3Client)
return nil
}

View File

@ -18,7 +18,7 @@ func TestParseMetadata(t *testing.T) {
t.Run("Has correct metadata", func(t *testing.T) {
m := bindings.Metadata{}
m.Properties = map[string]string{
"AccessKey": "key", "Region": "region", "SecretKey": "secret", "Bucket": "test", "Endpoint": "endpoint", "SessionToken": "token",
"AccessKey": "key", "Region": "region", "SecretKey": "secret", "Bucket": "test", "Endpoint": "endpoint", "SessionToken": "token", "ForcePathStyle": "true",
}
s3 := AWSS3{}
meta, err := s3.parseMetadata(m)
@ -29,6 +29,7 @@ func TestParseMetadata(t *testing.T) {
assert.Equal(t, "test", meta.Bucket)
assert.Equal(t, "endpoint", meta.Endpoint)
assert.Equal(t, "token", meta.SessionToken)
assert.Equal(t, true, meta.ForcePathStyle)
})
}
@ -36,7 +37,7 @@ func TestMergeWithRequestMetadata(t *testing.T) {
t.Run("Has merged metadata", func(t *testing.T) {
m := bindings.Metadata{}
m.Properties = map[string]string{
"AccessKey": "key", "Region": "region", "SecretKey": "secret", "Bucket": "test", "Endpoint": "endpoint", "SessionToken": "token",
"AccessKey": "key", "Region": "region", "SecretKey": "secret", "Bucket": "test", "Endpoint": "endpoint", "SessionToken": "token", "ForcePathStyle": "true",
}
s3 := AWSS3{}
meta, err := s3.parseMetadata(m)
@ -47,6 +48,7 @@ func TestMergeWithRequestMetadata(t *testing.T) {
assert.Equal(t, "test", meta.Bucket)
assert.Equal(t, "endpoint", meta.Endpoint)
assert.Equal(t, "token", meta.SessionToken)
assert.Equal(t, true, meta.ForcePathStyle)
request := bindings.InvokeRequest{}
request.Metadata = map[string]string{
@ -65,6 +67,7 @@ func TestMergeWithRequestMetadata(t *testing.T) {
assert.Equal(t, "test", mergedMeta.Bucket)
assert.Equal(t, "endpoint", mergedMeta.Endpoint)
assert.Equal(t, "token", mergedMeta.SessionToken)
assert.Equal(t, true, meta.ForcePathStyle)
assert.Equal(t, true, mergedMeta.DecodeBase64)
assert.Equal(t, false, mergedMeta.EncodeBase64)
})
@ -72,7 +75,7 @@ func TestMergeWithRequestMetadata(t *testing.T) {
t.Run("Has invalid merged metadata decodeBase64", func(t *testing.T) {
m := bindings.Metadata{}
m.Properties = map[string]string{
"AccessKey": "key", "Region": "region", "SecretKey": "secret", "Bucket": "test", "Endpoint": "endpoint", "SessionToken": "token",
"AccessKey": "key", "Region": "region", "SecretKey": "secret", "Bucket": "test", "Endpoint": "endpoint", "SessionToken": "token", "ForcePathStyle": "true",
}
s3 := AWSS3{}
meta, err := s3.parseMetadata(m)
@ -83,6 +86,7 @@ func TestMergeWithRequestMetadata(t *testing.T) {
assert.Equal(t, "test", meta.Bucket)
assert.Equal(t, "endpoint", meta.Endpoint)
assert.Equal(t, "token", meta.SessionToken)
assert.Equal(t, true, meta.ForcePathStyle)
request := bindings.InvokeRequest{}
request.Metadata = map[string]string{
@ -98,7 +102,7 @@ func TestMergeWithRequestMetadata(t *testing.T) {
t.Run("Has invalid merged metadata encodeBase64", func(t *testing.T) {
m := bindings.Metadata{}
m.Properties = map[string]string{
"AccessKey": "key", "Region": "region", "SecretKey": "secret", "Bucket": "test", "Endpoint": "endpoint", "SessionToken": "token",
"AccessKey": "key", "Region": "region", "SecretKey": "secret", "Bucket": "test", "Endpoint": "endpoint", "SessionToken": "token", "ForcePathStyle": "true",
}
s3 := AWSS3{}
meta, err := s3.parseMetadata(m)
@ -109,6 +113,7 @@ func TestMergeWithRequestMetadata(t *testing.T) {
assert.Equal(t, "test", meta.Bucket)
assert.Equal(t, "endpoint", meta.Endpoint)
assert.Equal(t, "token", meta.SessionToken)
assert.Equal(t, true, meta.ForcePathStyle)
request := bindings.InvokeRequest{}
request.Metadata = map[string]string{