slb_test.go 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. package integration
  2. import (
  3. "fmt"
  4. "net/http"
  5. "strconv"
  6. "strings"
  7. "testing"
  8. "time"
  9. "github.com/aliyun/alibaba-cloud-sdk-go/sdk/utils"
  10. "github.com/aliyun/alibaba-cloud-sdk-go/services/slb"
  11. "github.com/stretchr/testify/assert"
  12. )
  13. const (
  14. SlbInstanceStopped = "inactive"
  15. )
  16. // create -> start -> stop -> delete
  17. func TestSlbInstance(t *testing.T) {
  18. return
  19. // init client
  20. config := getConfigFromEnv()
  21. slbClient, err := slb.NewClientWithAccessKey("cn-hangzhou", config.AccessKeyId, config.AccessKeySecret)
  22. assertErrorNil(t, err, "Failed to init client")
  23. fmt.Printf("Init client success\n")
  24. // create
  25. instanceId := createSlbInstance(t, slbClient)
  26. // defer delete
  27. defer deleteSlbInstance(t, slbClient, instanceId)
  28. // add backend server
  29. addBackEndServer(t, slbClient, instanceId)
  30. // set weight to 80
  31. setBackEndServer(t, slbClient, instanceId)
  32. // remove backend server
  33. removeBackEndServer(t, slbClient, instanceId)
  34. // stop
  35. stopSlbInstance(t, slbClient, instanceId)
  36. // delete all test instance
  37. deleteAllTestSlbInstance(t, slbClient)
  38. }
  39. func createSlbInstance(t *testing.T, client *slb.Client) (instanceId string) {
  40. fmt.Print("creating slb instance...")
  41. request := slb.CreateCreateLoadBalancerRequest()
  42. request.LoadBalancerName = InstanceNamePrefix + strconv.FormatInt(time.Now().Unix(), 10)
  43. request.AddressType = "internet"
  44. request.ClientToken = utils.GetUUIDV4()
  45. response, err := client.CreateLoadBalancer(request)
  46. assertErrorNil(t, err, "Failed to create slb instance")
  47. assert.Equal(t, 200, response.GetHttpStatus(), response.GetHttpContentString())
  48. instanceId = response.LoadBalancerId
  49. fmt.Printf("success(%d)! loadBalancerId = %s\n", response.GetHttpStatus(), instanceId)
  50. return
  51. }
  52. func stopSlbInstance(t *testing.T, client *slb.Client, instanceId string) {
  53. fmt.Printf("stopping slb instance(%s)...", instanceId)
  54. request := slb.CreateSetLoadBalancerStatusRequest()
  55. request.LoadBalancerId = instanceId
  56. request.LoadBalancerStatus = SlbInstanceStopped
  57. response, err := client.SetLoadBalancerStatus(request)
  58. assertErrorNil(t, err, "Failed to stop slb instance "+instanceId)
  59. assert.Equal(t, 200, response.GetHttpStatus(), response.GetHttpContentString())
  60. fmt.Println("success!")
  61. }
  62. func deleteSlbInstance(t *testing.T, client *slb.Client, instanceId string) {
  63. fmt.Printf("deleting slb instance(%s)...", instanceId)
  64. request := slb.CreateDeleteLoadBalancerRequest()
  65. request.LoadBalancerId = instanceId
  66. response, err := client.DeleteLoadBalancer(request)
  67. if response != nil && response.GetHttpStatus() == http.StatusNotFound {
  68. fmt.Println("success!")
  69. } else {
  70. assertErrorNil(t, err, "Failed to delete slb instance "+instanceId)
  71. assert.Equal(t, 200, response.GetHttpStatus(), response.GetHttpContentString())
  72. fmt.Println("success!")
  73. }
  74. }
  75. func addBackEndServer(t *testing.T, client *slb.Client, instanceId string) {
  76. fmt.Printf("add backend server for slb(%s)...", instanceId)
  77. ecsDemoInstanceId := getEcsDemoInstanceId()
  78. request := slb.CreateSetBackendServersRequest()
  79. request.BackendServers = fmt.Sprintf("[{\"ServerId\":\"%s\",\"Weight\":\"100\"}]", ecsDemoInstanceId)
  80. request.LoadBalancerId = instanceId
  81. response, err := client.SetBackendServers(request)
  82. assertErrorNil(t, err, "Failed to add backend servers, LoadBalancerId: "+instanceId)
  83. assert.Equal(t, 200, response.GetHttpStatus(), response.GetHttpContentString())
  84. fmt.Println("success!")
  85. }
  86. func setBackEndServer(t *testing.T, client *slb.Client, instanceId string) {
  87. fmt.Printf("set backend server for slb(%s)...", instanceId)
  88. ecsDemoInstanceId := getEcsDemoInstanceId()
  89. request := slb.CreateSetBackendServersRequest()
  90. request.BackendServers = fmt.Sprintf("[{\"ServerId\":\"%s\",\"Weight\":\"80\"}]", ecsDemoInstanceId)
  91. request.LoadBalancerId = instanceId
  92. response, err := client.SetBackendServers(request)
  93. assertErrorNil(t, err, "Failed to set backend servers, LoadBalancerId: "+instanceId)
  94. assert.Equal(t, 200, response.GetHttpStatus(), response.GetHttpContentString())
  95. fmt.Println("success!")
  96. }
  97. func removeBackEndServer(t *testing.T, client *slb.Client, instanceId string) {
  98. fmt.Printf("remove backend server for slb(%s)...", instanceId)
  99. ecsDemoInstanceId := getEcsDemoInstanceId()
  100. request := slb.CreateRemoveBackendServersRequest()
  101. request.BackendServers = fmt.Sprintf("[\"%s\"]", ecsDemoInstanceId)
  102. request.LoadBalancerId = instanceId
  103. response, err := client.RemoveBackendServers(request)
  104. assertErrorNil(t, err, "Failed to remove backend servers, LoadBalancerId: "+instanceId)
  105. assert.Equal(t, 200, response.GetHttpStatus(), response.GetHttpContentString())
  106. fmt.Println("success!")
  107. }
  108. func deleteAllTestSlbInstance(t *testing.T, client *slb.Client) {
  109. fmt.Printf("list all slb instances...")
  110. request := slb.CreateDescribeLoadBalancersRequest()
  111. response, err := client.DescribeLoadBalancers(request)
  112. assertErrorNil(t, err, "Failed to list all slb instances")
  113. assert.Equal(t, 200, response.GetHttpStatus(), response.GetHttpContentString())
  114. fmt.Printf("success(%d)! TotalCount = %s\n", response.GetHttpStatus(), strconv.Itoa(response.TotalCount))
  115. for _, slbInstanceInfo := range response.LoadBalancers.LoadBalancer {
  116. if strings.HasPrefix(slbInstanceInfo.LoadBalancerName, InstanceNamePrefix) {
  117. createTime, err := strconv.ParseInt(slbInstanceInfo.LoadBalancerName[len(InstanceNamePrefix):], 10, 64)
  118. assertErrorNil(t, err, "Parse instance create time failed: "+slbInstanceInfo.LoadBalancerName)
  119. if (time.Now().Unix() - createTime) < (60 * 60) {
  120. fmt.Printf("found undeleted slb instance(%s) but created in 60 minutes, try to delete next time\n", slbInstanceInfo.LoadBalancerName)
  121. } else {
  122. fmt.Printf("found undeleted slb instance(%s), status=%s, try to delete it.\n",
  123. slbInstanceInfo.LoadBalancerId, slbInstanceInfo.LoadBalancerStatus)
  124. if slbInstanceInfo.LoadBalancerStatus != SlbInstanceStopped {
  125. // stop
  126. stopSlbInstance(t, client, slbInstanceInfo.LoadBalancerId)
  127. }
  128. // delete
  129. deleteSlbInstance(t, client, slbInstanceInfo.LoadBalancerId)
  130. }
  131. }
  132. }
  133. }