浏览代码

Improve test cases

wenzuochao 7 年之前
父节点
当前提交
7685130b6d

+ 25 - 0
sdk/auth/signer_test.go

@@ -16,6 +16,31 @@ func TestSigner_AccessKeySigner(t *testing.T) {
 	_, ok := signer.(*signers.AccessKeySigner)
 	assert.True(t, ok)
 }
+
+func TestSigner_BaseSigner(t *testing.T) {
+	c := credentials.NewBaseCredential("accessKeyId", "accessKeySecret")
+	signer, err := NewSignerWithCredential(c, nil)
+	assert.Nil(t, err)
+	_, ok := signer.(*signers.AccessKeySigner)
+	assert.True(t, ok)
+}
+
+func TestSigner_StsRoleArnSigner(t *testing.T) {
+	c := credentials.NewStsRoleArnCredential("accessKeyId", "accessKeySecret", "roleArn", "roleSessionName", 3600)
+	signer, err := NewSignerWithCredential(c, nil)
+	assert.Nil(t, err)
+	_, ok := signer.(*signers.RamRoleArnSigner)
+	assert.True(t, ok)
+}
+
+func TestSigner_StsRoleNameOnEcsSigner(t *testing.T) {
+	c := credentials.NewStsRoleNameOnEcsCredential("roleName")
+	signer, err := NewSignerWithCredential(c, nil)
+	assert.Nil(t, err)
+	_, ok := signer.(*signers.EcsRamRoleSigner)
+	assert.True(t, ok)
+}
+
 func TestSigner_StsTokenSigner(t *testing.T) {
 	c := credentials.NewStsTokenCredential("accessKeyId", "accessKeySecret", "token")
 	signer, err := NewSignerWithCredential(c, nil)

+ 19 - 0
sdk/auth/signers/signer_ecs_ram_role_test.go

@@ -125,6 +125,23 @@ func Test_EcsRamRoleSigner_GetAccessKeyId5(t *testing.T) {
 	assert.Equal(t, "", accessKeyId)
 }
 
+func Test_EcsRamRoleSigner_GetAccessKeyId6(t *testing.T) {
+	c := credentials.NewEcsRamRoleCredential("roleName")
+	s := NewEcsRamRoleSigner(c, nil)
+	assert.NotNil(t, s)
+	// Start a test server locally.
+	ts := mockServer(201, `{"Code":"Success"}`)
+	defer ts.Close()
+	originalSecurityCredURL := securityCredURL
+	securityCredURL = strings.Replace(securityCredURL, "http://100.100.100.200", ts.URL, -1)
+	defer func() {
+		securityCredURL = originalSecurityCredURL
+	}()
+	accessKeyId, err := s.GetAccessKeyId()
+	assert.Equal(t, "refresh Ecs sts token err, httpStatus: 201, message = {\"Code\":\"Success\"}", err.Error())
+	assert.Equal(t, "", accessKeyId)
+}
+
 func Test_EcsRamRoleSigner_GetAccessKeyId_Success(t *testing.T) {
 	c := credentials.NewEcsRamRoleCredential("roleName")
 	s := NewEcsRamRoleSigner(c, nil)
@@ -161,4 +178,6 @@ func Test_EcsRamRoleSigner_GetAccessKeyId_Success(t *testing.T) {
 	assert.Equal(t, expiration, s.credentialExpiration)
 
 	assert.Equal(t, "1cZAkOls5YUecgvzbeEbfGy1wFw=", s.Sign("string to sign", "/"))
+	s.sessionCredential.StsToken = ""
+	assert.Len(t, s.GetExtraParam(), 0)
 }

+ 28 - 0
sdk/auth/signers/signer_ram_role_arn_test.go

@@ -174,3 +174,31 @@ func Test_RamRoleArn_GetAccessKeyIdAndSign(t *testing.T) {
 	signature := s.Sign("string to sign", "/")
 	assert.Equal(t, "dcM4bWGEoD5QUp9xhLW3SfcWfgs=", signature)
 }
+
+func Test_RamRoleArn_GetExtraParam_Fail(t *testing.T) {
+	c := credentials.NewRamRoleArnCredential("accessKeyId", "accessKeySecret", "roleArn", "roleSessionName", 3600)
+	// mock 200 response and valid json and valid result
+	s, err := NewRamRoleArnSigner(c, func(*requests.CommonRequest, interface{}) (response *responses.CommonResponse, err error) {
+		res := responses.NewCommonResponse()
+		statusCode := 200
+		header := make(http.Header)
+		status := strconv.Itoa(statusCode)
+		httpresp := &http.Response{
+			Proto:      "HTTP/1.1",
+			ProtoMajor: 1,
+			Header:     header,
+			StatusCode: statusCode,
+			Status:     status + " " + http.StatusText(statusCode),
+		}
+
+		json := `{"Credentials":{"AccessKeyId":"access key id","AccessKeySecret": "access key secret","SecurityToken":""}}`
+		httpresp.Body = ioutil.NopCloser(bytes.NewReader([]byte(json)))
+		responses.Unmarshal(res, httpresp, "JSON")
+		return res, nil
+	})
+	assert.Nil(t, err)
+	assert.NotNil(t, s)
+
+	params := s.GetExtraParam()
+	assert.Len(t, params, 0)
+}

+ 181 - 9
sdk/client_test.go

@@ -20,6 +20,7 @@ import (
 	"net/http"
 	"strconv"
 	"testing"
+	"time"
 
 	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
 
@@ -29,6 +30,34 @@ import (
 	"github.com/stretchr/testify/assert"
 )
 
+type signertest struct {
+	name string
+}
+
+func (s *signertest) GetName() string {
+	return ""
+}
+
+func (s *signertest) GetType() string {
+	return ""
+}
+
+func (s *signertest) GetVersion() string {
+	return ""
+}
+
+func (s *signertest) GetAccessKeyId() (string, error) {
+	return "", nil
+}
+
+func (s *signertest) GetExtraParam() map[string]string {
+	return nil
+}
+
+func (s *signertest) Sign(stringToSign, secretSuffix string) string {
+	return ""
+}
+
 func Test_Client(t *testing.T) {
 	defer func() {
 		err := recover()
@@ -40,6 +69,12 @@ func Test_Client(t *testing.T) {
 
 func Test_NewClientWithOptions(t *testing.T) {
 	c := NewConfig()
+	c.HttpTransport = &http.Transport{
+		IdleConnTimeout: time.Duration(10 * time.Second),
+	}
+	c.EnableAsync = true
+	c.GoRoutinePoolSize = 1
+	c.MaxTaskQueueSize = 1
 	credential := credentials.NewAccessKeyCredential("acesskeyid", "accesskeysecret")
 	client, err := NewClientWithOptions("regionid", c, credential)
 	assert.Nil(t, err)
@@ -62,6 +97,8 @@ func Test_NewClientWithRamRoleArn(t *testing.T) {
 	client, err := NewClientWithRamRoleArn("regionid", "acesskeyid", "accesskeysecret", "roleArn", "roleSessionName")
 	assert.Nil(t, err)
 	assert.NotNil(t, client)
+	config := client.InitClientConfig()
+	assert.NotNil(t, config)
 }
 
 func Test_NewClientWithEcsRamRole(t *testing.T) {
@@ -118,6 +155,35 @@ func Test_DoAction(t *testing.T) {
 	assert.Equal(t, false, client.isRunning)
 }
 
+func Test_DoAction_Timeout(t *testing.T) {
+	client, err := NewClientWithAccessKey("regionid", "acesskeyid", "accesskeysecret")
+	assert.Nil(t, err)
+	assert.NotNil(t, client)
+	assert.Equal(t, true, client.isRunning)
+	request := requests.NewCommonRequest()
+	request.Domain = "ecs.aliyuncs.com"
+	request.Version = "2014-05-26"
+	request.ApiName = "DescribeInstanceStatus"
+
+	request.QueryParams["PageNumber"] = "1"
+	request.QueryParams["PageSize"] = "30"
+	request.TransToAcsRequest()
+	response := responses.NewCommonResponse()
+	origTestHookDo := hookDo
+	defer func() { hookDo = origTestHookDo }()
+	hookDo = func(fn func(req *http.Request) (*http.Response, error)) func(req *http.Request) (*http.Response, error) {
+		return func(req *http.Request) (*http.Response, error) {
+			return mockResponse(200, "")
+		}
+	}
+	err = client.DoAction(request, response)
+	assert.Nil(t, err)
+	assert.Equal(t, 200, response.GetHttpStatus())
+	assert.Equal(t, "", response.GetHttpContentString())
+	client.Shutdown()
+	assert.Equal(t, false, client.isRunning)
+}
+
 func Test_ProcessCommonRequest(t *testing.T) {
 	client, err := NewClientWithAccessKey("regionid", "acesskeyid", "accesskeysecret")
 	assert.Nil(t, err)
@@ -172,12 +238,118 @@ func Test_DoAction_With500(t *testing.T) {
 	assert.Equal(t, "Server Internel Error", response.GetHttpContentString())
 }
 
-// func Test_EnableAsync(t *testing.T) {
-// 	client, err := NewClientWithAccessKey("regionid", "acesskeyid", "accesskeysecret")
-// 	assert.Nil(t, err)
-// 	assert.NotNil(t, client)
-// 	assert.Equal(t, true, client.isRunning)
-// 	client.EnableAsync(2, 8)
-// 	client.Shutdown()
-// 	assert.Equal(t, false, client.isRunning)
-// }
+func TestClient_BuildRequestWithSigner(t *testing.T) {
+	client, err := NewClientWithAccessKey("regionid", "acesskeyid", "accesskeysecret")
+	assert.Nil(t, err)
+	assert.NotNil(t, client)
+	assert.Equal(t, true, client.isRunning)
+	request := requests.NewCommonRequest()
+	request.Domain = "ecs.aliyuncs.com"
+	request.Version = "2014-05-26"
+	request.ApiName = "DescribeInstanceStatus"
+
+	request.QueryParams["PageNumber"] = "1"
+	request.QueryParams["PageSize"] = "30"
+	request.RegionId = "regionid"
+	request.TransToAcsRequest()
+	client.config.UserAgent = "user_agent"
+	err = client.BuildRequestWithSigner(request, nil)
+	assert.Nil(t, err)
+}
+
+func TestClient_BuildRequestWithSigner1(t *testing.T) {
+	client, err := NewClientWithAccessKey("regionid", "acesskeyid", "accesskeysecret")
+	assert.Nil(t, err)
+	assert.NotNil(t, client)
+	assert.Equal(t, true, client.isRunning)
+	request := requests.NewCommonRequest()
+	request.Domain = "ecs.aliyuncs.com"
+	request.Version = "2014-05-26"
+	request.ApiName = "DescribeInstanceStatus"
+
+	request.QueryParams["PageNumber"] = "1"
+	request.QueryParams["PageSize"] = "30"
+	request.RegionId = "regionid"
+	request.TransToAcsRequest()
+	signer := &signertest{
+		name: "signer",
+	}
+	client.config.UserAgent = "user_agent"
+	err = client.BuildRequestWithSigner(request, signer)
+	assert.Nil(t, err)
+}
+
+func TestClient_ProcessCommonRequestWithSigner(t *testing.T) {
+	client, err := NewClientWithAccessKey("regionid", "acesskeyid", "accesskeysecret")
+	assert.Nil(t, err)
+	assert.NotNil(t, client)
+	assert.Equal(t, true, client.isRunning)
+	request := requests.NewCommonRequest()
+	request.Domain = "ecs.aliyuncs.com"
+	request.Version = "2014-05-26"
+	request.ApiName = "DescribeInstanceStatus"
+
+	request.QueryParams["PageNumber"] = "1"
+	request.QueryParams["PageSize"] = "30"
+	request.RegionId = "regionid"
+	signer := &signertest{
+		name: "signer",
+	}
+	_, err = client.ProcessCommonRequestWithSigner(request, signer)
+	assert.NotNil(t, err)
+}
+
+func TestClient_ProcessCommonRequestWithSigner_Error(t *testing.T) {
+	client, err := NewClientWithAccessKey("regionid", "acesskeyid", "accesskeysecret")
+	assert.Nil(t, err)
+	assert.NotNil(t, client)
+	assert.Equal(t, true, client.isRunning)
+	request := requests.NewCommonRequest()
+	request.Domain = "ecs.aliyuncs.com"
+	request.Version = "2014-05-26"
+	request.ApiName = "DescribeInstanceStatus"
+
+	request.QueryParams["PageNumber"] = "1"
+	request.QueryParams["PageSize"] = "30"
+	request.RegionId = "regionid"
+	defer func() {
+		err := recover()
+		assert.NotNil(t, err)
+	}()
+	_, err = client.ProcessCommonRequestWithSigner(request, nil)
+	assert.NotNil(t, err)
+}
+
+func TestClient_NewClientWithStsRoleNameOnEcs(t *testing.T) {
+	client, err := NewClientWithStsRoleNameOnEcs("regionid", "rolename")
+	assert.Nil(t, err)
+	assert.NotNil(t, client)
+	assert.Equal(t, true, client.isRunning)
+	config := client.GetConfig()
+	assert.NotNil(t, config)
+	err = client.AddAsyncTask(nil)
+	assert.NotNil(t, err)
+}
+
+func TestClient_NewClientWithStsRoleArn(t *testing.T) {
+	client, err := NewClientWithStsRoleArn("regionid", "acesskeyid", "accesskeysecret", "rolearn", "rolesessionname")
+	assert.Nil(t, err)
+	assert.NotNil(t, client)
+	assert.Equal(t, true, client.isRunning)
+	task := func() {}
+	client.asyncTaskQueue = make(chan func(), 1)
+	err = client.AddAsyncTask(task)
+	assert.Nil(t, err)
+	client.Shutdown()
+	assert.Equal(t, false, client.isRunning)
+}
+
+//func Test_EnableAsync(t *testing.T) {
+//	client, err := NewClientWithAccessKey("regionid", "acesskeyid", "accesskeysecret")
+//	assert.Nil(t, err)
+//	assert.NotNil(t, client)
+//	assert.Equal(t, true, client.isRunning)
+//	client.EnableAsync(2, 8)
+//	client.Shutdown()
+//	assert.Equal(t, false, client.isRunning)
+//}

+ 7 - 0
sdk/endpoints/location_resolver_test.go

@@ -95,6 +95,13 @@ func TestLocationResolver_TryResolve_Location_With_Endpoint2(t *testing.T) {
 	assert.Equal(t, true, support)
 	assert.Nil(t, err)
 	// hit the cache
+	lastClearTimePerProduct.Set(resolveParam.Product+"#"+resolveParam.RegionId, int64(0))
+	endpoint, support, err = resolver.TryResolve(resolveParam)
+	assert.Equal(t, "ecs-cn-hangzhou.aliyuncs.com", endpoint)
+	assert.Equal(t, true, support)
+	assert.Nil(t, err)
+	resolveParam.LocationEndpointType = "openAPI"
+	lastClearTimePerProduct.Set(resolveParam.Product+"#"+resolveParam.RegionId, 0)
 	endpoint, support, err = resolver.TryResolve(resolveParam)
 	assert.Equal(t, "ecs-cn-hangzhou.aliyuncs.com", endpoint)
 	assert.Equal(t, true, support)

+ 9 - 0
sdk/responses/response_test.go

@@ -68,6 +68,15 @@ func Test_CommonResponse_Unmarshal_CommonResponse(t *testing.T) {
 	assert.Nil(t, err)
 }
 
+func Test_CommonResponse_Unmarshal_XML(t *testing.T) {
+	r := &MyResponse{
+		BaseResponse: &BaseResponse{},
+	}
+	res := makeHTTPResponse(200, `{"RequestId": "the request id"}`)
+	err := Unmarshal(r, res, "XML")
+	assert.NotNil(t, err)
+}
+
 type MyResponse struct {
 	*BaseResponse
 	RequestId string

+ 33 - 0
sdk/utils/utils_test.go

@@ -1,7 +1,9 @@
 package utils
 
 import (
+	"fmt"
 	"regexp"
+	"strings"
 	"testing"
 	"time"
 
@@ -62,3 +64,34 @@ func TestGetUrlFormedMap(t *testing.T) {
 	s2 := GetUrlFormedMap(m)
 	assert.Equal(t, "key=value&key2=http%3A%2F%2Fdomain%2F%3Fkey%3Dvalue%26key2%3Dvalue2", s2)
 }
+
+func TestGetTimeInFormatISO8601WithTZData(t *testing.T) {
+	TZData = []byte(`"GMT"`)
+	LoadLocationFromTZData = func(name string, data []byte) (location *time.Location, e error) {
+		if strings.Contains(string(data), name) {
+			location, _ = time.LoadLocation(name)
+		}
+		e = fmt.Errorf("There is a error in test.")
+		return location, e
+	}
+	defer func() {
+		err := recover()
+		assert.NotNil(t, err)
+	}()
+	s := GetTimeInFormatISO8601()
+	assert.Equal(t, 20, len(s))
+	// 2006-01-02T15:04:05Z
+	re := regexp.MustCompile(`^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$`)
+	assert.True(t, re.MatchString(s))
+}
+
+func TestGetTimeInFormatRFC2616WithTZData(t *testing.T) {
+	defer func() {
+		err := recover()
+		assert.NotNil(t, err)
+	}()
+	s := GetTimeInFormatRFC2616()
+	assert.Equal(t, 29, len(s))
+	re := regexp.MustCompile(`^[A-Z][a-z]{2}, [0-9]{2} [A-Z][a-z]{2} [0-9]{4} [0-9]{2}:[0-9]{2}:[0-9]{2} GMT$`)
+	assert.True(t, re.MatchString(s))
+}