Skip to content

Commit da17044

Browse files
Codelaxremyleone
andauthored
tests(object): enable tests and handle s3 with cassettes (#1555)
Co-authored-by: Rémy Léone <[email protected]>
1 parent 05c5deb commit da17044

13 files changed

+3130
-2436
lines changed

.github/workflows/coverage.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,7 @@ jobs:
1919
TF_TEST_DOMAIN: scaleway-terraform.com
2020
TF_UPDATE_CASSETTES: false
2121
TF_TEST_DOMAIN_ZONE: tf
22+
SCW_ACCESS_KEY: "SCWXXXXXXXXXXXXXFAKE"
23+
SCW_SECRET_KEY: "11111111-1111-1111-1111-111111111111"
2224
- name: Upload coverage to Codecov
2325
uses: codecov/codecov-action@v2

scaleway/data_source_object_bucket_test.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,6 @@ import (
99
)
1010

1111
func TestAccScalewayDataSourceObjectStorage_Basic(t *testing.T) {
12-
if !*UpdateCassettes {
13-
t.Skip("Skipping ObjectStorage test as this kind of resource can't be deleted before 24h")
14-
}
1512
tt := NewTestTools(t)
1613
defer tt.Cleanup()
1714
bucketName := sdkacctest.RandomWithPrefix("test-acc-scaleway-object-bucket")

scaleway/provider_test.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package scaleway
33
import (
44
"context"
55
"encoding/json"
6+
"encoding/xml"
67
"flag"
78
"fmt"
89
"io"
@@ -121,6 +122,12 @@ func cassetteBodyMatcher(actual *http.Request, expected cassette.Request) bool {
121122
actualJSON := make(map[string]interface{})
122123
expectedJSON := make(map[string]interface{})
123124

125+
err = xml.Unmarshal(actualRawBody, new(interface{}))
126+
if err == nil {
127+
// match if content is xml
128+
return true
129+
}
130+
124131
err = json.Unmarshal(actualRawBody, &actualJSON)
125132
if err != nil {
126133
panic(fmt.Errorf("cassette body matcher: failed to parse json body: %w", err))
@@ -154,6 +161,31 @@ func cassetteMatcher(actual *http.Request, expected cassette.Request) bool {
154161
actualURL.RawQuery = actualURLValues.Encode()
155162
expectedURL.RawQuery = expectedURLValues.Encode()
156163

164+
// Specific handling of s3 URLs
165+
// Url format is https://test-acc-scaleway-object-bucket-lifecycle-8445817190507446251.s3.fr-par.scw.cloud/?lifecycle=
166+
if strings.HasSuffix(actualURL.Host, "scw.cloud") {
167+
if !strings.HasSuffix(expectedURL.Host, "scw.cloud") {
168+
return false
169+
}
170+
actualS3Host := strings.Split(actualURL.Host, ".")
171+
expectedS3Host := strings.Split(expectedURL.Host, ".")
172+
173+
if len(actualS3Host) >= 5 {
174+
// Host is bucket.s3.region.scw.cloud
175+
// it could be a host without bucket name (ex: function upload)
176+
actualBucket := actualS3Host[0]
177+
expectedBucket := expectedS3Host[0]
178+
179+
// Remove random number at the end of the bucket name
180+
actualBucket = actualBucket[:strings.LastIndex(actualBucket, "-")]
181+
expectedBucket = expectedBucket[:strings.LastIndex(expectedBucket, "-")]
182+
183+
if actualBucket != expectedBucket {
184+
return false
185+
}
186+
}
187+
}
188+
157189
return actual.Method == expected.Method &&
158190
actual.URL.Path == expectedURL.Path &&
159191
actualURL.RawQuery == expectedURL.RawQuery &&

scaleway/resource_object_bucket_acl_test.go

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,15 @@ package scaleway
33
import (
44
"fmt"
55
"testing"
6-
"time"
76

7+
sdkacctest "github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
88
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
99
)
1010

1111
func TestAccScalewayObjectBucketACL_Basic(t *testing.T) {
12-
if !*UpdateCassettes {
13-
t.Skip("Skipping ObjectStorage test as this kind of resource can't be deleted before 24h")
14-
}
1512
tt := NewTestTools(t)
1613
defer tt.Cleanup()
17-
testBucketName := fmt.Sprintf("terraform-test-%d", time.Now().Unix())
14+
testBucketName := sdkacctest.RandomWithPrefix("test-acc-scaleway-object-acl-basic")
1815

1916
resource.Test(t, resource.TestCase{
2017
PreCheck: func() { testAccPreCheck(t) },
@@ -62,12 +59,10 @@ func TestAccScalewayObjectBucketACL_Basic(t *testing.T) {
6259
}
6360

6461
func TestAccScalewayObjectBucketACL_Grantee(t *testing.T) {
65-
if !*UpdateCassettes {
66-
t.Skip("Skipping ObjectStorage test as this kind of resource can't be deleted before 24h")
67-
}
6862
tt := NewTestTools(t)
6963
defer tt.Cleanup()
70-
testBucketName := fmt.Sprintf("terraform-test-%d", time.Now().Unix())
64+
testBucketName := sdkacctest.RandomWithPrefix("test-acc-scaleway-object-acl-grantee")
65+
7166
ownerID := "105bdce1-64c0-48ab-899d-868455867ecf"
7267
ownerIDChild := "50ab77d5-56bd-4981-a118-4e0fa5309b59"
7368
resource.Test(t, resource.TestCase{
@@ -147,12 +142,9 @@ func TestAccScalewayObjectBucketACL_Grantee(t *testing.T) {
147142
}
148143

149144
func TestAccScalewayObjectBucketACL_GranteeWithOwner(t *testing.T) {
150-
if !*UpdateCassettes {
151-
t.Skip("Skipping ObjectStorage test as this kind of resource can't be deleted before 24h")
152-
}
153145
tt := NewTestTools(t)
154146
defer tt.Cleanup()
155-
testBucketName := fmt.Sprintf("terraform-test-%d", time.Now().Unix())
147+
testBucketName := sdkacctest.RandomWithPrefix("test-acc-scaleway-object-acl-grantee-owner")
156148
ownerID := "105bdce1-64c0-48ab-899d-868455867ecf"
157149
resource.Test(t, resource.TestCase{
158150
PreCheck: func() { testAccPreCheck(t) },

scaleway/resource_object_bucket_test.go

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,13 @@ func init() {
2424
}
2525

2626
func TestAccScalewayObjectBucket_Basic(t *testing.T) {
27-
if !*UpdateCassettes {
28-
t.Skip("Skipping ObjectStorage test as this kind of resource can't be deleted before 24h")
29-
}
3027
tt := NewTestTools(t)
3128
defer tt.Cleanup()
3229
testBucketACL := "private"
3330
testBucketUpdatedACL := "public-read"
34-
bucketBasic := sdkacctest.RandomWithPrefix("test-acc-scaleway-object-bucket-basic-")
35-
bucketAms := sdkacctest.RandomWithPrefix("test-acc-scaleway-object-bucket-ams-")
36-
bucketPar := sdkacctest.RandomWithPrefix("test-acc-scaleway-object-bucket-par-")
31+
bucketBasic := sdkacctest.RandomWithPrefix("test-acc-scaleway-object-bucket-basic")
32+
bucketAms := sdkacctest.RandomWithPrefix("test-acc-scaleway-object-bucket-ams")
33+
bucketPar := sdkacctest.RandomWithPrefix("test-acc-scaleway-object-bucket-par")
3734
bucketLifecycle := sdkacctest.RandomWithPrefix("test-acc-scaleway-object-bucket-lifecycle")
3835
resourceNameLifecycle := "scaleway_object_bucket.par-bucket-lifecycle"
3936
resource.ParallelTest(t, resource.TestCase{
@@ -392,9 +389,6 @@ func testSweepStorageObjectBucket(_ string) error {
392389
}
393390

394391
func TestAccScalewayObjectBucket_Cors_Update(t *testing.T) {
395-
if !*UpdateCassettes {
396-
t.Skip("Skipping ObjectStorage test as this kind of resource can't be deleted before 24h")
397-
}
398392
tt := NewTestTools(t)
399393
defer tt.Cleanup()
400394

@@ -493,9 +487,6 @@ func TestAccScalewayObjectBucket_Cors_Update(t *testing.T) {
493487
}
494488

495489
func TestAccScalewayObjectBucket_Cors_Delete(t *testing.T) {
496-
if !*UpdateCassettes {
497-
t.Skip("Skipping ObjectStorage test as this kind of resource can't be deleted before 24h")
498-
}
499490
tt := NewTestTools(t)
500491
defer tt.Cleanup()
501492
ctx := context.Background()
@@ -551,9 +542,6 @@ func TestAccScalewayObjectBucket_Cors_Delete(t *testing.T) {
551542
}
552543

553544
func TestAccScalewayObjectBucket_Cors_EmptyOrigin(t *testing.T) {
554-
if !*UpdateCassettes {
555-
t.Skip("Skipping ObjectStorage test as this kind of resource can't be deleted before 24h")
556-
}
557545
tt := NewTestTools(t)
558546
defer tt.Cleanup()
559547

@@ -657,9 +645,6 @@ func testAccCheckScalewayObjectBucketExists(tt *TestTools, n string) resource.Te
657645
}
658646

659647
func TestAccScalewayObjectBucket_DestroyForce(t *testing.T) {
660-
if !*UpdateCassettes {
661-
t.Skip("Skipping ObjectStorage test as this kind of resource can't be deleted before 24h")
662-
}
663648
tt := NewTestTools(t)
664649
defer tt.Cleanup()
665650

0 commit comments

Comments
 (0)