chain_test.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. package providers
  2. import (
  3. "errors"
  4. "testing"
  5. "github.com/aliyun/alibaba-cloud-sdk-go/sdk/auth"
  6. "github.com/aliyun/alibaba-cloud-sdk-go/sdk/auth/credentials"
  7. )
  8. func TestNewChainProvider_Retrieve_UseFirstCredential(t *testing.T) {
  9. accessKeyCredProvider := &TestProvider{
  10. Credential: &credentials.AccessKeyCredential{},
  11. Err: nil,
  12. }
  13. stsTokenCredProvider := &TestProvider{
  14. Credential: &credentials.StsTokenCredential{},
  15. Err: nil,
  16. }
  17. roleCredential := &TestProvider{
  18. Credential: &credentials.EcsRamRoleCredential{},
  19. Err: nil,
  20. }
  21. credential, err := NewChainProvider([]Provider{accessKeyCredProvider, stsTokenCredProvider, roleCredential}).Retrieve()
  22. if err != nil {
  23. t.Fatal(err)
  24. }
  25. if _, ok := credential.(*credentials.AccessKeyCredential); !ok {
  26. t.Fatal("expected access key credential")
  27. }
  28. }
  29. func TestNewChainProvider_Retrieve_UseSecondCredential(t *testing.T) {
  30. accessKeyCredProvider := &TestProvider{
  31. Credential: nil,
  32. Err: errors.New("I don't work"),
  33. }
  34. stsTokenCredProvider := &TestProvider{
  35. Credential: &credentials.StsTokenCredential{},
  36. Err: nil,
  37. }
  38. roleCredential := &TestProvider{
  39. Credential: &credentials.EcsRamRoleCredential{},
  40. Err: nil,
  41. }
  42. credential, err := NewChainProvider([]Provider{accessKeyCredProvider, stsTokenCredProvider, roleCredential}).Retrieve()
  43. if err != nil {
  44. t.Fatal(err)
  45. }
  46. if _, ok := credential.(*credentials.StsTokenCredential); !ok {
  47. t.Fatal("expected sts token credential")
  48. }
  49. }
  50. func TestNewChainProvider_Retrieve_UseThirdCredential(t *testing.T) {
  51. accessKeyCredProvider := &TestProvider{
  52. Credential: nil,
  53. Err: errors.New("I don't work"),
  54. }
  55. stsTokenCredProvider := &TestProvider{
  56. Credential: nil,
  57. Err: errors.New("I don't work"),
  58. }
  59. roleCredential := &TestProvider{
  60. Credential: &credentials.EcsRamRoleCredential{},
  61. Err: nil,
  62. }
  63. credential, err := NewChainProvider([]Provider{accessKeyCredProvider, stsTokenCredProvider, roleCredential}).Retrieve()
  64. if err != nil {
  65. t.Fatal(err)
  66. }
  67. if _, ok := credential.(*credentials.EcsRamRoleCredential); !ok {
  68. t.Fatal("expected ecs ram role credential")
  69. }
  70. }
  71. func TestNewChainProvider_Retrieve_NoneWork(t *testing.T) {
  72. accessKeyCredProvider := &TestProvider{
  73. Credential: nil,
  74. Err: errors.New("I don't work"),
  75. }
  76. stsTokenCredProvider := &TestProvider{
  77. Credential: nil,
  78. Err: errors.New("I don't work"),
  79. }
  80. roleCredential := &TestProvider{
  81. Credential: nil,
  82. Err: errors.New("I don't work"),
  83. }
  84. _, err := NewChainProvider([]Provider{accessKeyCredProvider, stsTokenCredProvider, roleCredential}).Retrieve()
  85. if err == nil {
  86. t.Fatal("expected error")
  87. }
  88. }
  89. type TestProvider struct {
  90. Credential auth.Credential
  91. Err error
  92. }
  93. func (p *TestProvider) Retrieve() (auth.Credential, error) {
  94. return p.Credential, p.Err
  95. }