Skip to content

Commit 5ff3e15

Browse files
committed
Add 'testAccAccountAlias_disappears'.
1 parent c0ba572 commit 5ff3e15

File tree

4 files changed

+98
-53
lines changed

4 files changed

+98
-53
lines changed

internal/service/iam/access_key.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -248,10 +248,11 @@ func resourceAccessKeyDelete(ctx context.Context, d *schema.ResourceData, meta a
248248
conn := meta.(*conns.AWSClient).IAMClient(ctx)
249249

250250
log.Printf("[DEBUG] Deleting IAM Access Key: %s", d.Id())
251-
_, err := conn.DeleteAccessKey(ctx, &iam.DeleteAccessKeyInput{
251+
input := iam.DeleteAccessKeyInput{
252252
AccessKeyId: aws.String(d.Id()),
253253
UserName: aws.String(d.Get("user").(string)),
254-
})
254+
}
255+
_, err := conn.DeleteAccessKey(ctx, &input)
255256

256257
if errs.IsA[*awstypes.NoSuchEntityException](err) {
257258
return diags

internal/service/iam/account_alias.go

Lines changed: 51 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,17 @@ package iam
55

66
import (
77
"context"
8+
"log"
89

910
"github.com/aws/aws-sdk-go-v2/aws"
1011
"github.com/aws/aws-sdk-go-v2/service/iam"
12+
awstypes "github.com/aws/aws-sdk-go-v2/service/iam/types"
1113
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
1214
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1315
"github.com/hashicorp/terraform-provider-aws/internal/conns"
16+
"github.com/hashicorp/terraform-provider-aws/internal/errs"
1417
"github.com/hashicorp/terraform-provider-aws/internal/errs/sdkdiag"
18+
"github.com/hashicorp/terraform-provider-aws/internal/tfresource"
1519
)
1620

1721
// @SDKResource("aws_iam_account_alias", name="Account Alias")
@@ -41,15 +45,14 @@ func resourceAccountAliasCreate(ctx context.Context, d *schema.ResourceData, met
4145
conn := meta.(*conns.AWSClient).IAMClient(ctx)
4246

4347
accountAlias := d.Get("account_alias").(string)
44-
45-
params := &iam.CreateAccountAliasInput{
48+
input := iam.CreateAccountAliasInput{
4649
AccountAlias: aws.String(accountAlias),
4750
}
4851

49-
_, err := conn.CreateAccountAlias(ctx, params)
52+
_, err := conn.CreateAccountAlias(ctx, &input)
5053

5154
if err != nil {
52-
return sdkdiag.AppendErrorf(diags, "creating account alias with name '%s': %s", accountAlias, err)
55+
return sdkdiag.AppendErrorf(diags, "creating IAM Account Alias (%s): %s", accountAlias, err)
5356
}
5457

5558
d.SetId(accountAlias)
@@ -61,23 +64,20 @@ func resourceAccountAliasRead(ctx context.Context, d *schema.ResourceData, meta
6164
var diags diag.Diagnostics
6265
conn := meta.(*conns.AWSClient).IAMClient(ctx)
6366

64-
params := &iam.ListAccountAliasesInput{}
65-
66-
resp, err := conn.ListAccountAliases(ctx, params)
67+
var input iam.ListAccountAliasesInput
68+
output, err := findAccountAlias(ctx, conn, &input)
6769

68-
if err != nil {
69-
return sdkdiag.AppendErrorf(diags, "listing account aliases: %s", err)
70-
}
71-
72-
if !d.IsNewResource() && (resp == nil || len(resp.AccountAliases) == 0) {
70+
if !d.IsNewResource() && tfresource.NotFound(err) {
71+
log.Printf("[WARN] IAM Account Alias (%s) not found, removing from state", d.Id())
7372
d.SetId("")
7473
return diags
7574
}
7675

77-
accountAlias := resp.AccountAliases[0]
76+
if err != nil {
77+
return sdkdiag.AppendErrorf(diags, "reading IAM Account Alias (%s): %s", d.Id(), err)
78+
}
7879

79-
d.SetId(accountAlias)
80-
d.Set("account_alias", accountAlias)
80+
d.Set("account_alias", output)
8181

8282
return diags
8383
}
@@ -86,17 +86,47 @@ func resourceAccountAliasDelete(ctx context.Context, d *schema.ResourceData, met
8686
var diags diag.Diagnostics
8787
conn := meta.(*conns.AWSClient).IAMClient(ctx)
8888

89-
accountAlias := d.Get("account_alias").(string)
90-
91-
params := &iam.DeleteAccountAliasInput{
92-
AccountAlias: aws.String(accountAlias),
89+
log.Printf("[DEBUG] Deleting IAM Account Alias: %s", d.Id())
90+
input := iam.DeleteAccountAliasInput{
91+
AccountAlias: aws.String(d.Id()),
9392
}
9493

95-
_, err := conn.DeleteAccountAlias(ctx, params)
94+
_, err := conn.DeleteAccountAlias(ctx, &input)
95+
96+
if errs.IsA[*awstypes.NoSuchEntityException](err) {
97+
return diags
98+
}
9699

97100
if err != nil {
98-
return sdkdiag.AppendErrorf(diags, "deleting account alias with name '%s': %s", accountAlias, err)
101+
return sdkdiag.AppendErrorf(diags, "deleting IAM Account Alias (%s): %s", d.Id(), err)
99102
}
100103

101104
return diags
102105
}
106+
107+
func findAccountAlias(ctx context.Context, conn *iam.Client, input *iam.ListAccountAliasesInput) (*string, error) {
108+
output, err := findAccountAliases(ctx, conn, input)
109+
110+
if err != nil {
111+
return nil, err
112+
}
113+
114+
return tfresource.AssertSingleValueResult(output)
115+
}
116+
117+
func findAccountAliases(ctx context.Context, conn *iam.Client, input *iam.ListAccountAliasesInput) ([]string, error) {
118+
var output []string
119+
120+
pages := iam.NewListAccountAliasesPaginator(conn, input)
121+
for pages.HasMorePages() {
122+
page, err := pages.NextPage(ctx)
123+
124+
if err != nil {
125+
return nil, err
126+
}
127+
128+
output = append(output, page.AccountAliases...)
129+
}
130+
131+
return output, nil
132+
}

internal/service/iam/account_alias_test.go

Lines changed: 41 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ import (
1616
"github.com/hashicorp/terraform-plugin-testing/terraform"
1717
"github.com/hashicorp/terraform-provider-aws/internal/acctest"
1818
"github.com/hashicorp/terraform-provider-aws/internal/conns"
19+
tfiam "github.com/hashicorp/terraform-provider-aws/internal/service/iam"
20+
"github.com/hashicorp/terraform-provider-aws/internal/tfresource"
1921
"github.com/hashicorp/terraform-provider-aws/names"
2022
)
2123

@@ -27,7 +29,8 @@ func TestAccIAMAccountAlias_serial(t *testing.T) {
2729
acctest.CtBasic: testAccAccountAliasDataSource_basic,
2830
},
2931
"Resource": {
30-
acctest.CtBasic: testAccAccountAlias_basic,
32+
acctest.CtBasic: testAccAccountAlias_basic,
33+
acctest.CtDisappears: testAccAccountAlias_disappears,
3134
},
3235
}
3336

@@ -37,7 +40,6 @@ func TestAccIAMAccountAlias_serial(t *testing.T) {
3740
func testAccAccountAlias_basic(t *testing.T) {
3841
ctx := acctest.Context(t)
3942
resourceName := "aws_iam_account_alias.test"
40-
4143
rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix)
4244

4345
resource.Test(t, resource.TestCase{
@@ -64,6 +66,32 @@ func testAccAccountAlias_basic(t *testing.T) {
6466
})
6567
}
6668

69+
func testAccAccountAlias_disappears(t *testing.T) {
70+
ctx := acctest.Context(t)
71+
resourceName := "aws_iam_account_alias.test"
72+
rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix)
73+
74+
resource.Test(t, resource.TestCase{
75+
PreCheck: func() {
76+
acctest.PreCheck(ctx, t)
77+
testAccPreCheckAccountAlias(ctx, t)
78+
},
79+
ErrorCheck: acctest.ErrorCheck(t, names.IAMServiceID),
80+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories,
81+
CheckDestroy: testAccCheckAccountAliasDestroy(ctx),
82+
Steps: []resource.TestStep{
83+
{
84+
Config: testAccAccountAliasConfig_basic(rName),
85+
Check: resource.ComposeAggregateTestCheckFunc(
86+
testAccCheckAccountAliasExists(ctx, resourceName),
87+
acctest.CheckResourceDisappears(ctx, acctest.Provider, tfiam.ResourceAccountAlias(), resourceName),
88+
),
89+
ExpectNonEmptyPlan: true,
90+
},
91+
},
92+
})
93+
}
94+
6795
func testAccCheckAccountAliasDestroy(ctx context.Context) resource.TestCheckFunc {
6896
return func(s *terraform.State) error {
6997
conn := acctest.Provider.Meta().(*conns.AWSClient).IAMClient(ctx)
@@ -73,21 +101,18 @@ func testAccCheckAccountAliasDestroy(ctx context.Context) resource.TestCheckFunc
73101
continue
74102
}
75103

76-
params := &iam.ListAccountAliasesInput{}
77-
78-
resp, err := conn.ListAccountAliases(ctx, params)
104+
var input iam.ListAccountAliasesInput
105+
_, err := tfiam.FindAccountAlias(ctx, conn, &input)
79106

80-
if err != nil {
81-
return fmt.Errorf("error reading IAM Account Alias (%s): %w", rs.Primary.ID, err)
107+
if tfresource.NotFound(err) {
108+
continue
82109
}
83110

84-
if resp == nil {
85-
return fmt.Errorf("error reading IAM Account Alias (%s): empty response", rs.Primary.ID)
111+
if err != nil {
112+
return err
86113
}
87114

88-
if len(resp.AccountAliases) > 0 {
89-
return fmt.Errorf("Bad: Account alias still exists: %q", rs.Primary.ID)
90-
}
115+
return fmt.Errorf("IAM Server Certificate %s still exists", rs.Primary.ID)
91116
}
92117

93118
return nil
@@ -96,29 +121,17 @@ func testAccCheckAccountAliasDestroy(ctx context.Context) resource.TestCheckFunc
96121

97122
func testAccCheckAccountAliasExists(ctx context.Context, n string) resource.TestCheckFunc {
98123
return func(s *terraform.State) error {
99-
rs, ok := s.RootModule().Resources[n]
124+
_, ok := s.RootModule().Resources[n]
100125
if !ok {
101126
return fmt.Errorf("Not found: %s", n)
102127
}
103128

104129
conn := acctest.Provider.Meta().(*conns.AWSClient).IAMClient(ctx)
105-
params := &iam.ListAccountAliasesInput{}
106130

107-
resp, err := conn.ListAccountAliases(ctx, params)
131+
var input iam.ListAccountAliasesInput
132+
_, err := tfiam.FindAccountAlias(ctx, conn, &input)
108133

109-
if err != nil {
110-
return fmt.Errorf("error reading IAM Account Alias (%s): %w", rs.Primary.ID, err)
111-
}
112-
113-
if resp == nil {
114-
return fmt.Errorf("error reading IAM Account Alias (%s): empty response", rs.Primary.ID)
115-
}
116-
117-
if len(resp.AccountAliases) == 0 {
118-
return fmt.Errorf("Bad: Account alias %q does not exist", rs.Primary.ID)
119-
}
120-
121-
return nil
134+
return err
122135
}
123136
}
124137

internal/service/iam/exports_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ package iam
55

66
// Exports for use in tests only.
77
var (
8-
ResourceAccessKey = resourceAccessKey
9-
// ResourceAccountAlias = resourceAccountAlias
8+
ResourceAccessKey = resourceAccessKey
9+
ResourceAccountAlias = resourceAccountAlias
1010
ResourceAccountPasswordPolicy = resourceAccountPasswordPolicy
1111
ResourceGroup = resourceGroup
1212
// ResourceGroupMembership = resourceGroupMembership
@@ -33,6 +33,7 @@ var (
3333
ResourceVirtualMFADevice = resourceVirtualMFADevice
3434

3535
FindAccessKeyByTwoPartKey = findAccessKeyByTwoPartKey
36+
FindAccountAlias = findAccountAlias
3637
FindAccountPasswordPolicy = findAccountPasswordPolicy
3738
FindAttachedGroupPolicies = findAttachedGroupPolicies
3839
FindAttachedGroupPolicyByTwoPartKey = findAttachedGroupPolicyByTwoPartKey

0 commit comments

Comments
 (0)