Skip to content

Commit

Permalink
Add acceptance test for iam_instance_profile_test resource
Browse files Browse the repository at this point in the history
  • Loading branch information
jckuester committed Apr 4, 2018
1 parent 692cd36 commit f7e6eda
Show file tree
Hide file tree
Showing 4 changed files with 180 additions and 12 deletions.
168 changes: 168 additions & 0 deletions test/iam_instance_profile_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,168 @@
package test

import (
"fmt"
"os"
"testing"

"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/awserr"
"github.com/aws/aws-sdk-go/service/iam"
"github.com/cloudetc/awsweeper/command"
res "github.com/cloudetc/awsweeper/resource"
"github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/terraform"
"github.com/spf13/afero"
)

func TestAccIamInstanceProfile_deleteByIds(t *testing.T) {
var r1, r2 iam.InstanceProfile

resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
Steps: []resource.TestStep{
{
Config: testAccIamInstanceProfileConfig,
ExpectNonEmptyPlan: true,
Check: resource.ComposeTestCheckFunc(
testAccCheckIamInstanceProfileExists("aws_iam_instance_profile.foo", &r1),
testAccCheckIamInstanceProfileExists("aws_iam_instance_profile.bar", &r2),
testMainIamInstanceProfileIds(argsDryRun, &r1),
testIamInstanceProfileExists(&r1),
testIamInstanceProfileExists(&r2),
testMainIamInstanceProfileIds(argsForceDelete, &r1),
testIamInstanceProfileDeleted(&r1),
testIamInstanceProfileExists(&r2),
),
},
},
})
}

func testAccCheckIamInstanceProfileExists(name string, r *iam.InstanceProfile) resource.TestCheckFunc {
return func(s *terraform.State) error {
rs, ok := s.RootModule().Resources[name]
if !ok {
return fmt.Errorf("Not found: %s", name)
}

if rs.Primary.ID == "" {
return fmt.Errorf("No ID is set")
}

conn := client.iamconn
desc := &iam.GetInstanceProfileInput{
InstanceProfileName: aws.String(rs.Primary.ID),
}
resp, err := conn.GetInstanceProfile(desc)
if err != nil {
iamErr, ok := err.(awserr.Error)
if !ok {
return err
}
if iamErr.Code() == "NoSuchEntity" {
return fmt.Errorf("IAM instance profile has been deleted")
}
return err
}

*r = *resp.InstanceProfile

return nil
}
}

func testMainIamInstanceProfileIds(args []string, r *iam.InstanceProfile) resource.TestCheckFunc {
return func(s *terraform.State) error {
res.AppFs = afero.NewMemMapFs()
afero.WriteFile(res.AppFs, "config.yml", []byte(testAccIamInstanceProfileAWSweeperIdsConfig(r)), 0644)
os.Args = args

command.WrappedMain()
return nil
}
}

func testIamInstanceProfileExists(r *iam.InstanceProfile) resource.TestCheckFunc {
return func(s *terraform.State) error {
conn := client.iamconn
desc := &iam.GetInstanceProfileInput{
InstanceProfileName: r.InstanceProfileName,
}
_, err := conn.GetInstanceProfile(desc)
if err != nil {
iamErr, ok := err.(awserr.Error)
if !ok {
return err
}
if iamErr.Code() == "NoSuchEntity" {
return fmt.Errorf("IAM instance profile has been deleted")
}
return err
}

return nil
}
}

func testIamInstanceProfileDeleted(r *iam.InstanceProfile) resource.TestCheckFunc {
return func(s *terraform.State) error {
conn := client.iamconn

desc := &iam.GetInstanceProfileInput{
InstanceProfileName: r.InstanceProfileName,
}
_, err := conn.GetInstanceProfile(desc)
if err != nil {
iamErr, ok := err.(awserr.Error)
if !ok {
return err
}
if iamErr.Code() == "NoSuchEntity" {
return nil
}
return err
}
return fmt.Errorf("IAM instance profile hasn't been deleted")
}
}

const testAccIamInstanceProfileConfig = `
resource "aws_iam_instance_profile" "foo" {
name = "awsweeper-testacc-foo"
role = "${aws_iam_role.test_role.name}"
}
resource "aws_iam_instance_profile" "bar" {
name = "awsweeper-testacc-bar"
role = "${aws_iam_role.test_role.name}"
}
resource "aws_iam_role" "test_role" {
name = "test_role"
path = "/awsweeper-testacc/"
assume_role_policy = "${data.aws_iam_policy_document.test-assume-role-policy.json}"
}
data "aws_iam_policy_document" "test-assume-role-policy" {
statement {
actions = ["sts:AssumeRole"]
principals {
type = "Service"
identifiers = ["ec2.amazonaws.com"]
}
}
}
`

func testAccIamInstanceProfileAWSweeperIdsConfig(r *iam.InstanceProfile) string {
id := r.InstanceProfileName
return fmt.Sprintf(`
aws_iam_instance_profile:
ids:
- %s
`, *id)
}
8 changes: 4 additions & 4 deletions test/iam_policy_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -92,11 +92,11 @@ func testIamPolicyExists(p *iam.Policy) resource.TestCheckFunc {
}
_, err := conn.GetPolicy(desc)
if err != nil {
route53err, ok := err.(awserr.Error)
iamErr, ok := err.(awserr.Error)
if !ok {
return err
}
if route53err.Code() == "NoSuchEntity" {
if iamErr.Code() == "NoSuchEntity" {
return fmt.Errorf("IAM policy has been deleted")
}
return err
Expand All @@ -115,11 +115,11 @@ func testIamPolicyDeleted(p *iam.Policy) resource.TestCheckFunc {
}
_, err := conn.GetPolicy(desc)
if err != nil {
route53err, ok := err.(awserr.Error)
iamErr, ok := err.(awserr.Error)
if !ok {
return err
}
if route53err.Code() == "NoSuchEntity" {
if iamErr.Code() == "NoSuchEntity" {
return nil
}
return err
Expand Down
8 changes: 4 additions & 4 deletions test/iam_role_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -92,11 +92,11 @@ func testIamRoleExists(r *iam.Role) resource.TestCheckFunc {
}
_, err := conn.GetRole(desc)
if err != nil {
route53err, ok := err.(awserr.Error)
iamErr, ok := err.(awserr.Error)
if !ok {
return err
}
if route53err.Code() == "NoSuchEntity" {
if iamErr.Code() == "NoSuchEntity" {
return fmt.Errorf("IAM role has been deleted")
}
return err
Expand All @@ -115,11 +115,11 @@ func testIamRoleDeleted(r *iam.Role) resource.TestCheckFunc {
}
_, err := conn.GetRole(desc)
if err != nil {
route53err, ok := err.(awserr.Error)
iamErr, ok := err.(awserr.Error)
if !ok {
return err
}
if route53err.Code() == "NoSuchEntity" {
if iamErr.Code() == "NoSuchEntity" {
return nil
}
return err
Expand Down
8 changes: 4 additions & 4 deletions test/iam_user_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -92,11 +92,11 @@ func testIamUserExists(r *iam.User) resource.TestCheckFunc {
}
_, err := conn.GetUser(desc)
if err != nil {
route53err, ok := err.(awserr.Error)
iamErr, ok := err.(awserr.Error)
if !ok {
return err
}
if route53err.Code() == "NoSuchEntity" {
if iamErr.Code() == "NoSuchEntity" {
return fmt.Errorf("IAM user has been deleted")
}
return err
Expand All @@ -115,11 +115,11 @@ func testIamUserDeleted(r *iam.User) resource.TestCheckFunc {
}
_, err := conn.GetUser(desc)
if err != nil {
route53err, ok := err.(awserr.Error)
iamErr, ok := err.(awserr.Error)
if !ok {
return err
}
if route53err.Code() == "NoSuchEntity" {
if iamErr.Code() == "NoSuchEntity" {
return nil
}
return err
Expand Down

0 comments on commit f7e6eda

Please sign in to comment.