Skip to content

Commit 8b96c04

Browse files
Mia-CrossCodelax
andauthored
test(object): bucket: customize region in tests (#2256)
* test(object): bucket: fix nightly tests + split basic test * test(object): bucket: all tests OK on fr-par * test(object): bucket: all tests OK on nl-ams * doc(object): bucket: comment on tags * feat(object): bucket: dynamically fetch client's default region for tests * Update docs/data-sources/object_bucket.md Co-authored-by: Jules Castéran <[email protected]> * Update docs/resources/object_bucket.md Co-authored-by: Jules Castéran <[email protected]> --------- Co-authored-by: Jules Castéran <[email protected]>
1 parent 6af297f commit 8b96c04

19 files changed

+12941
-10467
lines changed

docs/data-sources/object_bucket.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ resource "scaleway_object_bucket" "main" {
1919
}
2020
2121
data "scaleway_object_bucket" "selected" {
22-
name = "bucket.test.com"
22+
name = scaleway_object_bucket.main.id
2323
}
2424
```
2525

@@ -35,9 +35,9 @@ data "scaleway_object_bucket" "selected" {
3535

3636
## Argument Reference
3737

38-
- `name` - (Required) The bucket name.
38+
- `name` - (Required) The bucket name, or its terraform's ID (`{region}/{name}`)
3939
- `object_lock_enabled` - (Optional) Enable object lock on the bucket. Defaults to `false`. Updating this field will force creating a new bucket.
40-
- `region` - (Defaults to [provider](../index.md#region) `region`) The [region](../guides/regions_and_zones.md#zones) in which the Object Storage exists.
40+
- `region` - (Defaults to [provider](../index.md#region) `region`) The [region](../guides/regions_and_zones.md#zones) in which the bucket exists.
4141
- `project_id` - (Defaults to [provider](../index.md#project_id) `project_id`) The ID of the project the bucket is associated with.
4242

4343

docs/resources/object_bucket.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ resource "scaleway_object_bucket" "main"{
9494
}
9595
9696
transition {
97-
days = 0
97+
days = 1
9898
storage_class = "GLACIER"
9999
}
100100
}
@@ -118,6 +118,10 @@ The following arguments are supported:
118118

119119
* `name` - (Required) The name of the bucket.
120120
* `tags` - (Optional) A list of tags (key / value) for the bucket.
121+
122+
* ~> **Important:** The Scaleway console does not support `key/value` tags yet, so only the tags' values will be displayed.
123+
Keep in mind that if you make any change to your bucket's tags using the console, it will overwrite them with the format `value/value`.
124+
121125
* `acl` - (Optional)(Deprecated) The canned ACL you want to apply to the bucket.
122126
* `region` - (Optional) The [region](https://developers.scaleway.com/en/quickstart/#region-definition) in which the bucket should be created.
123127
* `versioning` - (Optional) A state of [versioning](https://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html) (documented below)

scaleway/data_source_object_bucket.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,17 @@ func dataSourceScalewayObjectStorageRead(ctx context.Context, d *schema.Resource
3030
return diag.FromErr(err)
3131
}
3232

33-
bucket := d.Get("name").(string)
33+
regionalID := expandRegionalID(d.Get("name"))
34+
bucket := regionalID.ID
35+
bucketRegion := regionalID.Region
36+
37+
if bucketRegion != "" && bucketRegion != region {
38+
s3Client, err = s3ClientForceRegion(d, meta, bucketRegion.String())
39+
if err != nil {
40+
return diag.FromErr(err)
41+
}
42+
region = bucketRegion
43+
}
3444

3545
input := &s3.HeadBucketInput{
3646
Bucket: aws.String(bucket),

scaleway/data_source_object_bucket_policy_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ func TestAccScalewayDataSourceObjectBucketPolicy_Basic(t *testing.T) {
7979
}
8080
`, bucketName, objectTestsMainRegion),
8181
Check: resource.ComposeTestCheckFunc(
82-
testAccCheckScalewayObjectBucketExistsForceRegion(tt, "scaleway_object_bucket.main"),
82+
testAccCheckScalewayObjectBucketExistsForceRegion(tt, "scaleway_object_bucket.main", true),
8383
resource.TestCheckResourceAttr("data.scaleway_object_bucket_policy.selected", "bucket", objectTestsMainRegion+"/"+bucketName),
8484
resource.TestCheckResourceAttrSet("data.scaleway_object_bucket_policy.selected", "policy"),
8585
testAccCheckDataSourcePolicyIsEquivalent("data.scaleway_object_bucket_policy.selected", expectedPolicyText),

scaleway/data_source_object_bucket_test.go

Lines changed: 60 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,38 +12,80 @@ import (
1212
"github.com/stretchr/testify/require"
1313
)
1414

15-
func TestAccScalewayDataSourceObjectStorage_Basic(t *testing.T) {
15+
func TestAccScalewayDataSourceObjectBucket_Basic(t *testing.T) {
1616
tt := NewTestTools(t)
1717
defer tt.Cleanup()
1818
bucketName := sdkacctest.RandomWithPrefix("test-acc-scaleway-object-bucket")
19-
// resourceName := "data.scaleway_object_bucket.main"
19+
objectBucketTestDefaultRegion, _ := tt.Meta.scwClient.GetDefaultRegion()
20+
2021
resource.ParallelTest(t, resource.TestCase{
2122
PreCheck: func() { testAccPreCheck(t) },
2223
ProviderFactories: tt.ProviderFactories,
23-
CheckDestroy: testAccCheckScalewayRdbInstanceDestroy(tt),
24+
CheckDestroy: testAccCheckScalewayObjectBucketDestroy(tt),
2425
Steps: []resource.TestStep{
2526
{
2627
Config: fmt.Sprintf(`
2728
resource "scaleway_object_bucket" "base-01" {
2829
name = "%s"
30+
region = "%s"
2931
tags = {
3032
foo = "bar"
3133
}
3234
}
3335
34-
data "scaleway_object_bucket" "selected" {
36+
data "scaleway_object_bucket" "by-id" {
37+
name = scaleway_object_bucket.base-01.id
38+
}
39+
`, bucketName, objectTestsMainRegion),
40+
Check: resource.ComposeTestCheckFunc(
41+
testAccCheckScalewayObjectBucketExistsForceRegion(tt, "scaleway_object_bucket.base-01", true),
42+
resource.TestCheckResourceAttr("data.scaleway_object_bucket.by-id", "name", bucketName),
43+
),
44+
},
45+
{
46+
Config: fmt.Sprintf(`
47+
resource "scaleway_object_bucket" "base-01" {
48+
name = "%s"
49+
region = "%s"
50+
tags = {
51+
foo = "bar"
52+
}
53+
}
54+
55+
data "scaleway_object_bucket" "by-name" {
3556
name = scaleway_object_bucket.base-01.name
3657
}
37-
`, bucketName),
58+
`, bucketName, objectBucketTestDefaultRegion),
3859
Check: resource.ComposeTestCheckFunc(
39-
resource.TestCheckResourceAttr("data.scaleway_object_bucket.selected", "name", bucketName),
60+
testAccCheckScalewayObjectBucketExistsForceRegion(tt, "scaleway_object_bucket.base-01", true),
61+
resource.TestCheckResourceAttr("data.scaleway_object_bucket.by-name", "name", bucketName),
4062
),
4163
},
64+
{
65+
Config: fmt.Sprintf(`
66+
resource "scaleway_object_bucket" "base-01" {
67+
name = "%s"
68+
region = "%s"
69+
tags = {
70+
foo = "bar"
71+
}
72+
}
73+
74+
data "scaleway_object_bucket" "by-name" {
75+
name = scaleway_object_bucket.base-01.name
76+
}
77+
`, bucketName, objectTestsMainRegion),
78+
Check: resource.ComposeTestCheckFunc(
79+
testAccCheckScalewayObjectBucketExistsForceRegion(tt, "scaleway_object_bucket.base-01", true),
80+
resource.TestCheckResourceAttr("data.scaleway_object_bucket.by-name", "name", bucketName),
81+
),
82+
ExpectError: regexp.MustCompile("failed getting Object Storage bucket"),
83+
},
4284
},
4385
})
4486
}
4587

46-
func TestAccScalewayDataSourceObjectStorage_ProjectIDAllowed(t *testing.T) {
88+
func TestAccScalewayDataSourceObjectBucket_ProjectIDAllowed(t *testing.T) {
4789
tt := NewTestTools(t)
4890
defer tt.Cleanup()
4991
bucketName := sdkacctest.RandomWithPrefix("test-acc-scaleway-object-bucket")
@@ -60,7 +102,7 @@ func TestAccScalewayDataSourceObjectStorage_ProjectIDAllowed(t *testing.T) {
60102
func(s *terraform.State) error {
61103
return terminateFakeSideProject()
62104
},
63-
testAccCheckScalewayObjectDestroy(tt),
105+
testAccCheckScalewayObjectBucketDestroy(tt),
64106
),
65107
Steps: []resource.TestStep{
66108
// Create a bucket from the main provider into the side project and read it from the side provider
@@ -70,17 +112,20 @@ func TestAccScalewayDataSourceObjectStorage_ProjectIDAllowed(t *testing.T) {
70112
resource "scaleway_object_bucket" "base" {
71113
name = "%[1]s"
72114
project_id = "%[2]s"
115+
region = "%[3]s"
73116
}
74117
75118
data "scaleway_object_bucket" "selected" {
76-
name = scaleway_object_bucket.base.name
119+
name = scaleway_object_bucket.base.id
77120
provider = side
78121
}
79122
`,
80123
bucketName,
81124
project.ID,
125+
objectTestsMainRegion,
82126
),
83127
Check: resource.ComposeTestCheckFunc(
128+
testAccCheckScalewayObjectBucketExistsForceRegion(tt, "scaleway_object_bucket.base", false),
84129
resource.TestCheckResourceAttr("data.scaleway_object_bucket.selected", "name", bucketName),
85130
resource.TestCheckResourceAttr("data.scaleway_object_bucket.selected", "project_id", project.ID),
86131
),
@@ -89,7 +134,7 @@ func TestAccScalewayDataSourceObjectStorage_ProjectIDAllowed(t *testing.T) {
89134
})
90135
}
91136

92-
func TestAccScalewayDataSourceObjectStorage_ProjectIDForbidden(t *testing.T) {
137+
func TestAccScalewayDataSourceObjectBucket_ProjectIDForbidden(t *testing.T) {
93138
tt := NewTestTools(t)
94139
defer tt.Cleanup()
95140
bucketName := sdkacctest.RandomWithPrefix("test-acc-scaleway-object-bucket")
@@ -106,24 +151,27 @@ func TestAccScalewayDataSourceObjectStorage_ProjectIDForbidden(t *testing.T) {
106151
func(s *terraform.State) error {
107152
return terminateFakeSideProject()
108153
},
109-
testAccCheckScalewayObjectDestroy(tt),
154+
testAccCheckScalewayObjectBucketDestroy(tt),
110155
),
111156
Steps: []resource.TestStep{
112157
// The side provider should not be able to read the bucket from the main project
113158
{
114159
Config: fmt.Sprintf(`
115160
resource "scaleway_object_bucket" "base" {
116161
name = "%[1]s"
162+
region = "%[3]s"
117163
}
118164
119165
data "scaleway_object_bucket" "selected" {
120-
name = scaleway_object_bucket.base.name
166+
name = scaleway_object_bucket.base.id
121167
provider = side
122168
}
123169
`,
124170
bucketName,
125171
project.ID,
172+
objectTestsMainRegion,
126173
),
174+
Check: testAccCheckScalewayObjectBucketExistsForceRegion(tt, "scaleway_object_bucket.base", false),
127175
ExpectError: regexp.MustCompile("failed getting Object Storage bucket"),
128176
},
129177
},

scaleway/helpers_object.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ const (
3333

3434
objectTestsMainRegion = "nl-ams"
3535
objectTestsSecondaryRegion = "pl-waw"
36+
37+
errCodeForbidden = "Forbidden"
3638
)
3739

3840
func newS3Client(httpClient *http.Client, region, accessKey, secretKey string) (*s3.S3, error) {

scaleway/resource_object_bucket_policy_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ func TestAccScalewayObjectBucketPolicy_Basic(t *testing.T) {
8282
{
8383
Config: tfConfig,
8484
Check: resource.ComposeTestCheckFunc(
85-
testAccCheckScalewayObjectBucketExistsForceRegion(tt, "scaleway_object_bucket.bucket"),
85+
testAccCheckScalewayObjectBucketExistsForceRegion(tt, "scaleway_object_bucket.bucket", true),
8686
resource.TestCheckResourceAttrPair("scaleway_object_bucket_policy.bucket", "region", "scaleway_object_bucket.bucket", "region"),
8787
testAccCheckBucketHasPolicy(tt, "scaleway_object_bucket.bucket", expectedPolicyText),
8888
),
@@ -168,7 +168,7 @@ func TestAccScalewayObjectBucketPolicy_OtherRegionWithBucketID(t *testing.T) {
168168
{
169169
Config: tfConfig,
170170
Check: resource.ComposeTestCheckFunc(
171-
testAccCheckScalewayObjectBucketExistsForceRegion(tt, "scaleway_object_bucket.bucket"),
171+
testAccCheckScalewayObjectBucketExistsForceRegion(tt, "scaleway_object_bucket.bucket", true),
172172
resource.TestCheckResourceAttrPair("scaleway_object_bucket_policy.bucket", "region", "scaleway_object_bucket.bucket", "region"),
173173
testAccCheckBucketHasPolicy(tt, "scaleway_object_bucket.bucket", expectedPolicyText),
174174
),

0 commit comments

Comments
 (0)