Browse Source

Refactor Table test SetSecretGetSecretReturns404

Signed-off-by: Lilly Daniell <lilly.daniell@engineerbetter.com>
Co-authored-by: William Young <will.young@engineerbetter.com>
Co-authored-by: Adrienne Galloway <adrienne.galloway@engineerbetter.com>
Co-authored-by: Marcus Dantas <marcus.dantas@engineerbetter.com>
Co-authored-by: Amr Fawzy <amr.fawzy@container-solutions.com>
Lilly Daniell 3 years ago
parent
commit
8463f33e39

+ 12 - 1
pkg/provider/gcp/secretmanager/fake/fake.go

@@ -49,6 +49,11 @@ type GetSecretMockReturn struct {
 	Err    error
 }
 
+type CreateSecretMockReturn struct {
+	Secret *secretmanagerpb.Secret
+	Err    error
+}
+
 func (mc *MockSMClient) GetSecret(ctx context.Context, req *secretmanagerpb.GetSecretRequest, opts ...gax.CallOption) (*secretmanagerpb.Secret, error) {
 	return mc.GetSecretFn(ctx, req)
 }
@@ -80,7 +85,7 @@ func (mc *MockSMClient) AddSecretVersion(ctx context.Context, req *secretmanager
 	return mc.addSecretFn(ctx, req)
 }
 
-func (mc *MockSMClient) NewAddSecretVersion(mock AddSecretVersionMockReturn) {
+func (mc *MockSMClient) NewAddSecretVersionFn(mock AddSecretVersionMockReturn) {
 	mc.addSecretFn = func(ctx context.Context, req *secretmanagerpb.AddSecretVersionRequest, opts ...gax.CallOption) (*secretmanagerpb.SecretVersion, error) {
 		return mock.SecretVersion, mock.Err
 	}
@@ -90,6 +95,12 @@ func (mc *MockSMClient) CreateSecret(ctx context.Context, req *secretmanagerpb.C
 	return mc.createSecretFn(ctx, req)
 }
 
+func (mc *MockSMClient) NewCreateSecretFn(mock CreateSecretMockReturn) {
+	mc.createSecretFn = func(ctx context.Context, req *secretmanagerpb.CreateSecretRequest, opts ...gax.CallOption) (*secretmanagerpb.Secret, error) {
+		return mock.Secret, mock.Err
+	}
+}
+
 func (mc *MockSMClient) NilClose() {
 	mc.closeFn = func() error {
 		return nil

+ 1 - 4
pkg/provider/gcp/secretmanager/secretsmanager.go

@@ -258,7 +258,6 @@ func (sm *ProviderGCP) SetSecret(ctx context.Context, payload []byte, remoteRef
 				return err
 			}
 		}
-
 		if err != nil {
 			return err
 		}
@@ -278,9 +277,7 @@ func (sm *ProviderGCP) SetSecret(ctx context.Context, payload []byte, remoteRef
 		if err != nil && gErr.GRPCStatus().Code() != codes.NotFound {
 			return err
 		}
-	}
-
-	if err != nil {
+	} else if err != nil {
 		return err
 	}
 

+ 20 - 1
pkg/provider/gcp/secretmanager/secretsmanager_test.go

@@ -202,6 +202,9 @@ func (f fakeRef) GetRemoteKey() string {
 func TestSetSecret(t *testing.T) {
 	ref := fakeRef{key: "/baz"}
 
+	notFoundStatusError := status.Error(codes.NotFound, "failed")
+	notFoundError, _ := apierror.FromError(notFoundStatusError)
+
 	APIerror := fmt.Errorf("API Error")
 	labelError := fmt.Errorf("secret %v is not managed by external secrets", ref.GetRemoteKey())
 
@@ -265,6 +268,7 @@ func TestSetSecret(t *testing.T) {
 		GetSecretMockReturn           fakesm.GetSecretMockReturn
 		AccessSecretVersionMockReturn fakesm.AccessSecretVersionMockReturn
 		AddSecretVersionMockReturn    fakesm.AddSecretVersionMockReturn
+		CreateSecretMockReturn        fakesm.CreateSecretMockReturn
 	}
 
 	type want struct {
@@ -330,12 +334,27 @@ func TestSetSecret(t *testing.T) {
 				err: nil,
 			},
 		},
+		"SetSecretGetSecretReturns404": {
+			reason: "secret is created if one doesn't already exist",
+			args: args{
+				mock:                          smtc.mockClient,
+				GetSecretMockReturn:           fakesm.GetSecretMockReturn{Secret: nil, Err: notFoundError},
+				AccessSecretVersionMockReturn: fakesm.AccessSecretVersionMockReturn{Res: nil, Err: notFoundError},
+				AddSecretVersionMockReturn:    fakesm.AddSecretVersionMockReturn{SecretVersion: &secretVersion, Err: nil},
+				CreateSecretMockReturn:        fakesm.CreateSecretMockReturn{Secret: &secret, Err: nil},
+			},
+			want: want{
+				err: nil,
+			},
+		},
 	}
 	for name, tc := range tests {
 		t.Run(name, func(t *testing.T) {
 			tc.args.mock.NewGetSecretFn(tc.args.GetSecretMockReturn)
+			tc.args.mock.NewCreateSecretFn(tc.args.CreateSecretMockReturn)
 			tc.args.mock.NewAccessSecretVersionFn(tc.args.AccessSecretVersionMockReturn)
-			tc.args.mock.NewAddSecretVersion(tc.args.AddSecretVersionMockReturn)
+			tc.args.mock.NewAddSecretVersionFn(tc.args.AddSecretVersionMockReturn)
+
 			p := secretmanager.ProviderGCP{
 				SecretManagerClient: tc.args.mock,
 			}