github.com/joshgarnett/terraform@v0.5.4-0.20160219181435-92dc20bb3594/builtin/providers/aws/resource_aws_elasticsearch_domain_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 elasticsearch "github.com/aws/aws-sdk-go/service/elasticsearchservice" 10 "github.com/hashicorp/terraform/helper/resource" 11 "github.com/hashicorp/terraform/terraform" 12 ) 13 14 func TestAccAWSElasticSearchDomain_basic(t *testing.T) { 15 var domain elasticsearch.ElasticsearchDomainStatus 16 17 resource.Test(t, resource.TestCase{ 18 PreCheck: func() { testAccPreCheck(t) }, 19 Providers: testAccProviders, 20 CheckDestroy: testAccCheckESDomainDestroy, 21 Steps: []resource.TestStep{ 22 resource.TestStep{ 23 Config: testAccESDomainConfig, 24 Check: resource.ComposeTestCheckFunc( 25 testAccCheckESDomainExists("aws_elasticsearch_domain.example", &domain), 26 ), 27 }, 28 }, 29 }) 30 } 31 32 func TestAccAWSElasticSearchDomain_complex(t *testing.T) { 33 var domain elasticsearch.ElasticsearchDomainStatus 34 35 resource.Test(t, resource.TestCase{ 36 PreCheck: func() { testAccPreCheck(t) }, 37 Providers: testAccProviders, 38 CheckDestroy: testAccCheckESDomainDestroy, 39 Steps: []resource.TestStep{ 40 resource.TestStep{ 41 Config: testAccESDomainConfig_complex, 42 Check: resource.ComposeTestCheckFunc( 43 testAccCheckESDomainExists("aws_elasticsearch_domain.example", &domain), 44 ), 45 }, 46 }, 47 }) 48 } 49 50 func TestAccAWSElasticSearch_tags(t *testing.T) { 51 var domain elasticsearch.ElasticsearchDomainStatus 52 var td elasticsearch.ListTagsOutput 53 54 resource.Test(t, resource.TestCase{ 55 PreCheck: func() { testAccPreCheck(t) }, 56 Providers: testAccProviders, 57 CheckDestroy: testAccCheckAWSELBDestroy, 58 Steps: []resource.TestStep{ 59 resource.TestStep{ 60 Config: testAccESDomainConfig, 61 Check: resource.ComposeTestCheckFunc( 62 testAccCheckESDomainExists("aws_elasticsearch_domain.example", &domain), 63 testAccLoadESTags(&domain, &td), 64 testAccCheckElasticsearchServiceTags(&td.TagList, "bar", "baz"), 65 ), 66 }, 67 68 resource.TestStep{ 69 Config: testAccESDomainConfig_TagUpdate, 70 Check: resource.ComposeTestCheckFunc( 71 testAccCheckESDomainExists("aws_elasticsearch_domain.example", &domain), 72 testAccLoadESTags(&domain, &td), 73 testAccCheckElasticsearchServiceTags(&td.TagList, "foo", "bar"), 74 testAccCheckElasticsearchServiceTags(&td.TagList, "new", "type"), 75 ), 76 }, 77 }, 78 }) 79 } 80 81 func testAccLoadESTags(conf *elasticsearch.ElasticsearchDomainStatus, td *elasticsearch.ListTagsOutput) resource.TestCheckFunc { 82 return func(s *terraform.State) error { 83 conn := testAccProvider.Meta().(*AWSClient).esconn 84 85 describe, err := conn.ListTags(&elasticsearch.ListTagsInput{ 86 ARN: conf.ARN, 87 }) 88 89 if err != nil { 90 return err 91 } 92 if len(describe.TagList) > 0 { 93 *td = *describe 94 } 95 return nil 96 } 97 } 98 99 func testAccCheckESDomainExists(n string, domain *elasticsearch.ElasticsearchDomainStatus) resource.TestCheckFunc { 100 return func(s *terraform.State) error { 101 rs, ok := s.RootModule().Resources[n] 102 if !ok { 103 return fmt.Errorf("Not found: %s", n) 104 } 105 106 if rs.Primary.ID == "" { 107 return fmt.Errorf("No ES Domain ID is set") 108 } 109 110 conn := testAccProvider.Meta().(*AWSClient).esconn 111 opts := &elasticsearch.DescribeElasticsearchDomainInput{ 112 DomainName: aws.String(rs.Primary.Attributes["domain_name"]), 113 } 114 115 resp, err := conn.DescribeElasticsearchDomain(opts) 116 if err != nil { 117 return fmt.Errorf("Error describing domain: %s", err.Error()) 118 } 119 120 *domain = *resp.DomainStatus 121 122 return nil 123 } 124 } 125 126 func testAccCheckESDomainDestroy(s *terraform.State) error { 127 for _, rs := range s.RootModule().Resources { 128 if rs.Type != "aws_elasticsearch_domain" { 129 continue 130 } 131 132 conn := testAccProvider.Meta().(*AWSClient).esconn 133 opts := &elasticsearch.DescribeElasticsearchDomainInput{ 134 DomainName: aws.String(rs.Primary.Attributes["domain_name"]), 135 } 136 137 _, err := conn.DescribeElasticsearchDomain(opts) 138 // Verify the error is what we want 139 if err != nil { 140 if awsErr, ok := err.(awserr.Error); ok && awsErr.Code() == "ResourceNotFoundException" { 141 continue 142 } 143 return err 144 } 145 } 146 return nil 147 } 148 149 const testAccESDomainConfig = ` 150 resource "aws_elasticsearch_domain" "example" { 151 domain_name = "tf-test-1" 152 153 tags { 154 bar = "baz" 155 } 156 } 157 ` 158 159 const testAccESDomainConfig_TagUpdate = ` 160 resource "aws_elasticsearch_domain" "example" { 161 domain_name = "tf-test-1" 162 163 tags { 164 foo = "bar" 165 new = "type" 166 } 167 } 168 ` 169 170 const testAccESDomainConfig_complex = ` 171 resource "aws_elasticsearch_domain" "example" { 172 domain_name = "tf-test-2" 173 174 advanced_options { 175 "indices.fielddata.cache.size" = 80 176 } 177 178 ebs_options { 179 ebs_enabled = false 180 } 181 182 cluster_config { 183 instance_count = 2 184 zone_awareness_enabled = true 185 } 186 187 snapshot_options { 188 automated_snapshot_start_hour = 23 189 } 190 191 tags { 192 bar = "complex" 193 } 194 } 195 `