github.com/gabrielperezs/terraform@v0.7.0-rc2.0.20160715084931-f7da2612946f/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  `