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