Integration test for Supervisor secret controllers

This forced us to add labels to the CSRF cookie secret, just as we do
for other Supervisor secrets. Yay tests.

Signed-off-by: Andrew Keesler <akeesler@vmware.com>
This commit is contained in:
Aram Price
2020-12-14 15:53:12 -05:00
committed by Andrew Keesler
parent cae0023234
commit 5b7a86ecc1
5 changed files with 181 additions and 106 deletions
@@ -46,6 +46,7 @@ func generateSymmetricKey() ([]byte, error) {
type supervisorSecretsController struct {
owner *appsv1.Deployment
labels map[string]string
client kubernetes.Interface
secrets corev1informers.SecretInformer
setCache func(secret []byte)
@@ -53,16 +54,17 @@ type supervisorSecretsController struct {
// NewSupervisorSecretsController instantiates a new controllerlib.Controller which will ensure existence of a generated secret.
func NewSupervisorSecretsController(
// TODO: label the generated secret like we do in the JWKSWriterController
// TODO: generate the name for the secret and label the secret with the UID of the owner? So that we don't have naming conflicts if the user has already created a Secret with that name.
// TODO: add tests for the filter like we do in the JWKSWriterController?
owner *appsv1.Deployment,
labels map[string]string,
client kubernetes.Interface,
secrets corev1informers.SecretInformer,
setCache func(secret []byte),
) controllerlib.Controller {
c := supervisorSecretsController{
owner: owner,
labels: labels,
client: client,
secrets: secrets,
setCache: setCache,
@@ -95,7 +97,7 @@ func (c *supervisorSecretsController) Sync(ctx controllerlib.Context) error {
return nil
}
newSecret, err := generateSecret(ctx.Key.Namespace, ctx.Key.Name, secretDataFunc, c.owner)
newSecret, err := generateSecret(ctx.Key.Namespace, ctx.Key.Name, c.labels, secretDataFunc, c.owner)
if err != nil {
return fmt.Errorf("failed to generate secret: %w", err)
}
@@ -141,7 +143,7 @@ func secretDataFunc() (map[string][]byte, error) {
}, nil
}
func generateSecret(namespace, name string, secretDataFunc func() (map[string][]byte, error), owner metav1.Object) (*corev1.Secret, error) {
func generateSecret(namespace, name string, labels map[string]string, secretDataFunc func() (map[string][]byte, error), owner metav1.Object) (*corev1.Secret, error) {
secretData, err := secretDataFunc()
if err != nil {
return nil, err
@@ -159,6 +161,7 @@ func generateSecret(namespace, name string, secretDataFunc func() (map[string][]
OwnerReferences: []metav1.OwnerReference{
*metav1.NewControllerRef(owner, deploymentGVK),
},
Labels: labels,
},
Type: symmetricKeySecretType,
Data: secretData,
@@ -28,7 +28,6 @@ func TestController(t *testing.T) {
const (
generatedSecretNamespace = "some-namespace"
generatedSecretName = "some-name-abc123"
otherGeneratedSecretName = "some-other-name-abc123"
)
var (
@@ -53,6 +52,11 @@ func TestController(t *testing.T) {
generatedSymmetricKey = []byte("some-neato-32-byte-generated-key")
otherGeneratedSymmetricKey = []byte("some-funio-32-byte-generated-key")
labels = map[string]string{
"some-label-key-1": "some-label-value-1",
"some-label-key-2": "some-label-value-2",
}
generatedSecret = &corev1.Secret{
ObjectMeta: metav1.ObjectMeta{
Name: generatedSecretName,
@@ -60,6 +64,7 @@ func TestController(t *testing.T) {
OwnerReferences: []metav1.OwnerReference{
*metav1.NewControllerRef(owner, ownerGVK),
},
Labels: labels,
},
Type: "secrets.pinniped.dev/symmetric",
Data: map[string][]byte{
@@ -74,6 +79,7 @@ func TestController(t *testing.T) {
OwnerReferences: []metav1.OwnerReference{
*metav1.NewControllerRef(owner, ownerGVK),
},
Labels: labels,
},
Type: "secrets.pinniped.dev/symmetric",
Data: map[string][]byte{
@@ -307,7 +313,7 @@ func TestController(t *testing.T) {
secrets := informers.Core().V1().Secrets()
var callbackSecret []byte
c := NewSupervisorSecretsController(owner, apiClient, secrets, func(secret []byte) {
c := NewSupervisorSecretsController(owner, labels, apiClient, secrets, func(secret []byte) {
require.Nil(t, callbackSecret, "callback was called twice")
callbackSecret = secret
})