Browse Source

Working unit tests

Elsa Chelala 4 years ago
parent
commit
55441ecd77
5 changed files with 57 additions and 38 deletions
  1. 1 1
      go.mod
  2. 2 1
      go.sum
  3. 3 7
      pkg/provider/alibaba/fake/fake.go
  4. 4 2
      pkg/provider/alibaba/kms.go
  5. 47 27
      pkg/provider/alibaba/kms_test.go

+ 1 - 1
go.mod

@@ -58,7 +58,7 @@ require (
 	github.com/kr/pretty v0.2.1 // indirect
 	github.com/kr/pretty v0.2.1 // indirect
 	github.com/lestrrat-go/jwx v1.2.1
 	github.com/lestrrat-go/jwx v1.2.1
 	github.com/onsi/ginkgo v1.16.4
 	github.com/onsi/ginkgo v1.16.4
-	github.com/onsi/gomega v1.13.0
+	github.com/onsi/gomega v1.16.0
 	github.com/pierrec/lz4 v2.5.2+incompatible // indirect
 	github.com/pierrec/lz4 v2.5.2+incompatible // indirect
 	github.com/prometheus/client_golang v1.11.0
 	github.com/prometheus/client_golang v1.11.0
 	github.com/prometheus/client_model v0.2.0
 	github.com/prometheus/client_model v0.2.0

+ 2 - 1
go.sum

@@ -542,8 +542,9 @@ github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7J
 github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
 github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
 github.com/onsi/gomega v1.10.2/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
 github.com/onsi/gomega v1.10.2/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
 github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc=
 github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc=
-github.com/onsi/gomega v1.13.0 h1:7lLHu94wT9Ij0o6EWWclhu0aOh32VxhkwEJvzuWPeak=
 github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY=
 github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY=
+github.com/onsi/gomega v1.16.0 h1:6gjqkI8iiRHMvdccRJM8rVKjCWk6ZIm6FTm3ddIe4/c=
+github.com/onsi/gomega v1.16.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY=
 github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
 github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
 github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
 github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
 github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
 github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=

+ 3 - 7
pkg/provider/alibaba/fake/fake.go

@@ -1,10 +1,7 @@
 package fake
 package fake
 
 
 import (
 import (
-	"fmt"
-
 	kmssdk "github.com/aliyun/alibaba-cloud-sdk-go/services/kms"
 	kmssdk "github.com/aliyun/alibaba-cloud-sdk-go/services/kms"
-	"github.com/google/go-cmp/cmp"
 )
 )
 
 
 type AlibabaMockClient struct {
 type AlibabaMockClient struct {
@@ -16,10 +13,9 @@ func (mc *AlibabaMockClient) GetSecretValue(*kmssdk.GetSecretValueRequest) (resu
 }
 }
 
 
 func (sm *AlibabaMockClient) WithValue(in *kmssdk.GetSecretValueRequest, val *kmssdk.GetSecretValueResponse, err error) {
 func (sm *AlibabaMockClient) WithValue(in *kmssdk.GetSecretValueRequest, val *kmssdk.GetSecretValueResponse, err error) {
-	sm.getSecretValue = func(paramIn *kmssdk.GetSecretValueRequest) (*kmssdk.GetSecretValueResponse, error) {
-		if !cmp.Equal(paramIn, in) {
-			return nil, fmt.Errorf("unexpected test argument")
+	if sm != nil {
+		sm.getSecretValue = func(paramIn *kmssdk.GetSecretValueRequest) (*kmssdk.GetSecretValueResponse, error) {
+			return val, err
 		}
 		}
-		return val, err
 	}
 	}
 }
 }

+ 4 - 2
pkg/provider/alibaba/kms.go

@@ -24,6 +24,7 @@ import (
 	"github.com/external-secrets/external-secrets/pkg/provider"
 	"github.com/external-secrets/external-secrets/pkg/provider"
 	"github.com/external-secrets/external-secrets/pkg/provider/aws/util"
 	"github.com/external-secrets/external-secrets/pkg/provider/aws/util"
 	"github.com/external-secrets/external-secrets/pkg/provider/schema"
 	"github.com/external-secrets/external-secrets/pkg/provider/schema"
+	"github.com/external-secrets/external-secrets/pkg/utils"
 	"github.com/tidwall/gjson"
 	"github.com/tidwall/gjson"
 	corev1 "k8s.io/api/core/v1"
 	corev1 "k8s.io/api/core/v1"
 	"k8s.io/apimachinery/pkg/types"
 	"k8s.io/apimachinery/pkg/types"
@@ -116,10 +117,12 @@ func (c *Client) setAuth(ctx context.Context) error {
 
 
 // GetSecret returns a single secret from the provider.
 // GetSecret returns a single secret from the provider.
 func (kms *KeyManagementService) GetSecret(ctx context.Context, ref esv1alpha1.ExternalSecretDataRemoteRef) ([]byte, error) {
 func (kms *KeyManagementService) GetSecret(ctx context.Context, ref esv1alpha1.ExternalSecretDataRemoteRef) ([]byte, error) {
+	if utils.IsNil(kms.Client) {
+		return nil, fmt.Errorf(errUninitalizedAlibabaProvider)
+	}
 	kmsRequest := kmssdk.CreateGetSecretValueRequest()
 	kmsRequest := kmssdk.CreateGetSecretValueRequest()
 	kmsRequest.VersionId = ref.Version
 	kmsRequest.VersionId = ref.Version
 	kmsRequest.SecretName = ref.Key
 	kmsRequest.SecretName = ref.Key
-	fmt.Println(kmsRequest)
 	kmsRequest.SetScheme("https")
 	kmsRequest.SetScheme("https")
 	secretOut, err := kms.Client.GetSecretValue(kmsRequest)
 	secretOut, err := kms.Client.GetSecretValue(kmsRequest)
 	if err != nil {
 	if err != nil {
@@ -164,7 +167,6 @@ func (kms *KeyManagementService) GetSecretMap(ctx context.Context, ref esv1alpha
 func (kms *KeyManagementService) NewClient(ctx context.Context, store esv1alpha1.GenericStore, kube kclient.Client, namespace string) (provider.SecretsClient, error) {
 func (kms *KeyManagementService) NewClient(ctx context.Context, store esv1alpha1.GenericStore, kube kclient.Client, namespace string) (provider.SecretsClient, error) {
 	storeSpec := store.GetSpec()
 	storeSpec := store.GetSpec()
 	alibabaSpec := storeSpec.Provider.Alibaba
 	alibabaSpec := storeSpec.Provider.Alibaba
-
 	iStore := &Client{
 	iStore := &Client{
 		kube:      kube,
 		kube:      kube,
 		store:     alibabaSpec,
 		store:     alibabaSpec,

+ 47 - 27
pkg/provider/alibaba/kms_test.go

@@ -7,6 +7,7 @@ import (
 	"strings"
 	"strings"
 	"testing"
 	"testing"
 
 
+	"github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses"
 	kmssdk "github.com/aliyun/alibaba-cloud-sdk-go/services/kms"
 	kmssdk "github.com/aliyun/alibaba-cloud-sdk-go/services/kms"
 	esv1alpha1 "github.com/external-secrets/external-secrets/apis/externalsecrets/v1alpha1"
 	esv1alpha1 "github.com/external-secrets/external-secrets/apis/externalsecrets/v1alpha1"
 	fakesm "github.com/external-secrets/external-secrets/pkg/provider/alibaba/fake"
 	fakesm "github.com/external-secrets/external-secrets/pkg/provider/alibaba/fake"
@@ -17,14 +18,11 @@ type keyManagementServiceTestCase struct {
 	apiInput       *kmssdk.GetSecretValueRequest
 	apiInput       *kmssdk.GetSecretValueRequest
 	apiOutput      *kmssdk.GetSecretValueResponse
 	apiOutput      *kmssdk.GetSecretValueResponse
 	ref            *esv1alpha1.ExternalSecretDataRemoteRef
 	ref            *esv1alpha1.ExternalSecretDataRemoteRef
-	projectID      string
 	apiErr         error
 	apiErr         error
 	expectError    string
 	expectError    string
 	expectedSecret string
 	expectedSecret string
-	keyID     []byte
-	accessKey []byte
 	// for testing secretmap
 	// for testing secretmap
-	expectedData map[string]string
+	expectedData map[string][]byte
 }
 }
 
 
 func makeValidKMSTestCase() *keyManagementServiceTestCase {
 func makeValidKMSTestCase() *keyManagementServiceTestCase {
@@ -33,11 +31,10 @@ func makeValidKMSTestCase() *keyManagementServiceTestCase {
 		apiInput:       makeValidAPIInput(),
 		apiInput:       makeValidAPIInput(),
 		ref:            makeValidRef(),
 		ref:            makeValidRef(),
 		apiOutput:      makeValidAPIOutput(),
 		apiOutput:      makeValidAPIOutput(),
-		projectID:      "default",
 		apiErr:         nil,
 		apiErr:         nil,
 		expectError:    "",
 		expectError:    "",
 		expectedSecret: "",
 		expectedSecret: "",
-		expectedData:   make(map[string]string),
+		expectedData:   make(map[string][]byte),
 	}
 	}
 	kmstc.mockClient.WithValue(kmstc.apiInput, kmstc.apiOutput, kmstc.apiErr)
 	kmstc.mockClient.WithValue(kmstc.apiInput, kmstc.apiOutput, kmstc.apiErr)
 	return &kmstc
 	return &kmstc
@@ -45,22 +42,37 @@ func makeValidKMSTestCase() *keyManagementServiceTestCase {
 
 
 func makeValidRef() *esv1alpha1.ExternalSecretDataRemoteRef {
 func makeValidRef() *esv1alpha1.ExternalSecretDataRemoteRef {
 	return &esv1alpha1.ExternalSecretDataRemoteRef{
 	return &esv1alpha1.ExternalSecretDataRemoteRef{
-		Key:     "/baz",
-		Version: "default",
+		Key: "test-example",
 	}
 	}
 }
 }
 
 
 func makeValidAPIInput() *kmssdk.GetSecretValueRequest {
 func makeValidAPIInput() *kmssdk.GetSecretValueRequest {
 	return &kmssdk.GetSecretValueRequest{
 	return &kmssdk.GetSecretValueRequest{
-		SecretName: "projects/default/secrets//baz/versions/default",
+		SecretName: "test-example",
 	}
 	}
 }
 }
 
 
 func makeValidAPIOutput() *kmssdk.GetSecretValueResponse {
 func makeValidAPIOutput() *kmssdk.GetSecretValueResponse {
-	return &kmssdk.GetSecretValueResponse{}
+	kmsresponse := &kmssdk.GetSecretValueResponse{
+		BaseResponse:      &responses.BaseResponse{},
+		RequestId:         "",
+		SecretName:        "test-example",
+		VersionId:         "",
+		CreateTime:        "",
+		SecretData:        "",
+		SecretDataType:    "",
+		AutomaticRotation: "",
+		RotationInterval:  "",
+		NextRotationDate:  "",
+		ExtendedConfig:    "",
+		LastRotationDate:  "",
+		SecretType:        "",
+		VersionStages:     kmssdk.VersionStagesInGetSecretValue{},
+	}
+	return kmsresponse
 }
 }
 
 
-func makeValidKMSTestCaseCustom(tweaks ...func(smtc *keyManagementServiceTestCase)) *keyManagementServiceTestCase {
+func makeValidKMSTestCaseCustom(tweaks ...func(kmstc *keyManagementServiceTestCase)) *keyManagementServiceTestCase {
 	kmstc := makeValidKMSTestCase()
 	kmstc := makeValidKMSTestCase()
 	for _, fn := range tweaks {
 	for _, fn := range tweaks {
 		fn(kmstc)
 		fn(kmstc)
@@ -69,31 +81,38 @@ func makeValidKMSTestCaseCustom(tweaks ...func(smtc *keyManagementServiceTestCas
 	return kmstc
 	return kmstc
 }
 }
 
 
-var setAPIErr = func(smtc *keyManagementServiceTestCase) {
-	smtc.apiErr = fmt.Errorf("oh no")
-	smtc.expectError = "oh no"
+var setAPIErr = func(kmstc *keyManagementServiceTestCase) {
+	kmstc.apiErr = fmt.Errorf("oh no")
+	kmstc.expectError = "oh no"
 }
 }
 
 
-var setNilMockClient = func(smtc *keyManagementServiceTestCase) {
-	smtc.mockClient = nil
-	smtc.expectError = errUninitalizedAlibabaProvider
+var setNilMockClient = func(kmstc *keyManagementServiceTestCase) {
+	kmstc.mockClient = nil
+	kmstc.expectError = errUninitalizedAlibabaProvider
 }
 }
 
 
 func TestAlibabaKMSGetSecret(t *testing.T) {
 func TestAlibabaKMSGetSecret(t *testing.T) {
 	secretData := make(map[string]interface{})
 	secretData := make(map[string]interface{})
 	secretValue := "changedvalue"
 	secretValue := "changedvalue"
 	secretData["payload"] = secretValue
 	secretData["payload"] = secretValue
+	
 	// good case: default version is set
 	// good case: default version is set
-	// key is passed in, output is sent back
+	//key is passed in, output is sent back
 	setSecretString := func(kmstc *keyManagementServiceTestCase) {
 	setSecretString := func(kmstc *keyManagementServiceTestCase) {
+		kmstc.apiOutput.SecretName = "test-example"
+		kmstc.apiOutput.SecretData = "value"
+		kmstc.expectedSecret = "value"
 	}
 	}
 
 
-	// good case: custom version set
-	setCustomKey := func(smtc *keyManagementServiceTestCase) {
+	// // good case: custom version set
+	setCustomKey := func(kmstc *keyManagementServiceTestCase) {
+		kmstc.apiOutput.SecretName = "test-example-other"
+		kmstc.ref.Key = "test-example-other"
+		kmstc.apiOutput.SecretData = "value"
+		kmstc.expectedSecret = "value"
 	}
 	}
 
 
 	successCases := []*keyManagementServiceTestCase{
 	successCases := []*keyManagementServiceTestCase{
-		makeValidKMSTestCase(),
 		makeValidKMSTestCaseCustom(setSecretString),
 		makeValidKMSTestCaseCustom(setSecretString),
 		makeValidKMSTestCaseCustom(setCustomKey),
 		makeValidKMSTestCaseCustom(setCustomKey),
 		makeValidKMSTestCaseCustom(setAPIErr),
 		makeValidKMSTestCaseCustom(setAPIErr),
@@ -115,15 +134,16 @@ func TestAlibabaKMSGetSecret(t *testing.T) {
 
 
 func TestGetSecretMap(t *testing.T) {
 func TestGetSecretMap(t *testing.T) {
 	// good case: default version & deserialization
 	// good case: default version & deserialization
-	setDeserialization := func(smtc *keyManagementServiceTestCase) {
-		smtc.apiOutput.SecretData = (`{"foo":"bar"}`)
-		smtc.expectedData["foo"] = "bar"
+	setDeserialization := func(kmstc *keyManagementServiceTestCase) {
+		kmstc.apiOutput.SecretName = "foo"
+		kmstc.expectedData["foo"] = []byte("bar")
+		kmstc.apiOutput.SecretData = `{"foo":"bar"}`
 	}
 	}
 
 
 	// bad case: invalid json
 	// bad case: invalid json
-	setInvalidJSON := func(smtc *keyManagementServiceTestCase) {
-		smtc.apiOutput.SecretData = aws.String(`-----------------`)
-		pstc.expectError = "unable to unmarshal secret"
+	setInvalidJSON := func(kmstc *keyManagementServiceTestCase) {
+		kmstc.apiOutput.SecretData = "-----------------"
+		kmstc.expectError = "unable to unmarshal secret"
 	}
 	}
 
 
 	successCases := []*keyManagementServiceTestCase{
 	successCases := []*keyManagementServiceTestCase{