github.com/danp/terraform@v0.9.5-0.20170426144147-39d740081351/builtin/providers/alicloud/resource_alicloud_slb_test.go (about) 1 package alicloud 2 3 import ( 4 "fmt" 5 "github.com/denverdino/aliyungo/common" 6 "github.com/denverdino/aliyungo/slb" 7 "github.com/hashicorp/terraform/helper/resource" 8 "github.com/hashicorp/terraform/terraform" 9 "log" 10 "testing" 11 ) 12 13 func TestAccAlicloudSlb_basic(t *testing.T) { 14 var slb slb.LoadBalancerType 15 16 testCheckAttr := func() resource.TestCheckFunc { 17 return func(*terraform.State) error { 18 log.Printf("testCheckAttr slb AddressType is: %s", slb.AddressType) 19 return nil 20 } 21 } 22 23 resource.Test(t, resource.TestCase{ 24 PreCheck: func() { 25 testAccPreCheck(t) 26 }, 27 28 // module name 29 IDRefreshName: "alicloud_slb.bindwidth", 30 31 Providers: testAccProviders, 32 CheckDestroy: testAccCheckSlbDestroy, 33 Steps: []resource.TestStep{ 34 //test internet_charge_type is paybybandwidth 35 resource.TestStep{ 36 Config: testAccSlbBindWidth, 37 Check: resource.ComposeTestCheckFunc( 38 testAccCheckSlbExists("alicloud_slb.bindwidth", &slb), 39 testCheckAttr(), 40 resource.TestCheckResourceAttr( 41 "alicloud_slb.bindwidth", "internet_charge_type", "paybybandwidth"), 42 ), 43 }, 44 }, 45 }) 46 } 47 48 func TestAccAlicloudSlb_traffic(t *testing.T) { 49 var slb slb.LoadBalancerType 50 51 testCheckAttr := func() resource.TestCheckFunc { 52 return func(*terraform.State) error { 53 log.Printf("testCheckAttr slb AddressType is: %s", slb.AddressType) 54 return nil 55 } 56 } 57 58 resource.Test(t, resource.TestCase{ 59 PreCheck: func() { 60 testAccPreCheck(t) 61 }, 62 63 // module name 64 IDRefreshName: "alicloud_slb.traffic", 65 Providers: testAccProviders, 66 CheckDestroy: testAccCheckSlbDestroy, 67 Steps: []resource.TestStep{ 68 //test internet_charge_type is paybytraffic 69 resource.TestStep{ 70 Config: testAccSlbTraffic, 71 Check: resource.ComposeTestCheckFunc( 72 testAccCheckSlbExists("alicloud_slb.traffic", &slb), 73 testCheckAttr(), 74 resource.TestCheckResourceAttr( 75 "alicloud_slb.traffic", "name", "tf_test_slb_classic"), 76 ), 77 }, 78 }, 79 }) 80 } 81 82 func TestAccAlicloudSlb_listener(t *testing.T) { 83 var slb slb.LoadBalancerType 84 85 testListener := func() resource.TestCheckFunc { 86 return func(*terraform.State) error { 87 listenerPorts := slb.ListenerPorts.ListenerPort[0] 88 if listenerPorts != 2001 { 89 return fmt.Errorf("bad loadbalancer listener: %#v", listenerPorts) 90 } 91 92 return nil 93 } 94 } 95 96 resource.Test(t, resource.TestCase{ 97 PreCheck: func() { 98 testAccPreCheck(t) 99 }, 100 101 // module name 102 IDRefreshName: "alicloud_slb.listener", 103 Providers: testAccProviders, 104 CheckDestroy: testAccCheckSlbDestroy, 105 Steps: []resource.TestStep{ 106 resource.TestStep{ 107 Config: testAccSlbListener, 108 Check: resource.ComposeTestCheckFunc( 109 testAccCheckSlbExists("alicloud_slb.listener", &slb), 110 resource.TestCheckResourceAttr( 111 "alicloud_slb.listener", "name", "tf_test_slb"), 112 testAccCheckListenersExists("alicloud_slb.listener", &slb, "http"), 113 testListener(), 114 ), 115 }, 116 }, 117 }) 118 } 119 120 func TestAccAlicloudSlb_vpc(t *testing.T) { 121 var slb slb.LoadBalancerType 122 123 resource.Test(t, resource.TestCase{ 124 PreCheck: func() { 125 testAccPreCheck(t) 126 }, 127 128 // module name 129 IDRefreshName: "alicloud_slb.vpc", 130 Providers: testAccProviders, 131 CheckDestroy: testAccCheckSlbDestroy, 132 Steps: []resource.TestStep{ 133 resource.TestStep{ 134 Config: testAccSlb4Vpc, 135 Check: resource.ComposeTestCheckFunc( 136 testAccCheckSlbExists("alicloud_slb.vpc", &slb), 137 resource.TestCheckResourceAttr( 138 "alicloud_slb.vpc", "name", "tf_test_slb_vpc"), 139 ), 140 }, 141 }, 142 }) 143 } 144 145 func testAccCheckSlbExists(n string, slb *slb.LoadBalancerType) resource.TestCheckFunc { 146 return func(s *terraform.State) error { 147 rs, ok := s.RootModule().Resources[n] 148 if !ok { 149 return fmt.Errorf("Not found: %s", n) 150 } 151 152 if rs.Primary.ID == "" { 153 return fmt.Errorf("No SLB ID is set") 154 } 155 156 client := testAccProvider.Meta().(*AliyunClient) 157 instance, err := client.DescribeLoadBalancerAttribute(rs.Primary.ID) 158 159 if err != nil { 160 return err 161 } 162 if instance == nil { 163 return fmt.Errorf("SLB not found") 164 } 165 166 *slb = *instance 167 return nil 168 } 169 } 170 171 func testAccCheckListenersExists(n string, slb *slb.LoadBalancerType, p string) resource.TestCheckFunc { 172 return func(s *terraform.State) error { 173 rs, ok := s.RootModule().Resources[n] 174 if !ok { 175 return fmt.Errorf("Not found: %s", n) 176 } 177 178 if rs.Primary.ID == "" { 179 return fmt.Errorf("No SLB ID is set") 180 } 181 182 client := testAccProvider.Meta().(*AliyunClient) 183 instance, err := client.DescribeLoadBalancerAttribute(rs.Primary.ID) 184 185 if err != nil { 186 return err 187 } 188 if instance == nil { 189 return fmt.Errorf("SLB not found") 190 } 191 192 exist := false 193 for _, listener := range instance.ListenerPortsAndProtocol.ListenerPortAndProtocol { 194 if listener.ListenerProtocol == p { 195 exist = true 196 break 197 } 198 } 199 200 if !exist { 201 return fmt.Errorf("The %s protocol Listener not found.", p) 202 } 203 return nil 204 } 205 } 206 207 func testAccCheckSlbDestroy(s *terraform.State) error { 208 client := testAccProvider.Meta().(*AliyunClient) 209 210 for _, rs := range s.RootModule().Resources { 211 if rs.Type != "alicloud_slb" { 212 continue 213 } 214 215 // Try to find the Slb 216 instance, err := client.DescribeLoadBalancerAttribute(rs.Primary.ID) 217 218 if instance != nil { 219 return fmt.Errorf("SLB still exist") 220 } 221 222 if err != nil { 223 e, _ := err.(*common.Error) 224 // Verify the error is what we want 225 if e.ErrorResponse.Code != LoadBalancerNotFound { 226 return err 227 } 228 229 } 230 231 } 232 233 return nil 234 } 235 236 const testAccSlbBindWidth = ` 237 resource "alicloud_slb" "bindwidth" { 238 name = "tf_test_slb_bindwidth" 239 internet_charge_type = "paybybandwidth" 240 bandwidth = 5 241 internet = true 242 } 243 ` 244 245 const testAccSlbTraffic = ` 246 resource "alicloud_slb" "traffic" { 247 name = "tf_test_slb_classic" 248 } 249 ` 250 251 const testAccSlbListener = ` 252 resource "alicloud_slb" "listener" { 253 name = "tf_test_slb" 254 internet_charge_type = "paybybandwidth" 255 bandwidth = 5 256 internet = true 257 listener = [ 258 { 259 "instance_port" = "2111" 260 "lb_port" = "21" 261 "lb_protocol" = "tcp" 262 "bandwidth" = 1 263 "persistence_timeout" = 500 264 "health_check_type" = "http" 265 },{ 266 "instance_port" = "8000" 267 "lb_port" = "80" 268 "lb_protocol" = "http" 269 "sticky_session" = "on" 270 "sticky_session_type" = "insert" 271 "cookie_timeout" = 800 272 "bandwidth" = 1 273 },{ 274 "instance_port" = "8001" 275 "lb_port" = "81" 276 "lb_protocol" = "http" 277 "sticky_session" = "on" 278 "sticky_session_type" = "server" 279 "cookie" = "testslblistenercookie" 280 "cookie_timeout" = 1800 281 "health_check" = "on" 282 "health_check_domain" = "$_ip" 283 "health_check_uri" = "/console" 284 "health_check_connect_port" = 20 285 "healthy_threshold" = 8 286 "unhealthy_threshold" = 8 287 "health_check_timeout" = 8 288 "health_check_interval" = 4 289 "health_check_http_code" = "http_2xx" 290 "bandwidth" = 1 291 },{ 292 "instance_port" = "2001" 293 "lb_port" = "2001" 294 "lb_protocol" = "udp" 295 "bandwidth" = 1 296 "persistence_timeout" = 700 297 }] 298 } 299 ` 300 301 const testAccSlb4Vpc = ` 302 data "alicloud_zones" "default" { 303 "available_resource_creation"= "VSwitch" 304 } 305 306 resource "alicloud_vpc" "foo" { 307 name = "tf_test_foo" 308 cidr_block = "172.16.0.0/12" 309 } 310 311 resource "alicloud_vswitch" "foo" { 312 vpc_id = "${alicloud_vpc.foo.id}" 313 cidr_block = "172.16.0.0/21" 314 availability_zone = "${data.alicloud_zones.default.zones.0.id}" 315 } 316 317 resource "alicloud_slb" "vpc" { 318 name = "tf_test_slb_vpc" 319 //internet_charge_type = "paybybandwidth" 320 vswitch_id = "${alicloud_vswitch.foo.id}" 321 } 322 `