profile_credentials_test.go 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. package provider_test
  2. import (
  3. "os"
  4. "runtime"
  5. "strings"
  6. "testing"
  7. "github.com/aliyun/alibaba-cloud-sdk-go/sdk/auth/credentials"
  8. "github.com/stretchr/testify/assert"
  9. "github.com/aliyun/alibaba-cloud-sdk-go/sdk/auth/credentials/provider"
  10. )
  11. var inistr = `
  12. [default]
  13. enable = true
  14. type = access_key
  15. access_key_id = foo
  16. access_key_secret = bar
  17. [notype]
  18. access_key_id = foo
  19. access_key_secret = bar
  20. [noak]
  21. type = access_key
  22. access_key_secret = bar
  23. [emptyak]
  24. type = access_key
  25. access_key_id =
  26. access_key_secret = bar
  27. [ecs]
  28. type = ecs_ram_role
  29. role_name = EcsRamRoleTest
  30. [noecs]
  31. type = ecs_ram_role
  32. [emptyecs]
  33. type = ecs_ram_role
  34. role_name =
  35. [ram]
  36. type = ram_role_arn
  37. access_key_id = foo
  38. access_key_secret = bar
  39. role_arn = role_arn
  40. role_session_name = session_name
  41. [noram]
  42. type = ram_role_arn
  43. access_key_secret = bar
  44. role_arn = role_arn
  45. role_session_name = session_name
  46. [emptyram]
  47. type = ram_role_arn
  48. access_key_id =
  49. access_key_secret = bar
  50. role_arn = role_arn
  51. role_session_name = session_name
  52. [rsa]
  53. type = rsa_key_pair
  54. public_key_id = publicKeyId
  55. private_key_file = ./pk.pem
  56. [norsa]
  57. type = rsa_key_pair
  58. public_key_id = publicKeyId
  59. [emptyrsa]
  60. type = rsa_key_pair
  61. public_key_id = publicKeyId
  62. private_key_file =
  63. [error_rsa]
  64. type = rsa_key_pair
  65. public_key_id = publicKeyId
  66. private_key_file = ./pk_error.pem
  67. [error_type]
  68. type = error_type
  69. public_key_id = publicKeyId
  70. private_key_file = ./pk_error.pem
  71. `
  72. var privatekey = `this is privatekey`
  73. func TestProfileProvider(t *testing.T) {
  74. var HOME string
  75. if runtime.GOOS == "windows" {
  76. HOME = "USERPROFILE"
  77. } else {
  78. HOME = "HOME"
  79. }
  80. path, ok := os.LookupEnv(HOME)
  81. assert.True(t, ok)
  82. os.Unsetenv(HOME)
  83. // testcase 1, no HOME or USERPROFILE environment variable set
  84. p := provider.NewProfileProvider()
  85. c, err := p.Resolve()
  86. assert.Nil(t, c)
  87. assert.EqualError(t, err, "The default credential file path is invalid")
  88. // testcase 2, default profile object
  89. os.Setenv(HOME, path)
  90. p = provider.NewProfileProvider()
  91. value, ok := p.(*provider.ProfileProvider)
  92. assert.True(t, ok)
  93. assert.Equal(t, value.Profile, "default")
  94. // testcase 3, credential file does not exist in the default path
  95. // and section name does not exist
  96. p = provider.NewProfileProvider("first")
  97. value, ok = p.(*provider.ProfileProvider)
  98. assert.True(t, ok)
  99. assert.Equal(t, value.Profile, "first")
  100. c, err = p.Resolve()
  101. assert.Nil(t, c)
  102. assert.Nil(t, err)
  103. // testcase 4, credential file path is error
  104. os.Setenv(provider.ENVCredentialFile, "../../credentials_error")
  105. p = provider.NewProfileProvider()
  106. c, err = p.Resolve()
  107. assert.Nil(t, c)
  108. assert.True(t, strings.Contains(err.Error(), "ERROR: Can not open file"))
  109. // create profile
  110. os.Setenv(provider.ENVCredentialFile, "./credentials")
  111. file, err := os.Create("./credentials")
  112. assert.Nil(t, err)
  113. file.WriteString(inistr)
  114. file.Close()
  115. defer os.Remove("./credentials")
  116. // testcase 5, section does not exist
  117. p = provider.NewProfileProvider("NonExist")
  118. c, err = p.Resolve()
  119. assert.Nil(t, c)
  120. assert.True(t, strings.Contains(err.Error(), "ERROR: Can not load section"))
  121. // testcase 6, credential type does not set
  122. p = provider.NewProfileProvider("notype")
  123. c, err = p.Resolve()
  124. assert.Nil(t, c)
  125. assert.True(t, strings.Contains(err.Error(), "ERROR: Can not find credential type"))
  126. // testcase 7, normal AK
  127. p = provider.NewProfileProvider()
  128. c, err = p.Resolve()
  129. assert.Equal(t, credentials.NewAccessKeyCredential("foo", "bar"), c)
  130. assert.Nil(t, err)
  131. // testcase 8, key does not exist
  132. p = provider.NewProfileProvider("noak")
  133. c, err = p.Resolve()
  134. assert.Nil(t, c)
  135. assert.True(t, strings.Contains(err.Error(), "ERROR: Failed to get value"))
  136. // testcase 9, value is empty
  137. p = provider.NewProfileProvider("emptyak")
  138. c, err = p.Resolve()
  139. assert.Nil(t, c)
  140. assert.True(t, strings.Contains(err.Error(), "ERROR: Value can't be empty"))
  141. //testcase 10, normal EcsRamRole
  142. p = provider.NewProfileProvider("ecs")
  143. c, err = p.Resolve()
  144. assert.Equal(t, credentials.NewEcsRamRoleCredential("EcsRamRoleTest"), c)
  145. assert.Nil(t, err)
  146. //testcase 11, key does not exist
  147. p = provider.NewProfileProvider("noecs")
  148. c, err = p.Resolve()
  149. assert.Nil(t, c)
  150. assert.True(t, strings.Contains(err.Error(), "ERROR: Failed to get value"))
  151. //testcase 12, value is empty
  152. p = provider.NewProfileProvider("emptyecs")
  153. c, err = p.Resolve()
  154. assert.Nil(t, c)
  155. assert.True(t, strings.Contains(err.Error(), "ERROR: Value can't be empty"))
  156. //testcase 13, normal RamRoleArn
  157. p = provider.NewProfileProvider("ram")
  158. c, err = p.Resolve()
  159. assert.Equal(t, credentials.NewRamRoleArnCredential("foo", "bar", "role_arn", "session_name", 3600), c)
  160. assert.Nil(t, err)
  161. //testcase 14, key does not exist
  162. p = provider.NewProfileProvider("noram")
  163. c, err = p.Resolve()
  164. assert.Nil(t, c)
  165. assert.True(t, strings.Contains(err.Error(), "ERROR: Failed to get value"))
  166. //testcase 15, value is empty
  167. p = provider.NewProfileProvider("emptyram")
  168. c, err = p.Resolve()
  169. assert.Nil(t, c)
  170. assert.True(t, strings.Contains(err.Error(), "ERROR: Value can't be empty"))
  171. //testase 16, normal RsaKeyPair
  172. file, err = os.Create("./pk.pem")
  173. assert.Nil(t, err)
  174. file.WriteString(privatekey)
  175. file.Close()
  176. p = provider.NewProfileProvider("rsa")
  177. c, err = p.Resolve()
  178. assert.Equal(t, credentials.NewRsaKeyPairCredential("", "publicKeyId", 3600), c)
  179. assert.Nil(t, err)
  180. defer os.Remove(`./pk.pem`)
  181. //testcase 17, key does not exist
  182. p = provider.NewProfileProvider("norsa")
  183. c, err = p.Resolve()
  184. assert.Nil(t, c)
  185. assert.True(t, strings.Contains(err.Error(), "ERROR: Failed to get value"))
  186. //testcase 18, value is empty
  187. p = provider.NewProfileProvider("emptyrsa")
  188. c, err = p.Resolve()
  189. assert.Nil(t, c)
  190. assert.True(t, strings.Contains(err.Error(), "ERROR: Value can't be empty"))
  191. //testcase 19, the value is error
  192. p = provider.NewProfileProvider("error_rsa")
  193. c, err = p.Resolve()
  194. assert.Nil(t, c)
  195. assert.True(t, strings.Contains(err.Error(), "ERROR: Can not get private_key"))
  196. //testcase 20, credential type is error
  197. p = provider.NewProfileProvider("error_type")
  198. c, err = p.Resolve()
  199. assert.Nil(t, c)
  200. assert.True(t, strings.Contains(err.Error(), "ERROR: Failed to get credential"))
  201. }