Skip to content

Commit

Permalink
tests/resource/aws_s3_bucket: Refactor broken TypeSet checking (#15955)
Browse files Browse the repository at this point in the history
Previously:

```
=== CONT  TestAccAWSS3Bucket_UpdateGrant
TestAccAWSS3Bucket_UpdateGrant: resource_aws_s3_bucket_test.go:640: Step 3/4 error: Check failed: Check 3/3 error: Error in test check: aws_s3_bucket.bucket: Attribute 'grant.3106909455.permissions.#' not found
Test check address "grant.3106909455.permissions.#" likely indexes into TypeSet
This is currently not possible in the SDK
--- FAIL: TestAccAWSS3Bucket_UpdateGrant (99.60s)
```

Output from acceptance testing in AWS Commercial:

```
--- PASS: TestAccAWSS3Bucket_UpdateGrant (84.59s)
```

Output from acceptance testing in AWS GovCloud (US):

```
--- PASS: TestAccAWSS3Bucket_UpdateGrant (92.91s)
```
  • Loading branch information
bflad committed Nov 5, 2020
1 parent 5997bf0 commit 8e280df
Showing 1 changed file with 17 additions and 66 deletions.
83 changes: 17 additions & 66 deletions aws/resource_aws_s3_bucket_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -648,7 +648,12 @@ func TestAccAWSS3Bucket_UpdateGrant(t *testing.T) {
Check: resource.ComposeTestCheckFunc(
testAccCheckAWSS3BucketExists(resourceName),
resource.TestCheckResourceAttr(resourceName, "grant.#", "1"),
testAccCheckAWSS3BucketUpdateGrantSingle(resourceName),
tfawsresource.TestCheckTypeSetElemNestedAttrs(resourceName, "grant.*", map[string]string{
"permissions.#": "2",
"type": "CanonicalUser",
}),
tfawsresource.TestCheckTypeSetElemAttr(resourceName, "grant.*.permissions.*", "FULL_CONTROL"),
tfawsresource.TestCheckTypeSetElemAttr(resourceName, "grant.*.permissions.*", "WRITE"),
),
},
{
Expand All @@ -662,7 +667,17 @@ func TestAccAWSS3Bucket_UpdateGrant(t *testing.T) {
Check: resource.ComposeTestCheckFunc(
testAccCheckAWSS3BucketExists(resourceName),
resource.TestCheckResourceAttr(resourceName, "grant.#", "2"),
testAccCheckAWSS3BucketUpdateGrantMulti(resourceName),
tfawsresource.TestCheckTypeSetElemNestedAttrs(resourceName, "grant.*", map[string]string{
"permissions.#": "1",
"type": "CanonicalUser",
}),
tfawsresource.TestCheckTypeSetElemAttr(resourceName, "grant.*.permissions.*", "READ"),
tfawsresource.TestCheckTypeSetElemNestedAttrs(resourceName, "grant.*", map[string]string{
"permissions.#": "1",
"type": "Group",
"uri": "http://acs.amazonaws.com/groups/s3/LogDelivery",
}),
tfawsresource.TestCheckTypeSetElemAttr(resourceName, "grant.*.permissions.*", "READ_ACP"),
),
},
{
Expand Down Expand Up @@ -2926,70 +2941,6 @@ func testAccCheckAWSS3BucketReplicationRules(n string, rules []*s3.ReplicationRu
}
}

func testAccCheckAWSS3BucketUpdateGrantSingle(resourceName string) func(s *terraform.State) error {
return func(s *terraform.State) error {
for _, t := range []resource.TestCheckFunc{
tfawsresource.TestCheckTypeSetElemNestedAttrs(resourceName, "grant.*", map[string]string{
"permissions.#": "2",
}),
tfawsresource.TestCheckTypeSetElemAttr(resourceName, "grant.*.permissions.*", "FULL_CONTROL"),
tfawsresource.TestCheckTypeSetElemAttr(resourceName, "grant.*.permissions.*", "WRITE"),
tfawsresource.TestCheckTypeSetElemNestedAttrs(resourceName, "grant.*", map[string]string{
"type": "CanonicalUser",
}),
} {
if err := t(s); err != nil {
return err
}
}
return nil
}
}

func testAccCheckAWSS3BucketUpdateGrantMulti(resourceName string) func(s *terraform.State) error {
return func(s *terraform.State) error {
id := s.RootModule().Resources["data.aws_canonical_user_id.current"].Primary.ID
gh1 := fmt.Sprintf("grant.%v", grantHash(map[string]interface{}{
"id": id,
"type": "CanonicalUser",
"uri": "",
"permissions": schema.NewSet(
schema.HashString,
[]interface{}{"READ"},
),
}))
gh2 := fmt.Sprintf("grant.%v", grantHash(map[string]interface{}{
"id": "",
"type": "Group",
"uri": "http://acs.amazonaws.com/groups/s3/LogDelivery",
"permissions": schema.NewSet(
schema.HashString,
[]interface{}{"READ_ACP"},
),
}))
for _, t := range []resource.TestCheckFunc{
// TODO TypeSet Check to differentiate between sets
resource.TestCheckResourceAttr(resourceName, gh1+".permissions.#", "1"),
tfawsresource.TestCheckTypeSetElemAttr(resourceName, "grant.*.permissions.*", "READ"),
tfawsresource.TestCheckTypeSetElemNestedAttrs(resourceName, "grant.*", map[string]string{
"type": "CanonicalUser",
}),
// TODO TypeSet Check to differentiate between sets
resource.TestCheckResourceAttr(resourceName, gh2+".permissions.#", "1"),
tfawsresource.TestCheckTypeSetElemAttr(resourceName, "grant.*.permissions.*", "READ_ACP"),
tfawsresource.TestCheckTypeSetElemNestedAttrs(resourceName, "grant.*", map[string]string{
"type": "Group",
"uri": "http://acs.amazonaws.com/groups/s3/LogDelivery",
}),
} {
if err := t(s); err != nil {
return err
}
}
return nil
}
}

func testAccCheckS3BucketDomainName(resourceName string, attributeName string, bucketName string) resource.TestCheckFunc {
return func(s *terraform.State) error {
expectedValue := testAccProvider.Meta().(*AWSClient).PartitionHostname(fmt.Sprintf("%s.s3", bucketName))
Expand Down

0 comments on commit 8e280df

Please sign in to comment.