|  | 
| 6 | 6 | package k8scontext | 
| 7 | 7 | 
 | 
| 8 | 8 | import ( | 
| 9 |  | -	"github.com/onsi/ginkgo" | 
|  | 9 | +	"github.com/onsi/ginkgo/v2" | 
| 10 | 10 | 	. "github.com/onsi/gomega" | 
| 11 | 11 | 	v1 "k8s.io/api/core/v1" | 
|  | 12 | +	"k8s.io/client-go/kubernetes" | 
|  | 13 | +	testclient "k8s.io/client-go/kubernetes/fake" | 
| 12 | 14 | 
 | 
| 13 | 15 | 	"github.com/Azure/application-gateway-kubernetes-ingress/pkg/controllererrors" | 
| 14 | 16 | 	"github.com/Azure/application-gateway-kubernetes-ingress/pkg/tests" | 
| 15 | 17 | ) | 
| 16 | 18 | 
 | 
| 17 | 19 | var _ = ginkgo.Describe("Testing K8sContext.SecretStore", func() { | 
| 18 |  | -	secretsStore := NewSecretStore() | 
| 19 |  | -	ginkgo.Context("Test ConvertSecret function", func() { | 
| 20 |  | -		secret := v1.Secret{} | 
| 21 |  | -		ginkgo.It("Should have returned an error - unrecognized type of secret", func() { | 
| 22 |  | -			err := secretsStore.ConvertSecret("someKey", &secret) | 
| 23 |  | -			Expect(err.(*controllererrors.Error).Code).To(Equal(controllererrors.ErrorUnknownSecretType)) | 
| 24 |  | -		}) | 
| 25 |  | -		ginkgo.It("", func() { | 
| 26 |  | -			malformed := secret | 
| 27 |  | -			malformed.Type = recognizedSecretType | 
| 28 |  | -			err := secretsStore.ConvertSecret("someKey", &malformed) | 
| 29 |  | -			Expect(err.(*controllererrors.Error).Code).To(Equal(controllererrors.ErrorMalformedSecret)) | 
| 30 |  | -		}) | 
| 31 |  | -		ginkgo.It("", func() { | 
| 32 |  | -			malformed := secret | 
| 33 |  | -			malformed.Type = recognizedSecretType | 
| 34 |  | -			malformed.Data = make(map[string][]byte) | 
| 35 |  | -			malformed.Data[tlsKey] = []byte("X") | 
| 36 |  | -			malformed.Data[tlsCrt] = []byte("Y") | 
| 37 |  | -			err := secretsStore.ConvertSecret("someKey", &malformed) | 
| 38 |  | -			Expect(err.(*controllererrors.Error).Code).To(Equal(controllererrors.ErrorExportingWithOpenSSL)) | 
| 39 |  | -		}) | 
| 40 |  | -		ginkgo.It("", func() { | 
|  | 20 | +	secretsStore := NewSecretStore(nil) | 
|  | 21 | + | 
|  | 22 | +	ginkgo.DescribeTable("when converting certificate to PFX", | 
|  | 23 | +		func(secret *v1.Secret, expectedError controllererrors.ErrorCode) { | 
|  | 24 | +			err := secretsStore.ConvertSecret("someKey", secret) | 
|  | 25 | +			Expect(err.(*controllererrors.Error).Code).To(Equal(expectedError)) | 
|  | 26 | +		}, | 
|  | 27 | +		ginkgo.Entry("no type in secret", &v1.Secret{}, controllererrors.ErrorUnknownSecretType), | 
|  | 28 | +		ginkgo.Entry("unrecognized type of secret", &v1.Secret{Type: v1.SecretTypeOpaque}, controllererrors.ErrorUnknownSecretType), | 
|  | 29 | +		ginkgo.Entry("malformed data", &v1.Secret{Type: v1.SecretTypeTLS, Data: map[string][]byte{}}, controllererrors.ErrorMalformedSecret), | 
|  | 30 | +		ginkgo.Entry("invalid data", &v1.Secret{Type: v1.SecretTypeTLS, Data: map[string][]byte{ | 
|  | 31 | +			v1.TLSCertKey:       []byte("X"), | 
|  | 32 | +			v1.TLSPrivateKeyKey: []byte("X"), | 
|  | 33 | +		}}, controllererrors.ErrorExportingWithOpenSSL), | 
|  | 34 | +	) | 
|  | 35 | + | 
|  | 36 | +	ginkgo.When("certificate gets stored", func() { | 
|  | 37 | +		ginkgo.It("should be retrivable with the secret key", func() { | 
| 41 | 38 | 			err := secretsStore.ConvertSecret("someKey", tests.NewSecretTestFixture()) | 
| 42 | 39 | 			Expect(err).ToNot(HaveOccurred()) | 
| 43 | 40 | 			actual := secretsStore.GetPfxCertificate("someKey") | 
| 44 | 41 | 			Expect(len(actual)).To(BeNumerically(">", 0)) | 
| 45 | 42 | 		}) | 
| 46 | 43 | 	}) | 
|  | 44 | + | 
|  | 45 | +	ginkgo.When("certificate is no cached", func() { | 
|  | 46 | +		ginkgo.It("should get it from the api-server", func() { | 
|  | 47 | +			secret := tests.NewSecretTestFixture() | 
|  | 48 | +			var client kubernetes.Interface = testclient.NewSimpleClientset(secret) | 
|  | 49 | +			secretsStore := NewSecretStore(client) | 
|  | 50 | + | 
|  | 51 | +			actual := secretsStore.GetPfxCertificate(secret.Namespace + "/" + secret.Name) | 
|  | 52 | +			Expect(len(actual)).To(BeNumerically(">", 0)) | 
|  | 53 | +		}) | 
|  | 54 | + | 
|  | 55 | +		ginkgo.It("should return nil if secret does not exist", func() { | 
|  | 56 | +			var client kubernetes.Interface = testclient.NewSimpleClientset() | 
|  | 57 | +			secretsStore := NewSecretStore(client) | 
|  | 58 | + | 
|  | 59 | +			actual := secretsStore.GetPfxCertificate("someKey") | 
|  | 60 | +			Expect(actual).To(BeNil()) | 
|  | 61 | +		}) | 
|  | 62 | +	}) | 
| 47 | 63 | }) | 
0 commit comments