| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- package integration
- import (
- "fmt"
- "github.com/stretchr/testify/assert"
- "testing"
- "time"
- "github.com/aliyun/alibaba-cloud-sdk-go/services/slb"
- "strconv"
- "github.com/aliyun/alibaba-cloud-sdk-go/sdk/utils"
- "net/http"
- "strings"
- )
- const (
- SlbInstanceStopped = "inactive"
- )
- // create -> start -> stop -> delete
- func TestSlbInstance(t *testing.T) {
- // init client
- config := getConfigFromEnv()
- slbClient, err := slb.NewClientWithAccessKey("cn-hangzhou", config.AccessKeyId, config.AccessKeySecret)
- assertErrorNil(t, err, "Failed to init client")
- fmt.Printf("Init client success\n")
- // create
- instanceId := createSlbInstance(t, slbClient)
- // defer delete
- defer deleteSlbInstance(t, slbClient, instanceId)
- // add backend server
- addBackEndServer(t, slbClient, instanceId)
- // set weight to 80
- setBackEndServer(t, slbClient, instanceId)
- // remove backend server
- removeBackEndServer(t, slbClient, instanceId)
- // stop
- stopSlbInstance(t, slbClient, instanceId)
- // delete all test instance
- //deleteAllTestSlbInstance(t, slbClient)
- }
- func createSlbInstance(t *testing.T, client *slb.Client) (instanceId string) {
- fmt.Print("creating slb instance...")
- request := slb.CreateCreateLoadBalancerRequest()
- request.LoadBalancerName = InstanceNamePrefix + strconv.FormatInt(time.Now().Unix(), 10)
- request.AddressType = "internet"
- request.ClientToken = utils.GetUUIDV4()
- response, err := client.CreateLoadBalancer(request)
- assertErrorNil(t, err, "Failed to create slb instance")
- assert.Equal(t, 200, response.GetHttpStatus(), response.GetHttpContentString())
- instanceId = response.LoadBalancerId
- fmt.Printf("success(%d)! loadBalancerId = %s\n", response.GetHttpStatus(), instanceId)
- return
- }
- func stopSlbInstance(t *testing.T, client *slb.Client, instanceId string) {
- fmt.Printf("stopping slb instance(%s)...", instanceId)
- request := slb.CreateSetLoadBalancerStatusRequest()
- request.LoadBalancerId = instanceId
- request.LoadBalancerStatus = SlbInstanceStopped
- response, err := client.SetLoadBalancerStatus(request)
- assertErrorNil(t, err, "Failed to stop slb instance "+instanceId)
- assert.Equal(t, 200, response.GetHttpStatus(), response.GetHttpContentString())
- fmt.Println("success!")
- }
- func deleteSlbInstance(t *testing.T, client *slb.Client, instanceId string) {
- fmt.Printf("deleting slb instance(%s)...", instanceId)
- request := slb.CreateDeleteLoadBalancerRequest()
- request.LoadBalancerId = instanceId
- response, err := client.DeleteLoadBalancer(request)
- if response != nil && response.GetHttpStatus() == http.StatusNotFound {
- fmt.Println("success!")
- } else {
- assertErrorNil(t, err, "Failed to delete slb instance "+instanceId)
- assert.Equal(t, 200, response.GetHttpStatus(), response.GetHttpContentString())
- fmt.Println("success!")
- }
- }
- func addBackEndServer(t *testing.T, client *slb.Client, instanceId string) {
- fmt.Printf("add backend server for slb(%s)...", instanceId)
- ecsDemoInstanceId := getEcsDemoInstanceId()
- request := slb.CreateSetBackendServersRequest()
- request.BackendServers = fmt.Sprintf("[{\"ServerId\":\"%s\",\"Weight\":\"100\"}]", ecsDemoInstanceId)
- request.LoadBalancerId = instanceId
- response, err := client.SetBackendServers(request)
- assertErrorNil(t, err, "Failed to add backend servers, LoadBalancerId: "+instanceId)
- assert.Equal(t, 200, response.GetHttpStatus(), response.GetHttpContentString())
- fmt.Println("success!")
- }
- func setBackEndServer(t *testing.T, client *slb.Client, instanceId string) {
- fmt.Printf("set backend server for slb(%s)...", instanceId)
- ecsDemoInstanceId := getEcsDemoInstanceId()
- request := slb.CreateSetBackendServersRequest()
- request.BackendServers = fmt.Sprintf("[{\"ServerId\":\"%s\",\"Weight\":\"80\"}]", ecsDemoInstanceId)
- request.LoadBalancerId = instanceId
- response, err := client.SetBackendServers(request)
- assertErrorNil(t, err, "Failed to set backend servers, LoadBalancerId: "+instanceId)
- assert.Equal(t, 200, response.GetHttpStatus(), response.GetHttpContentString())
- fmt.Println("success!")
- }
- func removeBackEndServer(t *testing.T, client *slb.Client, instanceId string) {
- fmt.Printf("remove backend server for slb(%s)...", instanceId)
- ecsDemoInstanceId := getEcsDemoInstanceId()
- request := slb.CreateRemoveBackendServersRequest()
- request.BackendServers = fmt.Sprintf("[\"%s\"]", ecsDemoInstanceId)
- request.LoadBalancerId = instanceId
- response, err := client.RemoveBackendServers(request)
- assertErrorNil(t, err, "Failed to remove backend servers, LoadBalancerId: "+instanceId)
- assert.Equal(t, 200, response.GetHttpStatus(), response.GetHttpContentString())
- fmt.Println("success!")
- }
- func deleteAllTestSlbInstance(t *testing.T, client *slb.Client) {
- fmt.Printf("list all slb instances...")
- request := slb.CreateDescribeLoadBalancersRequest()
- response, err := client.DescribeLoadBalancers(request)
- assertErrorNil(t, err, "Failed to list all slb instances")
- assert.Equal(t, 200, response.GetHttpStatus(), response.GetHttpContentString())
- fmt.Printf("success(%d)! TotalCount = %s\n", response.GetHttpStatus(), response.TotalCount)
- for _, slbInstanceInfo := range response.LoadBalancers.LoadBalancer {
- if strings.HasPrefix(slbInstanceInfo.LoadBalancerName, InstanceNamePrefix) {
- fmt.Printf("found undeleted slb instance(%s), status=%s, try to delete it.\n",
- slbInstanceInfo.LoadBalancerId, slbInstanceInfo.LoadBalancerStatus)
- if slbInstanceInfo.LoadBalancerStatus != SlbInstanceStopped {
- // stop
- stopSlbInstance(t, client, slbInstanceInfo.LoadBalancerId)
- }
- // delete
- deleteSlbInstance(t, client, slbInstanceInfo.LoadBalancerId)
- }
- }
- }
|