Browse Source

WIP: Continue implementing SetSecret

Co-authored-by: James Cleveland <james.cleveland@engineerbetter.com>
Signed-off-by: Dominic Meddick <dom.meddick@engineerbetter.com>
Co-authored-by: Gustavo Carvalho <gustavo.carvalho@container-solutions.com>
Co-authored-by: Amr Fawzy <amr.fawzy@container-solutions.com>
Dominic Meddick 4 years ago
parent
commit
e0cb787cb8

+ 17 - 0
pkg/provider/gcp/secretmanager/fake/fake.go

@@ -15,6 +15,7 @@ package fake
 
 import (
 	"context"
+	"errors"
 	"fmt"
 
 	secretmanager "cloud.google.com/go/secretmanager/apiv1"
@@ -27,6 +28,8 @@ import (
 type MockSMClient struct {
 	accessSecretFn func(ctx context.Context, req *secretmanagerpb.AccessSecretVersionRequest, opts ...gax.CallOption) (*secretmanagerpb.AccessSecretVersionResponse, error)
 	ListSecretsFn  func(ctx context.Context, req *secretmanagerpb.ListSecretsRequest, opts ...gax.CallOption) *secretmanager.SecretIterator
+	addSecretFn    func(ctx context.Context, req *secretmanagerpb.AddSecretVersionRequest, opts ...gax.CallOption) (*secretmanagerpb.SecretVersion, error)
+	createSecretFn func(ctx context.Context, req *secretmanagerpb.CreateSecretRequest, opts ...gax.CallOption) (*secretmanagerpb.Secret, error)
 	closeFn        func() error
 }
 
@@ -41,12 +44,26 @@ func (mc *MockSMClient) Close() error {
 	return mc.closeFn()
 }
 
+func (mc *MockSMClient) AddSecretVersion(ctx context.Context, req *secretmanagerpb.AddSecretVersionRequest, opts ...gax.CallOption) (*secretmanagerpb.SecretVersion, error) {
+	return mc.addSecretFn(ctx, req)
+}
+
+func (mc *MockSMClient) CreateSecret(ctx context.Context, req *secretmanagerpb.CreateSecretRequest, opts ...gax.CallOption) (*secretmanagerpb.Secret, error) {
+	return mc.createSecretFn(ctx, req)
+}
+
 func (mc *MockSMClient) NilClose() {
 	mc.closeFn = func() error {
 		return nil
 	}
 }
 
+func (mc *MockSMClient) CreateSecretError() {
+	mc.createSecretFn = func(ctx context.Context, req *secretmanagerpb.CreateSecretRequest, opts ...gax.CallOption) (*secretmanagerpb.Secret, error) {
+		return nil, errors.New("Something went wrong")
+	}
+}
+
 func (mc *MockSMClient) WithValue(ctx context.Context, req *secretmanagerpb.AccessSecretVersionRequest, val *secretmanagerpb.AccessSecretVersionResponse, err error) {
 	if mc != nil {
 		mc.accessSecretFn = func(paramCtx context.Context, paramReq *secretmanagerpb.AccessSecretVersionRequest, paramOpts ...gax.CallOption) (*secretmanagerpb.AccessSecretVersionResponse, error) {

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

@@ -71,6 +71,8 @@ var log = ctrl.Log.WithName("provider").WithName("gcp").WithName("secretsmanager
 type GoogleSecretManagerClient interface {
 	AccessSecretVersion(ctx context.Context, req *secretmanagerpb.AccessSecretVersionRequest, opts ...gax.CallOption) (*secretmanagerpb.AccessSecretVersionResponse, error)
 	ListSecrets(ctx context.Context, req *secretmanagerpb.ListSecretsRequest, opts ...gax.CallOption) *secretmanager.SecretIterator
+	AddSecretVersion(ctx context.Context, req *secretmanagerpb.AddSecretVersionRequest, opts ...gax.CallOption) (*secretmanagerpb.SecretVersion, error)
+	CreateSecret(ctx context.Context, req *secretmanagerpb.CreateSecretRequest, opts ...gax.CallOption) (*secretmanagerpb.Secret, error)
 	Close() error
 }
 
@@ -222,7 +224,13 @@ func (sm *ProviderGCP) NewClient(ctx context.Context, store esv1beta1.GenericSto
 // SetSecret pushes a kubernetes secret key into gcp provider Secret.
 // funcName(variable type_of_variable, ...)
 func (sm *ProviderGCP) SetSecret(ctx context.Context, value []byte, remoteRef esv1beta1.PushRemoteRef) error {
-	return fmt.Errorf("not implemented")
+	req := secretmanagerpb.CreateSecretRequest{
+		Parent:   "foo",
+		SecretId: remoteRef.GetRemoteKey(),
+	}
+	_, err := sm.SecretManagerClient.CreateSecret(ctx, &req)
+	return err
+
 }
 
 // GetAllSecrets syncs multiple secrets from gcp provider into a single Kubernetes Secret.

+ 10 - 3
pkg/provider/gcp/secretmanager/secretsmanager_test.go

@@ -183,10 +183,17 @@ func TestSecretManagerGetSecret(t *testing.T) {
 }
 
 func TestSecretManagerSetSecret(t *testing.T) {
-	p := ProviderGCP{}
+	secretManagerClient := fakesm.MockSMClient{}
+	secretManagerClient.NilClose()
+	secretManagerClient.WithValue(context.Background(), nil, nil, nil)
+	secretManagerClient.CreateSecretError()
+	p := ProviderGCP{
+		SecretManagerClient: &secretManagerClient,
+		projectID:           "default",
+	}
 	err := p.SetSecret(context.TODO(), []byte("bar"), esv1alpha1.PushSecretRemoteRefs{RemoteKey: "foo"})
-	if err != nil {
-		t.Errorf("expected nil got err: %v", err)
+	if err == nil {
+		t.Errorf("expected err got nil")
 	}
 }
 func TestGetSecretMap(t *testing.T) {