]>
Commit | Line | Data |
---|---|---|
b8f05dfc | 1 | package statuscake |
2 | ||
3 | import ( | |
4 | "fmt" | |
7d968313 | 5 | "os" |
4eeeab64 | 6 | "strconv" |
b8f05dfc | 7 | "testing" |
8 | ||
9 | "github.com/DreamItGetIT/statuscake" | |
10 | "github.com/hashicorp/terraform/helper/resource" | |
11 | "github.com/hashicorp/terraform/terraform" | |
12 | ) | |
13 | ||
14 | func TestAccStatusCake_basic(t *testing.T) { | |
15 | var test statuscake.Test | |
16 | ||
17 | resource.Test(t, resource.TestCase{ | |
18 | PreCheck: func() { testAccPreCheck(t) }, | |
19 | Providers: testAccProviders, | |
20 | CheckDestroy: testAccTestCheckDestroy(&test), | |
21 | Steps: []resource.TestStep{ | |
90db3fb0 | 22 | { |
7d968313 | 23 | Config: interpolateTerraformTemplate(testAccTestConfig_basic), |
b8f05dfc | 24 | Check: resource.ComposeTestCheckFunc( |
25 | testAccTestCheckExists("statuscake_test.google", &test), | |
c0701076 | 26 | testAccTestCheckAttributes("statuscake_test.google", &test), |
b8f05dfc | 27 | ), |
28 | }, | |
29 | }, | |
30 | }) | |
31 | } | |
32 | ||
70c40d15 JCA |
33 | func TestAccStatusCake_basic_deprecated_contact_ID(t *testing.T) { |
34 | var test statuscake.Test | |
35 | ||
36 | resource.Test(t, resource.TestCase{ | |
37 | PreCheck: func() { testAccPreCheck(t) }, | |
38 | Providers: testAccProviders, | |
39 | CheckDestroy: testAccTestCheckDestroy(&test), | |
40 | Steps: []resource.TestStep{ | |
41 | { | |
42 | Config: interpolateTerraformTemplate(testAccTestConfig_deprecated), | |
43 | Check: resource.ComposeTestCheckFunc( | |
44 | testAccTestCheckExists("statuscake_test.google", &test), | |
45 | testAccTestCheckAttributes("statuscake_test.google", &test), | |
46 | ), | |
47 | }, | |
48 | }, | |
49 | }) | |
50 | } | |
51 | ||
90db3fb0 PS |
52 | func TestAccStatusCake_tcp(t *testing.T) { |
53 | var test statuscake.Test | |
54 | ||
55 | resource.Test(t, resource.TestCase{ | |
56 | PreCheck: func() { testAccPreCheck(t) }, | |
57 | Providers: testAccProviders, | |
58 | CheckDestroy: testAccTestCheckDestroy(&test), | |
59 | Steps: []resource.TestStep{ | |
60 | { | |
7d968313 | 61 | Config: interpolateTerraformTemplate(testAccTestConfig_tcp), |
90db3fb0 PS |
62 | Check: resource.ComposeTestCheckFunc( |
63 | testAccTestCheckExists("statuscake_test.google", &test), | |
64 | testAccTestCheckAttributes("statuscake_test.google", &test), | |
65 | ), | |
66 | }, | |
67 | }, | |
68 | }) | |
69 | } | |
70 | ||
4eeeab64 | 71 | func TestAccStatusCake_withUpdate(t *testing.T) { |
72 | var test statuscake.Test | |
73 | ||
74 | resource.Test(t, resource.TestCase{ | |
75 | PreCheck: func() { testAccPreCheck(t) }, | |
76 | Providers: testAccProviders, | |
77 | CheckDestroy: testAccTestCheckDestroy(&test), | |
78 | Steps: []resource.TestStep{ | |
90db3fb0 | 79 | { |
7d968313 | 80 | Config: interpolateTerraformTemplate(testAccTestConfig_basic), |
4eeeab64 | 81 | Check: resource.ComposeTestCheckFunc( |
82 | testAccTestCheckExists("statuscake_test.google", &test), | |
83 | ), | |
84 | }, | |
85 | ||
90db3fb0 | 86 | { |
4eeeab64 | 87 | Config: testAccTestConfig_update, |
88 | Check: resource.ComposeTestCheckFunc( | |
89 | testAccTestCheckExists("statuscake_test.google", &test), | |
c0701076 | 90 | testAccTestCheckAttributes("statuscake_test.google", &test), |
4eeeab64 | 91 | resource.TestCheckResourceAttr("statuscake_test.google", "check_rate", "500"), |
92 | resource.TestCheckResourceAttr("statuscake_test.google", "paused", "true"), | |
6ad7af97 | 93 | resource.TestCheckResourceAttr("statuscake_test.google", "timeout", "40"), |
b5815405 | 94 | resource.TestCheckResourceAttr("statuscake_test.google", "confirmations", "0"), |
0e962b8e | 95 | resource.TestCheckResourceAttr("statuscake_test.google", "trigger_rate", "20"), |
754f1420 AG |
96 | resource.TestCheckResourceAttr("statuscake_test.google", "custom_header", "{ \"Content-Type\": \"application/x-www-form-urlencoded\" }"), |
97 | resource.TestCheckResourceAttr("statuscake_test.google", "user_agent", "string9988"), | |
d01e3cca MS |
98 | resource.TestCheckResourceAttr("statuscake_test.google", "status", "Up"), |
99 | resource.TestCheckResourceAttr("statuscake_test.google", "uptime", "0"), | |
754f1420 | 100 | resource.TestCheckResourceAttr("statuscake_test.google", "node_locations.#", "3"), |
754f1420 AG |
101 | resource.TestCheckResourceAttr("statuscake_test.google", "ping_url", "string8410"), |
102 | resource.TestCheckResourceAttr("statuscake_test.google", "basic_user", "string27052"), | |
103 | resource.TestCheckResourceAttr("statuscake_test.google", "basic_pass", "string5659"), | |
104 | resource.TestCheckResourceAttr("statuscake_test.google", "public", "0"), | |
105 | resource.TestCheckResourceAttr("statuscake_test.google", "logo_image", "string21087"), | |
106 | resource.TestCheckResourceAttr("statuscake_test.google", "branding", "25875"), | |
107 | resource.TestCheckResourceAttr("statuscake_test.google", "website_host", "string32368"), | |
108 | resource.TestCheckResourceAttr("statuscake_test.google", "virus", "1"), | |
109 | resource.TestCheckResourceAttr("statuscake_test.google", "find_string", "string15212"), | |
110 | resource.TestCheckResourceAttr("statuscake_test.google", "do_not_find", "false"), | |
111 | resource.TestCheckResourceAttr("statuscake_test.google", "real_browser", "1"), | |
bc2bde6b | 112 | resource.TestCheckResourceAttr("statuscake_test.google", "test_tags.#", "1"), |
754f1420 AG |
113 | resource.TestCheckResourceAttr("statuscake_test.google", "status_codes", "string23065"), |
114 | resource.TestCheckResourceAttr("statuscake_test.google", "use_jar", "1"), | |
115 | resource.TestCheckResourceAttr("statuscake_test.google", "post_raw", "string32096"), | |
116 | resource.TestCheckResourceAttr("statuscake_test.google", "final_endpoint", "string10781"), | |
31ca64bb | 117 | resource.TestCheckResourceAttr("statuscake_test.google", "enable_ssl_alert", "false"), |
754f1420 | 118 | resource.TestCheckResourceAttr("statuscake_test.google", "follow_redirect", "true"), |
4eeeab64 | 119 | ), |
120 | }, | |
121 | }, | |
122 | }) | |
123 | } | |
124 | ||
125 | func testAccTestCheckExists(rn string, test *statuscake.Test) resource.TestCheckFunc { | |
b8f05dfc | 126 | return func(s *terraform.State) error { |
127 | rs, ok := s.RootModule().Resources[rn] | |
128 | if !ok { | |
129 | return fmt.Errorf("resource not found: %s", rn) | |
130 | } | |
131 | ||
132 | if rs.Primary.ID == "" { | |
133 | return fmt.Errorf("TestID not set") | |
134 | } | |
135 | ||
4eeeab64 | 136 | client := testAccProvider.Meta().(*statuscake.Client) |
137 | testId, parseErr := strconv.Atoi(rs.Primary.ID) | |
138 | if parseErr != nil { | |
139 | return fmt.Errorf("error in statuscake test CheckExists: %s", parseErr) | |
140 | } | |
141 | ||
142 | gotTest, err := client.Tests().Detail(testId) | |
143 | if err != nil { | |
c0701076 | 144 | return fmt.Errorf("error getting test: %s", err) |
4eeeab64 | 145 | } |
146 | ||
147 | *test = *gotTest | |
b8f05dfc | 148 | |
149 | return nil | |
150 | } | |
151 | } | |
152 | ||
c0701076 RG |
153 | func testAccTestCheckAttributes(rn string, test *statuscake.Test) resource.TestCheckFunc { |
154 | return func(s *terraform.State) error { | |
155 | attrs := s.RootModule().Resources[rn].Primary.Attributes | |
156 | ||
157 | check := func(key, stateValue, testValue string) error { | |
158 | if testValue != stateValue { | |
159 | return fmt.Errorf("different values for %s in state (%s) and in statuscake (%s)", | |
160 | key, stateValue, testValue) | |
161 | } | |
162 | return nil | |
163 | } | |
164 | ||
165 | for key, value := range attrs { | |
166 | var err error | |
167 | ||
168 | switch key { | |
169 | case "website_name": | |
170 | err = check(key, value, test.WebsiteName) | |
171 | case "website_url": | |
172 | err = check(key, value, test.WebsiteURL) | |
173 | case "check_rate": | |
174 | err = check(key, value, strconv.Itoa(test.CheckRate)) | |
175 | case "test_type": | |
176 | err = check(key, value, test.TestType) | |
177 | case "paused": | |
178 | err = check(key, value, strconv.FormatBool(test.Paused)) | |
179 | case "timeout": | |
180 | err = check(key, value, strconv.Itoa(test.Timeout)) | |
4efdab41 MS |
181 | case "contact_group": |
182 | for _, tv := range test.ContactGroup { | |
183 | err = check(key, value, tv) | |
184 | if err != nil { | |
185 | return err | |
186 | } | |
187 | } | |
b5815405 SC |
188 | case "confirmations": |
189 | err = check(key, value, strconv.Itoa(test.Confirmation)) | |
0e962b8e RG |
190 | case "trigger_rate": |
191 | err = check(key, value, strconv.Itoa(test.TriggerRate)) | |
754f1420 AG |
192 | case "custom_header": |
193 | err = check(key, value, test.CustomHeader) | |
754f1420 AG |
194 | case "node_locations": |
195 | for _, tv := range test.NodeLocations { | |
196 | err = check(key, value, tv) | |
197 | if err != nil { | |
198 | return err | |
199 | } | |
200 | } | |
754f1420 AG |
201 | case "public": |
202 | err = check(key, value, strconv.Itoa(test.Public)) | |
203 | case "logo_image": | |
204 | err = check(key, value, test.LogoImage) | |
754f1420 AG |
205 | case "find_string": |
206 | err = check(key, value, test.FindString) | |
207 | case "do_not_find": | |
208 | err = check(key, value, strconv.FormatBool(test.DoNotFind)) | |
754f1420 AG |
209 | case "status_codes": |
210 | err = check(key, value, test.StatusCodes) | |
211 | case "use_jar": | |
212 | err = check(key, value, strconv.Itoa(test.UseJar)) | |
213 | case "post_raw": | |
214 | err = check(key, value, test.PostRaw) | |
215 | case "final_endpoint": | |
216 | err = check(key, value, test.FinalEndpoint) | |
31ca64bb IS |
217 | case "enable_ssl_alert": |
218 | err = check(key, value, strconv.FormatBool(test.EnableSSLAlert)) | |
754f1420 AG |
219 | case "follow_redirect": |
220 | err = check(key, value, strconv.FormatBool(test.FollowRedirect)) | |
c0701076 | 221 | } |
c0701076 RG |
222 | if err != nil { |
223 | return err | |
224 | } | |
225 | } | |
226 | return nil | |
227 | } | |
228 | } | |
229 | ||
4eeeab64 | 230 | func testAccTestCheckDestroy(test *statuscake.Test) resource.TestCheckFunc { |
231 | return func(s *terraform.State) error { | |
232 | client := testAccProvider.Meta().(*statuscake.Client) | |
233 | err := client.Tests().Delete(test.TestID) | |
234 | if err == nil { | |
235 | return fmt.Errorf("test still exists") | |
236 | } | |
237 | ||
238 | return nil | |
239 | } | |
b8f05dfc | 240 | } |
241 | ||
7d968313 | 242 | func interpolateTerraformTemplate(template string) string { |
4efdab41 | 243 | testContactGroupId := "43402" |
7d968313 MS |
244 | |
245 | if v := os.Getenv("STATUSCAKE_TEST_CONTACT_GROUP_ID"); v != "" { | |
4efdab41 | 246 | testContactGroupId = v |
7d968313 MS |
247 | } |
248 | ||
249 | return fmt.Sprintf(template, testContactGroupId) | |
250 | } | |
251 | ||
b8f05dfc | 252 | const testAccTestConfig_basic = ` |
253 | resource "statuscake_test" "google" { | |
51688607 | 254 | website_name = "google.com" |
255 | website_url = "www.google.com" | |
256 | test_type = "HTTP" | |
257 | check_rate = 300 | |
6ad7af97 | 258 | timeout = 10 |
4efdab41 | 259 | contact_group = ["%s"] |
b5815405 | 260 | confirmations = 1 |
0e962b8e | 261 | trigger_rate = 10 |
b8f05dfc | 262 | } |
263 | ` | |
70c40d15 JCA |
264 | const testAccTestConfig_deprecated = ` |
265 | resource "statuscake_test" "google" { | |
266 | website_name = "google.com" | |
267 | website_url = "www.google.com" | |
268 | test_type = "HTTP" | |
269 | check_rate = 300 | |
270 | timeout = 10 | |
271 | contact_id = %s | |
272 | confirmations = 1 | |
273 | trigger_rate = 10 | |
274 | } | |
275 | ` | |
4eeeab64 | 276 | const testAccTestConfig_update = ` |
277 | resource "statuscake_test" "google" { | |
51688607 | 278 | website_name = "google.com" |
279 | website_url = "www.google.com" | |
280 | test_type = "HTTP" | |
281 | check_rate = 500 | |
282 | paused = true | |
0e962b8e | 283 | trigger_rate = 20 |
754f1420 AG |
284 | custom_header = "{ \"Content-Type\": \"application/x-www-form-urlencoded\" }" |
285 | user_agent = "string9988" | |
754f1420 AG |
286 | node_locations = [ "string16045", "string19741", "string12122" ] |
287 | ping_url = "string8410" | |
288 | basic_user = "string27052" | |
289 | basic_pass = "string5659" | |
290 | public = 0 | |
291 | logo_image = "string21087" | |
292 | branding = 25875 | |
293 | website_host = "string32368" | |
294 | virus = 1 | |
295 | find_string = "string15212" | |
296 | do_not_find = false | |
297 | real_browser = 1 | |
bc2bde6b | 298 | test_tags = ["string8191"] |
754f1420 AG |
299 | status_codes = "string23065" |
300 | use_jar = 1 | |
301 | post_raw = "string32096" | |
302 | final_endpoint = "string10781" | |
31ca64bb | 303 | enable_ssl_alert = false |
754f1420 | 304 | follow_redirect = true |
4eeeab64 | 305 | } |
306 | ` | |
90db3fb0 PS |
307 | |
308 | const testAccTestConfig_tcp = ` | |
309 | resource "statuscake_test" "google" { | |
310 | website_name = "google.com" | |
311 | website_url = "www.google.com" | |
312 | test_type = "TCP" | |
313 | check_rate = 300 | |
314 | timeout = 10 | |
4efdab41 | 315 | contact_group = ["%s"] |
90db3fb0 PS |
316 | confirmations = 1 |
317 | port = 80 | |
318 | } | |
319 | ` |