rpc_signature_composer_test.go 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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. signRpcRequest(request, signer, "regionId")
  46. assert.Equal(t, "mock date", request.GetQueryParams()["Timestamp"])
  47. assert.Equal(t, "MOCK_UUID", request.GetQueryParams()["SignatureNonce"])
  48. assert.Equal(t, "7loPmFjvDnzOVnQeQNj85S6nFGY=", request.GetQueryParams()["Signature"])
  49. }
  50. // func TestRpcSignatureComposer2(t *testing.T) {
  51. // request := requests.NewCommonRequest()
  52. // request.PathPattern = "/users/:user"
  53. // request.FormParams["key"] = "value"
  54. // request.AcceptFormat = "XML"
  55. // request.TransToAcsRequest()
  56. // c := credentials.NewAccessKeyCredential("accessKeyId", "accessKeySecret")
  57. // signer := signers.NewAccessKeySigner(c)
  58. // origTestHookLookupIP := hookGetDate
  59. // defer func() { hookGetDate = origTestHookLookupIP }()
  60. // hookGetDate = mockDate
  61. // signRpcRequest(request, signer, "regionId")
  62. // assert.Equal(t, "application/x-www-form-urlencoded", request.GetHeaders()["Content-Type"])
  63. // assert.Equal(t, "mock date", request.GetHeaders()["Date"])
  64. // assert.Equal(t, "application/xml", request.GetHeaders()["Accept"])
  65. // assert.Equal(t, "acs accessKeyId:U9uA3ftRZKixHPB08Z7Z4GOlpTY=", request.GetQueryParams()["Signature"])
  66. // }