]> git.immae.eu Git - github/fretlink/terraform-provider-statuscake.git/blobdiff - statuscake/resource_statuscaketest_test.go
Transfer statuscake provider
[github/fretlink/terraform-provider-statuscake.git] / statuscake / resource_statuscaketest_test.go
diff --git a/statuscake/resource_statuscaketest_test.go b/statuscake/resource_statuscaketest_test.go
new file mode 100644 (file)
index 0000000..f07fcc5
--- /dev/null
@@ -0,0 +1,202 @@
+package statuscake
+
+import (
+       "fmt"
+       "strconv"
+       "testing"
+
+       "github.com/DreamItGetIT/statuscake"
+       "github.com/hashicorp/terraform/helper/resource"
+       "github.com/hashicorp/terraform/terraform"
+)
+
+func TestAccStatusCake_basic(t *testing.T) {
+       var test statuscake.Test
+
+       resource.Test(t, resource.TestCase{
+               PreCheck:     func() { testAccPreCheck(t) },
+               Providers:    testAccProviders,
+               CheckDestroy: testAccTestCheckDestroy(&test),
+               Steps: []resource.TestStep{
+                       {
+                               Config: testAccTestConfig_basic,
+                               Check: resource.ComposeTestCheckFunc(
+                                       testAccTestCheckExists("statuscake_test.google", &test),
+                                       testAccTestCheckAttributes("statuscake_test.google", &test),
+                               ),
+                       },
+               },
+       })
+}
+
+func TestAccStatusCake_tcp(t *testing.T) {
+       var test statuscake.Test
+
+       resource.Test(t, resource.TestCase{
+               PreCheck:     func() { testAccPreCheck(t) },
+               Providers:    testAccProviders,
+               CheckDestroy: testAccTestCheckDestroy(&test),
+               Steps: []resource.TestStep{
+                       {
+                               Config: testAccTestConfig_tcp,
+                               Check: resource.ComposeTestCheckFunc(
+                                       testAccTestCheckExists("statuscake_test.google", &test),
+                                       testAccTestCheckAttributes("statuscake_test.google", &test),
+                               ),
+                       },
+               },
+       })
+}
+
+func TestAccStatusCake_withUpdate(t *testing.T) {
+       var test statuscake.Test
+
+       resource.Test(t, resource.TestCase{
+               PreCheck:     func() { testAccPreCheck(t) },
+               Providers:    testAccProviders,
+               CheckDestroy: testAccTestCheckDestroy(&test),
+               Steps: []resource.TestStep{
+                       {
+                               Config: testAccTestConfig_basic,
+                               Check: resource.ComposeTestCheckFunc(
+                                       testAccTestCheckExists("statuscake_test.google", &test),
+                               ),
+                       },
+
+                       {
+                               Config: testAccTestConfig_update,
+                               Check: resource.ComposeTestCheckFunc(
+                                       testAccTestCheckExists("statuscake_test.google", &test),
+                                       testAccTestCheckAttributes("statuscake_test.google", &test),
+                                       resource.TestCheckResourceAttr("statuscake_test.google", "check_rate", "500"),
+                                       resource.TestCheckResourceAttr("statuscake_test.google", "paused", "true"),
+                                       resource.TestCheckResourceAttr("statuscake_test.google", "timeout", "40"),
+                                       resource.TestCheckResourceAttr("statuscake_test.google", "contact_id", "0"),
+                                       resource.TestCheckResourceAttr("statuscake_test.google", "confirmations", "0"),
+                                       resource.TestCheckResourceAttr("statuscake_test.google", "trigger_rate", "20"),
+                               ),
+                       },
+               },
+       })
+}
+
+func testAccTestCheckExists(rn string, test *statuscake.Test) resource.TestCheckFunc {
+       return func(s *terraform.State) error {
+               rs, ok := s.RootModule().Resources[rn]
+               if !ok {
+                       return fmt.Errorf("resource not found: %s", rn)
+               }
+
+               if rs.Primary.ID == "" {
+                       return fmt.Errorf("TestID not set")
+               }
+
+               client := testAccProvider.Meta().(*statuscake.Client)
+               testId, parseErr := strconv.Atoi(rs.Primary.ID)
+               if parseErr != nil {
+                       return fmt.Errorf("error in statuscake test CheckExists: %s", parseErr)
+               }
+
+               gotTest, err := client.Tests().Detail(testId)
+               if err != nil {
+                       return fmt.Errorf("error getting test: %s", err)
+               }
+
+               *test = *gotTest
+
+               return nil
+       }
+}
+
+func testAccTestCheckAttributes(rn string, test *statuscake.Test) resource.TestCheckFunc {
+       return func(s *terraform.State) error {
+               attrs := s.RootModule().Resources[rn].Primary.Attributes
+
+               check := func(key, stateValue, testValue string) error {
+                       if testValue != stateValue {
+                               return fmt.Errorf("different values for %s in state (%s) and in statuscake (%s)",
+                                       key, stateValue, testValue)
+                       }
+                       return nil
+               }
+
+               for key, value := range attrs {
+                       var err error
+
+                       switch key {
+                       case "website_name":
+                               err = check(key, value, test.WebsiteName)
+                       case "website_url":
+                               err = check(key, value, test.WebsiteURL)
+                       case "check_rate":
+                               err = check(key, value, strconv.Itoa(test.CheckRate))
+                       case "test_type":
+                               err = check(key, value, test.TestType)
+                       case "paused":
+                               err = check(key, value, strconv.FormatBool(test.Paused))
+                       case "timeout":
+                               err = check(key, value, strconv.Itoa(test.Timeout))
+                       case "contact_id":
+                               err = check(key, value, strconv.Itoa(test.ContactID))
+                       case "confirmations":
+                               err = check(key, value, strconv.Itoa(test.Confirmation))
+                       case "trigger_rate":
+                               err = check(key, value, strconv.Itoa(test.TriggerRate))
+                       }
+
+                       if err != nil {
+                               return err
+                       }
+               }
+               return nil
+       }
+}
+
+func testAccTestCheckDestroy(test *statuscake.Test) resource.TestCheckFunc {
+       return func(s *terraform.State) error {
+               client := testAccProvider.Meta().(*statuscake.Client)
+               err := client.Tests().Delete(test.TestID)
+               if err == nil {
+                       return fmt.Errorf("test still exists")
+               }
+
+               return nil
+       }
+}
+
+const testAccTestConfig_basic = `
+resource "statuscake_test" "google" {
+       website_name = "google.com"
+       website_url = "www.google.com"
+       test_type = "HTTP"
+       check_rate = 300
+       timeout = 10
+       contact_id = 43402
+       confirmations = 1
+       trigger_rate = 10
+}
+`
+
+const testAccTestConfig_update = `
+resource "statuscake_test" "google" {
+       website_name = "google.com"
+       website_url = "www.google.com"
+       test_type = "HTTP"
+       check_rate = 500
+       paused = true
+       trigger_rate = 20
+}
+`
+
+const testAccTestConfig_tcp = `
+resource "statuscake_test" "google" {
+       website_name = "google.com"
+       website_url = "www.google.com"
+       test_type = "TCP"
+       check_rate = 300
+       timeout = 10
+       contact_id = 43402
+       confirmations = 1
+       port = 80
+}
+`