github.com/peterbale/terraform@v0.9.0-beta2.0.20170315142748-5723acd55547/builtin/providers/consul/resource_consul_prepared_query_test.go (about)

     1  package consul
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	consulapi "github.com/hashicorp/consul/api"
     8  	"github.com/hashicorp/terraform/helper/resource"
     9  	"github.com/hashicorp/terraform/terraform"
    10  )
    11  
    12  func TestAccConsulPreparedQuery_basic(t *testing.T) {
    13  	resource.Test(t, resource.TestCase{
    14  		Providers:    testAccProviders,
    15  		CheckDestroy: testAccCheckConsulPreparedQueryDestroy,
    16  		Steps: []resource.TestStep{
    17  			resource.TestStep{
    18  				Config: testAccConsulPreparedQueryConfig,
    19  				Check: resource.ComposeTestCheckFunc(
    20  					testAccCheckConsulPreparedQueryExists(),
    21  					testAccCheckConsulPreparedQueryAttrValue("name", "foo"),
    22  					testAccCheckConsulPreparedQueryAttrValue("stored_token", "pq-token"),
    23  					testAccCheckConsulPreparedQueryAttrValue("service", "redis"),
    24  					testAccCheckConsulPreparedQueryAttrValue("near", "_agent"),
    25  					testAccCheckConsulPreparedQueryAttrValue("tags.#", "1"),
    26  					testAccCheckConsulPreparedQueryAttrValue("only_passing", "true"),
    27  					testAccCheckConsulPreparedQueryAttrValue("failover.0.nearest_n", "3"),
    28  					testAccCheckConsulPreparedQueryAttrValue("failover.0.datacenters.#", "2"),
    29  					testAccCheckConsulPreparedQueryAttrValue("template.0.type", "name_prefix_match"),
    30  					testAccCheckConsulPreparedQueryAttrValue("template.0.regexp", "hello"),
    31  					testAccCheckConsulPreparedQueryAttrValue("dns.0.ttl", "8m"),
    32  				),
    33  			},
    34  			resource.TestStep{
    35  				Config: testAccConsulPreparedQueryConfigUpdate1,
    36  				Check: resource.ComposeTestCheckFunc(
    37  					testAccCheckConsulPreparedQueryExists(),
    38  					testAccCheckConsulPreparedQueryAttrValue("name", "baz"),
    39  					testAccCheckConsulPreparedQueryAttrValue("stored_token", "pq-token-updated"),
    40  					testAccCheckConsulPreparedQueryAttrValue("service", "memcached"),
    41  					testAccCheckConsulPreparedQueryAttrValue("near", "node1"),
    42  					testAccCheckConsulPreparedQueryAttrValue("tags.#", "2"),
    43  					testAccCheckConsulPreparedQueryAttrValue("only_passing", "false"),
    44  					testAccCheckConsulPreparedQueryAttrValue("failover.0.nearest_n", "2"),
    45  					testAccCheckConsulPreparedQueryAttrValue("failover.0.datacenters.#", "1"),
    46  					testAccCheckConsulPreparedQueryAttrValue("template.0.regexp", "goodbye"),
    47  					testAccCheckConsulPreparedQueryAttrValue("dns.0.ttl", "16m"),
    48  				),
    49  			},
    50  			resource.TestStep{
    51  				Config: testAccConsulPreparedQueryConfigUpdate2,
    52  				Check: resource.ComposeTestCheckFunc(
    53  					testAccCheckConsulPreparedQueryExists(),
    54  					testAccCheckConsulPreparedQueryAttrValue("stored_token", ""),
    55  					testAccCheckConsulPreparedQueryAttrValue("near", ""),
    56  					testAccCheckConsulPreparedQueryAttrValue("tags.#", "0"),
    57  					testAccCheckConsulPreparedQueryAttrValue("failover.#", "0"),
    58  					testAccCheckConsulPreparedQueryAttrValue("template.#", "0"),
    59  					testAccCheckConsulPreparedQueryAttrValue("dns.#", "0"),
    60  				),
    61  			},
    62  		},
    63  	})
    64  }
    65  
    66  func checkPreparedQueryExists(s *terraform.State) bool {
    67  	rn, ok := s.RootModule().Resources["consul_prepared_query.foo"]
    68  	if !ok {
    69  		return false
    70  	}
    71  	id := rn.Primary.ID
    72  
    73  	client := testAccProvider.Meta().(*consulapi.Client).PreparedQuery()
    74  	opts := &consulapi.QueryOptions{Datacenter: "dc1"}
    75  	pq, _, err := client.Get(id, opts)
    76  	return err == nil && pq != nil
    77  }
    78  
    79  func testAccCheckConsulPreparedQueryDestroy(s *terraform.State) error {
    80  	if checkPreparedQueryExists(s) {
    81  		return fmt.Errorf("Prepared query 'foo' still exists")
    82  	}
    83  	return nil
    84  }
    85  
    86  func testAccCheckConsulPreparedQueryExists() resource.TestCheckFunc {
    87  	return func(s *terraform.State) error {
    88  		if !checkPreparedQueryExists(s) {
    89  			return fmt.Errorf("Prepared query 'foo' does not exist")
    90  		}
    91  		return nil
    92  	}
    93  }
    94  
    95  func testAccCheckConsulPreparedQueryAttrValue(attr, val string) resource.TestCheckFunc {
    96  	return func(s *terraform.State) error {
    97  		rn, ok := s.RootModule().Resources["consul_prepared_query.foo"]
    98  		if !ok {
    99  			return fmt.Errorf("Resource not found")
   100  		}
   101  		out, ok := rn.Primary.Attributes[attr]
   102  		if !ok {
   103  			return fmt.Errorf("Attribute '%s' not found: %#v", attr, rn.Primary.Attributes)
   104  		}
   105  		if out != val {
   106  			return fmt.Errorf("Attribute '%s' value '%s' != '%s'", attr, out, val)
   107  		}
   108  		return nil
   109  	}
   110  }
   111  
   112  const testAccConsulPreparedQueryConfig = `
   113  resource "consul_prepared_query" "foo" {
   114  	name = "foo"
   115  	token = "client-token"
   116  	stored_token = "pq-token"
   117  	service = "redis"
   118  	tags = ["prod"]
   119  	near = "_agent"
   120  	only_passing = true
   121  
   122  	failover {
   123  		nearest_n = 3
   124  		datacenters = ["dc1", "dc2"]
   125  	}
   126  
   127  	template {
   128  		type = "name_prefix_match"
   129  		regexp = "hello"
   130  	}
   131  
   132  	dns {
   133  		ttl = "8m"
   134  	}
   135  }
   136  `
   137  
   138  const testAccConsulPreparedQueryConfigUpdate1 = `
   139  resource "consul_prepared_query" "foo" {
   140  	name = "baz"
   141  	token = "client-token"
   142  	stored_token = "pq-token-updated"
   143  	service = "memcached"
   144  	tags = ["prod","sup"]
   145  	near = "node1"
   146  	only_passing = false
   147  
   148  	failover {
   149  		nearest_n = 2
   150  		datacenters = ["dc2"]
   151  	}
   152  
   153  	template {
   154  		type = "name_prefix_match"
   155  		regexp = "goodbye"
   156  	}
   157  
   158  	dns {
   159  		ttl = "16m"
   160  	}
   161  }
   162  `
   163  
   164  const testAccConsulPreparedQueryConfigUpdate2 = `
   165  resource "consul_prepared_query" "foo" {
   166  	name = "baz"
   167  	service = "memcached"
   168  	token = "client-token"
   169  }
   170  `