aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAndrew N Golovkov <andrew@callstats.io>2018-02-01 13:24:08 +0200
committerGitHub <noreply@github.com>2018-02-01 13:24:08 +0200
commit538b3c9e581bbf5427209787be0b2c26977e1573 (patch)
tree4f30d86767b126d5f8ee67fa417382e4f0d7fa1d
parentc9458806c73b69e6af47eddd83391197b6d2a641 (diff)
parentef20d8d74891bfcfbf17088c4cd9c39cd1e347dd (diff)
downloadterraform-provider-statuscake-538b3c9e581bbf5427209787be0b2c26977e1573.tar.gz
terraform-provider-statuscake-538b3c9e581bbf5427209787be0b2c26977e1573.tar.zst
terraform-provider-statuscake-538b3c9e581bbf5427209787be0b2c26977e1573.zip
Merge pull request #1 from matschaffer/callstats-io-fixes
Updates to avoid perpetual node location diff
-rw-r--r--statuscake/provider_test.go15
-rw-r--r--statuscake/resource_statuscaketest.go49
-rw-r--r--statuscake/resource_statuscaketest_test.go35
3 files changed, 47 insertions, 52 deletions
diff --git a/statuscake/provider_test.go b/statuscake/provider_test.go
index 83045d0..81d5888 100644
--- a/statuscake/provider_test.go
+++ b/statuscake/provider_test.go
@@ -1,7 +1,9 @@
1package statuscake 1package statuscake
2 2
3import ( 3import (
4 "fmt"
4 "os" 5 "os"
6 "strconv"
5 "testing" 7 "testing"
6 8
7 "github.com/hashicorp/terraform/helper/schema" 9 "github.com/hashicorp/terraform/helper/schema"
@@ -10,12 +12,25 @@ import (
10 12
11var testAccProviders map[string]terraform.ResourceProvider 13var testAccProviders map[string]terraform.ResourceProvider
12var testAccProvider *schema.Provider 14var testAccProvider *schema.Provider
15var testContactGroupId int
13 16
14func init() { 17func init() {
15 testAccProvider = Provider().(*schema.Provider) 18 testAccProvider = Provider().(*schema.Provider)
16 testAccProviders = map[string]terraform.ResourceProvider{ 19 testAccProviders = map[string]terraform.ResourceProvider{
17 "statuscake": testAccProvider, 20 "statuscake": testAccProvider,
18 } 21 }
22
23 if v := os.Getenv("STATUSCAKE_TEST_CONTACT_GROUP_ID"); v == "" {
24 fmt.Println("STATUSCAKE_TEST_CONTACT_GROUP_ID must be set for acceptance tests")
25 os.Exit(1)
26 } else {
27 id, err := strconv.Atoi(v)
28 if err != nil {
29 fmt.Println("STATUSCAKE_TEST_CONTACT_GROUP_ID must be a valid int")
30 os.Exit(1)
31 }
32 testContactGroupId = id
33 }
19} 34}
20 35
21func TestProvider(t *testing.T) { 36func TestProvider(t *testing.T) {
diff --git a/statuscake/resource_statuscaketest.go b/statuscake/resource_statuscaketest.go
index 459c71a..d7d3f36 100644
--- a/statuscake/resource_statuscaketest.go
+++ b/statuscake/resource_statuscaketest.go
@@ -10,16 +10,24 @@ import (
10 "github.com/hashicorp/terraform/helper/schema" 10 "github.com/hashicorp/terraform/helper/schema"
11) 11)
12 12
13func castInterfaceToSliceStrings(in interface{}) []string { 13func castSetToSliceStrings(configured []interface{}) []string {
14 input := in.([]interface{}) 14 res := make([]string, len(configured))
15 res := make([]string, len(input))
16 15
17 for i, element := range input { 16 for i, element := range configured {
18 res[i] = element.(string) 17 res[i] = element.(string)
19 } 18 }
20 return res 19 return res
21} 20}
22 21
22// Special handling for node_locations since statuscake will return `[""]` for the empty case
23func considerEmptyStringAsEmptyArray(in []string) []string {
24 if len(in) == 1 && in[0] == "" {
25 return []string{}
26 } else {
27 return in
28 }
29}
30
23func resourceStatusCakeTest() *schema.Resource { 31func resourceStatusCakeTest() *schema.Resource {
24 return &schema.Resource{ 32 return &schema.Resource{
25 Create: CreateTest, 33 Create: CreateTest,
@@ -107,9 +115,10 @@ func resourceStatusCakeTest() *schema.Resource {
107 }, 115 },
108 116
109 "node_locations": { 117 "node_locations": {
110 Type: schema.TypeList, 118 Type: schema.TypeSet,
111 Elem: &schema.Schema{Type: schema.TypeString}, 119 Elem: &schema.Schema{Type: schema.TypeString},
112 Optional: true, 120 Optional: true,
121 Set: schema.HashString,
113 }, 122 },
114 123
115 "ping_url": { 124 "ping_url": {
@@ -123,8 +132,9 @@ func resourceStatusCakeTest() *schema.Resource {
123 }, 132 },
124 133
125 "basic_pass": { 134 "basic_pass": {
126 Type: schema.TypeString, 135 Type: schema.TypeString,
127 Optional: true, 136 Optional: true,
137 Sensitive: true,
128 }, 138 },
129 139
130 "public": { 140 "public": {
@@ -175,10 +185,6 @@ func resourceStatusCakeTest() *schema.Resource {
175 "status_codes": { 185 "status_codes": {
176 Type: schema.TypeString, 186 Type: schema.TypeString,
177 Optional: true, 187 Optional: true,
178 Default: "204, 205, 206, 303, 400, 401, 403, 404, 405, 406, " +
179 "408, 410, 413, 444, 429, 494, 495, 496, 499, 500, 501, 502, 503, " +
180 "504, 505, 506, 507, 508, 509, 510, 511, 521, 522, 523, 524, 520, " +
181 "598, 599",
182 }, 188 },
183 189
184 "use_jar": { 190 "use_jar": {
@@ -222,7 +228,7 @@ func CreateTest(d *schema.ResourceData, meta interface{}) error {
222 UserAgent: d.Get("user_agent").(string), 228 UserAgent: d.Get("user_agent").(string),
223 Status: d.Get("status").(string), 229 Status: d.Get("status").(string),
224 Uptime: d.Get("uptime").(float64), 230 Uptime: d.Get("uptime").(float64),
225 NodeLocations: castInterfaceToSliceStrings(d.Get("node_locations")), 231 NodeLocations: castSetToSliceStrings(d.Get("node_locations").(*schema.Set).List()),
226 PingURL: d.Get("ping_url").(string), 232 PingURL: d.Get("ping_url").(string),
227 BasicUser: d.Get("basic_user").(string), 233 BasicUser: d.Get("basic_user").(string),
228 BasicPass: d.Get("basic_pass").(string), 234 BasicPass: d.Get("basic_pass").(string),
@@ -308,24 +314,19 @@ func ReadTest(d *schema.ResourceData, meta interface{}) error {
308 d.Set("port", testResp.Port) 314 d.Set("port", testResp.Port)
309 d.Set("trigger_rate", testResp.TriggerRate) 315 d.Set("trigger_rate", testResp.TriggerRate)
310 d.Set("custom_header", testResp.CustomHeader) 316 d.Set("custom_header", testResp.CustomHeader)
311 d.Set("user_agent", testResp.UserAgent)
312 d.Set("status", testResp.Status) 317 d.Set("status", testResp.Status)
313 d.Set("uptime", testResp.Uptime) 318 d.Set("uptime", testResp.Uptime)
314 if err := d.Set("node_locations", testResp.NodeLocations); err != nil { 319 if err := d.Set("node_locations", considerEmptyStringAsEmptyArray(testResp.NodeLocations)); err != nil {
315 return fmt.Errorf("[WARN] Error setting node locations: %s", err) 320 return fmt.Errorf("[WARN] Error setting node locations: %s", err)
316 } 321 }
317 d.Set("ping_url", testResp.PingURL)
318 d.Set("basic_user", testResp.BasicUser)
319 d.Set("basic_pass", testResp.BasicPass)
320 d.Set("public", testResp.Public)
321 d.Set("logo_image", testResp.LogoImage) 322 d.Set("logo_image", testResp.LogoImage)
322 d.Set("branding", testResp.Branding) 323 // Even after WebsiteHost is set, the API returns ""
323 d.Set("website_host", testResp.WebsiteHost) 324 // API docs aren't clear on usage will only override state if we get a non-empty value back
324 d.Set("virus", testResp.Virus) 325 if testResp.WebsiteHost != "" {
326 d.Set("website_host", testResp.WebsiteHost)
327 }
325 d.Set("find_string", testResp.FindString) 328 d.Set("find_string", testResp.FindString)
326 d.Set("do_not_find", testResp.DoNotFind) 329 d.Set("do_not_find", testResp.DoNotFind)
327 d.Set("real_browser", testResp.RealBrowser)
328 d.Set("test_tags", testResp.TestTags)
329 d.Set("status_codes", testResp.StatusCodes) 330 d.Set("status_codes", testResp.StatusCodes)
330 d.Set("use_jar", testResp.UseJar) 331 d.Set("use_jar", testResp.UseJar)
331 d.Set("post_raw", testResp.PostRaw) 332 d.Set("post_raw", testResp.PostRaw)
@@ -380,7 +381,7 @@ func getStatusCakeTestInput(d *schema.ResourceData) *statuscake.Test {
380 test.UserAgent = v.(string) 381 test.UserAgent = v.(string)
381 } 382 }
382 if v, ok := d.GetOk("node_locations"); ok { 383 if v, ok := d.GetOk("node_locations"); ok {
383 test.NodeLocations = castInterfaceToSliceStrings(v) 384 test.NodeLocations = castSetToSliceStrings(v.(*schema.Set).List())
384 } 385 }
385 if v, ok := d.GetOk("ping_url"); ok { 386 if v, ok := d.GetOk("ping_url"); ok {
386 test.PingURL = v.(string) 387 test.PingURL = v.(string)
diff --git a/statuscake/resource_statuscaketest_test.go b/statuscake/resource_statuscaketest_test.go
index b727e92..da3a349 100644
--- a/statuscake/resource_statuscaketest_test.go
+++ b/statuscake/resource_statuscaketest_test.go
@@ -19,7 +19,7 @@ func TestAccStatusCake_basic(t *testing.T) {
19 CheckDestroy: testAccTestCheckDestroy(&test), 19 CheckDestroy: testAccTestCheckDestroy(&test),
20 Steps: []resource.TestStep{ 20 Steps: []resource.TestStep{
21 { 21 {
22 Config: testAccTestConfig_basic, 22 Config: fmt.Sprintf(testAccTestConfig_basic, testContactGroupId),
23 Check: resource.ComposeTestCheckFunc( 23 Check: resource.ComposeTestCheckFunc(
24 testAccTestCheckExists("statuscake_test.google", &test), 24 testAccTestCheckExists("statuscake_test.google", &test),
25 testAccTestCheckAttributes("statuscake_test.google", &test), 25 testAccTestCheckAttributes("statuscake_test.google", &test),
@@ -38,7 +38,7 @@ func TestAccStatusCake_tcp(t *testing.T) {
38 CheckDestroy: testAccTestCheckDestroy(&test), 38 CheckDestroy: testAccTestCheckDestroy(&test),
39 Steps: []resource.TestStep{ 39 Steps: []resource.TestStep{
40 { 40 {
41 Config: testAccTestConfig_tcp, 41 Config: fmt.Sprintf(testAccTestConfig_tcp, testContactGroupId),
42 Check: resource.ComposeTestCheckFunc( 42 Check: resource.ComposeTestCheckFunc(
43 testAccTestCheckExists("statuscake_test.google", &test), 43 testAccTestCheckExists("statuscake_test.google", &test),
44 testAccTestCheckAttributes("statuscake_test.google", &test), 44 testAccTestCheckAttributes("statuscake_test.google", &test),
@@ -57,7 +57,7 @@ func TestAccStatusCake_withUpdate(t *testing.T) {
57 CheckDestroy: testAccTestCheckDestroy(&test), 57 CheckDestroy: testAccTestCheckDestroy(&test),
58 Steps: []resource.TestStep{ 58 Steps: []resource.TestStep{
59 { 59 {
60 Config: testAccTestConfig_basic, 60 Config: fmt.Sprintf(testAccTestConfig_basic, testContactGroupId),
61 Check: resource.ComposeTestCheckFunc( 61 Check: resource.ComposeTestCheckFunc(
62 testAccTestCheckExists("statuscake_test.google", &test), 62 testAccTestCheckExists("statuscake_test.google", &test),
63 ), 63 ),
@@ -76,12 +76,9 @@ func TestAccStatusCake_withUpdate(t *testing.T) {
76 resource.TestCheckResourceAttr("statuscake_test.google", "trigger_rate", "20"), 76 resource.TestCheckResourceAttr("statuscake_test.google", "trigger_rate", "20"),
77 resource.TestCheckResourceAttr("statuscake_test.google", "custom_header", "{ \"Content-Type\": \"application/x-www-form-urlencoded\" }"), 77 resource.TestCheckResourceAttr("statuscake_test.google", "custom_header", "{ \"Content-Type\": \"application/x-www-form-urlencoded\" }"),
78 resource.TestCheckResourceAttr("statuscake_test.google", "user_agent", "string9988"), 78 resource.TestCheckResourceAttr("statuscake_test.google", "user_agent", "string9988"),
79 resource.TestCheckResourceAttr("statuscake_test.google", "status", "string22117"), 79 resource.TestCheckResourceAttr("statuscake_test.google", "status", "Up"),
80 resource.TestCheckResourceAttr("statuscake_test.google", "uptime", "3498.27"), 80 resource.TestCheckResourceAttr("statuscake_test.google", "uptime", "0"),
81 resource.TestCheckResourceAttr("statuscake_test.google", "node_locations.#", "3"), 81 resource.TestCheckResourceAttr("statuscake_test.google", "node_locations.#", "3"),
82 resource.TestCheckResourceAttr("statuscake_test.google", "node_locations.0", "string16045"),
83 resource.TestCheckResourceAttr("statuscake_test.google", "node_locations.1", "string19741"),
84 resource.TestCheckResourceAttr("statuscake_test.google", "node_locations.2", "string12122"),
85 resource.TestCheckResourceAttr("statuscake_test.google", "ping_url", "string8410"), 82 resource.TestCheckResourceAttr("statuscake_test.google", "ping_url", "string8410"),
86 resource.TestCheckResourceAttr("statuscake_test.google", "basic_user", "string27052"), 83 resource.TestCheckResourceAttr("statuscake_test.google", "basic_user", "string27052"),
87 resource.TestCheckResourceAttr("statuscake_test.google", "basic_pass", "string5659"), 84 resource.TestCheckResourceAttr("statuscake_test.google", "basic_pass", "string5659"),
@@ -169,8 +166,6 @@ func testAccTestCheckAttributes(rn string, test *statuscake.Test) resource.TestC
169 err = check(key, value, strconv.Itoa(test.TriggerRate)) 166 err = check(key, value, strconv.Itoa(test.TriggerRate))
170 case "custom_header": 167 case "custom_header":
171 err = check(key, value, test.CustomHeader) 168 err = check(key, value, test.CustomHeader)
172 case "user_agent":
173 err = check(key, value, test.UserAgent)
174 case "node_locations": 169 case "node_locations":
175 for _, tv := range test.NodeLocations { 170 for _, tv := range test.NodeLocations {
176 err = check(key, value, tv) 171 err = check(key, value, tv)
@@ -178,30 +173,14 @@ func testAccTestCheckAttributes(rn string, test *statuscake.Test) resource.TestC
178 return err 173 return err
179 } 174 }
180 } 175 }
181 case "ping_url":
182 err = check(key, value, test.PingURL)
183 case "basic_user":
184 err = check(key, value, test.BasicUser)
185 case "basic_pass":
186 err = check(key, value, test.BasicPass)
187 case "public": 176 case "public":
188 err = check(key, value, strconv.Itoa(test.Public)) 177 err = check(key, value, strconv.Itoa(test.Public))
189 case "logo_image": 178 case "logo_image":
190 err = check(key, value, test.LogoImage) 179 err = check(key, value, test.LogoImage)
191 case "branding":
192 err = check(key, value, strconv.Itoa(test.Branding))
193 case "website_host":
194 err = check(key, value, test.WebsiteHost)
195 case "virus":
196 err = check(key, value, strconv.Itoa(test.Virus))
197 case "find_string": 180 case "find_string":
198 err = check(key, value, test.FindString) 181 err = check(key, value, test.FindString)
199 case "do_not_find": 182 case "do_not_find":
200 err = check(key, value, strconv.FormatBool(test.DoNotFind)) 183 err = check(key, value, strconv.FormatBool(test.DoNotFind))
201 case "real_browser":
202 err = check(key, value, strconv.Itoa(test.RealBrowser))
203 case "test_tags":
204 err = check(key, value, test.TestTags)
205 case "status_codes": 184 case "status_codes":
206 err = check(key, value, test.StatusCodes) 185 err = check(key, value, test.StatusCodes)
207 case "use_jar": 186 case "use_jar":
@@ -240,7 +219,7 @@ resource "statuscake_test" "google" {
240 test_type = "HTTP" 219 test_type = "HTTP"
241 check_rate = 300 220 check_rate = 300
242 timeout = 10 221 timeout = 10
243 contact_id = 43402 222 contact_id = %d
244 confirmations = 1 223 confirmations = 1
245 trigger_rate = 10 224 trigger_rate = 10
246} 225}
@@ -284,7 +263,7 @@ resource "statuscake_test" "google" {
284 test_type = "TCP" 263 test_type = "TCP"
285 check_rate = 300 264 check_rate = 300
286 timeout = 10 265 timeout = 10
287 contact_id = 43402 266 contact_id = %d
288 confirmations = 1 267 confirmations = 1
289 port = 80 268 port = 80
290} 269}