Skip to content

Commit d4a1794

Browse files
authored
service/s3: Add endpoint format test (#179)
Adds unit tests to verify the S3 endpoint format building is correct in the SDK. V2 port of: aws/aws-sdk-go#1947
1 parent 40c3866 commit d4a1794

File tree

2 files changed

+235
-0
lines changed

2 files changed

+235
-0
lines changed

service/s3/host_style_bucket_test.go

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
package s3_test
22

33
import (
4+
"encoding/json"
45
"net/url"
6+
"os"
7+
"path/filepath"
8+
"strconv"
59
"strings"
610
"testing"
711

@@ -161,3 +165,56 @@ func TestHostStyleBucketGetBucketLocation(t *testing.T) {
161165
t.Errorf("expect %s to be in %s", e, a)
162166
}
163167
}
168+
func TestVirtualHostStyleSuite(t *testing.T) {
169+
f, err := os.Open(filepath.Join("testdata", "virtual_host.json"))
170+
if err != nil {
171+
t.Fatalf("expect no error, %v", err)
172+
}
173+
174+
cases := []struct {
175+
Bucket string
176+
Region string
177+
UseDualStack bool
178+
UseS3Accelerate bool
179+
ConfiguredAddressingStyle string
180+
181+
ExpectedURI string
182+
}{}
183+
184+
decoder := json.NewDecoder(f)
185+
if err := decoder.Decode(&cases); err != nil {
186+
t.Fatalf("expect no error, %v", err)
187+
}
188+
189+
const testPathStyle = "path"
190+
for i, c := range cases {
191+
t.Run(strconv.Itoa(i), func(t *testing.T) {
192+
cfg := unit.Config()
193+
resolver := endpoints.NewDefaultResolver()
194+
resolver.UseDualStack = c.UseDualStack
195+
cfg.EndpointResolver = resolver
196+
cfg.Region = c.Region
197+
198+
svc := s3.New(cfg)
199+
svc.ForcePathStyle = c.ConfiguredAddressingStyle == testPathStyle
200+
svc.UseAccelerate = c.UseS3Accelerate
201+
202+
req := svc.HeadBucketRequest(&s3.HeadBucketInput{
203+
Bucket: &c.Bucket,
204+
})
205+
req.Build()
206+
if req.Error != nil {
207+
t.Fatalf("expect no error, got %v", req.Error)
208+
}
209+
210+
// Trim trailing '/' that are added by the SDK but not in the tests.
211+
actualURI := strings.TrimRightFunc(
212+
req.HTTPRequest.URL.String(),
213+
func(r rune) bool { return r == '/' },
214+
)
215+
if e, a := c.ExpectedURI, actualURI; e != a {
216+
t.Errorf("expect\n%s\nurl to be\n%s", e, a)
217+
}
218+
})
219+
}
220+
}
Lines changed: 178 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,178 @@
1+
[
2+
{
3+
"Bucket": "bucket-name",
4+
"ConfiguredAddressingStyle": "default",
5+
"ExpectedUri": "https://bucket-name.s3.amazonaws.com",
6+
"Region": "us-east-1",
7+
"UseDualstack": false,
8+
"UseS3Accelerate": false
9+
},
10+
{
11+
"Bucket": "bucket-name",
12+
"ConfiguredAddressingStyle": "default",
13+
"ExpectedUri": "https://bucket-name.s3.us-west-1.amazonaws.com",
14+
"Region": "us-west-1",
15+
"UseDualstack": false,
16+
"UseS3Accelerate": false
17+
},
18+
{
19+
"Bucket": "bucket-with-number-1",
20+
"ConfiguredAddressingStyle": "default",
21+
"ExpectedUri": "https://bucket-with-number-1.s3.us-west-1.amazonaws.com",
22+
"Region": "us-west-1",
23+
"UseDualstack": false,
24+
"UseS3Accelerate": false
25+
},
26+
{
27+
"Bucket": "bucket-name",
28+
"ConfiguredAddressingStyle": "default",
29+
"ExpectedUri": "https://bucket-name.s3.cn-north-1.amazonaws.com.cn",
30+
"Region": "cn-north-1",
31+
"UseDualstack": false,
32+
"UseS3Accelerate": false
33+
},
34+
{
35+
"Bucket": "BucketName",
36+
"ConfiguredAddressingStyle": "default",
37+
"ExpectedUri": "https://s3.amazonaws.com/BucketName",
38+
"Region": "us-east-1",
39+
"UseDualstack": false,
40+
"UseS3Accelerate": false
41+
},
42+
{
43+
"Bucket": "BucketName",
44+
"ConfiguredAddressingStyle": "default",
45+
"ExpectedUri": "https://s3.amazonaws.com/BucketName",
46+
"Region": "us-east-1",
47+
"UseDualstack": false,
48+
"UseS3Accelerate": false
49+
},
50+
{
51+
"Bucket": "bucket_name",
52+
"ConfiguredAddressingStyle": "default",
53+
"ExpectedUri": "https://s3.us-west-1.amazonaws.com/bucket_name",
54+
"Region": "us-west-1",
55+
"UseDualstack": false,
56+
"UseS3Accelerate": false
57+
},
58+
{
59+
"Bucket": "bucket.name",
60+
"ConfiguredAddressingStyle": "default",
61+
"ExpectedUri": "https://s3.us-west-1.amazonaws.com/bucket.name",
62+
"Region": "us-west-1",
63+
"UseDualstack": false,
64+
"UseS3Accelerate": false
65+
},
66+
{
67+
"Bucket": "-bucket-name",
68+
"ConfiguredAddressingStyle": "default",
69+
"ExpectedUri": "https://s3.us-west-1.amazonaws.com/-bucket-name",
70+
"Region": "us-west-1",
71+
"UseDualstack": false,
72+
"UseS3Accelerate": false
73+
},
74+
{
75+
"Bucket": "bucket-name-",
76+
"ConfiguredAddressingStyle": "default",
77+
"ExpectedUri": "https://s3.us-west-1.amazonaws.com/bucket-name-",
78+
"Region": "us-west-1",
79+
"UseDualstack": false,
80+
"UseS3Accelerate": false
81+
},
82+
{
83+
"Bucket": "aa",
84+
"ConfiguredAddressingStyle": "default",
85+
"ExpectedUri": "https://s3.us-west-1.amazonaws.com/aa",
86+
"Region": "us-west-1",
87+
"UseDualstack": false,
88+
"UseS3Accelerate": false
89+
},
90+
{
91+
"Bucket": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
92+
"ConfiguredAddressingStyle": "default",
93+
"ExpectedUri": "https://s3.us-west-1.amazonaws.com/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
94+
"Region": "us-west-1",
95+
"UseDualstack": false,
96+
"UseS3Accelerate": false
97+
},
98+
{
99+
"Bucket": "bucket-name",
100+
"ConfiguredAddressingStyle": "default",
101+
"ExpectedUri": "https://bucket-name.s3-accelerate.amazonaws.com",
102+
"Region": "us-east-1",
103+
"UseDualstack": false,
104+
"UseS3Accelerate": true
105+
},
106+
{
107+
"Bucket": "bucket-name",
108+
"ConfiguredAddressingStyle": "default",
109+
"ExpectedUri": "https://bucket-name.s3-accelerate.amazonaws.com",
110+
"Region": "us-west-1",
111+
"UseDualstack": false,
112+
"UseS3Accelerate": true
113+
},
114+
{
115+
"Bucket": "bucket-name",
116+
"ConfiguredAddressingStyle": "default",
117+
"ExpectedUri": "https://bucket-name.s3.dualstack.us-east-1.amazonaws.com",
118+
"Region": "us-east-1",
119+
"UseDualstack": true,
120+
"UseS3Accelerate": false
121+
},
122+
{
123+
"Bucket": "bucket-name",
124+
"ConfiguredAddressingStyle": "default",
125+
"ExpectedUri": "https://bucket-name.s3.dualstack.us-west-2.amazonaws.com",
126+
"Region": "us-west-2",
127+
"UseDualstack": true,
128+
"UseS3Accelerate": false
129+
},
130+
{
131+
"Bucket": "bucket.name",
132+
"ConfiguredAddressingStyle": "default",
133+
"ExpectedUri": "https://s3.dualstack.us-west-2.amazonaws.com/bucket.name",
134+
"Region": "us-west-2",
135+
"UseDualstack": true,
136+
"UseS3Accelerate": false
137+
},
138+
{
139+
"Bucket": "bucket-name",
140+
"ConfiguredAddressingStyle": "default",
141+
"ExpectedUri": "https://bucket-name.s3-accelerate.dualstack.amazonaws.com",
142+
"Region": "us-east-1",
143+
"UseDualstack": true,
144+
"UseS3Accelerate": true
145+
},
146+
{
147+
"Bucket": "bucket-name",
148+
"ConfiguredAddressingStyle": "path",
149+
"ExpectedUri": "https://s3.amazonaws.com/bucket-name",
150+
"Region": "us-east-1",
151+
"UseDualstack": false,
152+
"UseS3Accelerate": false
153+
},
154+
{
155+
"Bucket": "bucket-name",
156+
"ConfiguredAddressingStyle": "path",
157+
"ExpectedUri": "https://bucket-name.s3-accelerate.amazonaws.com",
158+
"Region": "us-east-1",
159+
"UseDualstack": false,
160+
"UseS3Accelerate": true
161+
},
162+
{
163+
"Bucket": "bucket-name",
164+
"ConfiguredAddressingStyle": "path",
165+
"ExpectedUri": "https://s3.dualstack.us-east-1.amazonaws.com/bucket-name",
166+
"Region": "us-east-1",
167+
"UseDualstack": true,
168+
"UseS3Accelerate": false
169+
},
170+
{
171+
"Bucket": "bucket-name",
172+
"ConfiguredAddressingStyle": "path",
173+
"ExpectedUri": "https://bucket-name.s3-accelerate.dualstack.amazonaws.com",
174+
"Region": "us-east-1",
175+
"UseDualstack": true,
176+
"UseS3Accelerate": true
177+
}
178+
]

0 commit comments

Comments
 (0)