Selaa lähdekoodia

Add test cases for sdk/auth/roa_signature_composer.go

Jackson Tian 7 vuotta sitten
vanhempi
commit
2e111270a3
2 muutettua tiedostoa jossa 76 lisäystä ja 1 poistoa
  1. 5 1
      sdk/auth/roa_signature_composer.go
  2. 71 0
      sdk/auth/roa_signature_composer_test.go

+ 5 - 1
sdk/auth/roa_signature_composer.go

@@ -25,6 +25,10 @@ import (
 
 var debug utils.Debug
 
+var hookGetDate = func(fn func() string) string {
+	return fn()
+}
+
 func init() {
 	debug = utils.Init("sdk")
 }
@@ -64,7 +68,7 @@ func completeROASignParams(request requests.AcsRequest, signer Signer, regionId
 	}
 
 	// complete header params
-	headerParams["Date"] = utils.GetTimeInFormatRFC2616()
+	headerParams["Date"] = hookGetDate(utils.GetTimeInFormatRFC2616)
 	headerParams["x-acs-signature-method"] = signer.GetName()
 	headerParams["x-acs-signature-version"] = signer.GetVersion()
 	if request.GetFormParams() != nil && len(request.GetFormParams()) > 0 {

+ 71 - 0
sdk/auth/roa_signature_composer_test.go

@@ -0,0 +1,71 @@
+package auth
+
+import (
+	"testing"
+
+	"github.com/stretchr/testify/assert"
+
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/auth/credentials"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/auth/signers"
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
+)
+
+func mockDate(fn func() string) string {
+	return "mock date"
+}
+
+func TestRoaSignatureComposer_buildRoaStringToSign(t *testing.T) {
+	request := requests.NewCommonRequest()
+	request.PathPattern = "/users/:user"
+	request.TransToAcsRequest()
+	stringToSign := buildRoaStringToSign(request)
+	assert.Equal(t, "GET\nx-acs-version:\n/users/:user", stringToSign)
+
+	request.Headers["Accept"] = "application/json;charset=utf8"
+	stringToSign = buildRoaStringToSign(request)
+	assert.Equal(t, "GET\napplication/json;charset=utf8\nx-acs-version:\n/users/:user", stringToSign)
+	request.SetContentType("application/json")
+	request.Headers["x-acs-custom-header"] = "value"
+	stringToSign = buildRoaStringToSign(request)
+	assert.Equal(t, "GET\napplication/json;charset=utf8\napplication/json\nx-acs-custom-header:value\nx-acs-version:\n/users/:user", stringToSign)
+	request.QueryParams["q"] = "value"
+	stringToSign = buildRoaStringToSign(request)
+	assert.Equal(t, "GET\napplication/json;charset=utf8\napplication/json\nx-acs-custom-header:value\nx-acs-version:\n/users/:user?q=value", stringToSign)
+	request.QueryParams["q"] = "http://domain/?q=value&q2=value2"
+	stringToSign = buildRoaStringToSign(request)
+	assert.Equal(t, "GET\napplication/json;charset=utf8\napplication/json\nx-acs-custom-header:value\nx-acs-version:\n/users/:user?q=http://domain/?q=value&q2=value2", stringToSign)
+}
+
+func TestRoaSignatureComposer(t *testing.T) {
+	request := requests.NewCommonRequest()
+	request.PathPattern = "/users/:user"
+	request.TransToAcsRequest()
+	c := credentials.NewAccessKeyCredential("accessKeyId", "accessKeySecret")
+	signer := signers.NewAccessKeySigner(c)
+
+	origTestHookLookupIP := hookGetDate
+	defer func() { hookGetDate = origTestHookLookupIP }()
+	hookGetDate = mockDate
+	signRoaRequest(request, signer, "regionId")
+	assert.Equal(t, "mock date", request.GetHeaders()["Date"])
+	assert.Equal(t, "acs accessKeyId:degLHXLEN6rMojj+bOlK74U9iic=", request.GetHeaders()["Authorization"])
+}
+
+func TestRoaSignatureComposer2(t *testing.T) {
+	request := requests.NewCommonRequest()
+	request.PathPattern = "/users/:user"
+	request.FormParams["key"] = "value"
+	request.AcceptFormat = "XML"
+	request.TransToAcsRequest()
+	c := credentials.NewAccessKeyCredential("accessKeyId", "accessKeySecret")
+	signer := signers.NewAccessKeySigner(c)
+
+	origTestHookLookupIP := hookGetDate
+	defer func() { hookGetDate = origTestHookLookupIP }()
+	hookGetDate = mockDate
+	signRoaRequest(request, signer, "regionId")
+	assert.Equal(t, "application/x-www-form-urlencoded", request.GetHeaders()["Content-Type"])
+	assert.Equal(t, "mock date", request.GetHeaders()["Date"])
+	assert.Equal(t, "application/xml", request.GetHeaders()["Accept"])
+	assert.Equal(t, "acs accessKeyId:U9uA3ftRZKixHPB08Z7Z4GOlpTY=", request.GetHeaders()["Authorization"])
+}