9 "github.com/DreamItGetIT/statuscake"
10 "github.com/hashicorp/terraform/helper/resource"
11 "github.com/hashicorp/terraform/terraform"
14 func TestAccStatusCakeSsl_basic(t *testing.T) {
15 var ssl statuscake.Ssl
17 resource.Test(t, resource.TestCase{
18 PreCheck: func() { testAccPreCheck(t) },
19 Providers: testAccProviders,
20 CheckDestroy: testAccSslCheckDestroy(&ssl),
21 Steps: []resource.TestStep{
23 Config: interpolateTerraformTemplateSsl(testAccSslConfig_basic),
24 Check: resource.ComposeTestCheckFunc(
25 testAccSslCheckExists("statuscake_ssl.exemple", &ssl),
26 testAccSslCheckAttributes("statuscake_ssl.exemple", &ssl),
33 func TestAccStatusCakeSsl_withUpdate(t *testing.T) {
34 var ssl statuscake.Ssl
36 resource.Test(t, resource.TestCase{
37 PreCheck: func() { testAccPreCheck(t) },
38 Providers: testAccProviders,
39 CheckDestroy: testAccSslCheckDestroy(&ssl),
40 Steps: []resource.TestStep{
42 Config: interpolateTerraformTemplateSsl(testAccSslConfig_basic),
43 Check: resource.ComposeTestCheckFunc(
44 testAccSslCheckExists("statuscake_ssl.exemple", &ssl),
45 testAccSslCheckAttributes("statuscake_ssl.exemple", &ssl),
50 Config: testAccSslConfig_update,
51 Check: resource.ComposeTestCheckFunc(
52 testAccSslCheckExists("statuscake_ssl.exemple", &ssl),
53 testAccSslCheckAttributes("statuscake_ssl.exemple", &ssl),
54 resource.TestCheckResourceAttr("statuscake_ssl.exemple", "check_rate", "86400"),
55 resource.TestCheckResourceAttr("statuscake_ssl.exemple", "domain", "https://www.exemple.com"),
56 resource.TestCheckResourceAttr("statuscake_ssl.exemple", "contact_group_c", ""),
57 resource.TestCheckResourceAttr("statuscake_ssl.exemple", "alert_at", "18,8,2019"),
58 resource.TestCheckResourceAttr("statuscake_ssl.exemple", "alert_reminder", "false"),
59 resource.TestCheckResourceAttr("statuscake_ssl.exemple", "alert_expiry", "false"),
60 resource.TestCheckResourceAttr("statuscake_ssl.exemple", "alert_broken", "true"),
61 resource.TestCheckResourceAttr("statuscake_ssl.exemple", "alert_mixed", "false"),
68 func testAccSslCheckExists(rn string, ssl *statuscake.Ssl) resource.TestCheckFunc {
69 return func(s *terraform.State) error {
70 rs, ok := s.RootModule().Resources[rn]
72 return fmt.Errorf("resource not found: %s", rn)
75 if rs.Primary.ID == "" {
76 return fmt.Errorf("SslID not set")
79 client := testAccProvider.Meta().(*statuscake.Client)
80 sslId := rs.Primary.ID
82 gotSsl, err := statuscake.NewSsls(client).Detail(sslId)
84 return fmt.Errorf("error getting ssl: %s", err)
93 func testAccSslCheckAttributes(rn string, ssl *statuscake.Ssl) resource.TestCheckFunc {
94 return func(s *terraform.State) error {
95 attrs := s.RootModule().Resources[rn].Primary.Attributes
97 check := func(key, stateValue, sslValue string) error {
98 if sslValue != stateValue {
99 return fmt.Errorf("different values for %s in state (%s) and in statuscake (%s)",
100 key, stateValue, sslValue)
105 for key, value := range attrs {
110 err = check(key, value, ssl.Domain)
111 case "contact_groups_c":
112 err = check(key, value, ssl.ContactGroupsC)
114 err = check(key, value, strconv.Itoa(ssl.Checkrate))
116 err = check(key, value, ssl.AlertAt)
117 case "alert_reminder":
118 err = check(key, value, strconv.FormatBool(ssl.AlertReminder))
120 err = check(key, value, strconv.FormatBool(ssl.AlertExpiry))
122 err = check(key, value, strconv.FormatBool(ssl.AlertBroken))
124 err = check(key, value, strconv.FormatBool(ssl.AlertMixed))
126 err = check(key, value, strconv.FormatBool(ssl.Paused))
128 err = check(key, value, ssl.IssuerCn)
129 case "contact_groups":
130 for _, tv := range ssl.ContactGroups {
131 err = check(key, value, tv)
137 err = check(key, value, ssl.CertScore)
139 err = check(key, value, ssl.CertStatus)
141 err = check(key, value, ssl.Cipher)
142 case "valid_from_utc":
143 err = check(key, value, ssl.ValidFromUtc)
144 case "valid_until_utc":
145 err = check(key, value, ssl.ValidUntilUtc)
146 case "last_reminder":
147 err = check(key, value, strconv.Itoa(ssl.LastReminder))
148 case "last_updated_utc":
149 err = check(key, value, ssl.LastUpdatedUtc)
151 for _, tv := range ssl.Flags {
152 err = check(key, value, strconv.FormatBool(tv))
158 case "mixed_content":
159 for _, tv := range ssl.MixedContent {
160 for _, tv2 := range tv {
161 err = check(key, value, tv2)
176 func testAccSslCheckDestroy(ssl *statuscake.Ssl) resource.TestCheckFunc {
177 return func(s *terraform.State) error {
178 client := testAccProvider.Meta().(*statuscake.Client)
179 _, err := statuscake.NewSsls(client).Detail(ssl.ID)
181 return fmt.Errorf("ssl still exists")
188 func interpolateTerraformTemplateSsl(template string) string {
189 sslContactGroupId := "43402"
191 if v := os.Getenv("STATUSCAKE_SSL_CONTACT_GROUP_ID"); v != "" {
192 sslContactGroupId = v
195 return fmt.Sprintf(template, sslContactGroupId)
198 const testAccSslConfig_basic = `
199 resource "statuscake_ssl" "exemple" {
200 domain = "https://www.exemple.com"
201 contact_groups_c = "%s"
203 alert_at = "18,7,2019"
204 alert_reminder = true
211 const testAccSslConfig_update = `
212 resource "statuscake_ssl" "exemple" {
213 domain = "https://www.exemple.com"
214 contact_groups_c = ""
216 alert_at = "18,8,2019"
217 alert_reminder = false