rpc_signature_composer_test.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package auth
  2. import (
  3. "testing"
  4. "github.com/stretchr/testify/assert"
  5. "github.com/aliyun/alibaba-cloud-sdk-go/sdk/auth/credentials"
  6. "github.com/aliyun/alibaba-cloud-sdk-go/sdk/auth/signers"
  7. "github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
  8. )
  9. func mockRpcDate(fn func() string) string {
  10. return "mock date"
  11. }
  12. func mockRpcGetUUIDV4(fn func() string) string {
  13. return "MOCK_UUID"
  14. }
  15. func TestRpcSignatureComposer_buildRpcStringToSign(t *testing.T) {
  16. request := requests.NewCommonRequest()
  17. request.TransToAcsRequest()
  18. stringToSign := buildRpcStringToSign(request)
  19. assert.Equal(t, "GET&%2F&", stringToSign)
  20. request.FormParams["key"] = "value"
  21. stringToSign = buildRpcStringToSign(request)
  22. assert.Equal(t, "GET&%2F&key%3Dvalue", stringToSign)
  23. request.QueryParams["q"] = "value"
  24. stringToSign = buildRpcStringToSign(request)
  25. assert.Equal(t, "GET&%2F&key%3Dvalue%26q%3Dvalue", stringToSign)
  26. request.QueryParams["q"] = "http://domain/?q=value&q2=value2"
  27. stringToSign = buildRpcStringToSign(request)
  28. assert.Equal(t, "GET&%2F&key%3Dvalue%26q%3Dhttp%253A%252F%252Fdomain%252F%253Fq%253Dvalue%2526q2%253Dvalue2", stringToSign)
  29. }
  30. func TestRpcSignatureComposer(t *testing.T) {
  31. request := requests.NewCommonRequest()
  32. request.TransToAcsRequest()
  33. c := credentials.NewAccessKeyCredential("accessKeyId", "accessKeySecret")
  34. signer := signers.NewAccessKeySigner(c)
  35. origTestHookGetDate := hookGetDate
  36. defer func() { hookGetDate = origTestHookGetDate }()
  37. hookGetDate = mockRpcDate
  38. origTestHookGetUUIDV4 := hookGetUUIDV4
  39. defer func() { hookGetUUIDV4 = origTestHookGetUUIDV4 }()
  40. hookGetUUIDV4 = mockRpcGetUUIDV4
  41. signRpcRequest(request, signer, "regionId")
  42. assert.Equal(t, "mock date", request.GetQueryParams()["Timestamp"])
  43. assert.Equal(t, "MOCK_UUID", request.GetQueryParams()["SignatureNonce"])
  44. assert.Equal(t, "7loPmFjvDnzOVnQeQNj85S6nFGY=", request.GetQueryParams()["Signature"])
  45. }
  46. // func TestRpcSignatureComposer2(t *testing.T) {
  47. // request := requests.NewCommonRequest()
  48. // request.PathPattern = "/users/:user"
  49. // request.FormParams["key"] = "value"
  50. // request.AcceptFormat = "XML"
  51. // request.TransToAcsRequest()
  52. // c := credentials.NewAccessKeyCredential("accessKeyId", "accessKeySecret")
  53. // signer := signers.NewAccessKeySigner(c)
  54. // origTestHookLookupIP := hookGetDate
  55. // defer func() { hookGetDate = origTestHookLookupIP }()
  56. // hookGetDate = mockDate
  57. // signRpcRequest(request, signer, "regionId")
  58. // assert.Equal(t, "application/x-www-form-urlencoded", request.GetHeaders()["Content-Type"])
  59. // assert.Equal(t, "mock date", request.GetHeaders()["Date"])
  60. // assert.Equal(t, "application/xml", request.GetHeaders()["Accept"])
  61. // assert.Equal(t, "acs accessKeyId:U9uA3ftRZKixHPB08Z7Z4GOlpTY=", request.GetQueryParams()["Signature"])
  62. // }