instance_credentials_test.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. package provider_test
  2. import (
  3. "os"
  4. "testing"
  5. "github.com/aliyun/alibaba-cloud-sdk-go/sdk/auth/credentials"
  6. "github.com/stretchr/testify/assert"
  7. "github.com/aliyun/alibaba-cloud-sdk-go/sdk/auth/credentials/provider"
  8. )
  9. func TestInstanceCredentialsProvider(t *testing.T) {
  10. //testcase 1
  11. //return nil, nil
  12. p := provider.NewInstanceCredentialsProvider()
  13. c, err := p.Resolve()
  14. assert.Nil(t, c)
  15. assert.Nil(t, err)
  16. //testcase 2
  17. //return nil, errors.New("Environmental variable 'ALIBABA_CLOUD_ECS_METADATA' are empty")
  18. os.Setenv(provider.ENVEcsMetadata, "")
  19. c, err = p.Resolve()
  20. assert.Nil(t, c)
  21. assert.EqualError(t, err, "Environmental variable 'ALIBABA_CLOUD_ECS_METADATA' are empty")
  22. //testcase 3
  23. //return nil, err
  24. os.Setenv(provider.ENVEcsMetadata, "test")
  25. c, err = p.Resolve()
  26. assert.Nil(t, c)
  27. assert.NotNil(t, err)
  28. //testcase 4
  29. //return nil, fmt.Errorf("The role was not found in the instance")
  30. provider.HookGet = func(fn func(string) (int, []byte, error)) func(string) (int, []byte, error) {
  31. return func(string) (int, []byte, error) {
  32. return 404, []byte(""), nil
  33. }
  34. }
  35. c, err = p.Resolve()
  36. assert.Nil(t, c)
  37. assert.EqualError(t, err, "The role was not found in the instance")
  38. //testcase 5
  39. //return nil, fmt.Errorf("Received %d when getting security credentials for %s", status, roleName)
  40. provider.HookGet = func(fn func(string) (int, []byte, error)) func(string) (int, []byte, error) {
  41. return func(string) (int, []byte, error) {
  42. return 400, []byte(""), nil
  43. }
  44. }
  45. c, err = p.Resolve()
  46. assert.Nil(t, c)
  47. assert.EqualError(t, err, "Received 400 when getting security credentials for test")
  48. //testcase 6
  49. //json unmarshal error
  50. provider.HookGet = func(fn func(string) (int, []byte, error)) func(string) (int, []byte, error) {
  51. return func(string) (int, []byte, error) {
  52. return 200, []byte(`{
  53. AccessKSTS.*******
  54. }`), nil
  55. }
  56. }
  57. c, err = p.Resolve()
  58. assert.Nil(t, c)
  59. assert.NotNil(t, err)
  60. //testcase 7, AccessKeyId does not receive
  61. provider.HookGet = func(fn func(string) (int, []byte, error)) func(string) (int, []byte, error) {
  62. return func(string) (int, []byte, error) {
  63. return 200, []byte(`{
  64. "AccessKeySecret" : "*******",
  65. "Expiration" : "2019-01-28T15:15:56Z",
  66. "SecurityToken" : "SecurityToken",
  67. "LastUpdated" : "2019-01-28T09:15:55Z",
  68. "Code" : "Success"
  69. }`), nil
  70. }
  71. }
  72. c, err = p.Resolve()
  73. assert.Nil(t, c)
  74. assert.EqualError(t, err, "AccessKeyId not in map")
  75. //testcase 8,AccessKeySecret does not receive
  76. provider.HookGet = func(fn func(string) (int, []byte, error)) func(string) (int, []byte, error) {
  77. return func(string) (int, []byte, error) {
  78. return 200, []byte(`{
  79. "AccessKeyId" : "STS.*******",
  80. "Expiration" : "2019-01-28T15:15:56Z",
  81. "SecurityToken" : "SecurityToken",
  82. "LastUpdated" : "2019-01-28T09:15:55Z",
  83. "Code" : "Success"
  84. }`), nil
  85. }
  86. }
  87. c, err = p.Resolve()
  88. assert.Nil(t, c)
  89. assert.EqualError(t, err, "AccessKeySecret not in map")
  90. //testcase 9, SecurityToken does not receive
  91. provider.HookGet = func(fn func(string) (int, []byte, error)) func(string) (int, []byte, error) {
  92. return func(string) (int, []byte, error) {
  93. return 200, []byte(`{
  94. "AccessKeyId" : "STS.*******",
  95. "AccessKeySecret" : "*******",
  96. "Expiration" : "2019-01-28T15:15:56Z",
  97. "LastUpdated" : "2019-01-28T09:15:55Z",
  98. "Code" : "Success"
  99. }`), nil
  100. }
  101. }
  102. c, err = p.Resolve()
  103. assert.Nil(t, c)
  104. assert.EqualError(t, err, "SecurityToken not in map")
  105. //testcase, normal receive
  106. provider.HookGet = func(fn func(string) (int, []byte, error)) func(string) (int, []byte, error) {
  107. return func(string) (int, []byte, error) {
  108. return 200, []byte(`{
  109. "AccessKeyId" : "STS.*******",
  110. "AccessKeySecret" : "*******",
  111. "Expiration" : "2019-01-28T15:15:56Z",
  112. "SecurityToken" : "SecurityToken",
  113. "LastUpdated" : "2019-01-28T09:15:55Z",
  114. "Code" : "Success"
  115. }`), nil
  116. }
  117. }
  118. c, err = p.Resolve()
  119. assert.Nil(t, err)
  120. assert.Equal(t, credentials.NewStsTokenCredential("STS.*******", "*******", "SecurityToken"), c)
  121. }