]>
Commit | Line | Data |
---|---|---|
b8f05dfc | 1 | package statuscake |
2 | ||
3 | import ( | |
4 | "fmt" | |
4eeeab64 | 5 | "strconv" |
b8f05dfc | 6 | "testing" |
7 | ||
8 | "github.com/DreamItGetIT/statuscake" | |
9 | "github.com/hashicorp/terraform/helper/resource" | |
10 | "github.com/hashicorp/terraform/terraform" | |
11 | ) | |
12 | ||
13 | func TestAccStatusCake_basic(t *testing.T) { | |
14 | var test statuscake.Test | |
15 | ||
16 | resource.Test(t, resource.TestCase{ | |
17 | PreCheck: func() { testAccPreCheck(t) }, | |
18 | Providers: testAccProviders, | |
19 | CheckDestroy: testAccTestCheckDestroy(&test), | |
20 | Steps: []resource.TestStep{ | |
90db3fb0 | 21 | { |
aa4f9726 | 22 | Config: fmt.Sprintf(testAccTestConfig_basic, testContactGroupId), |
b8f05dfc | 23 | Check: resource.ComposeTestCheckFunc( |
24 | testAccTestCheckExists("statuscake_test.google", &test), | |
c0701076 | 25 | testAccTestCheckAttributes("statuscake_test.google", &test), |
b8f05dfc | 26 | ), |
27 | }, | |
28 | }, | |
29 | }) | |
30 | } | |
31 | ||
90db3fb0 PS |
32 | func TestAccStatusCake_tcp(t *testing.T) { |
33 | var test statuscake.Test | |
34 | ||
35 | resource.Test(t, resource.TestCase{ | |
36 | PreCheck: func() { testAccPreCheck(t) }, | |
37 | Providers: testAccProviders, | |
38 | CheckDestroy: testAccTestCheckDestroy(&test), | |
39 | Steps: []resource.TestStep{ | |
40 | { | |
aa4f9726 | 41 | Config: fmt.Sprintf(testAccTestConfig_tcp, testContactGroupId), |
90db3fb0 PS |
42 | Check: resource.ComposeTestCheckFunc( |
43 | testAccTestCheckExists("statuscake_test.google", &test), | |
44 | testAccTestCheckAttributes("statuscake_test.google", &test), | |
45 | ), | |
46 | }, | |
47 | }, | |
48 | }) | |
49 | } | |
50 | ||
4eeeab64 | 51 | func TestAccStatusCake_withUpdate(t *testing.T) { |
52 | var test statuscake.Test | |
53 | ||
54 | resource.Test(t, resource.TestCase{ | |
55 | PreCheck: func() { testAccPreCheck(t) }, | |
56 | Providers: testAccProviders, | |
57 | CheckDestroy: testAccTestCheckDestroy(&test), | |
58 | Steps: []resource.TestStep{ | |
90db3fb0 | 59 | { |
aa4f9726 | 60 | Config: fmt.Sprintf(testAccTestConfig_basic, testContactGroupId), |
4eeeab64 | 61 | Check: resource.ComposeTestCheckFunc( |
62 | testAccTestCheckExists("statuscake_test.google", &test), | |
63 | ), | |
64 | }, | |
65 | ||
90db3fb0 | 66 | { |
4eeeab64 | 67 | Config: testAccTestConfig_update, |
68 | Check: resource.ComposeTestCheckFunc( | |
69 | testAccTestCheckExists("statuscake_test.google", &test), | |
c0701076 | 70 | testAccTestCheckAttributes("statuscake_test.google", &test), |
4eeeab64 | 71 | resource.TestCheckResourceAttr("statuscake_test.google", "check_rate", "500"), |
72 | resource.TestCheckResourceAttr("statuscake_test.google", "paused", "true"), | |
6ad7af97 | 73 | resource.TestCheckResourceAttr("statuscake_test.google", "timeout", "40"), |
c0701076 | 74 | resource.TestCheckResourceAttr("statuscake_test.google", "contact_id", "0"), |
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"), | |
93 | resource.TestCheckResourceAttr("statuscake_test.google", "test_tags", "string8191"), | |
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)) | |
161 | case "contact_id": | |
c9458806 | 162 | err = check(key, value, strconv.Itoa(test.ContactID)) |
b5815405 SC |
163 | case "confirmations": |
164 | err = check(key, value, strconv.Itoa(test.Confirmation)) | |
0e962b8e RG |
165 | case "trigger_rate": |
166 | err = check(key, value, strconv.Itoa(test.TriggerRate)) | |
754f1420 AG |
167 | case "custom_header": |
168 | err = check(key, value, test.CustomHeader) | |
754f1420 AG |
169 | case "node_locations": |
170 | for _, tv := range test.NodeLocations { | |
171 | err = check(key, value, tv) | |
172 | if err != nil { | |
173 | return err | |
174 | } | |
175 | } | |
754f1420 AG |
176 | case "public": |
177 | err = check(key, value, strconv.Itoa(test.Public)) | |
178 | case "logo_image": | |
179 | err = check(key, value, test.LogoImage) | |
754f1420 AG |
180 | case "find_string": |
181 | err = check(key, value, test.FindString) | |
182 | case "do_not_find": | |
183 | err = check(key, value, strconv.FormatBool(test.DoNotFind)) | |
754f1420 AG |
184 | case "status_codes": |
185 | err = check(key, value, test.StatusCodes) | |
186 | case "use_jar": | |
187 | err = check(key, value, strconv.Itoa(test.UseJar)) | |
188 | case "post_raw": | |
189 | err = check(key, value, test.PostRaw) | |
190 | case "final_endpoint": | |
191 | err = check(key, value, test.FinalEndpoint) | |
192 | case "follow_redirect": | |
193 | err = check(key, value, strconv.FormatBool(test.FollowRedirect)) | |
c0701076 | 194 | } |
c0701076 RG |
195 | if err != nil { |
196 | return err | |
197 | } | |
198 | } | |
199 | return nil | |
200 | } | |
201 | } | |
202 | ||
4eeeab64 | 203 | func testAccTestCheckDestroy(test *statuscake.Test) resource.TestCheckFunc { |
204 | return func(s *terraform.State) error { | |
205 | client := testAccProvider.Meta().(*statuscake.Client) | |
206 | err := client.Tests().Delete(test.TestID) | |
207 | if err == nil { | |
208 | return fmt.Errorf("test still exists") | |
209 | } | |
210 | ||
211 | return nil | |
212 | } | |
b8f05dfc | 213 | } |
214 | ||
215 | const testAccTestConfig_basic = ` | |
216 | resource "statuscake_test" "google" { | |
51688607 | 217 | website_name = "google.com" |
218 | website_url = "www.google.com" | |
219 | test_type = "HTTP" | |
220 | check_rate = 300 | |
6ad7af97 | 221 | timeout = 10 |
aa4f9726 | 222 | contact_id = %d |
b5815405 | 223 | confirmations = 1 |
0e962b8e | 224 | trigger_rate = 10 |
b8f05dfc | 225 | } |
226 | ` | |
4eeeab64 | 227 | |
228 | const testAccTestConfig_update = ` | |
229 | resource "statuscake_test" "google" { | |
51688607 | 230 | website_name = "google.com" |
231 | website_url = "www.google.com" | |
232 | test_type = "HTTP" | |
233 | check_rate = 500 | |
234 | paused = true | |
0e962b8e | 235 | trigger_rate = 20 |
754f1420 AG |
236 | custom_header = "{ \"Content-Type\": \"application/x-www-form-urlencoded\" }" |
237 | user_agent = "string9988" | |
754f1420 AG |
238 | node_locations = [ "string16045", "string19741", "string12122" ] |
239 | ping_url = "string8410" | |
240 | basic_user = "string27052" | |
241 | basic_pass = "string5659" | |
242 | public = 0 | |
243 | logo_image = "string21087" | |
244 | branding = 25875 | |
245 | website_host = "string32368" | |
246 | virus = 1 | |
247 | find_string = "string15212" | |
248 | do_not_find = false | |
249 | real_browser = 1 | |
250 | test_tags = "string8191" | |
251 | status_codes = "string23065" | |
252 | use_jar = 1 | |
253 | post_raw = "string32096" | |
254 | final_endpoint = "string10781" | |
255 | follow_redirect = true | |
4eeeab64 | 256 | } |
257 | ` | |
90db3fb0 PS |
258 | |
259 | const testAccTestConfig_tcp = ` | |
260 | resource "statuscake_test" "google" { | |
261 | website_name = "google.com" | |
262 | website_url = "www.google.com" | |
263 | test_type = "TCP" | |
264 | check_rate = 300 | |
265 | timeout = 10 | |
aa4f9726 | 266 | contact_id = %d |
90db3fb0 PS |
267 | confirmations = 1 |
268 | port = 80 | |
269 | } | |
270 | ` |