github.com/gabrielperezs/terraform@v0.7.0-rc2.0.20160715084931-f7da2612946f/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/aws/awserr" 9 "github.com/aws/aws-sdk-go/service/directoryservice" 10 11 "github.com/hashicorp/terraform/helper/acctest" 12 "github.com/hashicorp/terraform/helper/resource" 13 "github.com/hashicorp/terraform/terraform" 14 ) 15 16 func TestAccAWSDirectoryServiceDirectory_basic(t *testing.T) { 17 resource.Test(t, resource.TestCase{ 18 PreCheck: func() { testAccPreCheck(t) }, 19 Providers: testAccProviders, 20 CheckDestroy: testAccCheckDirectoryServiceDirectoryDestroy, 21 Steps: []resource.TestStep{ 22 resource.TestStep{ 23 Config: testAccDirectoryServiceDirectoryConfig, 24 Check: resource.ComposeTestCheckFunc( 25 testAccCheckServiceDirectoryExists("aws_directory_service_directory.bar"), 26 ), 27 }, 28 }, 29 }) 30 } 31 32 func TestAccAWSDirectoryServiceDirectory_microsoft(t *testing.T) { 33 resource.Test(t, resource.TestCase{ 34 PreCheck: func() { testAccPreCheck(t) }, 35 Providers: testAccProviders, 36 CheckDestroy: testAccCheckDirectoryServiceDirectoryDestroy, 37 Steps: []resource.TestStep{ 38 resource.TestStep{ 39 Config: testAccDirectoryServiceDirectoryConfig_microsoft, 40 Check: resource.ComposeTestCheckFunc( 41 testAccCheckServiceDirectoryExists("aws_directory_service_directory.bar"), 42 ), 43 }, 44 }, 45 }) 46 } 47 48 func TestAccAWSDirectoryServiceDirectory_connector(t *testing.T) { 49 resource.Test(t, resource.TestCase{ 50 PreCheck: func() { testAccPreCheck(t) }, 51 Providers: testAccProviders, 52 CheckDestroy: testAccCheckDirectoryServiceDirectoryDestroy, 53 Steps: []resource.TestStep{ 54 resource.TestStep{ 55 Config: testAccDirectoryServiceDirectoryConfig_connector, 56 Check: resource.ComposeTestCheckFunc( 57 testAccCheckServiceDirectoryExists("aws_directory_service_directory.connector"), 58 ), 59 }, 60 }, 61 }) 62 } 63 64 func TestAccAWSDirectoryServiceDirectory_withAliasAndSso(t *testing.T) { 65 resource.Test(t, resource.TestCase{ 66 PreCheck: func() { testAccPreCheck(t) }, 67 Providers: testAccProviders, 68 CheckDestroy: testAccCheckDirectoryServiceDirectoryDestroy, 69 Steps: []resource.TestStep{ 70 resource.TestStep{ 71 Config: testAccDirectoryServiceDirectoryConfig_withAlias, 72 Check: resource.ComposeTestCheckFunc( 73 testAccCheckServiceDirectoryExists("aws_directory_service_directory.bar_a"), 74 testAccCheckServiceDirectoryAlias("aws_directory_service_directory.bar_a", 75 fmt.Sprintf("tf-d-%d", randomInteger)), 76 testAccCheckServiceDirectorySso("aws_directory_service_directory.bar_a", false), 77 ), 78 }, 79 resource.TestStep{ 80 Config: testAccDirectoryServiceDirectoryConfig_withSso, 81 Check: resource.ComposeTestCheckFunc( 82 testAccCheckServiceDirectoryExists("aws_directory_service_directory.bar_a"), 83 testAccCheckServiceDirectoryAlias("aws_directory_service_directory.bar_a", 84 fmt.Sprintf("tf-d-%d", randomInteger)), 85 testAccCheckServiceDirectorySso("aws_directory_service_directory.bar_a", true), 86 ), 87 }, 88 resource.TestStep{ 89 Config: testAccDirectoryServiceDirectoryConfig_withSso_modified, 90 Check: resource.ComposeTestCheckFunc( 91 testAccCheckServiceDirectoryExists("aws_directory_service_directory.bar_a"), 92 testAccCheckServiceDirectoryAlias("aws_directory_service_directory.bar_a", 93 fmt.Sprintf("tf-d-%d", randomInteger)), 94 testAccCheckServiceDirectorySso("aws_directory_service_directory.bar_a", false), 95 ), 96 }, 97 }, 98 }) 99 } 100 101 func testAccCheckDirectoryServiceDirectoryDestroy(s *terraform.State) error { 102 dsconn := testAccProvider.Meta().(*AWSClient).dsconn 103 104 for _, rs := range s.RootModule().Resources { 105 if rs.Type != "aws_directory_service_directory" { 106 continue 107 } 108 109 input := directoryservice.DescribeDirectoriesInput{ 110 DirectoryIds: []*string{aws.String(rs.Primary.ID)}, 111 } 112 out, err := dsconn.DescribeDirectories(&input) 113 if err != nil { 114 // EntityDoesNotExistException means it's gone, this is good 115 if dserr, ok := err.(awserr.Error); ok && dserr.Code() == "EntityDoesNotExistException" { 116 return nil 117 } 118 return err 119 } 120 121 if out != nil && len(out.DirectoryDescriptions) > 0 { 122 return fmt.Errorf("Expected AWS Directory Service Directory to be gone, but was still found") 123 } 124 125 return nil 126 } 127 128 return fmt.Errorf("Default error in Service Directory Test") 129 } 130 131 func testAccCheckServiceDirectoryExists(name string) resource.TestCheckFunc { 132 return func(s *terraform.State) error { 133 rs, ok := s.RootModule().Resources[name] 134 if !ok { 135 return fmt.Errorf("Not found: %s", name) 136 } 137 138 if rs.Primary.ID == "" { 139 return fmt.Errorf("No ID is set") 140 } 141 142 dsconn := testAccProvider.Meta().(*AWSClient).dsconn 143 out, err := dsconn.DescribeDirectories(&directoryservice.DescribeDirectoriesInput{ 144 DirectoryIds: []*string{aws.String(rs.Primary.ID)}, 145 }) 146 147 if err != nil { 148 return err 149 } 150 151 if len(out.DirectoryDescriptions) < 1 { 152 return fmt.Errorf("No DS directory found") 153 } 154 155 if *out.DirectoryDescriptions[0].DirectoryId != rs.Primary.ID { 156 return fmt.Errorf("DS directory ID mismatch - existing: %q, state: %q", 157 *out.DirectoryDescriptions[0].DirectoryId, rs.Primary.ID) 158 } 159 160 return nil 161 } 162 } 163 164 func testAccCheckServiceDirectoryAlias(name, alias string) resource.TestCheckFunc { 165 return func(s *terraform.State) error { 166 rs, ok := s.RootModule().Resources[name] 167 if !ok { 168 return fmt.Errorf("Not found: %s", name) 169 } 170 171 if rs.Primary.ID == "" { 172 return fmt.Errorf("No ID is set") 173 } 174 175 dsconn := testAccProvider.Meta().(*AWSClient).dsconn 176 out, err := dsconn.DescribeDirectories(&directoryservice.DescribeDirectoriesInput{ 177 DirectoryIds: []*string{aws.String(rs.Primary.ID)}, 178 }) 179 180 if err != nil { 181 return err 182 } 183 184 if *out.DirectoryDescriptions[0].Alias != alias { 185 return fmt.Errorf("DS directory Alias mismatch - actual: %q, expected: %q", 186 *out.DirectoryDescriptions[0].Alias, alias) 187 } 188 189 return nil 190 } 191 } 192 193 func testAccCheckServiceDirectorySso(name string, ssoEnabled bool) resource.TestCheckFunc { 194 return func(s *terraform.State) error { 195 rs, ok := s.RootModule().Resources[name] 196 if !ok { 197 return fmt.Errorf("Not found: %s", name) 198 } 199 200 if rs.Primary.ID == "" { 201 return fmt.Errorf("No ID is set") 202 } 203 204 dsconn := testAccProvider.Meta().(*AWSClient).dsconn 205 out, err := dsconn.DescribeDirectories(&directoryservice.DescribeDirectoriesInput{ 206 DirectoryIds: []*string{aws.String(rs.Primary.ID)}, 207 }) 208 209 if err != nil { 210 return err 211 } 212 213 if *out.DirectoryDescriptions[0].SsoEnabled != ssoEnabled { 214 return fmt.Errorf("DS directory SSO mismatch - actual: %t, expected: %t", 215 *out.DirectoryDescriptions[0].SsoEnabled, ssoEnabled) 216 } 217 218 return nil 219 } 220 } 221 222 const testAccDirectoryServiceDirectoryConfig = ` 223 resource "aws_directory_service_directory" "bar" { 224 name = "corp.notexample.com" 225 password = "SuperSecretPassw0rd" 226 size = "Small" 227 228 vpc_settings { 229 vpc_id = "${aws_vpc.main.id}" 230 subnet_ids = ["${aws_subnet.foo.id}", "${aws_subnet.bar.id}"] 231 } 232 } 233 234 resource "aws_vpc" "main" { 235 cidr_block = "10.0.0.0/16" 236 } 237 238 resource "aws_subnet" "foo" { 239 vpc_id = "${aws_vpc.main.id}" 240 availability_zone = "us-west-2a" 241 cidr_block = "10.0.1.0/24" 242 } 243 resource "aws_subnet" "bar" { 244 vpc_id = "${aws_vpc.main.id}" 245 availability_zone = "us-west-2b" 246 cidr_block = "10.0.2.0/24" 247 } 248 ` 249 250 const testAccDirectoryServiceDirectoryConfig_connector = ` 251 resource "aws_directory_service_directory" "bar" { 252 name = "corp.notexample.com" 253 password = "SuperSecretPassw0rd" 254 size = "Small" 255 256 vpc_settings { 257 vpc_id = "${aws_vpc.main.id}" 258 subnet_ids = ["${aws_subnet.foo.id}", "${aws_subnet.bar.id}"] 259 } 260 } 261 262 resource "aws_directory_service_directory" "connector" { 263 name = "corp.notexample.com" 264 password = "SuperSecretPassw0rd" 265 size = "Small" 266 type = "ADConnector" 267 268 connect_settings { 269 customer_dns_ips = ["${aws_directory_service_directory.bar.dns_ip_addresses}"] 270 customer_username = "Administrator" 271 vpc_id = "${aws_vpc.main.id}" 272 subnet_ids = ["${aws_subnet.foo.id}", "${aws_subnet.bar.id}"] 273 } 274 } 275 276 resource "aws_vpc" "main" { 277 cidr_block = "10.0.0.0/16" 278 } 279 280 resource "aws_subnet" "foo" { 281 vpc_id = "${aws_vpc.main.id}" 282 availability_zone = "us-west-2a" 283 cidr_block = "10.0.1.0/24" 284 } 285 resource "aws_subnet" "bar" { 286 vpc_id = "${aws_vpc.main.id}" 287 availability_zone = "us-west-2b" 288 cidr_block = "10.0.2.0/24" 289 } 290 ` 291 292 const testAccDirectoryServiceDirectoryConfig_microsoft = ` 293 resource "aws_directory_service_directory" "bar" { 294 name = "corp.notexample.com" 295 password = "SuperSecretPassw0rd" 296 type = "MicrosoftAD" 297 298 vpc_settings { 299 vpc_id = "${aws_vpc.main.id}" 300 subnet_ids = ["${aws_subnet.foo.id}", "${aws_subnet.bar.id}"] 301 } 302 } 303 304 resource "aws_vpc" "main" { 305 cidr_block = "10.0.0.0/16" 306 } 307 308 resource "aws_subnet" "foo" { 309 vpc_id = "${aws_vpc.main.id}" 310 availability_zone = "us-west-2a" 311 cidr_block = "10.0.1.0/24" 312 } 313 resource "aws_subnet" "bar" { 314 vpc_id = "${aws_vpc.main.id}" 315 availability_zone = "us-west-2b" 316 cidr_block = "10.0.2.0/24" 317 } 318 ` 319 320 var randomInteger = acctest.RandInt() 321 var testAccDirectoryServiceDirectoryConfig_withAlias = fmt.Sprintf(` 322 resource "aws_directory_service_directory" "bar_a" { 323 name = "corp.notexample.com" 324 password = "SuperSecretPassw0rd" 325 size = "Small" 326 alias = "tf-d-%d" 327 328 vpc_settings { 329 vpc_id = "${aws_vpc.main.id}" 330 subnet_ids = ["${aws_subnet.foo.id}", "${aws_subnet.bar.id}"] 331 } 332 } 333 334 resource "aws_vpc" "main" { 335 cidr_block = "10.0.0.0/16" 336 } 337 338 resource "aws_subnet" "foo" { 339 vpc_id = "${aws_vpc.main.id}" 340 availability_zone = "us-west-2a" 341 cidr_block = "10.0.1.0/24" 342 } 343 resource "aws_subnet" "bar" { 344 vpc_id = "${aws_vpc.main.id}" 345 availability_zone = "us-west-2b" 346 cidr_block = "10.0.2.0/24" 347 } 348 `, randomInteger) 349 350 var testAccDirectoryServiceDirectoryConfig_withSso = fmt.Sprintf(` 351 resource "aws_directory_service_directory" "bar_a" { 352 name = "corp.notexample.com" 353 password = "SuperSecretPassw0rd" 354 size = "Small" 355 alias = "tf-d-%d" 356 enable_sso = true 357 358 vpc_settings { 359 vpc_id = "${aws_vpc.main.id}" 360 subnet_ids = ["${aws_subnet.foo.id}", "${aws_subnet.bar.id}"] 361 } 362 } 363 364 resource "aws_vpc" "main" { 365 cidr_block = "10.0.0.0/16" 366 } 367 368 resource "aws_subnet" "foo" { 369 vpc_id = "${aws_vpc.main.id}" 370 availability_zone = "us-west-2a" 371 cidr_block = "10.0.1.0/24" 372 } 373 resource "aws_subnet" "bar" { 374 vpc_id = "${aws_vpc.main.id}" 375 availability_zone = "us-west-2b" 376 cidr_block = "10.0.2.0/24" 377 } 378 `, randomInteger) 379 380 var testAccDirectoryServiceDirectoryConfig_withSso_modified = fmt.Sprintf(` 381 resource "aws_directory_service_directory" "bar_a" { 382 name = "corp.notexample.com" 383 password = "SuperSecretPassw0rd" 384 size = "Small" 385 alias = "tf-d-%d" 386 enable_sso = false 387 388 vpc_settings { 389 vpc_id = "${aws_vpc.main.id}" 390 subnet_ids = ["${aws_subnet.foo.id}", "${aws_subnet.bar.id}"] 391 } 392 } 393 394 resource "aws_vpc" "main" { 395 cidr_block = "10.0.0.0/16" 396 } 397 398 resource "aws_subnet" "foo" { 399 vpc_id = "${aws_vpc.main.id}" 400 availability_zone = "us-west-2a" 401 cidr_block = "10.0.1.0/24" 402 } 403 resource "aws_subnet" "bar" { 404 vpc_id = "${aws_vpc.main.id}" 405 availability_zone = "us-west-2b" 406 cidr_block = "10.0.2.0/24" 407 } 408 `, randomInteger)