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  `