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)