github.com/vtorhonen/terraform@v0.9.0-beta2.0.20170307220345-5d894e4ffda7/builtin/providers/spotinst/resource_spotinst_healthcheck_test.go (about) 1 package spotinst 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/hashicorp/terraform/helper/resource" 8 "github.com/hashicorp/terraform/terraform" 9 "github.com/spotinst/spotinst-sdk-go/spotinst" 10 ) 11 12 func TestAccSpotinstHealthCheck_Basic(t *testing.T) { 13 var healthCheck spotinst.HealthCheck 14 resource.Test(t, resource.TestCase{ 15 PreCheck: func() { testAccPreCheck(t) }, 16 Providers: testAccProviders, 17 CheckDestroy: testAccCheckSpotinstHealthCheckDestroy, 18 Steps: []resource.TestStep{ 19 { 20 Config: testAccCheckSpotinstHealthCheckConfigBasic, 21 Check: resource.ComposeTestCheckFunc( 22 testAccCheckSpotinstHealthCheckExists("spotinst_healthcheck.foo", &healthCheck), 23 testAccCheckSpotinstHealthCheckAttributes(&healthCheck), 24 resource.TestCheckResourceAttr("spotinst_healthcheck.foo", "name", "hc-foo"), 25 ), 26 }, 27 }, 28 }) 29 } 30 31 func TestAccSpotinstHealthCheck_Updated(t *testing.T) { 32 var healthCheck spotinst.HealthCheck 33 resource.Test(t, resource.TestCase{ 34 PreCheck: func() { testAccPreCheck(t) }, 35 Providers: testAccProviders, 36 CheckDestroy: testAccCheckSpotinstHealthCheckDestroy, 37 Steps: []resource.TestStep{ 38 { 39 Config: testAccCheckSpotinstHealthCheckConfigBasic, 40 Check: resource.ComposeTestCheckFunc( 41 testAccCheckSpotinstHealthCheckExists("spotinst_healthcheck.foo", &healthCheck), 42 testAccCheckSpotinstHealthCheckAttributes(&healthCheck), 43 resource.TestCheckResourceAttr("spotinst_healthcheck.foo", "name", "hc-foo"), 44 ), 45 }, 46 { 47 Config: testAccCheckSpotinstHealthCheckConfigNewValue, 48 Check: resource.ComposeTestCheckFunc( 49 testAccCheckSpotinstHealthCheckExists("spotinst_healthcheck.foo", &healthCheck), 50 testAccCheckSpotinstHealthCheckAttributesUpdated(&healthCheck), 51 resource.TestCheckResourceAttr("spotinst_healthcheck.foo", "name", "hc-bar"), 52 ), 53 }, 54 }, 55 }) 56 } 57 58 func testAccCheckSpotinstHealthCheckDestroy(s *terraform.State) error { 59 client := testAccProvider.Meta().(*spotinst.Client) 60 for _, rs := range s.RootModule().Resources { 61 if rs.Type != "spotinst_healthcheck" { 62 continue 63 } 64 input := &spotinst.ReadHealthCheckInput{ID: spotinst.String(rs.Primary.ID)} 65 resp, err := client.HealthCheckService.Read(input) 66 if err == nil && resp != nil && resp.HealthCheck != nil { 67 return fmt.Errorf("HealthCheck still exists") 68 } 69 } 70 return nil 71 } 72 73 func testAccCheckSpotinstHealthCheckAttributes(healthCheck *spotinst.HealthCheck) resource.TestCheckFunc { 74 return func(s *terraform.State) error { 75 if p := spotinst.StringValue(healthCheck.Check.Protocol); p != "http" { 76 return fmt.Errorf("Bad content: %s", p) 77 } 78 if e := spotinst.StringValue(healthCheck.Check.Endpoint); e != "http://endpoint.com" { 79 return fmt.Errorf("Bad content: %s", e) 80 } 81 return nil 82 } 83 } 84 85 func testAccCheckSpotinstHealthCheckAttributesUpdated(healthCheck *spotinst.HealthCheck) resource.TestCheckFunc { 86 return func(s *terraform.State) error { 87 if p := spotinst.StringValue(healthCheck.Check.Protocol); p != "https" { 88 return fmt.Errorf("Bad content: %s", p) 89 } 90 if e := spotinst.StringValue(healthCheck.Check.Endpoint); e != "https://endpoint.com" { 91 return fmt.Errorf("Bad content: %s", e) 92 } 93 return nil 94 } 95 } 96 97 func testAccCheckSpotinstHealthCheckExists(n string, healthCheck *spotinst.HealthCheck) resource.TestCheckFunc { 98 return func(s *terraform.State) error { 99 rs, ok := s.RootModule().Resources[n] 100 if !ok { 101 return fmt.Errorf("Not found: %s", n) 102 } 103 if rs.Primary.ID == "" { 104 return fmt.Errorf("No resource ID is set") 105 } 106 client := testAccProvider.Meta().(*spotinst.Client) 107 input := &spotinst.ReadHealthCheckInput{ID: spotinst.String(rs.Primary.ID)} 108 resp, err := client.HealthCheckService.Read(input) 109 if err != nil { 110 return err 111 } 112 if spotinst.StringValue(resp.HealthCheck.ID) != rs.Primary.Attributes["id"] { 113 return fmt.Errorf("HealthCheck not found: %+v,\n %+v\n", resp.HealthCheck, rs.Primary.Attributes) 114 } 115 *healthCheck = *resp.HealthCheck 116 return nil 117 } 118 } 119 120 const testAccCheckSpotinstHealthCheckConfigBasic = ` 121 resource "spotinst_healthcheck" "foo" { 122 name = "hc-foo" 123 resource_id = "sig-foo" 124 check { 125 protocol = "http" 126 endpoint = "http://endpoint.com" 127 port = 1337 128 interval = 10 129 timeout = 10 130 } 131 threshold { 132 healthy = 1 133 unhealthy = 1 134 } 135 proxy { 136 addr = "http://proxy.com" 137 port = 80 138 } 139 }` 140 141 const testAccCheckSpotinstHealthCheckConfigNewValue = ` 142 resource "spotinst_healthcheck" "foo" { 143 name = "hc-bar" 144 resource_id = "sig-foo" 145 check { 146 protocol = "https" 147 endpoint = "https://endpoint.com" 148 port = 3000 149 interval = 10 150 timeout = 10 151 } 152 threshold { 153 healthy = 2 154 unhealthy = 2 155 } 156 proxy { 157 addr = "http://proxy.com" 158 port = 8080 159 } 160 }`