fake.go 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. /*
  2. Licensed under the Apache License, Version 2.0 (the "License");
  3. you may not use this file except in compliance with the License.
  4. You may obtain a copy of the License at
  5. http://www.apache.org/licenses/LICENSE-2.0
  6. Unless required by applicable law or agreed to in writing, software
  7. distributed under the License is distributed on an "AS IS" BASIS,
  8. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  9. See the License for the specific language governing permissions and
  10. limitations under the License.
  11. */
  12. package fake
  13. import (
  14. "context"
  15. "github.com/Azure/azure-sdk-for-go/profiles/latest/keyvault/keyvault"
  16. "github.com/google/uuid"
  17. mock "github.com/stretchr/testify/mock"
  18. )
  19. type secretData = struct {
  20. item keyvault.SecretItem
  21. secretVersions map[string]keyvault.SecretBundle
  22. lastVersion string
  23. }
  24. type AzureMock struct {
  25. mock.Mock
  26. knownSecrets map[string]map[string]*secretData
  27. }
  28. func (m *AzureMock) AddSecret(vaultBaseURL, secretName, secretContent string, enabled bool) string {
  29. uid := uuid.NewString()
  30. m.AddSecretWithVersion(vaultBaseURL, secretName, uid, secretContent, enabled)
  31. return uid
  32. }
  33. func (m *AzureMock) AddSecretWithVersion(vaultBaseURL, secretName, secretVersion, secretContent string, enabled bool) {
  34. if m.knownSecrets == nil {
  35. m.knownSecrets = make(map[string]map[string]*secretData)
  36. }
  37. if m.knownSecrets[vaultBaseURL] == nil {
  38. m.knownSecrets[vaultBaseURL] = make(map[string]*secretData)
  39. }
  40. secretItemID := vaultBaseURL + secretName
  41. secretBundleID := secretItemID + "/" + secretVersion
  42. if m.knownSecrets[vaultBaseURL][secretName] == nil {
  43. m.knownSecrets[vaultBaseURL][secretName] = &secretData{
  44. item: newValidSecretItem(secretItemID, enabled),
  45. secretVersions: make(map[string]keyvault.SecretBundle),
  46. }
  47. } else {
  48. m.knownSecrets[vaultBaseURL][secretName].item.Attributes.Enabled = &enabled
  49. }
  50. m.knownSecrets[vaultBaseURL][secretName].secretVersions[secretVersion] = newValidSecretBundle(secretBundleID, secretContent)
  51. m.knownSecrets[vaultBaseURL][secretName].lastVersion = secretVersion
  52. }
  53. func newValidSecretBundle(secretBundleID, secretContent string) keyvault.SecretBundle {
  54. return keyvault.SecretBundle{
  55. Value: &secretContent,
  56. ID: &secretBundleID,
  57. }
  58. }
  59. func newValidSecretItem(secretItemID string, enabled bool) keyvault.SecretItem {
  60. return keyvault.SecretItem{
  61. ID: &secretItemID,
  62. Attributes: &keyvault.SecretAttributes{Enabled: &enabled},
  63. }
  64. }
  65. func (m *AzureMock) ExpectsGetSecret(ctx context.Context, vaultBaseURL, secretName, secretVersion string) {
  66. data := m.knownSecrets[vaultBaseURL][secretName]
  67. version := secretVersion
  68. if version == "" {
  69. version = data.lastVersion
  70. }
  71. returnValue := data.secretVersions[version]
  72. m.On("GetSecret", ctx, vaultBaseURL, secretName, secretVersion).Return(returnValue, nil)
  73. }
  74. func (m *AzureMock) ExpectsGetSecretsComplete(ctx context.Context, vaultBaseURL string, maxresults *int32) {
  75. secretMap := m.knownSecrets[vaultBaseURL]
  76. secretItems := make([]keyvault.SecretItem, len(secretMap))
  77. i := 0
  78. for _, value := range secretMap {
  79. secretItems[i] = value.item
  80. i++
  81. }
  82. firstPage := keyvault.SecretListResult{
  83. Value: &secretItems,
  84. NextLink: nil,
  85. }
  86. returnValue := keyvault.NewSecretListResultIterator(keyvault.NewSecretListResultPage(firstPage, func(context.Context, keyvault.SecretListResult) (keyvault.SecretListResult, error) {
  87. return keyvault.SecretListResult{}, nil
  88. }))
  89. m.On("GetSecretsComplete", ctx, vaultBaseURL, maxresults).Return(returnValue, nil)
  90. }
  91. func (m *AzureMock) GetKey(ctx context.Context, vaultBaseURL, keyName, keyVersion string) (result keyvault.KeyBundle, err error) {
  92. args := m.Called(ctx, vaultBaseURL, keyName, keyVersion)
  93. return args.Get(0).(keyvault.KeyBundle), args.Error(1)
  94. }
  95. func (m *AzureMock) GetSecret(ctx context.Context, vaultBaseURL, secretName, secretVersion string) (result keyvault.SecretBundle, err error) {
  96. args := m.Called(ctx, vaultBaseURL, secretName, secretVersion)
  97. return args.Get(0).(keyvault.SecretBundle), args.Error(1)
  98. }
  99. func (m *AzureMock) GetSecretsComplete(ctx context.Context, vaultBaseURL string, maxresults *int32) (result keyvault.SecretListResultIterator, err error) {
  100. args := m.Called(ctx, vaultBaseURL, maxresults)
  101. return args.Get(0).(keyvault.SecretListResultIterator), args.Error(1)
  102. }