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

finale push of e2e testing code

Signed-off-by: Bill Hamilton <bill.hamilton@delinea.com>
Bill Hamilton 2 лет назад
Родитель
Сommit
a3f9df8bda

+ 9 - 5
e2e/suites/provider/cases/secretserver/provider.go

@@ -2,12 +2,12 @@ package secretserver
 
 import (
 	"encoding/json"
-	_"fmt"
+	"fmt"
 	_"strconv"
 
 	"github.com/DelineaXPM/tss-sdk-go/v2/server"
-/*	"github.com/DelineaXPM/dsv-sdk-go/v2/vault"*/
 	"github.com/external-secrets/external-secrets-e2e/framework"
+	_"github.com/tidwall/gjson"
 	"github.com/onsi/gomega"
 )
 
@@ -15,14 +15,16 @@ import (
 type secretStoreProvider struct {
 	api *server.Server
 	cfg *config
+	framework *framework.Framework
 	secretID map[string]int
 }
 
 
-func (p *secretStoreProvider) init(cfg *config) {
+func (p *secretStoreProvider) init(cfg *config, f *framework.Framework) {
 
 	p.cfg = cfg
 	p.secretID = make(map[string]int)
+	p.framework = f
 	secretserverClient, err := server.New(server.Configuration{
 		Credentials: server.UserCredential{
 			Username: cfg.username,
@@ -43,6 +45,7 @@ https://rasteamdev.qa.devsecretservercloud.com/Documents/restapi/TokenAuth/#tag/
 func (p *secretStoreProvider) CreateSecret(key string, val framework.SecretEntry) {
 	var data map[string]interface{}
 	err := json.Unmarshal([]byte(val.Value), &data)
+	fmt.Printf("\n\n CREATE SECRET VALUE = %+v", string(val.Value))
 	gomega.Expect(err).ToNot(gomega.HaveOccurred())
 
 	fields := make([]server.SecretField, 1)
@@ -56,11 +59,11 @@ func (p *secretStoreProvider) CreateSecret(key string, val framework.SecretEntry
 */
 
 		fields[0].FieldID = 439 // Data
-		fields[0].ItemValue = "{\"key\":\"foo\"}"
+		fields[0].ItemValue = val.Value
 
 
 	s, err := p.api.CreateSecret(server.Secret{
-		SecretTemplateID: 6098,
+		SecretTemplateID: 6098, // custom template
 		SiteID: 1,
 		FolderID: 73,
 		Name: key,
@@ -72,5 +75,6 @@ func (p *secretStoreProvider) CreateSecret(key string, val framework.SecretEntry
 
 func (p *secretStoreProvider) DeleteSecret(key string) {
 	err := p.api.DeleteSecret(p.secretID[key])
+/*	err := p.api.DeleteSecret(1111)*/
 	gomega.Expect(err).ToNot(gomega.HaveOccurred())
 }

+ 27 - 12
e2e/suites/provider/cases/secretserver/secretserver.go

@@ -2,7 +2,7 @@ package secretserver
 
 import (
 	"context"
-	"fmt"
+	_"fmt"
 	"github.com/external-secrets/external-secrets-e2e/framework"
 	"github.com/external-secrets/external-secrets-e2e/suites/provider/cases/common"
 	esv1beta1 "github.com/external-secrets/external-secrets/apis/externalsecrets/v1beta1"
@@ -25,29 +25,30 @@ var _ = ginkgo.Describe("[secretserver]", ginkgo.Label("secretserver"), func() {
 		cfg, err := loadConfigFromEnv()
 		gomega.Expect(err).ToNot(gomega.HaveOccurred())
 
-		provider.init(cfg)
+		provider.init(cfg, f)
 		createResources(context.Background(), f, cfg)
-
-		fmt.Printf("\n\n\nCONFIG HERE **************** %+v\n\n\n", cfg)
-
 	})
 
 	ginkgo.DescribeTable("sync secrets", framework.TableFuncWithExternalSecret(f, provider),
 
-		ginkgo.Entry(common.JSONDataWithProperty(f)),
 /*
-		ginkgo.Entry(common.JSONDataWithoutTargetName(f)),
+JSONDataFromSync
+JSONDataFromRewrite
+DecodingPolicySync
+*/
+
 		ginkgo.Entry(common.JSONDataWithTemplate(f)),
+		ginkgo.Entry(common.JSONDataWithProperty(f)),
+		ginkgo.Entry(common.JSONDataWithoutTargetName(f)),
 		ginkgo.Entry(common.JSONDataWithTemplateFromLiteral(f)),
 		ginkgo.Entry(common.TemplateFromConfigmaps(f)),
-		ginkgo.Entry(common.JSONDataFromSync(f)),
-		ginkgo.Entry(common.JSONDataFromRewrite(f)),
+		ginkgo.Entry(common.JSONDataFromSync(f)), // <--
+		ginkgo.Entry(common.JSONDataFromRewrite(f)), // <--
 		ginkgo.Entry(common.NestedJSONWithGJSON(f)),
 		ginkgo.Entry(common.DockerJSONConfig(f)),
 		ginkgo.Entry(common.DataPropertyDockerconfigJSON(f)),
 		ginkgo.Entry(common.SSHKeySyncDataProperty(f)),
-		ginkgo.Entry(common.DecodingPolicySync(f)),
-*/
+		ginkgo.Entry(common.DecodingPolicySync(f)), // <--
 	)
 })
 
@@ -93,7 +94,21 @@ func createResources(ctx context.Context, f *framework.Framework, cfg *config) {
 		},
 	}
 
-	fmt.Printf("SECRET SPEC ************************ %+v", secretStoreSpec)
 	err = f.CRClient.Create(ctx, &secretStoreSpec)
 	gomega.Expect(err).ToNot(gomega.HaveOccurred())
+
+/*
+	externalSecretData := []esv1beta1.ExternalSecretData{
+		{
+			SecretKey: "mysecret",
+			RemoteRef: esv1beta1.ExternalSecretDataRemoteRef{
+				Key: "1111",
+				Property: "Items.1.ItemValue",
+			},
+		},
+	}
+
+	err = f.CRClient.Create(ctx, &externalSecretData)
+	gomega.Expect(err).ToNot(gomega.HaveOccurred())
+*/
 }

+ 1 - 1
go.mod

@@ -63,7 +63,7 @@ require (
 	github.com/Azure/azure-sdk-for-go/sdk/azcore v1.10.0
 	github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1
 	github.com/DelineaXPM/dsv-sdk-go/v2 v2.1.2
-	github.com/DelineaXPM/tss-sdk-go/v2 v2.0.0
+	github.com/DelineaXPM/tss-sdk-go/v2 v2.0.1
 	github.com/Onboardbase/go-cryptojs-aes-decrypt v0.0.0-20230430095000-27c0d3a9016d
 	github.com/akeylesslabs/akeyless-go/v3 v3.6.2
 	github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.6

+ 2 - 2
go.sum

@@ -98,8 +98,8 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03
 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
 github.com/DelineaXPM/dsv-sdk-go/v2 v2.1.2 h1:cmX2QC9s5kPqmghWLLZP8YRFO1ZD/C59BpNH2ujP99w=
 github.com/DelineaXPM/dsv-sdk-go/v2 v2.1.2/go.mod h1:tNlpIXJlIwQlRbobXDPme4qv/Rc8+a1GbuUhE3m4JhQ=
-github.com/DelineaXPM/tss-sdk-go/v2 v2.0.0 h1:BiMCCawPnEHSPrceUQvwofZ+fDnWg7vso7zaXp6p4eM=
-github.com/DelineaXPM/tss-sdk-go/v2 v2.0.0/go.mod h1:xz6FXP2Do88Vc5Hx7OamZgZC1W45yfmLy4+iDKxlGXo=
+github.com/DelineaXPM/tss-sdk-go/v2 v2.0.1 h1:/rzzzaBuj/FYTcbt8sYZ9IzlnENqcgh5zKqBhHiBBm4=
+github.com/DelineaXPM/tss-sdk-go/v2 v2.0.1/go.mod h1:xz6FXP2Do88Vc5Hx7OamZgZC1W45yfmLy4+iDKxlGXo=
 github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM=
 github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo=
 github.com/IBM/go-sdk-core/v5 v5.16.1 h1:vAgOxRvaXD5AmgwR7dlstjT1JFE4BA4lPcGsEFZOKGs=

+ 25 - 10
pkg/provider/secretserver/client.go

@@ -45,7 +45,7 @@ func (c *client) GetSecret(ctx context.Context, ref esv1beta1.ExternalSecretData
 	if err != nil {
 		return nil, err
 	}
-	// Return nil if secret value is null
+	// Return nil if secret contains no fields
 	if secret.Fields == nil {
 		return nil, nil
 	}
@@ -57,12 +57,18 @@ func (c *client) GetSecret(ctx context.Context, ref esv1beta1.ExternalSecretData
 	if ref.Property == "" {
 		return jsonStr, nil
 	}
+	fmt.Printf("\n\n SEARCH SECRETS = %+v\n\n", ref)
 	// extract key from secret using gjson
-	val := gjson.Get(string(jsonStr), ref.Property)
+	val := gjson.Get(string(jsonStr), "Items.0.ItemValue")
 	if !val.Exists() {
 		return nil, esv1beta1.NoSecretError{}
 	}
-	return []byte(val.String()), nil
+	out := gjson.Get(val.String(), ref.Property)
+	if !val.Exists() {
+		return nil, esv1beta1.NoSecretError{}
+	}
+
+	return []byte(out.String()), nil
 }
 
 func (c *client) PushSecret(_ context.Context, _ *corev1.Secret, _ esv1beta1.PushSecretData) error {
@@ -81,24 +87,29 @@ func (c *client) Validate() (esv1beta1.ValidationResult, error) {
 	return esv1beta1.ValidationResultReady, nil
 }
 
-// GetSecret gets the full secret as json-encoded value.
 func (c *client) GetSecretMap(ctx context.Context, ref esv1beta1.ExternalSecretDataRemoteRef) (map[string][]byte, error) {
 	secret, err := c.getSecret(ctx, ref)
 	if err != nil {
 		return nil, err
 	}
+	secretData := make(map[string]any)
+
+	err = json.Unmarshal([]byte(secret.Fields[0].ItemValue), &secretData)
+	if err != nil {
+		return nil, err
+	}
 
-	secretData := make(map[string][]byte, len(secret.Fields))
-	for k, v := range secret.Fields {
-		secretData[fmt.Sprint(k)], err = utils.GetByteValue(v)
+	data := make(map[string][]byte)
+	for k, v := range secretData {
+		data[fmt.Sprint(k)], err = utils.GetByteValue(v)
 		if err != nil {
 			return nil, err
 		}
 	}
-	return secretData, nil
+	return data, nil
 }
 
-// GetAllSecrets lists secrets matching the given criteria and return their latest versions.
+// GetAllSecrets is not supported at this time..
 func (c *client) GetAllSecrets(_ context.Context, _ esv1beta1.ExternalSecretFind) (map[string][]byte, error) {
 	return nil, errors.New("getting all secrets is not supported by Delinea Secret Server at this time")
 }
@@ -114,7 +125,11 @@ func (c *client) getSecret(_ context.Context, ref esv1beta1.ExternalSecretDataRe
 	}
 	id, err := strconv.Atoi(ref.Key)
 	if err != nil {
-		return nil, fmt.Errorf("get secret key = %+v ........ ", ref) //errors.New("invalid string to integer conversion")
+			s, err := c.api.Secrets(ref.Key, "Name")
+			if err != nil {
+				return nil, fmt.Errorf("unable to retrieve secrets named ", ref.Key)
+			}
+		return s, nil
 	}
 	return c.api.Secret(id)
 }

+ 3 - 3
pkg/provider/secretserver/secret_api.go

@@ -18,9 +18,9 @@ import (
 	"github.com/DelineaXPM/tss-sdk-go/v2/server"
 )
 
-// secretAPI represents the subset of the Delinea DevOps Secrets Vault API
-// which is supported by dsv-sdk-go/v2.
-// See https://dsv.secretsvaultcloud.com/api for full API documentation.
+// secretAPI represents the subset of the Secret Server API
+// which is supported by tss-sdk-go/v2.
 type secretAPI interface {
 	Secret(id int) (*server.Secret, error)
+	Secrets(searchText, field string) (*server.Secret, error)
 }