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 `