@@ -8,21 +8,15 @@ import (
8
8
)
9
9
10
10
func Test_AwsS3NoGlobalEndpoint (t * testing.T ) {
11
+ filename := "resource.tf"
12
+
11
13
cases := []struct {
12
14
Name string
13
15
Content string
14
16
Expected helper.Issues
15
17
}{
16
18
{
17
- Name : "unrelated expression" ,
18
- Content : `
19
- output "test" {
20
- value = "testing"
21
- }` ,
22
- Expected : helper.Issues {},
23
- },
24
- {
25
- Name : "multiple unrelated expressions" ,
19
+ Name : "unrelated expressions" ,
26
20
Content : `
27
21
output "test1" {
28
22
value = var.whatever
@@ -34,11 +28,9 @@ output "test2" {
34
28
35
29
output "test3" {
36
30
value = aws_iam_role.test.arn
37
- }
38
- ` ,
31
+ }` ,
39
32
Expected : helper.Issues {},
40
33
},
41
- // TODO: nested expressions ?
42
34
{
43
35
Name : "regional endpoint used" ,
44
36
Content : `
@@ -47,9 +39,8 @@ output "test" {
47
39
}` ,
48
40
Expected : helper.Issues {},
49
41
},
50
- // TODO: strings of the form "bucket_name.s3.amazonaws.com" ?
51
42
{
52
- Name : "legacy global endpoint used" ,
43
+ Name : "global endpoint used" ,
53
44
Content : `
54
45
output "test" {
55
46
value = aws_s3_bucket.test.bucket_domain_name
@@ -59,19 +50,220 @@ output "test" {
59
50
Rule : NewAwsS3NoGlobalEndpointRule (),
60
51
Message : "`bucket_domain_name` returns the legacy s3 global endpoint, use `bucket_regional_domain_name` instead" ,
61
52
Range : hcl.Range {
62
- Filename : "resource.tf" ,
53
+ Filename : filename ,
63
54
Start : hcl.Pos {Line : 3 , Column : 11 },
64
55
End : hcl.Pos {Line : 3 , Column : 48 },
65
56
},
66
57
},
67
58
},
68
59
},
60
+ {
61
+ Name : "global endpoint used from aws_s3_bucket data source" ,
62
+ Content : `
63
+ output "test" {
64
+ value = data.aws_s3_bucket.test.bucket_domain_name
65
+ }` ,
66
+ Expected : helper.Issues {
67
+ {
68
+ Rule : NewAwsS3NoGlobalEndpointRule (),
69
+ Message : "`bucket_domain_name` returns the legacy s3 global endpoint, use `bucket_regional_domain_name` instead" ,
70
+ Range : hcl.Range {
71
+ Filename : filename ,
72
+ Start : hcl.Pos {Line : 3 , Column : 11 },
73
+ End : hcl.Pos {Line : 3 , Column : 53 },
74
+ },
75
+ },
76
+ },
77
+ },
78
+ {
79
+ Name : "global endpoint interpolation" ,
80
+ Content : `
81
+ output "test" {
82
+ value = "interpolation test: ${aws_s3_bucket.test.bucket_domain_name}"
83
+ }` ,
84
+ Expected : helper.Issues {
85
+ {
86
+ Rule : NewAwsS3NoGlobalEndpointRule (),
87
+ Message : "`bucket_domain_name` returns the legacy s3 global endpoint, use `bucket_regional_domain_name` instead" ,
88
+ Range : hcl.Range {
89
+ Filename : filename ,
90
+ Start : hcl.Pos {Line : 3 , Column : 34 },
91
+ End : hcl.Pos {Line : 3 , Column : 71 },
92
+ },
93
+ },
94
+ },
95
+ },
96
+ {
97
+ Name : "global endpoint interpolation multiple expressions" ,
98
+ Content : `
99
+ output "test" {
100
+ value = "interpolation test: ${aws_s3_bucket.test.bucket_domain_name} ${var.whatever}"
101
+ }` ,
102
+ Expected : helper.Issues {
103
+ {
104
+ Rule : NewAwsS3NoGlobalEndpointRule (),
105
+ Message : "`bucket_domain_name` returns the legacy s3 global endpoint, use `bucket_regional_domain_name` instead" ,
106
+ Range : hcl.Range {
107
+ Filename : filename ,
108
+ Start : hcl.Pos {Line : 3 , Column : 34 },
109
+ End : hcl.Pos {Line : 3 , Column : 71 },
110
+ },
111
+ },
112
+ },
113
+ },
114
+ {
115
+ Name : "global endpoint with count" ,
116
+ Content : `
117
+ output "test1" {
118
+ value = aws_s3_bucket.test[0].bucket_domain_name
119
+ }
120
+
121
+ output "test2" {
122
+ value = aws_s3_bucket.test[length(var.bucket_names) - 1].bucket_domain_name
123
+ }
124
+ ` ,
125
+ Expected : helper.Issues {
126
+ {
127
+ Rule : NewAwsS3NoGlobalEndpointRule (),
128
+ Message : "`bucket_domain_name` returns the legacy s3 global endpoint, use `bucket_regional_domain_name` instead" ,
129
+ Range : hcl.Range {
130
+ Filename : filename ,
131
+ Start : hcl.Pos {Line : 3 , Column : 11 },
132
+ End : hcl.Pos {Line : 3 , Column : 51 },
133
+ },
134
+ },
135
+ {
136
+ Rule : NewAwsS3NoGlobalEndpointRule (),
137
+ Message : "`bucket_domain_name` returns the legacy s3 global endpoint, use `bucket_regional_domain_name` instead" ,
138
+ Range : hcl.Range {
139
+ Filename : filename ,
140
+ Start : hcl.Pos {Line : 7 , Column : 11 },
141
+ End : hcl.Pos {Line : 7 , Column : 78 },
142
+ },
143
+ },
144
+ },
145
+ },
146
+ {
147
+ Name : "global endpoint in a for expression" ,
148
+ Content : `
149
+ output "test" {
150
+ value = {
151
+ for bucket_name, bucket in aws_s3_bucket.test: bucket_name => bucket.bucket_domain_name
152
+ }
153
+ }` ,
154
+ Expected : helper.Issues {
155
+ {
156
+ Rule : NewAwsS3NoGlobalEndpointRule (),
157
+ Message : "`bucket_domain_name` returns the legacy s3 global endpoint, use `bucket_regional_domain_name` instead" ,
158
+ Range : hcl.Range {
159
+ Filename : filename ,
160
+ Start : hcl.Pos {Line : 4 , Column : 67 },
161
+ End : hcl.Pos {Line : 4 , Column : 92 },
162
+ },
163
+ },
164
+ },
165
+ },
166
+ {
167
+ Name : "global endpoint with foreach" ,
168
+ Content : `
169
+ resource "aws_s3_bucket" "test" {
170
+ for_each = toset(var.bucket_names)
171
+
172
+ bucket = each.key
173
+ }
174
+
175
+ resource "aws_ssm_parameter" "test" {
176
+ for_each = aws_s3_bucket.test
177
+
178
+ name = each.value.id
179
+ type = "String"
180
+ value = each.value.bucket_domain_name
181
+ }` ,
182
+ Expected : helper.Issues {
183
+ {
184
+ Rule : NewAwsS3NoGlobalEndpointRule (),
185
+ Message : "`bucket_domain_name` returns the legacy s3 global endpoint, use `bucket_regional_domain_name` instead" ,
186
+ Range : hcl.Range {
187
+ Filename : filename ,
188
+ Start : hcl.Pos {Line : 13 , Column : 11 },
189
+ End : hcl.Pos {Line : 13 , Column : 40 },
190
+ },
191
+ },
192
+ },
193
+ },
194
+ {
195
+ Name : "global endpoint in a dynamic block" ,
196
+ Content : `
197
+ resource "aws_s3_bucket" "test" {
198
+ for_each = toset(var.bucket_names)
199
+
200
+ bucket = each.key
201
+ }
202
+
203
+ resource "aws_cloudfront_distribution" "test" {
204
+ dynamic "origin" {
205
+ for_each = aws_s3_bucket.test
206
+
207
+ content {
208
+ origin_id = origin.value.id
209
+ domain_name = origin.value.bucket_domain_name
210
+ }
211
+ }
212
+ }` ,
213
+ Expected : helper.Issues {
214
+ {
215
+ Rule : NewAwsS3NoGlobalEndpointRule (),
216
+ Message : "`bucket_domain_name` returns the legacy s3 global endpoint, use `bucket_regional_domain_name` instead" ,
217
+ Range : hcl.Range {
218
+ Filename : filename ,
219
+ Start : hcl.Pos {Line : 14 , Column : 11 },
220
+ End : hcl.Pos {Line : 14 , Column : 40 },
221
+ },
222
+ },
223
+ },
224
+ },
225
+ {
226
+ Name : "global endpoint literal" ,
227
+ Content : `
228
+ output "test" {
229
+ value = "test.s3.amazonaws.com"
230
+ }` ,
231
+ Expected : helper.Issues {
232
+ {
233
+ Rule : NewAwsS3NoGlobalEndpointRule (),
234
+ Message : "`bucket_domain_name` returns the legacy s3 global endpoint, use `bucket_regional_domain_name` instead" ,
235
+ Range : hcl.Range {
236
+ Filename : filename ,
237
+ Start : hcl.Pos {Line : 3 , Column : 12 },
238
+ End : hcl.Pos {Line : 3 , Column : 33 },
239
+ },
240
+ },
241
+ },
242
+ },
243
+ {
244
+ Name : "global endpoint literal with interpolation" ,
245
+ Content : `
246
+ output "test" {
247
+ value = "${var.bucket_name}.s3.amazonaws.com"
248
+ }` ,
249
+ Expected : helper.Issues {
250
+ {
251
+ Rule : NewAwsS3NoGlobalEndpointRule (),
252
+ Message : "`bucket_domain_name` returns the legacy s3 global endpoint, use `bucket_regional_domain_name` instead" ,
253
+ Range : hcl.Range {
254
+ Filename : filename ,
255
+ Start : hcl.Pos {Line : 3 , Column : 12 },
256
+ End : hcl.Pos {Line : 3 , Column : 47 },
257
+ },
258
+ },
259
+ },
260
+ },
69
261
}
70
262
71
263
rule := NewAwsS3NoGlobalEndpointRule ()
72
264
73
265
for _ , tc := range cases {
74
- runner := helper .TestRunner (t , map [string ]string {"resource.tf" : tc .Content })
266
+ runner := helper .TestRunner (t , map [string ]string {filename : tc .Content })
75
267
76
268
if err := rule .Check (runner ); err != nil {
77
269
t .Fatalf ("Unexpected error occurred: %s" , err )
0 commit comments