github.com/vtorhonen/terraform@v0.9.0-beta2.0.20170307220345-5d894e4ffda7/builtin/providers/aws/resource_aws_iam_instance_profile_test.go (about) 1 package aws 2 3 import ( 4 "fmt" 5 "strings" 6 "testing" 7 8 "github.com/aws/aws-sdk-go/aws" 9 "github.com/aws/aws-sdk-go/aws/awserr" 10 "github.com/aws/aws-sdk-go/service/iam" 11 "github.com/hashicorp/terraform/helper/acctest" 12 "github.com/hashicorp/terraform/helper/resource" 13 "github.com/hashicorp/terraform/terraform" 14 ) 15 16 func TestAccAWSIAMInstanceProfile_importBasic(t *testing.T) { 17 resourceName := "aws_iam_instance_profile.test" 18 rName := acctest.RandString(5) 19 20 resource.Test(t, resource.TestCase{ 21 PreCheck: func() { testAccPreCheck(t) }, 22 Providers: testAccProviders, 23 CheckDestroy: testAccCheckAWSInstanceProfileDestroy, 24 Steps: []resource.TestStep{ 25 { 26 Config: testAccAWSInstanceProfilePrefixNameConfig(rName), 27 }, 28 29 { 30 ResourceName: resourceName, 31 ImportState: true, 32 ImportStateVerify: true, 33 ImportStateVerifyIgnore: []string{"name_prefix"}, 34 }, 35 }, 36 }) 37 } 38 39 func TestAccAWSIAMInstanceProfile_basic(t *testing.T) { 40 rName := acctest.RandString(5) 41 resource.Test(t, resource.TestCase{ 42 PreCheck: func() { testAccPreCheck(t) }, 43 Providers: testAccProviders, 44 Steps: []resource.TestStep{ 45 { 46 Config: testAccAwsIamInstanceProfileConfig(rName), 47 }, 48 }, 49 }) 50 } 51 52 func TestAccAWSIAMInstanceProfile_namePrefix(t *testing.T) { 53 var conf iam.GetInstanceProfileOutput 54 rName := acctest.RandString(5) 55 56 resource.Test(t, resource.TestCase{ 57 PreCheck: func() { testAccPreCheck(t) }, 58 IDRefreshName: "aws_iam_instance_profile.test", 59 IDRefreshIgnore: []string{"name_prefix"}, 60 Providers: testAccProviders, 61 CheckDestroy: testAccCheckAWSInstanceProfileDestroy, 62 Steps: []resource.TestStep{ 63 { 64 Config: testAccAWSInstanceProfilePrefixNameConfig(rName), 65 Check: resource.ComposeTestCheckFunc( 66 testAccCheckAWSInstanceProfileExists("aws_iam_instance_profile.test", &conf), 67 testAccCheckAWSInstanceProfileGeneratedNamePrefix( 68 "aws_iam_instance_profile.test", "test-"), 69 ), 70 }, 71 }, 72 }) 73 } 74 75 func testAccCheckAWSInstanceProfileGeneratedNamePrefix(resource, prefix string) resource.TestCheckFunc { 76 return func(s *terraform.State) error { 77 r, ok := s.RootModule().Resources[resource] 78 if !ok { 79 return fmt.Errorf("Resource not found") 80 } 81 name, ok := r.Primary.Attributes["name"] 82 if !ok { 83 return fmt.Errorf("Name attr not found: %#v", r.Primary.Attributes) 84 } 85 if !strings.HasPrefix(name, prefix) { 86 return fmt.Errorf("Name: %q, does not have prefix: %q", name, prefix) 87 } 88 return nil 89 } 90 } 91 92 func testAccCheckAWSInstanceProfileDestroy(s *terraform.State) error { 93 iamconn := testAccProvider.Meta().(*AWSClient).iamconn 94 95 for _, rs := range s.RootModule().Resources { 96 if rs.Type != "aws_iam_instance_profile" { 97 continue 98 } 99 100 // Try to get role 101 _, err := iamconn.GetInstanceProfile(&iam.GetInstanceProfileInput{ 102 InstanceProfileName: aws.String(rs.Primary.ID), 103 }) 104 if err == nil { 105 return fmt.Errorf("still exist.") 106 } 107 108 // Verify the error is what we want 109 ec2err, ok := err.(awserr.Error) 110 if !ok { 111 return err 112 } 113 if ec2err.Code() != "NoSuchEntity" { 114 return err 115 } 116 } 117 118 return nil 119 } 120 121 func testAccCheckAWSInstanceProfileExists(n string, res *iam.GetInstanceProfileOutput) resource.TestCheckFunc { 122 return func(s *terraform.State) error { 123 rs, ok := s.RootModule().Resources[n] 124 if !ok { 125 return fmt.Errorf("Not found: %s", n) 126 } 127 128 if rs.Primary.ID == "" { 129 return fmt.Errorf("No Instance Profile name is set") 130 } 131 132 iamconn := testAccProvider.Meta().(*AWSClient).iamconn 133 134 resp, err := iamconn.GetInstanceProfile(&iam.GetInstanceProfileInput{ 135 InstanceProfileName: aws.String(rs.Primary.ID), 136 }) 137 if err != nil { 138 return err 139 } 140 141 *res = *resp 142 143 return nil 144 } 145 } 146 147 func testAccAwsIamInstanceProfileConfig(rName string) string { 148 return fmt.Sprintf(` 149 resource "aws_iam_role" "test" { 150 name = "test-%s" 151 assume_role_policy = "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"ec2.amazonaws.com\"]},\"Action\":[\"sts:AssumeRole\"]}]}" 152 } 153 154 resource "aws_iam_instance_profile" "test" { 155 name = "test" 156 roles = ["${aws_iam_role.test.name}"] 157 }`, rName) 158 } 159 160 func testAccAWSInstanceProfilePrefixNameConfig(rName string) string { 161 return fmt.Sprintf(` 162 resource "aws_iam_role" "test" { 163 name = "test-%s" 164 assume_role_policy = "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"ec2.amazonaws.com\"]},\"Action\":[\"sts:AssumeRole\"]}]}" 165 } 166 167 resource "aws_iam_instance_profile" "test" { 168 name_prefix = "test-" 169 roles = ["${aws_iam_role.test.name}"] 170 }`, rName) 171 }