Просмотр исходного кода

[wip] starting to do SetSecret tests

Co-authored-by: Gustavo Carvalho <gustavo.carvalho@container-solutions.com>
Co-authored-by: Amr Fawzy <amr.fawzy@container-solutions.com>
Signed-off-by: Dominic Meddick <dominic.meddick@engineerbetter.com>
James Cleveland 4 лет назад
Родитель
Сommit
b90ed2fea9

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

@@ -64,6 +64,43 @@ func (mc *MockSMClient) CreateSecretError() {
 	}
 }
 
+func (mc *MockSMClient) CreateSecretGetError() {
+	mc.createSecretFn = func(ctx context.Context, req *secretmanagerpb.CreateSecretRequest, opts ...gax.CallOption) (*secretmanagerpb.Secret, error) {
+		mc.accessSecretFn = func(ctx context.Context, req *secretmanagerpb.AccessSecretVersionRequest, opts ...gax.CallOption) (*secretmanagerpb.AccessSecretVersionResponse, error) {
+			return nil, errors.New("no.")
+		}
+		return nil, nil
+	}
+}
+
+func (mc *MockSMClient) DefaultCreateSecret(wantedKey string) {
+	mc.createSecretFn = func(ctx context.Context, req *secretmanagerpb.CreateSecretRequest, opts ...gax.CallOption) (*secretmanagerpb.Secret, error) {
+		if req.SecretId == wantedKey {
+			return &secretmanagerpb.Secret{
+				Name: wantedKey,
+			}, nil
+		}
+		return nil, fmt.Errorf("error creating secret key %v ", req.SecretId)
+	}
+}
+
+func (mc *MockSMClient) DefaultSetSecret(wantedValue string) {
+	mc.addSecretFn = func(ctx context.Context, req *secretmanagerpb.AddSecretVersionRequest, opts ...gax.CallOption) (*secretmanagerpb.SecretVersion, error) {
+		if string(req.Payload.Data) == wantedValue {
+			return &secretmanagerpb.SecretVersion{
+				Name: "done",
+			}, nil
+		}
+		return nil, fmt.Errorf("secret %s not found", wantedValue)
+	}
+}
+
+// func (mc *MockSMClient) AccessSpecificSecret() {
+// 	mc.accessSecretFn = func(ctx context.Context, req *secretmanagerpb.AccessSecretVersionRequest, opts ...gax.CallOption) (*secretmanagerpb.AccessSecretVersionResponse, error) {
+
+// 	}
+// }
+
 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) {

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

@@ -224,13 +224,21 @@ 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 {
-	req := secretmanagerpb.CreateSecretRequest{
-		Parent:   "foo",
+	if _, err := sm.SecretManagerClient.CreateSecret(ctx, &secretmanagerpb.CreateSecretRequest{
+		Parent:   "todo",
 		SecretId: remoteRef.GetRemoteKey(),
+	}); err != nil {
+		return err
 	}
-	_, err := sm.SecretManagerClient.CreateSecret(ctx, &req)
-	return err
 
+	if _, err := sm.SecretManagerClient.AddSecretVersion(ctx, &secretmanagerpb.AddSecretVersionRequest{
+		Payload: &secretmanagerpb.SecretPayload{
+			Data: value,
+		},
+	}); err != nil {
+		return err
+	}
+	return nil
 }
 
 // GetAllSecrets syncs multiple secrets from gcp provider into a single Kubernetes Secret.

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

@@ -187,11 +187,31 @@ func TestSecretManagerSetSecret(t *testing.T) {
 	secretManagerClient.NilClose()
 	secretManagerClient.WithValue(context.Background(), nil, nil, nil)
 	secretManagerClient.CreateSecretError()
+
+	key := "foo"
+	want := []byte("bar")
+
 	p := ProviderGCP{
 		SecretManagerClient: &secretManagerClient,
 		projectID:           "default",
 	}
-	err := p.SetSecret(context.TODO(), []byte("bar"), esv1alpha1.PushSecretRemoteRefs{RemoteKey: "foo"})
+	err := p.SetSecret(context.TODO(), want, esv1alpha1.PushSecretRemoteRefs{RemoteKey: key})
+	if err == nil {
+		t.Errorf("expected err got nil from SetSecret")
+	}
+
+	secretManagerClient.DefaultCreateSecret(key)
+	secretManagerClient.DefaultSetSecret(string(want))
+
+	err = p.SetSecret(context.TODO(), want, esv1alpha1.PushSecretRemoteRefs{RemoteKey: key})
+	if err != nil {
+		t.Errorf("expected nil got err from SetSecret: %v", err)
+	}
+	err = p.SetSecret(context.TODO(), want, esv1alpha1.PushSecretRemoteRefs{RemoteKey: "wrong"})
+	if err == nil {
+		t.Errorf("expected err got nil")
+	}
+	err = p.SetSecret(context.TODO(), []byte("potato"), esv1alpha1.PushSecretRemoteRefs{RemoteKey: key})
 	if err == nil {
 		t.Errorf("expected err got nil")
 	}