]>
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 | { |
b8f05dfc | 22 | Config: testAccTestConfig_basic, |
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 | { | |
41 | Config: testAccTestConfig_tcp, | |
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 | { |
4eeeab64 | 60 | Config: testAccTestConfig_basic, |
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"), |
4eeeab64 | 77 | ), |
78 | }, | |
79 | }, | |
80 | }) | |
81 | } | |
82 | ||
83 | func testAccTestCheckExists(rn string, test *statuscake.Test) resource.TestCheckFunc { | |
b8f05dfc | 84 | return func(s *terraform.State) error { |
85 | rs, ok := s.RootModule().Resources[rn] | |
86 | if !ok { | |
87 | return fmt.Errorf("resource not found: %s", rn) | |
88 | } | |
89 | ||
90 | if rs.Primary.ID == "" { | |
91 | return fmt.Errorf("TestID not set") | |
92 | } | |
93 | ||
4eeeab64 | 94 | client := testAccProvider.Meta().(*statuscake.Client) |
95 | testId, parseErr := strconv.Atoi(rs.Primary.ID) | |
96 | if parseErr != nil { | |
97 | return fmt.Errorf("error in statuscake test CheckExists: %s", parseErr) | |
98 | } | |
99 | ||
100 | gotTest, err := client.Tests().Detail(testId) | |
101 | if err != nil { | |
c0701076 | 102 | return fmt.Errorf("error getting test: %s", err) |
4eeeab64 | 103 | } |
104 | ||
105 | *test = *gotTest | |
b8f05dfc | 106 | |
107 | return nil | |
108 | } | |
109 | } | |
110 | ||
c0701076 RG |
111 | func testAccTestCheckAttributes(rn string, test *statuscake.Test) resource.TestCheckFunc { |
112 | return func(s *terraform.State) error { | |
113 | attrs := s.RootModule().Resources[rn].Primary.Attributes | |
114 | ||
115 | check := func(key, stateValue, testValue string) error { | |
116 | if testValue != stateValue { | |
117 | return fmt.Errorf("different values for %s in state (%s) and in statuscake (%s)", | |
118 | key, stateValue, testValue) | |
119 | } | |
120 | return nil | |
121 | } | |
122 | ||
123 | for key, value := range attrs { | |
124 | var err error | |
125 | ||
126 | switch key { | |
127 | case "website_name": | |
128 | err = check(key, value, test.WebsiteName) | |
129 | case "website_url": | |
130 | err = check(key, value, test.WebsiteURL) | |
131 | case "check_rate": | |
132 | err = check(key, value, strconv.Itoa(test.CheckRate)) | |
133 | case "test_type": | |
134 | err = check(key, value, test.TestType) | |
135 | case "paused": | |
136 | err = check(key, value, strconv.FormatBool(test.Paused)) | |
137 | case "timeout": | |
138 | err = check(key, value, strconv.Itoa(test.Timeout)) | |
139 | case "contact_id": | |
140 | err = check(key, value, strconv.Itoa(test.ContactID)) | |
b5815405 SC |
141 | case "confirmations": |
142 | err = check(key, value, strconv.Itoa(test.Confirmation)) | |
0e962b8e RG |
143 | case "trigger_rate": |
144 | err = check(key, value, strconv.Itoa(test.TriggerRate)) | |
c0701076 RG |
145 | } |
146 | ||
147 | if err != nil { | |
148 | return err | |
149 | } | |
150 | } | |
151 | return nil | |
152 | } | |
153 | } | |
154 | ||
4eeeab64 | 155 | func testAccTestCheckDestroy(test *statuscake.Test) resource.TestCheckFunc { |
156 | return func(s *terraform.State) error { | |
157 | client := testAccProvider.Meta().(*statuscake.Client) | |
158 | err := client.Tests().Delete(test.TestID) | |
159 | if err == nil { | |
160 | return fmt.Errorf("test still exists") | |
161 | } | |
162 | ||
163 | return nil | |
164 | } | |
b8f05dfc | 165 | } |
166 | ||
167 | const testAccTestConfig_basic = ` | |
168 | resource "statuscake_test" "google" { | |
51688607 | 169 | website_name = "google.com" |
170 | website_url = "www.google.com" | |
171 | test_type = "HTTP" | |
172 | check_rate = 300 | |
6ad7af97 | 173 | timeout = 10 |
e7c3fa56 | 174 | contact_id = 43402 |
b5815405 | 175 | confirmations = 1 |
0e962b8e | 176 | trigger_rate = 10 |
b8f05dfc | 177 | } |
178 | ` | |
4eeeab64 | 179 | |
180 | const testAccTestConfig_update = ` | |
181 | resource "statuscake_test" "google" { | |
51688607 | 182 | website_name = "google.com" |
183 | website_url = "www.google.com" | |
184 | test_type = "HTTP" | |
185 | check_rate = 500 | |
186 | paused = true | |
0e962b8e | 187 | trigger_rate = 20 |
4eeeab64 | 188 | } |
189 | ` | |
90db3fb0 PS |
190 | |
191 | const testAccTestConfig_tcp = ` | |
192 | resource "statuscake_test" "google" { | |
193 | website_name = "google.com" | |
194 | website_url = "www.google.com" | |
195 | test_type = "TCP" | |
196 | check_rate = 300 | |
197 | timeout = 10 | |
e7c3fa56 | 198 | contact_id = 43402 |
90db3fb0 PS |
199 | confirmations = 1 |
200 | port = 80 | |
201 | } | |
202 | ` |