github.com/andresvia/terraform@v0.6.15-0.20160412045437-d51c75946785/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 ), 64 }, 65 66 resource.TestStep{ 67 Config: testAccESDomainConfig_TagUpdate, 68 Check: resource.ComposeTestCheckFunc( 69 testAccCheckESDomainExists("aws_elasticsearch_domain.example", &domain), 70 testAccLoadESTags(&domain, &td), 71 testAccCheckElasticsearchServiceTags(&td.TagList, "foo", "bar"), 72 testAccCheckElasticsearchServiceTags(&td.TagList, "new", "type"), 73 ), 74 }, 75 }, 76 }) 77 } 78 79 func testAccLoadESTags(conf *elasticsearch.ElasticsearchDomainStatus, td *elasticsearch.ListTagsOutput) resource.TestCheckFunc { 80 return func(s *terraform.State) error { 81 conn := testAccProvider.Meta().(*AWSClient).esconn 82 83 describe, err := conn.ListTags(&elasticsearch.ListTagsInput{ 84 ARN: conf.ARN, 85 }) 86 87 if err != nil { 88 return err 89 } 90 if len(describe.TagList) > 0 { 91 *td = *describe 92 } 93 return nil 94 } 95 } 96 97 func testAccCheckESDomainExists(n string, domain *elasticsearch.ElasticsearchDomainStatus) resource.TestCheckFunc { 98 return func(s *terraform.State) error { 99 rs, ok := s.RootModule().Resources[n] 100 if !ok { 101 return fmt.Errorf("Not found: %s", n) 102 } 103 104 if rs.Primary.ID == "" { 105 return fmt.Errorf("No ES Domain ID is set") 106 } 107 108 conn := testAccProvider.Meta().(*AWSClient).esconn 109 opts := &elasticsearch.DescribeElasticsearchDomainInput{ 110 DomainName: aws.String(rs.Primary.Attributes["domain_name"]), 111 } 112 113 resp, err := conn.DescribeElasticsearchDomain(opts) 114 if err != nil { 115 return fmt.Errorf("Error describing domain: %s", err.Error()) 116 } 117 118 *domain = *resp.DomainStatus 119 120 return nil 121 } 122 } 123 124 func testAccCheckESDomainDestroy(s *terraform.State) error { 125 for _, rs := range s.RootModule().Resources { 126 if rs.Type != "aws_elasticsearch_domain" { 127 continue 128 } 129 130 conn := testAccProvider.Meta().(*AWSClient).esconn 131 opts := &elasticsearch.DescribeElasticsearchDomainInput{ 132 DomainName: aws.String(rs.Primary.Attributes["domain_name"]), 133 } 134 135 _, err := conn.DescribeElasticsearchDomain(opts) 136 // Verify the error is what we want 137 if err != nil { 138 if awsErr, ok := err.(awserr.Error); ok && awsErr.Code() == "ResourceNotFoundException" { 139 continue 140 } 141 return err 142 } 143 } 144 return nil 145 } 146 147 const testAccESDomainConfig = ` 148 resource "aws_elasticsearch_domain" "example" { 149 domain_name = "tf-test-1" 150 } 151 ` 152 153 const testAccESDomainConfig_TagUpdate = ` 154 resource "aws_elasticsearch_domain" "example" { 155 domain_name = "tf-test-1" 156 157 tags { 158 foo = "bar" 159 new = "type" 160 } 161 } 162 ` 163 164 const testAccESDomainConfig_complex = ` 165 resource "aws_elasticsearch_domain" "example" { 166 domain_name = "tf-test-2" 167 168 advanced_options { 169 "indices.fielddata.cache.size" = 80 170 } 171 172 ebs_options { 173 ebs_enabled = false 174 } 175 176 cluster_config { 177 instance_count = 2 178 zone_awareness_enabled = true 179 } 180 181 snapshot_options { 182 automated_snapshot_start_hour = 23 183 } 184 185 tags { 186 bar = "complex" 187 } 188 } 189 `