Jelajahi Sumber

add slb integration test cases

Signed-off-by: 高汝彤 <rutong.grt@alibaba-inc.com>
高汝彤 8 tahun lalu
induk
melakukan
02cfceb8fa
4 mengubah file dengan 160 tambahan dan 8 penghapusan
  1. 1 0
      integration/cs_test.go
  2. 7 8
      integration/ecs_test.go
  3. 145 0
      integration/slb_test.go
  4. 7 0
      integration/utils.go

+ 1 - 0
integration/cs_test.go

@@ -0,0 +1 @@
+package integration

+ 7 - 8
integration/ecs_test.go

@@ -4,7 +4,6 @@ import (
 	"fmt"
 	"github.com/aliyun/alibaba-cloud-sdk-go/services/ecs"
 	"github.com/stretchr/testify/assert"
-	"os"
 	"testing"
 	"time"
 	"strings"
@@ -13,7 +12,7 @@ import (
 
 const (
 	EcsInstanceDefaultTimeout = 120
-	EcsDefaultWaitForInterval = 10
+	EcsDefaultWaitForInterval = 20
 
 	EcsInstanceStatusRunning  = "Running"
 	EcsInstanceStatusStopped  = "Stopped"
@@ -30,7 +29,7 @@ func TestEcsInstance(t *testing.T) {
 	fmt.Printf("Init client success\n")
 
 	// get demo instance attributes
-	param := getDemoInstanceAttributes(t, ecsClient)
+	param := getDemoEcsInstanceAttributes(t, ecsClient)
 
 	// create
 	instanceId := createEcsInstance(t, ecsClient, param)
@@ -60,10 +59,10 @@ func TestEcsInstance(t *testing.T) {
 	deleteAllTestEcsInstance(t, ecsClient)
 }
 
-func getDemoInstanceAttributes(t *testing.T, client *ecs.Client) *ecs.DescribeInstanceAttributeResponse {
+func getDemoEcsInstanceAttributes(t *testing.T, client *ecs.Client) *ecs.DescribeInstanceAttributeResponse {
 	fmt.Print("trying to get demo ecs instance...")
 	request := ecs.CreateDescribeInstanceAttributeRequest()
-	request.InstanceId = os.Getenv("DEMO_ECS_INSTANCE_ID")
+	request.InstanceId = getEcsDemoInstanceId()
 	response, err := client.DescribeInstanceAttribute(request)
 	assertErrorNil(t, err, "Failed to get demo ecs instance attributes")
 	assert.Equal(t, 200, response.GetHttpStatus(), response.GetHttpContentString())
@@ -75,7 +74,7 @@ func createEcsInstance(t *testing.T, client *ecs.Client, param *ecs.DescribeInst
 	fmt.Print("creating ecs instance...")
 	request := ecs.CreateCreateInstanceRequest()
 	request.ImageId = param.ImageId
-	request.InstanceName = "SdkIntegrationTestInstance" + strconv.FormatInt(time.Now().Unix(), 10)
+	request.InstanceName = InstanceNamePrefix + strconv.FormatInt(time.Now().Unix(), 10)
 	request.SecurityGroupId = param.SecurityGroupIds.SecurityGroupId[0]
 	request.InstanceType = "ecs.t1.small"
 	response, err := client.CreateInstance(request)
@@ -124,10 +123,10 @@ func deleteAllTestEcsInstance(t *testing.T, client *ecs.Client) {
 	response, err := client.DescribeInstances(request)
 	assertErrorNil(t, err, "Failed to list all ecs instances ")
 	assert.Equal(t, 200, response.GetHttpStatus(), response.GetHttpContentString())
-	fmt.Println("success!")
+	fmt.Printf("success! TotalCount = %s\n", response.TotalCount)
 
 	for _, instanceInfo := range response.Instances.Instance {
-		if strings.HasPrefix(instanceInfo.InstanceName, "SdkIntegrationTestInstance") {
+		if strings.HasPrefix(instanceInfo.InstanceName, InstanceNamePrefix) {
 			fmt.Printf("found undeleted ecs instance(%s), status=%s, try to delete it.\n",
 				instanceInfo.Status, instanceInfo.InstanceId)
 			if instanceInfo.Status == EcsInstanceStatusRunning {

+ 145 - 0
integration/slb_test.go

@@ -0,0 +1,145 @@
+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)
+		}
+	}
+}

+ 7 - 0
integration/utils.go

@@ -6,6 +6,8 @@ import (
 	"fmt"
 )
 
+const InstanceNamePrefix  = "SdkIntegrationTestInstance"
+
 type Config struct {
 	AccessKeyId     string
 	AccessKeySecret string
@@ -33,6 +35,11 @@ func getConfigFromEnv() *Config {
 	}
 }
 
+
+func getEcsDemoInstanceId() string {
+	return os.Getenv("DEMO_ECS_INSTANCE_ID")
+}
+
 func assertErrorNil(t *testing.T, err error, message string) {
 	if err != nil {
 		fmt.Fprintf(os.Stderr, message+": %v\n", err)