github.com/mohanarpit/terraform@v0.6.16-0.20160909104007-291f29853544/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)