github.com/sathiyas/terraform@v0.6.9-0.20151210233947-3330da00b997/builtin/providers/aws/resource_aws_directory_service_directory_test.go (about) 1 package aws 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/aws/aws-sdk-go/aws" 8 "github.com/aws/aws-sdk-go/service/directoryservice" 9 10 "github.com/hashicorp/terraform/helper/resource" 11 "github.com/hashicorp/terraform/terraform" 12 ) 13 14 func TestAccAWSDirectoryServiceDirectory_basic(t *testing.T) { 15 resource.Test(t, resource.TestCase{ 16 PreCheck: func() { testAccPreCheck(t) }, 17 Providers: testAccProviders, 18 CheckDestroy: testAccCheckDirectoryServiceDirectoryDestroy, 19 Steps: []resource.TestStep{ 20 resource.TestStep{ 21 Config: testAccDirectoryServiceDirectoryConfig, 22 Check: resource.ComposeTestCheckFunc( 23 testAccCheckServiceDirectoryExists("aws_directory_service_directory.bar"), 24 ), 25 }, 26 }, 27 }) 28 } 29 30 func TestAccAWSDirectoryServiceDirectory_withAliasAndSso(t *testing.T) { 31 resource.Test(t, resource.TestCase{ 32 PreCheck: func() { testAccPreCheck(t) }, 33 Providers: testAccProviders, 34 CheckDestroy: testAccCheckDirectoryServiceDirectoryDestroy, 35 Steps: []resource.TestStep{ 36 resource.TestStep{ 37 Config: testAccDirectoryServiceDirectoryConfig_withAlias, 38 Check: resource.ComposeTestCheckFunc( 39 testAccCheckServiceDirectoryExists("aws_directory_service_directory.bar_a"), 40 testAccCheckServiceDirectoryAlias("aws_directory_service_directory.bar_a", 41 fmt.Sprintf("tf-d-%d", randomInteger)), 42 testAccCheckServiceDirectorySso("aws_directory_service_directory.bar_a", false), 43 ), 44 }, 45 resource.TestStep{ 46 Config: testAccDirectoryServiceDirectoryConfig_withSso, 47 Check: resource.ComposeTestCheckFunc( 48 testAccCheckServiceDirectoryExists("aws_directory_service_directory.bar_a"), 49 testAccCheckServiceDirectoryAlias("aws_directory_service_directory.bar_a", 50 fmt.Sprintf("tf-d-%d", randomInteger)), 51 testAccCheckServiceDirectorySso("aws_directory_service_directory.bar_a", true), 52 ), 53 }, 54 resource.TestStep{ 55 Config: testAccDirectoryServiceDirectoryConfig_withSso_modified, 56 Check: resource.ComposeTestCheckFunc( 57 testAccCheckServiceDirectoryExists("aws_directory_service_directory.bar_a"), 58 testAccCheckServiceDirectoryAlias("aws_directory_service_directory.bar_a", 59 fmt.Sprintf("tf-d-%d", randomInteger)), 60 testAccCheckServiceDirectorySso("aws_directory_service_directory.bar_a", false), 61 ), 62 }, 63 }, 64 }) 65 } 66 67 func testAccCheckDirectoryServiceDirectoryDestroy(s *terraform.State) error { 68 if len(s.RootModule().Resources) > 0 { 69 return fmt.Errorf("Expected all resources to be gone, but found: %#v", 70 s.RootModule().Resources) 71 } 72 73 return nil 74 } 75 76 func testAccCheckServiceDirectoryExists(name string) resource.TestCheckFunc { 77 return func(s *terraform.State) error { 78 rs, ok := s.RootModule().Resources[name] 79 if !ok { 80 return fmt.Errorf("Not found: %s", name) 81 } 82 83 if rs.Primary.ID == "" { 84 return fmt.Errorf("No ID is set") 85 } 86 87 dsconn := testAccProvider.Meta().(*AWSClient).dsconn 88 out, err := dsconn.DescribeDirectories(&directoryservice.DescribeDirectoriesInput{ 89 DirectoryIds: []*string{aws.String(rs.Primary.ID)}, 90 }) 91 92 if err != nil { 93 return err 94 } 95 96 if len(out.DirectoryDescriptions) < 1 { 97 return fmt.Errorf("No DS directory found") 98 } 99 100 if *out.DirectoryDescriptions[0].DirectoryId != rs.Primary.ID { 101 return fmt.Errorf("DS directory ID mismatch - existing: %q, state: %q", 102 *out.DirectoryDescriptions[0].DirectoryId, rs.Primary.ID) 103 } 104 105 return nil 106 } 107 } 108 109 func testAccCheckServiceDirectoryAlias(name, alias string) resource.TestCheckFunc { 110 return func(s *terraform.State) error { 111 rs, ok := s.RootModule().Resources[name] 112 if !ok { 113 return fmt.Errorf("Not found: %s", name) 114 } 115 116 if rs.Primary.ID == "" { 117 return fmt.Errorf("No ID is set") 118 } 119 120 dsconn := testAccProvider.Meta().(*AWSClient).dsconn 121 out, err := dsconn.DescribeDirectories(&directoryservice.DescribeDirectoriesInput{ 122 DirectoryIds: []*string{aws.String(rs.Primary.ID)}, 123 }) 124 125 if err != nil { 126 return err 127 } 128 129 if *out.DirectoryDescriptions[0].Alias != alias { 130 return fmt.Errorf("DS directory Alias mismatch - actual: %q, expected: %q", 131 *out.DirectoryDescriptions[0].Alias, alias) 132 } 133 134 return nil 135 } 136 } 137 138 func testAccCheckServiceDirectorySso(name string, ssoEnabled bool) resource.TestCheckFunc { 139 return func(s *terraform.State) error { 140 rs, ok := s.RootModule().Resources[name] 141 if !ok { 142 return fmt.Errorf("Not found: %s", name) 143 } 144 145 if rs.Primary.ID == "" { 146 return fmt.Errorf("No ID is set") 147 } 148 149 dsconn := testAccProvider.Meta().(*AWSClient).dsconn 150 out, err := dsconn.DescribeDirectories(&directoryservice.DescribeDirectoriesInput{ 151 DirectoryIds: []*string{aws.String(rs.Primary.ID)}, 152 }) 153 154 if err != nil { 155 return err 156 } 157 158 if *out.DirectoryDescriptions[0].SsoEnabled != ssoEnabled { 159 return fmt.Errorf("DS directory SSO mismatch - actual: %t, expected: %t", 160 *out.DirectoryDescriptions[0].SsoEnabled, ssoEnabled) 161 } 162 163 return nil 164 } 165 } 166 167 const testAccDirectoryServiceDirectoryConfig = ` 168 resource "aws_directory_service_directory" "bar" { 169 name = "corp.notexample.com" 170 password = "SuperSecretPassw0rd" 171 size = "Small" 172 173 vpc_settings { 174 vpc_id = "${aws_vpc.main.id}" 175 subnet_ids = ["${aws_subnet.foo.id}", "${aws_subnet.bar.id}"] 176 } 177 } 178 179 resource "aws_vpc" "main" { 180 cidr_block = "10.0.0.0/16" 181 } 182 183 resource "aws_subnet" "foo" { 184 vpc_id = "${aws_vpc.main.id}" 185 availability_zone = "us-west-2a" 186 cidr_block = "10.0.1.0/24" 187 } 188 resource "aws_subnet" "bar" { 189 vpc_id = "${aws_vpc.main.id}" 190 availability_zone = "us-west-2b" 191 cidr_block = "10.0.2.0/24" 192 } 193 ` 194 195 var randomInteger = genRandInt() 196 var testAccDirectoryServiceDirectoryConfig_withAlias = fmt.Sprintf(` 197 resource "aws_directory_service_directory" "bar_a" { 198 name = "corp.notexample.com" 199 password = "SuperSecretPassw0rd" 200 size = "Small" 201 alias = "tf-d-%d" 202 203 vpc_settings { 204 vpc_id = "${aws_vpc.main.id}" 205 subnet_ids = ["${aws_subnet.foo.id}", "${aws_subnet.bar.id}"] 206 } 207 } 208 209 resource "aws_vpc" "main" { 210 cidr_block = "10.0.0.0/16" 211 } 212 213 resource "aws_subnet" "foo" { 214 vpc_id = "${aws_vpc.main.id}" 215 availability_zone = "us-west-2a" 216 cidr_block = "10.0.1.0/24" 217 } 218 resource "aws_subnet" "bar" { 219 vpc_id = "${aws_vpc.main.id}" 220 availability_zone = "us-west-2b" 221 cidr_block = "10.0.2.0/24" 222 } 223 `, randomInteger) 224 225 var testAccDirectoryServiceDirectoryConfig_withSso = fmt.Sprintf(` 226 resource "aws_directory_service_directory" "bar_a" { 227 name = "corp.notexample.com" 228 password = "SuperSecretPassw0rd" 229 size = "Small" 230 alias = "tf-d-%d" 231 enable_sso = true 232 233 vpc_settings { 234 vpc_id = "${aws_vpc.main.id}" 235 subnet_ids = ["${aws_subnet.foo.id}", "${aws_subnet.bar.id}"] 236 } 237 } 238 239 resource "aws_vpc" "main" { 240 cidr_block = "10.0.0.0/16" 241 } 242 243 resource "aws_subnet" "foo" { 244 vpc_id = "${aws_vpc.main.id}" 245 availability_zone = "us-west-2a" 246 cidr_block = "10.0.1.0/24" 247 } 248 resource "aws_subnet" "bar" { 249 vpc_id = "${aws_vpc.main.id}" 250 availability_zone = "us-west-2b" 251 cidr_block = "10.0.2.0/24" 252 } 253 `, randomInteger) 254 255 var testAccDirectoryServiceDirectoryConfig_withSso_modified = fmt.Sprintf(` 256 resource "aws_directory_service_directory" "bar_a" { 257 name = "corp.notexample.com" 258 password = "SuperSecretPassw0rd" 259 size = "Small" 260 alias = "tf-d-%d" 261 enable_sso = false 262 263 vpc_settings { 264 vpc_id = "${aws_vpc.main.id}" 265 subnet_ids = ["${aws_subnet.foo.id}", "${aws_subnet.bar.id}"] 266 } 267 } 268 269 resource "aws_vpc" "main" { 270 cidr_block = "10.0.0.0/16" 271 } 272 273 resource "aws_subnet" "foo" { 274 vpc_id = "${aws_vpc.main.id}" 275 availability_zone = "us-west-2a" 276 cidr_block = "10.0.1.0/24" 277 } 278 resource "aws_subnet" "bar" { 279 vpc_id = "${aws_vpc.main.id}" 280 availability_zone = "us-west-2b" 281 cidr_block = "10.0.2.0/24" 282 } 283 `, randomInteger)