From dbde71c990295605ce351a494888c15f3d6be9a8 Mon Sep 17 00:00:00 2001 From: Jake Champlin Date: Tue, 6 Jun 2017 12:40:02 -0400 Subject: Transfer statuscake provider --- statuscake/resource_statuscaketest_test.go | 202 +++++++++++++++++++++++++++++ 1 file changed, 202 insertions(+) create mode 100644 statuscake/resource_statuscaketest_test.go (limited to 'statuscake/resource_statuscaketest_test.go') diff --git a/statuscake/resource_statuscaketest_test.go b/statuscake/resource_statuscaketest_test.go new file mode 100644 index 0000000..f07fcc5 --- /dev/null +++ b/statuscake/resource_statuscaketest_test.go @@ -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 +} +` -- cgit v1.2.3