fake.go 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  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. "errors"
  16. "fmt"
  17. secretmanager "cloud.google.com/go/secretmanager/apiv1"
  18. "cloud.google.com/go/secretmanager/apiv1/secretmanagerpb"
  19. "github.com/google/go-cmp/cmp"
  20. "github.com/google/go-cmp/cmp/cmpopts"
  21. "github.com/googleapis/gax-go/v2"
  22. )
  23. type MockSMClient struct {
  24. accessSecretFn func(ctx context.Context, req *secretmanagerpb.AccessSecretVersionRequest, opts ...gax.CallOption) (*secretmanagerpb.AccessSecretVersionResponse, error)
  25. ListSecretsFn func(ctx context.Context, req *secretmanagerpb.ListSecretsRequest, opts ...gax.CallOption) *secretmanager.SecretIterator
  26. AddSecretFn func(ctx context.Context, req *secretmanagerpb.AddSecretVersionRequest, opts ...gax.CallOption) (*secretmanagerpb.SecretVersion, error)
  27. createSecretFn func(ctx context.Context, req *secretmanagerpb.CreateSecretRequest, opts ...gax.CallOption) (*secretmanagerpb.Secret, error)
  28. CreateSecretCalledWithN map[int]*secretmanagerpb.CreateSecretRequest
  29. createSecretCallN int
  30. updateSecretFn func(ctx context.Context, req *secretmanagerpb.UpdateSecretRequest, opts ...gax.CallOption) (*secretmanagerpb.Secret, error)
  31. UpdateSecretCallN int
  32. closeFn func() error
  33. GetSecretFn func(ctx context.Context, req *secretmanagerpb.GetSecretRequest, opts ...gax.CallOption) (*secretmanagerpb.Secret, error)
  34. DeleteSecretFn func(ctx context.Context, req *secretmanagerpb.DeleteSecretRequest, opts ...gax.CallOption) error
  35. }
  36. func (mc *MockSMClient) Cleanup() {
  37. mc.CreateSecretCalledWithN = map[int]*secretmanagerpb.CreateSecretRequest{}
  38. mc.createSecretCallN = 0
  39. mc.UpdateSecretCallN = 0
  40. }
  41. type AccessSecretVersionMockReturn struct {
  42. Res *secretmanagerpb.AccessSecretVersionResponse
  43. Err error
  44. }
  45. type AddSecretVersionMockReturn struct {
  46. SecretVersion *secretmanagerpb.SecretVersion
  47. Err error
  48. }
  49. type SecretMockReturn struct {
  50. Secret *secretmanagerpb.Secret
  51. Err error
  52. }
  53. func (mc *MockSMClient) DeleteSecret(ctx context.Context, req *secretmanagerpb.DeleteSecretRequest, _ ...gax.CallOption) error {
  54. return mc.DeleteSecretFn(ctx, req)
  55. }
  56. func (mc *MockSMClient) NewDeleteSecretFn(err error) {
  57. mc.DeleteSecretFn = func(_ context.Context, _ *secretmanagerpb.DeleteSecretRequest, _ ...gax.CallOption) error {
  58. return err
  59. }
  60. }
  61. func (mc *MockSMClient) GetSecret(ctx context.Context, req *secretmanagerpb.GetSecretRequest, _ ...gax.CallOption) (*secretmanagerpb.Secret, error) {
  62. return mc.GetSecretFn(ctx, req)
  63. }
  64. func (mc *MockSMClient) NewGetSecretFn(mock SecretMockReturn) {
  65. mc.GetSecretFn = func(_ context.Context, _ *secretmanagerpb.GetSecretRequest, _ ...gax.CallOption) (*secretmanagerpb.Secret, error) {
  66. return mock.Secret, mock.Err
  67. }
  68. }
  69. func (mc *MockSMClient) AccessSecretVersion(ctx context.Context, req *secretmanagerpb.AccessSecretVersionRequest, _ ...gax.CallOption) (*secretmanagerpb.AccessSecretVersionResponse, error) {
  70. return mc.accessSecretFn(ctx, req)
  71. }
  72. func (mc *MockSMClient) NewAccessSecretVersionFn(mock AccessSecretVersionMockReturn) {
  73. mc.accessSecretFn = func(_ context.Context, _ *secretmanagerpb.AccessSecretVersionRequest, _ ...gax.CallOption) (*secretmanagerpb.AccessSecretVersionResponse, error) {
  74. return mock.Res, mock.Err
  75. }
  76. }
  77. func (mc *MockSMClient) ListSecrets(ctx context.Context, req *secretmanagerpb.ListSecretsRequest, _ ...gax.CallOption) *secretmanager.SecretIterator {
  78. return mc.ListSecretsFn(ctx, req)
  79. }
  80. func (mc *MockSMClient) Close() error {
  81. return mc.closeFn()
  82. }
  83. func (mc *MockSMClient) AddSecretVersion(ctx context.Context, req *secretmanagerpb.AddSecretVersionRequest, _ ...gax.CallOption) (*secretmanagerpb.SecretVersion, error) {
  84. return mc.AddSecretFn(ctx, req)
  85. }
  86. func (mc *MockSMClient) NewAddSecretVersionFn(mock AddSecretVersionMockReturn) {
  87. mc.AddSecretFn = func(_ context.Context, _ *secretmanagerpb.AddSecretVersionRequest, _ ...gax.CallOption) (*secretmanagerpb.SecretVersion, error) {
  88. return mock.SecretVersion, mock.Err
  89. }
  90. }
  91. func (mc *MockSMClient) CreateSecret(ctx context.Context, req *secretmanagerpb.CreateSecretRequest, _ ...gax.CallOption) (*secretmanagerpb.Secret, error) {
  92. if mc.CreateSecretCalledWithN == nil {
  93. mc.CreateSecretCalledWithN = make(map[int]*secretmanagerpb.CreateSecretRequest)
  94. }
  95. mc.CreateSecretCalledWithN[mc.createSecretCallN] = req
  96. mc.createSecretCallN++
  97. return mc.createSecretFn(ctx, req)
  98. }
  99. func (mc *MockSMClient) NewCreateSecretFn(mock SecretMockReturn) {
  100. mc.createSecretFn = func(_ context.Context, _ *secretmanagerpb.CreateSecretRequest, _ ...gax.CallOption) (*secretmanagerpb.Secret, error) {
  101. return mock.Secret, mock.Err
  102. }
  103. }
  104. func (mc *MockSMClient) NilClose() {
  105. mc.closeFn = func() error {
  106. return nil
  107. }
  108. }
  109. func (mc *MockSMClient) CreateSecretError() {
  110. mc.createSecretFn = func(ctx context.Context, req *secretmanagerpb.CreateSecretRequest, opts ...gax.CallOption) (*secretmanagerpb.Secret, error) {
  111. return nil, errors.New("something went wrong")
  112. }
  113. }
  114. func (mc *MockSMClient) CreateSecretGetError() {
  115. mc.createSecretFn = func(ctx context.Context, req *secretmanagerpb.CreateSecretRequest, opts ...gax.CallOption) (*secretmanagerpb.Secret, error) {
  116. mc.accessSecretFn = func(ctx context.Context, req *secretmanagerpb.AccessSecretVersionRequest, opts ...gax.CallOption) (*secretmanagerpb.AccessSecretVersionResponse, error) {
  117. return nil, errors.New("no, this broke")
  118. }
  119. return nil, nil
  120. }
  121. }
  122. func (mc *MockSMClient) DefaultCreateSecret(wantedSecretID, wantedParent string) {
  123. mc.createSecretFn = func(ctx context.Context, req *secretmanagerpb.CreateSecretRequest, opts ...gax.CallOption) (*secretmanagerpb.Secret, error) {
  124. if req.SecretId != wantedSecretID {
  125. return nil, fmt.Errorf("create secret req wrong key: got %v want %v", req.SecretId, wantedSecretID)
  126. }
  127. if req.Parent != wantedParent {
  128. return nil, fmt.Errorf("create secret req wrong parent: got %v want %v", req.Parent, wantedParent)
  129. }
  130. return &secretmanagerpb.Secret{
  131. Name: fmt.Sprintf("%s/%s", req.Parent, req.SecretId),
  132. }, nil
  133. }
  134. }
  135. func (mc *MockSMClient) DefaultAddSecretVersion(wantedData, wantedParent, versionName string) {
  136. mc.AddSecretFn = func(ctx context.Context, req *secretmanagerpb.AddSecretVersionRequest, opts ...gax.CallOption) (*secretmanagerpb.SecretVersion, error) {
  137. if string(req.Payload.Data) != wantedData {
  138. return nil, fmt.Errorf("add version req wrong data got: %v want %v ", req.Payload.Data, wantedData)
  139. }
  140. if req.Parent != wantedParent {
  141. return nil, fmt.Errorf("add version req has wrong parent: got %v want %v", req.Parent, wantedParent)
  142. }
  143. return &secretmanagerpb.SecretVersion{
  144. Name: versionName,
  145. }, nil
  146. }
  147. }
  148. func (mc *MockSMClient) DefaultAccessSecretVersion(wantedVersionName string) {
  149. mc.accessSecretFn = func(ctx context.Context, req *secretmanagerpb.AccessSecretVersionRequest, opts ...gax.CallOption) (*secretmanagerpb.AccessSecretVersionResponse, error) {
  150. if req.Name != wantedVersionName {
  151. return nil, fmt.Errorf("access req has wrong version name: got %v want %v", req.Name, wantedVersionName)
  152. }
  153. return &secretmanagerpb.AccessSecretVersionResponse{
  154. Name: req.Name,
  155. Payload: &secretmanagerpb.SecretPayload{Data: []byte("bar")},
  156. }, nil
  157. }
  158. }
  159. func (mc *MockSMClient) AccessSecretVersionWithError(err error) {
  160. mc.accessSecretFn = func(ctx context.Context, req *secretmanagerpb.AccessSecretVersionRequest, opts ...gax.CallOption) (*secretmanagerpb.AccessSecretVersionResponse, error) {
  161. return nil, err
  162. }
  163. }
  164. func (mc *MockSMClient) UpdateSecret(ctx context.Context, req *secretmanagerpb.UpdateSecretRequest, _ ...gax.CallOption) (*secretmanagerpb.Secret, error) {
  165. mc.UpdateSecretCallN++
  166. return mc.updateSecretFn(ctx, req)
  167. }
  168. func (mc *MockSMClient) NewUpdateSecretFn(mock SecretMockReturn) {
  169. mc.updateSecretFn = func(_ context.Context, _ *secretmanagerpb.UpdateSecretRequest, _ ...gax.CallOption) (*secretmanagerpb.Secret, error) {
  170. return mock.Secret, mock.Err
  171. }
  172. }
  173. func (mc *MockSMClient) WithValue(_ context.Context, req *secretmanagerpb.AccessSecretVersionRequest, val *secretmanagerpb.AccessSecretVersionResponse, err error) {
  174. if mc != nil {
  175. mc.accessSecretFn = func(paramCtx context.Context, paramReq *secretmanagerpb.AccessSecretVersionRequest, paramOpts ...gax.CallOption) (*secretmanagerpb.AccessSecretVersionResponse, error) {
  176. // type secretmanagerpb.AccessSecretVersionRequest contains unexported fields
  177. // use cmpopts.IgnoreUnexported to ignore all the unexported fields in the cmp.
  178. if !cmp.Equal(paramReq, req, cmpopts.IgnoreUnexported(secretmanagerpb.AccessSecretVersionRequest{})) {
  179. return nil, errors.New("unexpected test argument")
  180. }
  181. return val, err
  182. }
  183. }
  184. }