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