package handler import ( "context" "fmt" "os" "testing" "time" "github.com/prometheus/client_golang/prometheus" promtestutil "github.com/prometheus/client_golang/prometheus/testutil" "github.com/sirupsen/logrus" "github.com/stakater/Reloader/internal/pkg/constants" "github.com/stakater/Reloader/internal/pkg/metrics" "github.com/stakater/Reloader/internal/pkg/options" "github.com/stakater/Reloader/internal/pkg/testutil" "github.com/stakater/Reloader/internal/pkg/util" "github.com/stakater/Reloader/pkg/kube" "k8s.io/apimachinery/pkg/api/meta" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" testclient "k8s.io/client-go/kubernetes/fake" ) var ( clients = kube.Clients{KubernetesClient: testclient.NewSimpleClientset()} arsNamespace = "test-handler-" + testutil.RandSeq(5) arsConfigmapName = "testconfigmap-handler-" + testutil.RandSeq(5) arsSecretName = "testsecret-handler-" + testutil.RandSeq(5) arsProjectedConfigMapName = "testprojectedconfigmap-handler-" + testutil.RandSeq(5) arsProjectedSecretName = "testprojectedsecret-handler-" + testutil.RandSeq(5) arsConfigmapWithInitContainer = "testconfigmapInitContainerhandler-" + testutil.RandSeq(5) arsSecretWithInitContainer = "testsecretWithInitContainer-handler-" + testutil.RandSeq(5) arsProjectedConfigMapWithInitContainer = "testProjectedConfigMapWithInitContainer-handler" + testutil.RandSeq(5) arsProjectedSecretWithInitContainer = "testProjectedSecretWithInitContainer-handler" + testutil.RandSeq(5) arsConfigmapWithInitEnv = "configmapWithInitEnv-" + testutil.RandSeq(5) arsSecretWithInitEnv = "secretWithInitEnv-handler-" + testutil.RandSeq(5) arsConfigmapWithEnvName = "testconfigmapWithEnv-handler-" + testutil.RandSeq(5) arsConfigmapWithEnvFromName = "testconfigmapWithEnvFrom-handler-" + testutil.RandSeq(5) arsSecretWithEnvName = "testsecretWithEnv-handler-" + testutil.RandSeq(5) arsSecretWithEnvFromName = "testsecretWithEnvFrom-handler-" + testutil.RandSeq(5) arsConfigmapWithPodAnnotations = "testconfigmapPodAnnotations-handler-" + testutil.RandSeq(5) arsConfigmapWithBothAnnotations = "testconfigmapBothAnnotations-handler-" + testutil.RandSeq(5) arsConfigmapAnnotated = "testconfigmapAnnotated-handler-" + testutil.RandSeq(5) ersNamespace = "test-handler-" + testutil.RandSeq(5) ersConfigmapName = "testconfigmap-handler-" + testutil.RandSeq(5) ersSecretName = "testsecret-handler-" + testutil.RandSeq(5) ersProjectedConfigMapName = "testprojectedconfigmap-handler-" + testutil.RandSeq(5) ersProjectedSecretName = "testprojectedsecret-handler-" + testutil.RandSeq(5) ersConfigmapWithInitContainer = "testconfigmapInitContainerhandler-" + testutil.RandSeq(5) ersSecretWithInitContainer = "testsecretWithInitContainer-handler-" + testutil.RandSeq(5) ersProjectedConfigMapWithInitContainer = "testProjectedConfigMapWithInitContainer-handler" + testutil.RandSeq(5) ersProjectedSecretWithInitContainer = "testProjectedSecretWithInitContainer-handler" + testutil.RandSeq(5) ersConfigmapWithInitEnv = "configmapWithInitEnv-" + testutil.RandSeq(5) ersSecretWithInitEnv = "secretWithInitEnv-handler-" + testutil.RandSeq(5) ersConfigmapWithEnvName = "testconfigmapWithEnv-handler-" + testutil.RandSeq(5) ersConfigmapWithEnvFromName = "testconfigmapWithEnvFrom-handler-" + testutil.RandSeq(5) ersSecretWithEnvName = "testsecretWithEnv-handler-" + testutil.RandSeq(5) ersSecretWithEnvFromName = "testsecretWithEnvFrom-handler-" + testutil.RandSeq(5) ersConfigmapWithPodAnnotations = "testconfigmapPodAnnotations-handler-" + testutil.RandSeq(5) ersConfigmapWithBothAnnotations = "testconfigmapBothAnnotations-handler-" + testutil.RandSeq(5) ersConfigmapAnnotated = "testconfigmapAnnotated-handler-" + testutil.RandSeq(5) ) func TestMain(m *testing.M) { // Creating namespaces testutil.CreateNamespace(arsNamespace, clients.KubernetesClient) testutil.CreateNamespace(ersNamespace, clients.KubernetesClient) logrus.Infof("Setting up the env-var reload strategy test resources") setupArs() logrus.Infof("Setting up the annotation reload strategy test resources") setupErs() logrus.Infof("Running Testcases") retCode := m.Run() logrus.Infof("tearing down the env-var reload strategy test resources") teardownArs() logrus.Infof("tearing down the annotation reload strategy test resources") teardownErs() os.Exit(retCode) } func setupArs() { // Creating configmap _, err := testutil.CreateConfigMap(clients.KubernetesClient, arsNamespace, arsConfigmapName, "www.google.com") if err != nil { logrus.Errorf("Error in configmap creation: %v", err) } // Creating secret data := "dGVzdFNlY3JldEVuY29kaW5nRm9yUmVsb2FkZXI=" _, err = testutil.CreateSecret(clients.KubernetesClient, arsNamespace, arsSecretName, data) if err != nil { logrus.Errorf("Error in secret creation: %v", err) } // Creating configmap will be used in projected volume _, err = testutil.CreateConfigMap(clients.KubernetesClient, arsNamespace, arsProjectedConfigMapName, "www.google.com") if err != nil { logrus.Errorf("Error in configmap creation: %v", err) } // Creating secret will be used in projected volume _, err = testutil.CreateSecret(clients.KubernetesClient, arsNamespace, arsProjectedSecretName, data) if err != nil { logrus.Errorf("Error in secret creation: %v", err) } // Creating configmap will be used in projected volume in init containers _, err = testutil.CreateConfigMap(clients.KubernetesClient, arsNamespace, arsProjectedConfigMapWithInitContainer, "www.google.com") if err != nil { logrus.Errorf("Error in configmap creation: %v", err) } // Creating secret will be used in projected volume in init containers _, err = testutil.CreateSecret(clients.KubernetesClient, arsNamespace, arsProjectedSecretWithInitContainer, data) if err != nil { logrus.Errorf("Error in secret creation: %v", err) } _, err = testutil.CreateConfigMap(clients.KubernetesClient, arsNamespace, arsConfigmapWithEnvName, "www.google.com") if err != nil { logrus.Errorf("Error in configmap creation: %v", err) } // Creating secret _, err = testutil.CreateSecret(clients.KubernetesClient, arsNamespace, arsSecretWithEnvName, data) if err != nil { logrus.Errorf("Error in secret creation: %v", err) } _, err = testutil.CreateConfigMap(clients.KubernetesClient, arsNamespace, arsConfigmapWithEnvFromName, "www.google.com") if err != nil { logrus.Errorf("Error in configmap creation: %v", err) } // Creating secret _, err = testutil.CreateSecret(clients.KubernetesClient, arsNamespace, arsSecretWithInitEnv, data) if err != nil { logrus.Errorf("Error in secret creation: %v", err) } _, err = testutil.CreateConfigMap(clients.KubernetesClient, arsNamespace, arsConfigmapWithInitContainer, "www.google.com") if err != nil { logrus.Errorf("Error in configmap creation: %v", err) } // Creating secret _, err = testutil.CreateSecret(clients.KubernetesClient, arsNamespace, arsSecretWithEnvFromName, data) if err != nil { logrus.Errorf("Error in secret creation: %v", err) } _, err = testutil.CreateConfigMap(clients.KubernetesClient, arsNamespace, arsConfigmapWithInitEnv, "www.google.com") if err != nil { logrus.Errorf("Error in configmap creation: %v", err) } // Creating secret _, err = testutil.CreateSecret(clients.KubernetesClient, arsNamespace, arsSecretWithInitContainer, data) if err != nil { logrus.Errorf("Error in secret creation: %v", err) } _, err = testutil.CreateConfigMap(clients.KubernetesClient, arsNamespace, arsConfigmapWithPodAnnotations, "www.google.com") if err != nil { logrus.Errorf("Error in configmap creation: %v", err) } // Creating Deployment with configmap _, err = testutil.CreateDeployment(clients.KubernetesClient, arsConfigmapName, arsNamespace, true) if err != nil { logrus.Errorf("Error in Deployment with configmap creation: %v", err) } // Creating Deployment with configmap mounted in init container _, err = testutil.CreateDeploymentWithInitContainer(clients.KubernetesClient, arsConfigmapWithInitContainer, arsNamespace, true) if err != nil { logrus.Errorf("Error in Deployment with configmap creation: %v", err) } // Creating Deployment with configmap in projected volume _, err = testutil.CreateDeployment(clients.KubernetesClient, arsProjectedConfigMapName, arsNamespace, true) if err != nil { logrus.Errorf("Error in Deployment with configmap creation: %v", err) } // Creating Deployment with configmap in projected volume mounted in init container _, err = testutil.CreateDeploymentWithInitContainer(clients.KubernetesClient, arsProjectedConfigMapWithInitContainer, arsNamespace, true) if err != nil { logrus.Errorf("Error in Deployment with configmap creation: %v", err) } // Creating Deployment with secret in projected volume _, err = testutil.CreateDeployment(clients.KubernetesClient, arsProjectedSecretName, arsNamespace, true) if err != nil { logrus.Errorf("Error in Deployment with secret creation: %v", err) } // Creating Deployment with secret in projected volume mounted in init container _, err = testutil.CreateDeploymentWithInitContainer(clients.KubernetesClient, arsProjectedSecretWithInitContainer, arsNamespace, true) if err != nil { logrus.Errorf("Error in Deployment with secret creation: %v", err) } // Creating Deployment with secret mounted in init container _, err = testutil.CreateDeploymentWithInitContainer(clients.KubernetesClient, arsSecretWithInitContainer, arsNamespace, true) if err != nil { logrus.Errorf("Error in Deployment with secret creation: %v", err) } // Creating Deployment with configmap mounted as Env in init container _, err = testutil.CreateDeploymentWithInitContainer(clients.KubernetesClient, arsConfigmapWithInitEnv, arsNamespace, false) if err != nil { logrus.Errorf("Error in Deployment with configmap creation: %v", err) } // Creating Deployment with secret mounted as Env in init container _, err = testutil.CreateDeploymentWithInitContainer(clients.KubernetesClient, arsSecretWithInitEnv, arsNamespace, false) if err != nil { logrus.Errorf("Error in Deployment with secret creation: %v", err) } // Creating Deployment with secret _, err = testutil.CreateDeployment(clients.KubernetesClient, arsSecretName, arsNamespace, true) if err != nil { logrus.Errorf("Error in Deployment with secret creation: %v", err) } // Creating Deployment with env var source as configmap _, err = testutil.CreateDeployment(clients.KubernetesClient, arsConfigmapWithEnvName, arsNamespace, false) if err != nil { logrus.Errorf("Error in Deployment with configmap configmap as env var source creation: %v", err) } // Creating Deployment with env var source as secret _, err = testutil.CreateDeployment(clients.KubernetesClient, arsSecretWithEnvName, arsNamespace, false) if err != nil { logrus.Errorf("Error in Deployment with secret configmap as env var source creation: %v", err) } // Creating Deployment with envFrom source as secret _, err = testutil.CreateDeploymentWithEnvVarSource(clients.KubernetesClient, arsConfigmapWithEnvFromName, arsNamespace) if err != nil { logrus.Errorf("Error in Deployment with secret configmap as envFrom source creation: %v", err) } // Creating Deployment with envFrom source as secret _, err = testutil.CreateDeploymentWithEnvVarSource(clients.KubernetesClient, arsSecretWithEnvFromName, arsNamespace) if err != nil { logrus.Errorf("Error in Deployment with secret configmap as envFrom source creation: %v", err) } // Creating Deployment with envFrom source as secret _, err = testutil.CreateDeploymentWithEnvVarSourceAndAnnotations( clients.KubernetesClient, arsConfigmapAnnotated, arsNamespace, map[string]string{"reloader.stakater.com/search": "true"}, ) if err != nil { logrus.Errorf("Error in Deployment with secret configmap as envFrom source creation: %v", err) } // Creating DaemonSet with configmap _, err = testutil.CreateDaemonSet(clients.KubernetesClient, arsConfigmapName, arsNamespace, true) if err != nil { logrus.Errorf("Error in DaemonSet with configmap creation: %v", err) } // Creating DaemonSet with secret _, err = testutil.CreateDaemonSet(clients.KubernetesClient, arsSecretName, arsNamespace, true) if err != nil { logrus.Errorf("Error in DaemonSet with secret creation: %v", err) } // Creating DaemonSet with configmap in projected volume _, err = testutil.CreateDaemonSet(clients.KubernetesClient, arsProjectedConfigMapName, arsNamespace, true) if err != nil { logrus.Errorf("Error in DaemonSet with configmap creation: %v", err) } // Creating DaemonSet with secret in projected volume _, err = testutil.CreateDaemonSet(clients.KubernetesClient, arsProjectedSecretName, arsNamespace, true) if err != nil { logrus.Errorf("Error in DaemonSet with secret creation: %v", err) } // Creating DaemonSet with env var source as configmap _, err = testutil.CreateDaemonSet(clients.KubernetesClient, arsConfigmapWithEnvName, arsNamespace, false) if err != nil { logrus.Errorf("Error in DaemonSet with configmap as env var source creation: %v", err) } // Creating DaemonSet with env var source as secret _, err = testutil.CreateDaemonSet(clients.KubernetesClient, arsSecretWithEnvName, arsNamespace, false) if err != nil { logrus.Errorf("Error in DaemonSet with secret configmap as env var source creation: %v", err) } // Creating StatefulSet with configmap _, err = testutil.CreateStatefulSet(clients.KubernetesClient, arsConfigmapName, arsNamespace, true) if err != nil { logrus.Errorf("Error in StatefulSet with configmap creation: %v", err) } // Creating StatefulSet with secret _, err = testutil.CreateStatefulSet(clients.KubernetesClient, arsSecretName, arsNamespace, true) if err != nil { logrus.Errorf("Error in StatefulSet with secret creation: %v", err) } // Creating StatefulSet with configmap in projected volume _, err = testutil.CreateStatefulSet(clients.KubernetesClient, arsProjectedConfigMapName, arsNamespace, true) if err != nil { logrus.Errorf("Error in StatefulSet with configmap creation: %v", err) } // Creating StatefulSet with secret in projected volume _, err = testutil.CreateStatefulSet(clients.KubernetesClient, arsProjectedSecretName, arsNamespace, true) if err != nil { logrus.Errorf("Error in StatefulSet with configmap creation: %v", err) } // Creating StatefulSet with env var source as configmap _, err = testutil.CreateStatefulSet(clients.KubernetesClient, arsConfigmapWithEnvName, arsNamespace, false) if err != nil { logrus.Errorf("Error in StatefulSet with configmap configmap as env var source creation: %v", err) } // Creating StatefulSet with env var source as secret _, err = testutil.CreateStatefulSet(clients.KubernetesClient, arsSecretWithEnvName, arsNamespace, false) if err != nil { logrus.Errorf("Error in StatefulSet with secret configmap as env var source creation: %v", err) } // Creating Deployment with pod annotations _, err = testutil.CreateDeploymentWithPodAnnotations(clients.KubernetesClient, arsConfigmapWithPodAnnotations, arsNamespace, false) if err != nil { logrus.Errorf("Error in Deployment with pod annotations: %v", err) } // Creating Deployment with both annotations _, err = testutil.CreateDeploymentWithPodAnnotations(clients.KubernetesClient, arsConfigmapWithBothAnnotations, arsNamespace, true) if err != nil { logrus.Errorf("Error in Deployment with both annotations: %v", err) } } func teardownArs() { // Deleting Deployment with configmap deploymentError := testutil.DeleteDeployment(clients.KubernetesClient, arsNamespace, arsConfigmapName) if deploymentError != nil { logrus.Errorf("Error while deleting deployment with configmap %v", deploymentError) } // Deleting Deployment with secret deploymentError = testutil.DeleteDeployment(clients.KubernetesClient, arsNamespace, arsSecretName) if deploymentError != nil { logrus.Errorf("Error while deleting deployment with secret %v", deploymentError) } // Deleting Deployment with configmap in projected volume deploymentError = testutil.DeleteDeployment(clients.KubernetesClient, arsNamespace, arsProjectedConfigMapName) if deploymentError != nil { logrus.Errorf("Error while deleting deployment with configmap %v", deploymentError) } // Deleting Deployment with configmap in projected volume mounted in init container deploymentError = testutil.DeleteDeployment(clients.KubernetesClient, arsNamespace, arsProjectedConfigMapWithInitContainer) if deploymentError != nil { logrus.Errorf("Error while deleting deployment with configmap %v", deploymentError) } // Deleting Deployment with secret in projected volume deploymentError = testutil.DeleteDeployment(clients.KubernetesClient, arsNamespace, arsProjectedSecretName) if deploymentError != nil { logrus.Errorf("Error while deleting deployment with configmap %v", deploymentError) } // Deleting Deployment with secret in projected volume mounted in init container deploymentError = testutil.DeleteDeployment(clients.KubernetesClient, arsNamespace, arsProjectedSecretWithInitContainer) if deploymentError != nil { logrus.Errorf("Error while deleting deployment with configmap %v", deploymentError) } // Deleting Deployment with configmap as env var source deploymentError = testutil.DeleteDeployment(clients.KubernetesClient, arsNamespace, arsConfigmapWithEnvName) if deploymentError != nil { logrus.Errorf("Error while deleting deployment with configmap as env var source %v", deploymentError) } // Deleting Deployment with secret deploymentError = testutil.DeleteDeployment(clients.KubernetesClient, arsNamespace, arsSecretWithEnvName) if deploymentError != nil { logrus.Errorf("Error while deleting deployment with secret as env var source %v", deploymentError) } // Deleting Deployment with configmap mounted in init container deploymentError = testutil.DeleteDeployment(clients.KubernetesClient, arsNamespace, arsConfigmapWithInitContainer) if deploymentError != nil { logrus.Errorf("Error while deleting deployment with configmap mounted in init container %v", deploymentError) } // Deleting Deployment with secret mounted in init container deploymentError = testutil.DeleteDeployment(clients.KubernetesClient, arsNamespace, arsSecretWithInitContainer) if deploymentError != nil { logrus.Errorf("Error while deleting deployment with secret mounted in init container %v", deploymentError) } // Deleting Deployment with configmap mounted as env in init container deploymentError = testutil.DeleteDeployment(clients.KubernetesClient, arsNamespace, arsConfigmapWithInitEnv) if deploymentError != nil { logrus.Errorf("Error while deleting deployment with configmap mounted as env in init container %v", deploymentError) } // Deleting Deployment with secret mounted as env in init container deploymentError = testutil.DeleteDeployment(clients.KubernetesClient, arsNamespace, arsSecretWithInitEnv) if deploymentError != nil { logrus.Errorf("Error while deleting deployment with secret mounted as env in init container %v", deploymentError) } // Deleting Deployment with configmap as envFrom source deploymentError = testutil.DeleteDeployment(clients.KubernetesClient, arsNamespace, arsConfigmapWithEnvFromName) if deploymentError != nil { logrus.Errorf("Error while deleting deployment with configmap as envFrom source %v", deploymentError) } // Deleting Deployment with secret as envFrom source deploymentError = testutil.DeleteDeployment(clients.KubernetesClient, arsNamespace, arsSecretWithEnvFromName) if deploymentError != nil { logrus.Errorf("Error while deleting deployment with secret as envFrom source %v", deploymentError) } // Deleting Deployment with pod annotations deploymentError = testutil.DeleteDeployment(clients.KubernetesClient, arsNamespace, arsConfigmapWithPodAnnotations) if deploymentError != nil { logrus.Errorf("Error while deleting deployment with pod annotations %v", deploymentError) } // Deleting Deployment with both annotations deploymentError = testutil.DeleteDeployment(clients.KubernetesClient, arsNamespace, arsConfigmapWithBothAnnotations) if deploymentError != nil { logrus.Errorf("Error while deleting deployment with both annotations %v", deploymentError) } // Deleting Deployment with search annotation deploymentError = testutil.DeleteDeployment(clients.KubernetesClient, arsNamespace, arsConfigmapAnnotated) if deploymentError != nil { logrus.Errorf("Error while deleting deployment with search annotation %v", deploymentError) } // Deleting DaemonSet with configmap daemonSetError := testutil.DeleteDaemonSet(clients.KubernetesClient, arsNamespace, arsConfigmapName) if daemonSetError != nil { logrus.Errorf("Error while deleting daemonSet with configmap %v", daemonSetError) } // Deleting Deployment with secret daemonSetError = testutil.DeleteDaemonSet(clients.KubernetesClient, arsNamespace, arsSecretName) if daemonSetError != nil { logrus.Errorf("Error while deleting daemonSet with secret %v", daemonSetError) } // Deleting DaemonSet with configmap in projected volume daemonSetError = testutil.DeleteDaemonSet(clients.KubernetesClient, arsNamespace, arsProjectedConfigMapName) if daemonSetError != nil { logrus.Errorf("Error while deleting daemonSet with configmap %v", daemonSetError) } // Deleting Deployment with secret in projected volume daemonSetError = testutil.DeleteDaemonSet(clients.KubernetesClient, arsNamespace, arsProjectedSecretName) if daemonSetError != nil { logrus.Errorf("Error while deleting daemonSet with secret %v", daemonSetError) } // Deleting Deployment with configmap as env var source daemonSetError = testutil.DeleteDaemonSet(clients.KubernetesClient, arsNamespace, arsConfigmapWithEnvName) if daemonSetError != nil { logrus.Errorf("Error while deleting daemonSet with configmap as env var source %v", daemonSetError) } // Deleting Deployment with secret as env var source daemonSetError = testutil.DeleteDaemonSet(clients.KubernetesClient, arsNamespace, arsSecretWithEnvName) if daemonSetError != nil { logrus.Errorf("Error while deleting daemonSet with secret as env var source %v", daemonSetError) } // Deleting StatefulSet with configmap statefulSetError := testutil.DeleteStatefulSet(clients.KubernetesClient, arsNamespace, arsConfigmapName) if statefulSetError != nil { logrus.Errorf("Error while deleting statefulSet with configmap %v", statefulSetError) } // Deleting Deployment with secret statefulSetError = testutil.DeleteStatefulSet(clients.KubernetesClient, arsNamespace, arsSecretName) if statefulSetError != nil { logrus.Errorf("Error while deleting statefulSet with secret %v", statefulSetError) } // Deleting StatefulSet with configmap in projected volume statefulSetError = testutil.DeleteStatefulSet(clients.KubernetesClient, arsNamespace, arsProjectedConfigMapName) if statefulSetError != nil { logrus.Errorf("Error while deleting statefulSet with configmap %v", statefulSetError) } // Deleting Deployment with secret in projected volume statefulSetError = testutil.DeleteStatefulSet(clients.KubernetesClient, arsNamespace, arsProjectedSecretName) if statefulSetError != nil { logrus.Errorf("Error while deleting statefulSet with secret %v", statefulSetError) } // Deleting StatefulSet with configmap as env var source statefulSetError = testutil.DeleteStatefulSet(clients.KubernetesClient, arsNamespace, arsConfigmapWithEnvName) if statefulSetError != nil { logrus.Errorf("Error while deleting statefulSet with configmap as env var source %v", statefulSetError) } // Deleting Deployment with secret as env var source statefulSetError = testutil.DeleteStatefulSet(clients.KubernetesClient, arsNamespace, arsSecretWithEnvName) if statefulSetError != nil { logrus.Errorf("Error while deleting statefulSet with secret as env var source %v", statefulSetError) } // Deleting Configmap err := testutil.DeleteConfigMap(clients.KubernetesClient, arsNamespace, arsConfigmapName) if err != nil { logrus.Errorf("Error while deleting the configmap %v", err) } // Deleting Secret err = testutil.DeleteSecret(clients.KubernetesClient, arsNamespace, arsSecretName) if err != nil { logrus.Errorf("Error while deleting the secret %v", err) } // Deleting configmap used in projected volume err = testutil.DeleteConfigMap(clients.KubernetesClient, arsNamespace, arsProjectedConfigMapName) if err != nil { logrus.Errorf("Error while deleting the configmap %v", err) } // Deleting Secret used in projected volume err = testutil.DeleteSecret(clients.KubernetesClient, arsNamespace, arsProjectedSecretName) if err != nil { logrus.Errorf("Error while deleting the secret %v", err) } // Deleting configmap used in projected volume in init containers err = testutil.DeleteConfigMap(clients.KubernetesClient, arsNamespace, arsProjectedConfigMapWithInitContainer) if err != nil { logrus.Errorf("Error while deleting the configmap %v", err) } // Deleting Configmap used projected volume in init containers err = testutil.DeleteSecret(clients.KubernetesClient, arsNamespace, arsProjectedSecretWithInitContainer) if err != nil { logrus.Errorf("Error while deleting the secret %v", err) } // Deleting Configmap used as env var source err = testutil.DeleteConfigMap(clients.KubernetesClient, arsNamespace, arsConfigmapWithEnvName) if err != nil { logrus.Errorf("Error while deleting the configmap used as env var source %v", err) } // Deleting Secret used as env var source err = testutil.DeleteSecret(clients.KubernetesClient, arsNamespace, arsSecretWithEnvName) if err != nil { logrus.Errorf("Error while deleting the secret used as env var source %v", err) } // Deleting Configmap used in init container err = testutil.DeleteConfigMap(clients.KubernetesClient, arsNamespace, arsConfigmapWithInitContainer) if err != nil { logrus.Errorf("Error while deleting the configmap used in init container %v", err) } // Deleting Secret used in init container err = testutil.DeleteSecret(clients.KubernetesClient, arsNamespace, arsSecretWithInitContainer) if err != nil { logrus.Errorf("Error while deleting the secret used in init container %v", err) } // Deleting Configmap used as env var source err = testutil.DeleteConfigMap(clients.KubernetesClient, arsNamespace, arsConfigmapWithEnvFromName) if err != nil { logrus.Errorf("Error while deleting the configmap used as env var source %v", err) } // Deleting Secret used as env var source err = testutil.DeleteSecret(clients.KubernetesClient, arsNamespace, arsSecretWithEnvFromName) if err != nil { logrus.Errorf("Error while deleting the secret used as env var source %v", err) } // Deleting Configmap used as env var source err = testutil.DeleteConfigMap(clients.KubernetesClient, arsNamespace, arsConfigmapWithInitEnv) if err != nil { logrus.Errorf("Error while deleting the configmap used as env var source in init container %v", err) } // Deleting Secret used as env var source err = testutil.DeleteSecret(clients.KubernetesClient, arsNamespace, arsSecretWithInitEnv) if err != nil { logrus.Errorf("Error while deleting the secret used as env var source in init container %v", err) } err = testutil.DeleteConfigMap(clients.KubernetesClient, arsNamespace, arsConfigmapWithPodAnnotations) if err != nil { logrus.Errorf("Error while deleting the configmap used with pod annotations: %v", err) } // Deleting namespace testutil.DeleteNamespace(arsNamespace, clients.KubernetesClient) } func setupErs() { // Creating configmap _, err := testutil.CreateConfigMap(clients.KubernetesClient, ersNamespace, ersConfigmapName, "www.google.com") if err != nil { logrus.Errorf("Error in configmap creation: %v", err) } // Creating secret data := "dGVzdFNlY3JldEVuY29kaW5nRm9yUmVsb2FkZXI=" _, err = testutil.CreateSecret(clients.KubernetesClient, ersNamespace, ersSecretName, data) if err != nil { logrus.Errorf("Error in secret creation: %v", err) } // Creating configmap will be used in projected volume _, err = testutil.CreateConfigMap(clients.KubernetesClient, ersNamespace, ersProjectedConfigMapName, "www.google.com") if err != nil { logrus.Errorf("Error in configmap creation: %v", err) } // Creating secret will be used in projected volume _, err = testutil.CreateSecret(clients.KubernetesClient, ersNamespace, ersProjectedSecretName, data) if err != nil { logrus.Errorf("Error in secret creation: %v", err) } // Creating configmap will be used in projected volume in init containers _, err = testutil.CreateConfigMap(clients.KubernetesClient, ersNamespace, ersProjectedConfigMapWithInitContainer, "www.google.com") if err != nil { logrus.Errorf("Error in configmap creation: %v", err) } // Creating secret will be used in projected volume in init containers _, err = testutil.CreateSecret(clients.KubernetesClient, ersNamespace, ersProjectedSecretWithInitContainer, data) if err != nil { logrus.Errorf("Error in secret creation: %v", err) } _, err = testutil.CreateConfigMap(clients.KubernetesClient, ersNamespace, ersConfigmapWithEnvName, "www.google.com") if err != nil { logrus.Errorf("Error in configmap creation: %v", err) } // Creating secret _, err = testutil.CreateSecret(clients.KubernetesClient, ersNamespace, ersSecretWithEnvName, data) if err != nil { logrus.Errorf("Error in secret creation: %v", err) } _, err = testutil.CreateConfigMap(clients.KubernetesClient, ersNamespace, ersConfigmapWithEnvFromName, "www.google.com") if err != nil { logrus.Errorf("Error in configmap creation: %v", err) } // Creating secret _, err = testutil.CreateSecret(clients.KubernetesClient, ersNamespace, ersSecretWithInitEnv, data) if err != nil { logrus.Errorf("Error in secret creation: %v", err) } _, err = testutil.CreateConfigMap(clients.KubernetesClient, ersNamespace, ersConfigmapWithInitContainer, "www.google.com") if err != nil { logrus.Errorf("Error in configmap creation: %v", err) } // Creating secret _, err = testutil.CreateSecret(clients.KubernetesClient, ersNamespace, ersSecretWithEnvFromName, data) if err != nil { logrus.Errorf("Error in secret creation: %v", err) } _, err = testutil.CreateConfigMap(clients.KubernetesClient, ersNamespace, ersConfigmapWithInitEnv, "www.google.com") if err != nil { logrus.Errorf("Error in configmap creation: %v", err) } // Creating secret _, err = testutil.CreateSecret(clients.KubernetesClient, ersNamespace, ersSecretWithInitContainer, data) if err != nil { logrus.Errorf("Error in secret creation: %v", err) } _, err = testutil.CreateConfigMap(clients.KubernetesClient, ersNamespace, ersConfigmapWithPodAnnotations, "www.google.com") if err != nil { logrus.Errorf("Error in configmap creation: %v", err) } // Creating Deployment with configmap _, err = testutil.CreateDeployment(clients.KubernetesClient, ersConfigmapName, ersNamespace, true) if err != nil { logrus.Errorf("Error in Deployment with configmap creation: %v", err) } // Creating Deployment with configmap mounted in init container _, err = testutil.CreateDeploymentWithInitContainer(clients.KubernetesClient, ersConfigmapWithInitContainer, ersNamespace, true) if err != nil { logrus.Errorf("Error in Deployment with configmap creation: %v", err) } // Creating Deployment with configmap in projected volume _, err = testutil.CreateDeployment(clients.KubernetesClient, ersProjectedConfigMapName, ersNamespace, true) if err != nil { logrus.Errorf("Error in Deployment with configmap creation: %v", err) } // Creating Deployment with configmap in projected volume mounted in init container _, err = testutil.CreateDeploymentWithInitContainer(clients.KubernetesClient, ersProjectedConfigMapWithInitContainer, ersNamespace, true) if err != nil { logrus.Errorf("Error in Deployment with configmap creation: %v", err) } // Creating Deployment with secret in projected volume _, err = testutil.CreateDeployment(clients.KubernetesClient, ersProjectedSecretName, ersNamespace, true) if err != nil { logrus.Errorf("Error in Deployment with secret creation: %v", err) } // Creating Deployment with secret in projected volume mounted in init container _, err = testutil.CreateDeploymentWithInitContainer(clients.KubernetesClient, ersProjectedSecretWithInitContainer, ersNamespace, true) if err != nil { logrus.Errorf("Error in Deployment with secret creation: %v", err) } // Creating Deployment with secret mounted in init container _, err = testutil.CreateDeploymentWithInitContainer(clients.KubernetesClient, ersSecretWithInitContainer, ersNamespace, true) if err != nil { logrus.Errorf("Error in Deployment with secret creation: %v", err) } // Creating Deployment with configmap mounted as Env in init container _, err = testutil.CreateDeploymentWithInitContainer(clients.KubernetesClient, ersConfigmapWithInitEnv, ersNamespace, false) if err != nil { logrus.Errorf("Error in Deployment with configmap creation: %v", err) } // Creating Deployment with secret mounted as Env in init container _, err = testutil.CreateDeploymentWithInitContainer(clients.KubernetesClient, ersSecretWithInitEnv, ersNamespace, false) if err != nil { logrus.Errorf("Error in Deployment with secret creation: %v", err) } // Creating Deployment with secret _, err = testutil.CreateDeployment(clients.KubernetesClient, ersSecretName, ersNamespace, true) if err != nil { logrus.Errorf("Error in Deployment with secret creation: %v", err) } // Creating Deployment with env var source as configmap _, err = testutil.CreateDeployment(clients.KubernetesClient, ersConfigmapWithEnvName, ersNamespace, false) if err != nil { logrus.Errorf("Error in Deployment with configmap configmap as env var source creation: %v", err) } // Creating Deployment with env var source as secret _, err = testutil.CreateDeployment(clients.KubernetesClient, ersSecretWithEnvName, ersNamespace, false) if err != nil { logrus.Errorf("Error in Deployment with secret configmap as env var source creation: %v", err) } // Creating Deployment with envFrom source as secret _, err = testutil.CreateDeploymentWithEnvVarSource(clients.KubernetesClient, ersConfigmapWithEnvFromName, ersNamespace) if err != nil { logrus.Errorf("Error in Deployment with secret configmap as envFrom source creation: %v", err) } // Creating Deployment with envFrom source as secret _, err = testutil.CreateDeploymentWithEnvVarSource(clients.KubernetesClient, ersSecretWithEnvFromName, ersNamespace) if err != nil { logrus.Errorf("Error in Deployment with secret configmap as envFrom source creation: %v", err) } // Creating Deployment with envFrom source as secret _, err = testutil.CreateDeploymentWithEnvVarSourceAndAnnotations( clients.KubernetesClient, ersConfigmapAnnotated, ersNamespace, map[string]string{"reloader.stakater.com/search": "true"}, ) if err != nil { logrus.Errorf("Error in Deployment with secret configmap as envFrom source creation: %v", err) } // Creating DaemonSet with configmap _, err = testutil.CreateDaemonSet(clients.KubernetesClient, ersConfigmapName, ersNamespace, true) if err != nil { logrus.Errorf("Error in DaemonSet with configmap creation: %v", err) } // Creating DaemonSet with secret _, err = testutil.CreateDaemonSet(clients.KubernetesClient, ersSecretName, ersNamespace, true) if err != nil { logrus.Errorf("Error in DaemonSet with secret creation: %v", err) } // Creating DaemonSet with configmap in projected volume _, err = testutil.CreateDaemonSet(clients.KubernetesClient, ersProjectedConfigMapName, ersNamespace, true) if err != nil { logrus.Errorf("Error in DaemonSet with configmap creation: %v", err) } // Creating DaemonSet with secret in projected volume _, err = testutil.CreateDaemonSet(clients.KubernetesClient, ersProjectedSecretName, ersNamespace, true) if err != nil { logrus.Errorf("Error in DaemonSet with secret creation: %v", err) } // Creating DaemonSet with env var source as configmap _, err = testutil.CreateDaemonSet(clients.KubernetesClient, ersConfigmapWithEnvName, ersNamespace, false) if err != nil { logrus.Errorf("Error in DaemonSet with configmap as env var source creation: %v", err) } // Creating DaemonSet with env var source as secret _, err = testutil.CreateDaemonSet(clients.KubernetesClient, ersSecretWithEnvName, ersNamespace, false) if err != nil { logrus.Errorf("Error in DaemonSet with secret configmap as env var source creation: %v", err) } // Creating StatefulSet with configmap _, err = testutil.CreateStatefulSet(clients.KubernetesClient, ersConfigmapName, ersNamespace, true) if err != nil { logrus.Errorf("Error in StatefulSet with configmap creation: %v", err) } // Creating StatefulSet with secret _, err = testutil.CreateStatefulSet(clients.KubernetesClient, ersSecretName, ersNamespace, true) if err != nil { logrus.Errorf("Error in StatefulSet with secret creation: %v", err) } // Creating StatefulSet with configmap in projected volume _, err = testutil.CreateStatefulSet(clients.KubernetesClient, ersProjectedConfigMapName, ersNamespace, true) if err != nil { logrus.Errorf("Error in StatefulSet with configmap creation: %v", err) } // Creating StatefulSet with secret in projected volume _, err = testutil.CreateStatefulSet(clients.KubernetesClient, ersProjectedSecretName, ersNamespace, true) if err != nil { logrus.Errorf("Error in StatefulSet with configmap creation: %v", err) } // Creating StatefulSet with env var source as configmap _, err = testutil.CreateStatefulSet(clients.KubernetesClient, ersConfigmapWithEnvName, ersNamespace, false) if err != nil { logrus.Errorf("Error in StatefulSet with configmap configmap as env var source creation: %v", err) } // Creating StatefulSet with env var source as secret _, err = testutil.CreateStatefulSet(clients.KubernetesClient, ersSecretWithEnvName, ersNamespace, false) if err != nil { logrus.Errorf("Error in StatefulSet with secret configmap as env var source creation: %v", err) } // Creating Deployment with pod annotations _, err = testutil.CreateDeploymentWithPodAnnotations(clients.KubernetesClient, ersConfigmapWithPodAnnotations, ersNamespace, false) if err != nil { logrus.Errorf("Error in Deployment with pod annotations: %v", err) } // Creating Deployment with both annotations _, err = testutil.CreateDeploymentWithPodAnnotations(clients.KubernetesClient, ersConfigmapWithBothAnnotations, ersNamespace, true) if err != nil { logrus.Errorf("Error in Deployment with both annotations: %v", err) } } func teardownErs() { // Deleting Deployment with configmap deploymentError := testutil.DeleteDeployment(clients.KubernetesClient, ersNamespace, ersConfigmapName) if deploymentError != nil { logrus.Errorf("Error while deleting deployment with configmap %v", deploymentError) } // Deleting Deployment with secret deploymentError = testutil.DeleteDeployment(clients.KubernetesClient, ersNamespace, ersSecretName) if deploymentError != nil { logrus.Errorf("Error while deleting deployment with secret %v", deploymentError) } // Deleting Deployment with configmap in projected volume deploymentError = testutil.DeleteDeployment(clients.KubernetesClient, ersNamespace, ersProjectedConfigMapName) if deploymentError != nil { logrus.Errorf("Error while deleting deployment with configmap %v", deploymentError) } // Deleting Deployment with configmap in projected volume mounted in init container deploymentError = testutil.DeleteDeployment(clients.KubernetesClient, ersNamespace, ersProjectedConfigMapWithInitContainer) if deploymentError != nil { logrus.Errorf("Error while deleting deployment with configmap %v", deploymentError) } // Deleting Deployment with secret in projected volume deploymentError = testutil.DeleteDeployment(clients.KubernetesClient, ersNamespace, ersProjectedSecretName) if deploymentError != nil { logrus.Errorf("Error while deleting deployment with configmap %v", deploymentError) } // Deleting Deployment with secret in projected volume mounted in init container deploymentError = testutil.DeleteDeployment(clients.KubernetesClient, ersNamespace, ersProjectedSecretWithInitContainer) if deploymentError != nil { logrus.Errorf("Error while deleting deployment with configmap %v", deploymentError) } // Deleting Deployment with configmap as env var source deploymentError = testutil.DeleteDeployment(clients.KubernetesClient, ersNamespace, ersConfigmapWithEnvName) if deploymentError != nil { logrus.Errorf("Error while deleting deployment with configmap as env var source %v", deploymentError) } // Deleting Deployment with secret deploymentError = testutil.DeleteDeployment(clients.KubernetesClient, ersNamespace, ersSecretWithEnvName) if deploymentError != nil { logrus.Errorf("Error while deleting deployment with secret as env var source %v", deploymentError) } // Deleting Deployment with configmap mounted in init container deploymentError = testutil.DeleteDeployment(clients.KubernetesClient, ersNamespace, ersConfigmapWithInitContainer) if deploymentError != nil { logrus.Errorf("Error while deleting deployment with configmap mounted in init container %v", deploymentError) } // Deleting Deployment with secret mounted in init container deploymentError = testutil.DeleteDeployment(clients.KubernetesClient, ersNamespace, ersSecretWithInitContainer) if deploymentError != nil { logrus.Errorf("Error while deleting deployment with secret mounted in init container %v", deploymentError) } // Deleting Deployment with configmap mounted as env in init container deploymentError = testutil.DeleteDeployment(clients.KubernetesClient, ersNamespace, ersConfigmapWithInitEnv) if deploymentError != nil { logrus.Errorf("Error while deleting deployment with configmap mounted as env in init container %v", deploymentError) } // Deleting Deployment with secret mounted as env in init container deploymentError = testutil.DeleteDeployment(clients.KubernetesClient, ersNamespace, ersSecretWithInitEnv) if deploymentError != nil { logrus.Errorf("Error while deleting deployment with secret mounted as env in init container %v", deploymentError) } // Deleting Deployment with configmap as envFrom source deploymentError = testutil.DeleteDeployment(clients.KubernetesClient, ersNamespace, ersConfigmapWithEnvFromName) if deploymentError != nil { logrus.Errorf("Error while deleting deployment with configmap as envFrom source %v", deploymentError) } // Deleting Deployment with secret as envFrom source deploymentError = testutil.DeleteDeployment(clients.KubernetesClient, ersNamespace, ersSecretWithEnvFromName) if deploymentError != nil { logrus.Errorf("Error while deleting deployment with secret as envFrom source %v", deploymentError) } // Deleting Deployment with pod annotations deploymentError = testutil.DeleteDeployment(clients.KubernetesClient, ersNamespace, ersConfigmapWithPodAnnotations) if deploymentError != nil { logrus.Errorf("Error while deleting deployment with pod annotations %v", deploymentError) } // Deleting Deployment with both annotations deploymentError = testutil.DeleteDeployment(clients.KubernetesClient, ersNamespace, ersConfigmapWithBothAnnotations) if deploymentError != nil { logrus.Errorf("Error while deleting deployment with both annotations %v", deploymentError) } // Deleting Deployment with search annotation deploymentError = testutil.DeleteDeployment(clients.KubernetesClient, ersNamespace, ersConfigmapAnnotated) if deploymentError != nil { logrus.Errorf("Error while deleting deployment with search annotation %v", deploymentError) } // Deleting DaemonSet with configmap daemonSetError := testutil.DeleteDaemonSet(clients.KubernetesClient, ersNamespace, ersConfigmapName) if daemonSetError != nil { logrus.Errorf("Error while deleting daemonSet with configmap %v", daemonSetError) } // Deleting Deployment with secret daemonSetError = testutil.DeleteDaemonSet(clients.KubernetesClient, ersNamespace, ersSecretName) if daemonSetError != nil { logrus.Errorf("Error while deleting daemonSet with secret %v", daemonSetError) } // Deleting DaemonSet with configmap in projected volume daemonSetError = testutil.DeleteDaemonSet(clients.KubernetesClient, ersNamespace, ersProjectedConfigMapName) if daemonSetError != nil { logrus.Errorf("Error while deleting daemonSet with configmap %v", daemonSetError) } // Deleting Deployment with secret in projected volume daemonSetError = testutil.DeleteDaemonSet(clients.KubernetesClient, ersNamespace, ersProjectedSecretName) if daemonSetError != nil { logrus.Errorf("Error while deleting daemonSet with secret %v", daemonSetError) } // Deleting Deployment with configmap as env var source daemonSetError = testutil.DeleteDaemonSet(clients.KubernetesClient, ersNamespace, ersConfigmapWithEnvName) if daemonSetError != nil { logrus.Errorf("Error while deleting daemonSet with configmap as env var source %v", daemonSetError) } // Deleting Deployment with secret as env var source daemonSetError = testutil.DeleteDaemonSet(clients.KubernetesClient, ersNamespace, ersSecretWithEnvName) if daemonSetError != nil { logrus.Errorf("Error while deleting daemonSet with secret as env var source %v", daemonSetError) } // Deleting StatefulSet with configmap statefulSetError := testutil.DeleteStatefulSet(clients.KubernetesClient, ersNamespace, ersConfigmapName) if statefulSetError != nil { logrus.Errorf("Error while deleting statefulSet with configmap %v", statefulSetError) } // Deleting Deployment with secret statefulSetError = testutil.DeleteStatefulSet(clients.KubernetesClient, ersNamespace, ersSecretName) if statefulSetError != nil { logrus.Errorf("Error while deleting statefulSet with secret %v", statefulSetError) } // Deleting StatefulSet with configmap in projected volume statefulSetError = testutil.DeleteStatefulSet(clients.KubernetesClient, ersNamespace, ersProjectedConfigMapName) if statefulSetError != nil { logrus.Errorf("Error while deleting statefulSet with configmap %v", statefulSetError) } // Deleting Deployment with secret in projected volume statefulSetError = testutil.DeleteStatefulSet(clients.KubernetesClient, ersNamespace, ersProjectedSecretName) if statefulSetError != nil { logrus.Errorf("Error while deleting statefulSet with secret %v", statefulSetError) } // Deleting StatefulSet with configmap as env var source statefulSetError = testutil.DeleteStatefulSet(clients.KubernetesClient, ersNamespace, ersConfigmapWithEnvName) if statefulSetError != nil { logrus.Errorf("Error while deleting statefulSet with configmap as env var source %v", statefulSetError) } // Deleting Deployment with secret as env var source statefulSetError = testutil.DeleteStatefulSet(clients.KubernetesClient, ersNamespace, ersSecretWithEnvName) if statefulSetError != nil { logrus.Errorf("Error while deleting statefulSet with secret as env var source %v", statefulSetError) } // Deleting Configmap err := testutil.DeleteConfigMap(clients.KubernetesClient, ersNamespace, ersConfigmapName) if err != nil { logrus.Errorf("Error while deleting the configmap %v", err) } // Deleting Secret err = testutil.DeleteSecret(clients.KubernetesClient, ersNamespace, ersSecretName) if err != nil { logrus.Errorf("Error while deleting the secret %v", err) } // Deleting configmap used in projected volume err = testutil.DeleteConfigMap(clients.KubernetesClient, ersNamespace, ersProjectedConfigMapName) if err != nil { logrus.Errorf("Error while deleting the configmap %v", err) } // Deleting Secret used in projected volume err = testutil.DeleteSecret(clients.KubernetesClient, ersNamespace, ersProjectedSecretName) if err != nil { logrus.Errorf("Error while deleting the secret %v", err) } // Deleting configmap used in projected volume in init containers err = testutil.DeleteConfigMap(clients.KubernetesClient, ersNamespace, ersProjectedConfigMapWithInitContainer) if err != nil { logrus.Errorf("Error while deleting the configmap %v", err) } // Deleting Configmap used projected volume in init containers err = testutil.DeleteSecret(clients.KubernetesClient, ersNamespace, ersProjectedSecretWithInitContainer) if err != nil { logrus.Errorf("Error while deleting the secret %v", err) } // Deleting Configmap used as env var source err = testutil.DeleteConfigMap(clients.KubernetesClient, ersNamespace, ersConfigmapWithEnvName) if err != nil { logrus.Errorf("Error while deleting the configmap used as env var source %v", err) } // Deleting Secret used as env var source err = testutil.DeleteSecret(clients.KubernetesClient, ersNamespace, ersSecretWithEnvName) if err != nil { logrus.Errorf("Error while deleting the secret used as env var source %v", err) } // Deleting Configmap used in init container err = testutil.DeleteConfigMap(clients.KubernetesClient, ersNamespace, ersConfigmapWithInitContainer) if err != nil { logrus.Errorf("Error while deleting the configmap used in init container %v", err) } // Deleting Secret used in init container err = testutil.DeleteSecret(clients.KubernetesClient, ersNamespace, ersSecretWithInitContainer) if err != nil { logrus.Errorf("Error while deleting the secret used in init container %v", err) } // Deleting Configmap used as env var source err = testutil.DeleteConfigMap(clients.KubernetesClient, ersNamespace, ersConfigmapWithEnvFromName) if err != nil { logrus.Errorf("Error while deleting the configmap used as env var source %v", err) } // Deleting Secret used as env var source err = testutil.DeleteSecret(clients.KubernetesClient, ersNamespace, ersSecretWithEnvFromName) if err != nil { logrus.Errorf("Error while deleting the secret used as env var source %v", err) } // Deleting Configmap used as env var source err = testutil.DeleteConfigMap(clients.KubernetesClient, ersNamespace, ersConfigmapWithInitEnv) if err != nil { logrus.Errorf("Error while deleting the configmap used as env var source in init container %v", err) } // Deleting Secret used as env var source err = testutil.DeleteSecret(clients.KubernetesClient, ersNamespace, ersSecretWithInitEnv) if err != nil { logrus.Errorf("Error while deleting the secret used as env var source in init container %v", err) } err = testutil.DeleteConfigMap(clients.KubernetesClient, ersNamespace, ersConfigmapWithPodAnnotations) if err != nil { logrus.Errorf("Error while deleting the configmap used with pod annotations: %v", err) } // Deleting namespace testutil.DeleteNamespace(ersNamespace, clients.KubernetesClient) } func getConfigWithAnnotations(resourceType string, name string, shaData string, annotation string) util.Config { ns := ersNamespace if options.ReloadStrategy == constants.AnnotationsReloadStrategy { ns = arsNamespace } return util.Config{ Namespace: ns, ResourceName: name, SHAValue: shaData, Annotation: annotation, Type: resourceType, } } func getCollectors() metrics.Collectors { return metrics.NewCollectors() } var labelSucceeded = prometheus.Labels{"success": "true"} var labelFailed = prometheus.Labels{"success": "false"} func TestRollingUpgradeForDeploymentWithConfigmapUsingArs(t *testing.T) { options.ReloadStrategy = constants.AnnotationsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.ConfigmapResourceType, arsNamespace, arsConfigmapName, "www.stakater.com") config := getConfigWithAnnotations(constants.ConfigmapEnvVarPostfix, arsConfigmapName, shaData, options.ConfigmapUpdateOnChangeAnnotation) deploymentFuncs := GetDeploymentRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, deploymentFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for Deployment with Configmap") } logrus.Infof("Verifying deployment update") updated := testutil.VerifyResourceAnnotationUpdate(clients, config, deploymentFuncs) if !updated { t.Errorf("Deployment was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForDeploymentWithConfigmapInProjectedVolumeUsingArs(t *testing.T) { options.ReloadStrategy = constants.AnnotationsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.ConfigmapResourceType, arsNamespace, arsProjectedConfigMapName, "www.stakater.com") config := getConfigWithAnnotations(constants.ConfigmapEnvVarPostfix, arsProjectedConfigMapName, shaData, options.ConfigmapUpdateOnChangeAnnotation) deploymentFuncs := GetDeploymentRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, deploymentFuncs, collectors, nil) if err != nil { t.Errorf("Rolling upgrade failed for Deployment with Configmap in projected volume") } logrus.Infof("Verifying deployment update") updated := testutil.VerifyResourceAnnotationUpdate(clients, config, deploymentFuncs) if !updated { t.Errorf("Deployment was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForDeploymentWithConfigmapViaSearchAnnotationUsingArs(t *testing.T) { options.ReloadStrategy = constants.AnnotationsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.ConfigmapResourceType, arsNamespace, arsConfigmapAnnotated, "www.stakater.com") config := getConfigWithAnnotations(constants.ConfigmapEnvVarPostfix, arsConfigmapAnnotated, shaData, "") config.ResourceAnnotations = map[string]string{"reloader.stakater.com/match": "true"} deploymentFuncs := GetDeploymentRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, deploymentFuncs, collectors, nil) if err != nil { t.Errorf("Rolling upgrade failed for Deployment with Configmap") } logrus.Infof("Verifying deployment update") updated := testutil.VerifyResourceAnnotationUpdate(clients, config, deploymentFuncs) if !updated { t.Errorf("Deployment was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForDeploymentWithConfigmapViaSearchAnnotationNoTriggersUsingArs(t *testing.T) { options.ReloadStrategy = constants.AnnotationsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.ConfigmapResourceType, arsNamespace, arsConfigmapAnnotated, "www.stakater.com") config := getConfigWithAnnotations(constants.ConfigmapEnvVarPostfix, arsConfigmapAnnotated, shaData, "") config.ResourceAnnotations = map[string]string{"reloader.stakater.com/match": "false"} deploymentFuncs := GetDeploymentRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, deploymentFuncs, collectors, nil) if err != nil { t.Errorf("Rolling upgrade failed for Deployment with Configmap") } logrus.Infof("Verifying deployment update") updated := testutil.VerifyResourceAnnotationUpdate(clients, config, deploymentFuncs) time.Sleep(5 * time.Second) if updated { t.Errorf("Deployment was updated unexpectedly") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) > 0 { t.Errorf("Counter was increased unexpectedly") } } func TestRollingUpgradeForDeploymentWithConfigmapViaSearchAnnotationNotMappedUsingArs(t *testing.T) { options.ReloadStrategy = constants.AnnotationsReloadStrategy deployment, err := testutil.CreateDeploymentWithEnvVarSourceAndAnnotations( clients.KubernetesClient, arsConfigmapAnnotated+"-different", arsNamespace, map[string]string{"reloader.stakater.com/search": "true"}, ) if err != nil { t.Errorf("Failed to create deployment with search annotation.") } defer func() { _ = clients.KubernetesClient.AppsV1().Deployments(arsNamespace).Delete(context.TODO(), deployment.Name, v1.DeleteOptions{}) }() // defer clients.KubernetesClient.AppsV1().Deployments(namespace).Delete(deployment.Name, &v1.DeleteOptions{}) shaData := testutil.ConvertResourceToSHA(testutil.ConfigmapResourceType, arsNamespace, arsConfigmapAnnotated, "www.stakater.com") config := getConfigWithAnnotations(constants.ConfigmapEnvVarPostfix, arsConfigmapAnnotated, shaData, "") config.ResourceAnnotations = map[string]string{"reloader.stakater.com/match": "false"} deploymentFuncs := GetDeploymentRollingUpgradeFuncs() collectors := getCollectors() err = PerformRollingUpgrade(clients, config, deploymentFuncs, collectors, nil) if err != nil { t.Errorf("Rolling upgrade failed for Deployment with Configmap") } logrus.Infof("Verifying deployment update") updated := testutil.VerifyResourceAnnotationUpdate(clients, config, deploymentFuncs) if updated { t.Errorf("Deployment was updated unexpectedly") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) > 0 { t.Errorf("Counter was increased unexpectedly") } } func TestRollingUpgradeForDeploymentWithConfigmapInInitContainerUsingArs(t *testing.T) { options.ReloadStrategy = constants.AnnotationsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.ConfigmapResourceType, arsNamespace, arsConfigmapWithInitContainer, "www.stakater.com") config := getConfigWithAnnotations(constants.ConfigmapEnvVarPostfix, arsConfigmapWithInitContainer, shaData, options.ConfigmapUpdateOnChangeAnnotation) deploymentFuncs := GetDeploymentRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, deploymentFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for Deployment with Configmap") } logrus.Infof("Verifying deployment update") updated := testutil.VerifyResourceAnnotationUpdate(clients, config, deploymentFuncs) if !updated { t.Errorf("Deployment was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForDeploymentWithConfigmapInProjectVolumeInInitContainerUsingArs(t *testing.T) { options.ReloadStrategy = constants.AnnotationsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.ConfigmapResourceType, arsNamespace, arsProjectedConfigMapWithInitContainer, "www.stakater.com") config := getConfigWithAnnotations(constants.ConfigmapEnvVarPostfix, arsProjectedConfigMapWithInitContainer, shaData, options.ConfigmapUpdateOnChangeAnnotation) deploymentFuncs := GetDeploymentRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, deploymentFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for Deployment with Configmap in projected volume") } logrus.Infof("Verifying deployment update") updated := testutil.VerifyResourceAnnotationUpdate(clients, config, deploymentFuncs) if !updated { t.Errorf("Deployment was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForDeploymentWithConfigmapAsEnvVarUsingArs(t *testing.T) { options.ReloadStrategy = constants.AnnotationsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.ConfigmapResourceType, arsNamespace, arsConfigmapWithEnvName, "www.stakater.com") config := getConfigWithAnnotations(constants.ConfigmapEnvVarPostfix, arsConfigmapWithEnvName, shaData, options.ReloaderAutoAnnotation) deploymentFuncs := GetDeploymentRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, deploymentFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for Deployment with Configmap used as env var") } logrus.Infof("Verifying deployment update") updated := testutil.VerifyResourceAnnotationUpdate(clients, config, deploymentFuncs) if !updated { t.Errorf("Deployment was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForDeploymentWithConfigmapAsEnvVarInInitContainerUsingArs(t *testing.T) { options.ReloadStrategy = constants.AnnotationsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.ConfigmapResourceType, arsNamespace, arsConfigmapWithInitEnv, "www.stakater.com") config := getConfigWithAnnotations(constants.ConfigmapEnvVarPostfix, arsConfigmapWithInitEnv, shaData, options.ReloaderAutoAnnotation) deploymentFuncs := GetDeploymentRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, deploymentFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for Deployment with Configmap used as env var") } logrus.Infof("Verifying deployment update") updated := testutil.VerifyResourceAnnotationUpdate(clients, config, deploymentFuncs) if !updated { t.Errorf("Deployment was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForDeploymentWithConfigmapAsEnvVarFromUsingArs(t *testing.T) { options.ReloadStrategy = constants.AnnotationsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.ConfigmapResourceType, arsNamespace, arsConfigmapWithEnvFromName, "www.stakater.com") config := getConfigWithAnnotations(constants.ConfigmapEnvVarPostfix, arsConfigmapWithEnvFromName, shaData, options.ReloaderAutoAnnotation) deploymentFuncs := GetDeploymentRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, deploymentFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for Deployment with Configmap used as env var") } logrus.Infof("Verifying deployment update") updated := testutil.VerifyResourceAnnotationUpdate(clients, config, deploymentFuncs) if !updated { t.Errorf("Deployment was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForDeploymentWithSecretUsingArs(t *testing.T) { options.ReloadStrategy = constants.AnnotationsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.SecretResourceType, arsNamespace, arsSecretName, "dGVzdFVwZGF0ZWRTZWNyZXRFbmNvZGluZ0ZvclJlbG9hZGVy") config := getConfigWithAnnotations(constants.SecretEnvVarPostfix, arsSecretName, shaData, options.SecretUpdateOnChangeAnnotation) deploymentFuncs := GetDeploymentRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, deploymentFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for Deployment with Secret") } logrus.Infof("Verifying deployment update") updated := testutil.VerifyResourceAnnotationUpdate(clients, config, deploymentFuncs) if !updated { t.Errorf("Deployment was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForDeploymentWithSecretInProjectedVolumeUsingArs(t *testing.T) { options.ReloadStrategy = constants.AnnotationsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.SecretResourceType, arsNamespace, arsProjectedSecretName, "dGVzdFVwZGF0ZWRTZWNyZXRFbmNvZGluZ0ZvclJlbG9hZGVy") config := getConfigWithAnnotations(constants.SecretEnvVarPostfix, arsProjectedSecretName, shaData, options.SecretUpdateOnChangeAnnotation) deploymentFuncs := GetDeploymentRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, deploymentFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for Deployment with Secret in projected volume") } logrus.Infof("Verifying deployment update") updated := testutil.VerifyResourceAnnotationUpdate(clients, config, deploymentFuncs) if !updated { t.Errorf("Deployment was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForDeploymentWithSecretinInitContainerUsingArs(t *testing.T) { options.ReloadStrategy = constants.AnnotationsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.SecretResourceType, arsNamespace, arsSecretWithInitContainer, "dGVzdFVwZGF0ZWRTZWNyZXRFbmNvZGluZ0ZvclJlbG9hZGVy") config := getConfigWithAnnotations(constants.SecretEnvVarPostfix, arsSecretWithInitContainer, shaData, options.SecretUpdateOnChangeAnnotation) deploymentFuncs := GetDeploymentRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, deploymentFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for Deployment with Secret") } logrus.Infof("Verifying deployment update") updated := testutil.VerifyResourceAnnotationUpdate(clients, config, deploymentFuncs) if !updated { t.Errorf("Deployment was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForDeploymentWithSecretInProjectedVolumeinInitContainerUsingArs(t *testing.T) { options.ReloadStrategy = constants.AnnotationsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.SecretResourceType, arsNamespace, arsProjectedSecretWithInitContainer, "dGVzdFVwZGF0ZWRTZWNyZXRFbmNvZGluZ0ZvclJlbG9hZGVy") config := getConfigWithAnnotations(constants.SecretEnvVarPostfix, arsProjectedSecretWithInitContainer, shaData, options.SecretUpdateOnChangeAnnotation) deploymentFuncs := GetDeploymentRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, deploymentFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for Deployment with Secret in projected volume") } logrus.Infof("Verifying deployment update") updated := testutil.VerifyResourceAnnotationUpdate(clients, config, deploymentFuncs) if !updated { t.Errorf("Deployment was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForDeploymentWithSecretAsEnvVarUsingArs(t *testing.T) { options.ReloadStrategy = constants.AnnotationsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.SecretResourceType, arsNamespace, arsSecretWithEnvName, "dGVzdFVwZGF0ZWRTZWNyZXRFbmNvZGluZ0ZvclJlbG9hZGVy") config := getConfigWithAnnotations(constants.SecretEnvVarPostfix, arsSecretWithEnvName, shaData, options.ReloaderAutoAnnotation) deploymentFuncs := GetDeploymentRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, deploymentFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for Deployment with Secret") } logrus.Infof("Verifying deployment update") updated := testutil.VerifyResourceAnnotationUpdate(clients, config, deploymentFuncs) if !updated { t.Errorf("Deployment was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForDeploymentWithSecretAsEnvVarFromUsingArs(t *testing.T) { options.ReloadStrategy = constants.AnnotationsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.SecretResourceType, arsNamespace, arsSecretWithEnvFromName, "dGVzdFVwZGF0ZWRTZWNyZXRFbmNvZGluZ0ZvclJlbG9hZGVy") config := getConfigWithAnnotations(constants.SecretEnvVarPostfix, arsSecretWithEnvFromName, shaData, options.ReloaderAutoAnnotation) deploymentFuncs := GetDeploymentRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, deploymentFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for Deployment with Secret") } logrus.Infof("Verifying deployment update") updated := testutil.VerifyResourceAnnotationUpdate(clients, config, deploymentFuncs) if !updated { t.Errorf("Deployment was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForDeploymentWithSecretAsEnvVarInInitContainerUsingArs(t *testing.T) { options.ReloadStrategy = constants.AnnotationsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.SecretResourceType, arsNamespace, arsSecretWithInitEnv, "dGVzdFVwZGF0ZWRTZWNyZXRFbmNvZGluZ0ZvclJlbG9hZGVy") config := getConfigWithAnnotations(constants.SecretEnvVarPostfix, arsSecretWithInitEnv, shaData, options.ReloaderAutoAnnotation) deploymentFuncs := GetDeploymentRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, deploymentFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for Deployment with Secret") } logrus.Infof("Verifying deployment update") updated := testutil.VerifyResourceAnnotationUpdate(clients, config, deploymentFuncs) if !updated { t.Errorf("Deployment was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForDaemonSetWithConfigmapUsingArs(t *testing.T) { options.ReloadStrategy = constants.AnnotationsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.ConfigmapResourceType, arsNamespace, arsConfigmapName, "www.facebook.com") config := getConfigWithAnnotations(constants.ConfigmapEnvVarPostfix, arsConfigmapName, shaData, options.ConfigmapUpdateOnChangeAnnotation) daemonSetFuncs := GetDaemonSetRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, daemonSetFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for DaemonSet with configmap") } logrus.Infof("Verifying daemonSet update") updated := testutil.VerifyResourceAnnotationUpdate(clients, config, daemonSetFuncs) if !updated { t.Errorf("DaemonSet was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForDaemonSetWithConfigmapInProjectedVolumeUsingArs(t *testing.T) { options.ReloadStrategy = constants.AnnotationsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.ConfigmapResourceType, arsNamespace, arsProjectedConfigMapName, "www.facebook.com") config := getConfigWithAnnotations(constants.ConfigmapEnvVarPostfix, arsProjectedConfigMapName, shaData, options.ConfigmapUpdateOnChangeAnnotation) daemonSetFuncs := GetDaemonSetRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, daemonSetFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for DaemonSet with configmap in projected volume") } logrus.Infof("Verifying daemonSet update") updated := testutil.VerifyResourceAnnotationUpdate(clients, config, daemonSetFuncs) if !updated { t.Errorf("DaemonSet was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForDaemonSetWithConfigmapAsEnvVarUsingArs(t *testing.T) { options.ReloadStrategy = constants.AnnotationsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.ConfigmapResourceType, arsNamespace, arsConfigmapWithEnvName, "www.facebook.com") config := getConfigWithAnnotations(constants.ConfigmapEnvVarPostfix, arsConfigmapWithEnvName, shaData, options.ReloaderAutoAnnotation) daemonSetFuncs := GetDaemonSetRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, daemonSetFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for DaemonSet with configmap used as env var") } logrus.Infof("Verifying daemonSet update") updated := testutil.VerifyResourceAnnotationUpdate(clients, config, daemonSetFuncs) if !updated { t.Errorf("DaemonSet was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForDaemonSetWithSecretUsingArs(t *testing.T) { options.ReloadStrategy = constants.AnnotationsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.SecretResourceType, arsNamespace, arsSecretName, "d3d3LmZhY2Vib29rLmNvbQ==") config := getConfigWithAnnotations(constants.SecretEnvVarPostfix, arsSecretName, shaData, options.SecretUpdateOnChangeAnnotation) daemonSetFuncs := GetDaemonSetRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, daemonSetFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for DaemonSet with secret") } logrus.Infof("Verifying daemonSet update") updated := testutil.VerifyResourceAnnotationUpdate(clients, config, daemonSetFuncs) if !updated { t.Errorf("DaemonSet was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForDaemonSetWithSecretInProjectedVolumeUsingArs(t *testing.T) { options.ReloadStrategy = constants.AnnotationsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.SecretResourceType, arsNamespace, arsProjectedSecretName, "d3d3LmZhY2Vib29rLmNvbQ==") config := getConfigWithAnnotations(constants.SecretEnvVarPostfix, arsProjectedSecretName, shaData, options.SecretUpdateOnChangeAnnotation) daemonSetFuncs := GetDaemonSetRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, daemonSetFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for DaemonSet with secret in projected volume") } logrus.Infof("Verifying daemonSet update") updated := testutil.VerifyResourceAnnotationUpdate(clients, config, daemonSetFuncs) if !updated { t.Errorf("DaemonSet was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForStatefulSetWithConfigmapUsingArs(t *testing.T) { options.ReloadStrategy = constants.AnnotationsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.ConfigmapResourceType, arsNamespace, arsConfigmapName, "www.twitter.com") config := getConfigWithAnnotations(constants.ConfigmapEnvVarPostfix, arsConfigmapName, shaData, options.ConfigmapUpdateOnChangeAnnotation) statefulSetFuncs := GetStatefulSetRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, statefulSetFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for StatefulSet with configmap") } logrus.Infof("Verifying statefulSet update") updated := testutil.VerifyResourceAnnotationUpdate(clients, config, statefulSetFuncs) if !updated { t.Errorf("StatefulSet was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForStatefulSetWithConfigmapInProjectedVolumeUsingArs(t *testing.T) { options.ReloadStrategy = constants.AnnotationsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.ConfigmapResourceType, arsNamespace, arsProjectedConfigMapName, "www.twitter.com") config := getConfigWithAnnotations(constants.ConfigmapEnvVarPostfix, arsProjectedConfigMapName, shaData, options.ConfigmapUpdateOnChangeAnnotation) statefulSetFuncs := GetStatefulSetRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, statefulSetFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for StatefulSet with configmap in projected volume") } logrus.Infof("Verifying statefulSet update") updated := testutil.VerifyResourceAnnotationUpdate(clients, config, statefulSetFuncs) if !updated { t.Errorf("StatefulSet was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForStatefulSetWithSecretUsingArs(t *testing.T) { options.ReloadStrategy = constants.AnnotationsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.SecretResourceType, arsNamespace, arsSecretName, "d3d3LnR3aXR0ZXIuY29t") config := getConfigWithAnnotations(constants.SecretEnvVarPostfix, arsSecretName, shaData, options.SecretUpdateOnChangeAnnotation) statefulSetFuncs := GetStatefulSetRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, statefulSetFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for StatefulSet with secret") } logrus.Infof("Verifying statefulSet update") updated := testutil.VerifyResourceAnnotationUpdate(clients, config, statefulSetFuncs) if !updated { t.Errorf("StatefulSet was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForStatefulSetWithSecretInProjectedVolumeUsingArs(t *testing.T) { options.ReloadStrategy = constants.AnnotationsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.SecretResourceType, arsNamespace, arsProjectedSecretName, "d3d3LnR3aXR0ZXIuY29t") config := getConfigWithAnnotations(constants.SecretEnvVarPostfix, arsProjectedSecretName, shaData, options.SecretUpdateOnChangeAnnotation) statefulSetFuncs := GetStatefulSetRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, statefulSetFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for StatefulSet with secret in projected volume") } logrus.Infof("Verifying statefulSet update") updated := testutil.VerifyResourceAnnotationUpdate(clients, config, statefulSetFuncs) if !updated { t.Errorf("StatefulSet was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForDeploymentWithPodAnnotationsUsingArs(t *testing.T) { options.ReloadStrategy = constants.AnnotationsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.ConfigmapResourceType, arsNamespace, arsConfigmapWithPodAnnotations, "www.stakater.com") config := getConfigWithAnnotations(constants.ConfigmapEnvVarPostfix, arsConfigmapWithPodAnnotations, shaData, options.ConfigmapUpdateOnChangeAnnotation) deploymentFuncs := GetDeploymentRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, deploymentFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for Deployment with pod annotations") } logrus.Infof("Verifying deployment update") items := deploymentFuncs.ItemsFunc(clients, config.Namespace) var foundPod, foundBoth bool for _, i := range items { accessor, err := meta.Accessor(i) if err != nil { t.Errorf("Error getting accessor for item: %v", err) } name := accessor.GetName() if name == arsConfigmapWithPodAnnotations { annotations := deploymentFuncs.PodAnnotationsFunc(i) updated := testutil.GetResourceSHAFromAnnotation(annotations) if updated != config.SHAValue { t.Errorf("Deployment was not updated") } foundPod = true } if name == arsConfigmapWithBothAnnotations { annotations := deploymentFuncs.PodAnnotationsFunc(i) updated := testutil.GetResourceSHAFromAnnotation(annotations) if updated == config.SHAValue { t.Errorf("Deployment was updated") } foundBoth = true } } if !foundPod { t.Errorf("Deployment with pod annotations was not found") } if !foundBoth { t.Errorf("Deployment with both annotations was not found") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestFailedRollingUpgradeUsingArs(t *testing.T) { options.ReloadStrategy = constants.AnnotationsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.ConfigmapResourceType, arsNamespace, arsConfigmapName, "fail.stakater.com") config := getConfigWithAnnotations(constants.ConfigmapEnvVarPostfix, arsConfigmapName, shaData, options.ConfigmapUpdateOnChangeAnnotation) deploymentFuncs := GetDeploymentRollingUpgradeFuncs() deploymentFuncs.UpdateFunc = func(_ kube.Clients, _ string, _ runtime.Object) error { return fmt.Errorf("error") } collectors := getCollectors() _ = PerformRollingUpgrade(clients, config, deploymentFuncs, collectors, nil) if promtestutil.ToFloat64(collectors.Reloaded.With(labelFailed)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForDeploymentWithConfigmapUsingErs(t *testing.T) { options.ReloadStrategy = constants.EnvVarsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.ConfigmapResourceType, ersNamespace, ersConfigmapName, "www.stakater.com") config := getConfigWithAnnotations(constants.ConfigmapEnvVarPostfix, ersConfigmapName, shaData, options.ConfigmapUpdateOnChangeAnnotation) deploymentFuncs := GetDeploymentRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, deploymentFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for Deployment with Configmap") } logrus.Infof("Verifying deployment update") updated := testutil.VerifyResourceEnvVarUpdate(clients, config, constants.ConfigmapEnvVarPostfix, deploymentFuncs) if !updated { t.Errorf("Deployment was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForDeploymentWithConfigmapInProjectedVolumeUsingErs(t *testing.T) { options.ReloadStrategy = constants.EnvVarsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.ConfigmapResourceType, ersNamespace, ersProjectedConfigMapName, "www.stakater.com") config := getConfigWithAnnotations(constants.ConfigmapEnvVarPostfix, ersProjectedConfigMapName, shaData, options.ConfigmapUpdateOnChangeAnnotation) deploymentFuncs := GetDeploymentRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, deploymentFuncs, collectors, nil) if err != nil { t.Errorf("Rolling upgrade failed for Deployment with Configmap in projected volume") } logrus.Infof("Verifying deployment update") updated := testutil.VerifyResourceEnvVarUpdate(clients, config, constants.ConfigmapEnvVarPostfix, deploymentFuncs) if !updated { t.Errorf("Deployment was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForDeploymentWithConfigmapViaSearchAnnotationUsingErs(t *testing.T) { options.ReloadStrategy = constants.EnvVarsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.ConfigmapResourceType, ersNamespace, ersConfigmapAnnotated, "www.stakater.com") config := getConfigWithAnnotations(constants.ConfigmapEnvVarPostfix, ersConfigmapAnnotated, shaData, "") config.ResourceAnnotations = map[string]string{"reloader.stakater.com/match": "true"} deploymentFuncs := GetDeploymentRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, deploymentFuncs, collectors, nil) if err != nil { t.Errorf("Rolling upgrade failed for Deployment with Configmap") } logrus.Infof("Verifying deployment update") updated := testutil.VerifyResourceEnvVarUpdate(clients, config, constants.ConfigmapEnvVarPostfix, deploymentFuncs) if !updated { t.Errorf("Deployment was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForDeploymentWithConfigmapViaSearchAnnotationNoTriggersUsingErs(t *testing.T) { options.ReloadStrategy = constants.EnvVarsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.ConfigmapResourceType, ersNamespace, ersConfigmapAnnotated, "www.stakater.com") config := getConfigWithAnnotations(constants.ConfigmapEnvVarPostfix, ersConfigmapAnnotated, shaData, "") config.ResourceAnnotations = map[string]string{"reloader.stakater.com/match": "false"} deploymentFuncs := GetDeploymentRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, deploymentFuncs, collectors, nil) if err != nil { t.Errorf("Rolling upgrade failed for Deployment with Configmap") } logrus.Infof("Verifying deployment update") updated := testutil.VerifyResourceEnvVarUpdate(clients, config, constants.ConfigmapEnvVarPostfix, deploymentFuncs) time.Sleep(5 * time.Second) if updated { t.Errorf("Deployment was updated unexpectedly") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) > 0 { t.Errorf("Counter was increased unexpectedly") } } func TestRollingUpgradeForDeploymentWithConfigmapViaSearchAnnotationNotMappedUsingErs(t *testing.T) { options.ReloadStrategy = constants.EnvVarsReloadStrategy deployment, err := testutil.CreateDeploymentWithEnvVarSourceAndAnnotations( clients.KubernetesClient, ersConfigmapAnnotated+"-different", ersNamespace, map[string]string{"reloader.stakater.com/search": "true"}, ) if err != nil { t.Errorf("Failed to create deployment with search annotation.") } defer func() { _ = clients.KubernetesClient.AppsV1().Deployments(ersNamespace).Delete(context.TODO(), deployment.Name, v1.DeleteOptions{}) }() // defer clients.KubernetesClient.AppsV1().Deployments(namespace).Delete(deployment.Name, &v1.DeleteOptions{}) shaData := testutil.ConvertResourceToSHA(testutil.ConfigmapResourceType, ersNamespace, ersConfigmapAnnotated, "www.stakater.com") config := getConfigWithAnnotations(constants.ConfigmapEnvVarPostfix, ersConfigmapAnnotated, shaData, "") config.ResourceAnnotations = map[string]string{"reloader.stakater.com/match": "false"} deploymentFuncs := GetDeploymentRollingUpgradeFuncs() collectors := getCollectors() err = PerformRollingUpgrade(clients, config, deploymentFuncs, collectors, nil) if err != nil { t.Errorf("Rolling upgrade failed for Deployment with Configmap") } logrus.Infof("Verifying deployment update") updated := testutil.VerifyResourceEnvVarUpdate(clients, config, constants.ConfigmapEnvVarPostfix, deploymentFuncs) if updated { t.Errorf("Deployment was updated unexpectedly") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) > 0 { t.Errorf("Counter was increased unexpectedly") } } func TestRollingUpgradeForDeploymentWithConfigmapInInitContainerUsingErs(t *testing.T) { options.ReloadStrategy = constants.EnvVarsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.ConfigmapResourceType, ersNamespace, ersConfigmapWithInitContainer, "www.stakater.com") config := getConfigWithAnnotations(constants.ConfigmapEnvVarPostfix, ersConfigmapWithInitContainer, shaData, options.ConfigmapUpdateOnChangeAnnotation) deploymentFuncs := GetDeploymentRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, deploymentFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for Deployment with Configmap") } logrus.Infof("Verifying deployment update") updated := testutil.VerifyResourceEnvVarUpdate(clients, config, constants.ConfigmapEnvVarPostfix, deploymentFuncs) if !updated { t.Errorf("Deployment was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForDeploymentWithConfigmapInProjectVolumeInInitContainerUsingErs(t *testing.T) { options.ReloadStrategy = constants.EnvVarsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.ConfigmapResourceType, ersNamespace, ersProjectedConfigMapWithInitContainer, "www.stakater.com") config := getConfigWithAnnotations(constants.ConfigmapEnvVarPostfix, ersProjectedConfigMapWithInitContainer, shaData, options.ConfigmapUpdateOnChangeAnnotation) deploymentFuncs := GetDeploymentRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, deploymentFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for Deployment with Configmap in projected volume") } logrus.Infof("Verifying deployment update") updated := testutil.VerifyResourceEnvVarUpdate(clients, config, constants.ConfigmapEnvVarPostfix, deploymentFuncs) if !updated { t.Errorf("Deployment was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForDeploymentWithConfigmapAsEnvVarUsingErs(t *testing.T) { options.ReloadStrategy = constants.EnvVarsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.ConfigmapResourceType, ersNamespace, ersConfigmapWithEnvName, "www.stakater.com") config := getConfigWithAnnotations(constants.ConfigmapEnvVarPostfix, ersConfigmapWithEnvName, shaData, options.ReloaderAutoAnnotation) deploymentFuncs := GetDeploymentRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, deploymentFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for Deployment with Configmap used as env var") } logrus.Infof("Verifying deployment update") updated := testutil.VerifyResourceEnvVarUpdate(clients, config, constants.ConfigmapEnvVarPostfix, deploymentFuncs) if !updated { t.Errorf("Deployment was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForDeploymentWithConfigmapAsEnvVarInInitContainerUsingErs(t *testing.T) { options.ReloadStrategy = constants.EnvVarsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.ConfigmapResourceType, ersNamespace, ersConfigmapWithInitEnv, "www.stakater.com") config := getConfigWithAnnotations(constants.ConfigmapEnvVarPostfix, ersConfigmapWithInitEnv, shaData, options.ReloaderAutoAnnotation) deploymentFuncs := GetDeploymentRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, deploymentFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for Deployment with Configmap used as env var") } logrus.Infof("Verifying deployment update") updated := testutil.VerifyResourceEnvVarUpdate(clients, config, constants.ConfigmapEnvVarPostfix, deploymentFuncs) if !updated { t.Errorf("Deployment was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForDeploymentWithConfigmapAsEnvVarFromUsingErs(t *testing.T) { options.ReloadStrategy = constants.EnvVarsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.ConfigmapResourceType, ersNamespace, ersConfigmapWithEnvFromName, "www.stakater.com") config := getConfigWithAnnotations(constants.ConfigmapEnvVarPostfix, ersConfigmapWithEnvFromName, shaData, options.ReloaderAutoAnnotation) deploymentFuncs := GetDeploymentRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, deploymentFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for Deployment with Configmap used as env var") } logrus.Infof("Verifying deployment update") updated := testutil.VerifyResourceEnvVarUpdate(clients, config, constants.ConfigmapEnvVarPostfix, deploymentFuncs) if !updated { t.Errorf("Deployment was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForDeploymentWithSecretUsingErs(t *testing.T) { options.ReloadStrategy = constants.EnvVarsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.SecretResourceType, ersNamespace, ersSecretName, "dGVzdFVwZGF0ZWRTZWNyZXRFbmNvZGluZ0ZvclJlbG9hZGVy") config := getConfigWithAnnotations(constants.SecretEnvVarPostfix, ersSecretName, shaData, options.SecretUpdateOnChangeAnnotation) deploymentFuncs := GetDeploymentRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, deploymentFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for Deployment with Secret") } logrus.Infof("Verifying deployment update") updated := testutil.VerifyResourceEnvVarUpdate(clients, config, constants.SecretEnvVarPostfix, deploymentFuncs) if !updated { t.Errorf("Deployment was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForDeploymentWithSecretInProjectedVolumeUsingErs(t *testing.T) { options.ReloadStrategy = constants.EnvVarsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.SecretResourceType, ersNamespace, ersProjectedSecretName, "dGVzdFVwZGF0ZWRTZWNyZXRFbmNvZGluZ0ZvclJlbG9hZGVy") config := getConfigWithAnnotations(constants.SecretEnvVarPostfix, ersProjectedSecretName, shaData, options.SecretUpdateOnChangeAnnotation) deploymentFuncs := GetDeploymentRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, deploymentFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for Deployment with Secret in projected volume") } logrus.Infof("Verifying deployment update") updated := testutil.VerifyResourceEnvVarUpdate(clients, config, constants.SecretEnvVarPostfix, deploymentFuncs) if !updated { t.Errorf("Deployment was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForDeploymentWithSecretinInitContainerUsingErs(t *testing.T) { options.ReloadStrategy = constants.EnvVarsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.SecretResourceType, ersNamespace, ersSecretWithInitContainer, "dGVzdFVwZGF0ZWRTZWNyZXRFbmNvZGluZ0ZvclJlbG9hZGVy") config := getConfigWithAnnotations(constants.SecretEnvVarPostfix, ersSecretWithInitContainer, shaData, options.SecretUpdateOnChangeAnnotation) deploymentFuncs := GetDeploymentRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, deploymentFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for Deployment with Secret") } logrus.Infof("Verifying deployment update") updated := testutil.VerifyResourceEnvVarUpdate(clients, config, constants.SecretEnvVarPostfix, deploymentFuncs) if !updated { t.Errorf("Deployment was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForDeploymentWithSecretInProjectedVolumeinInitContainerUsingErs(t *testing.T) { options.ReloadStrategy = constants.EnvVarsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.SecretResourceType, ersNamespace, ersProjectedSecretWithInitContainer, "dGVzdFVwZGF0ZWRTZWNyZXRFbmNvZGluZ0ZvclJlbG9hZGVy") config := getConfigWithAnnotations(constants.SecretEnvVarPostfix, ersProjectedSecretWithInitContainer, shaData, options.SecretUpdateOnChangeAnnotation) deploymentFuncs := GetDeploymentRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, deploymentFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for Deployment with Secret in projected volume") } logrus.Infof("Verifying deployment update") updated := testutil.VerifyResourceEnvVarUpdate(clients, config, constants.SecretEnvVarPostfix, deploymentFuncs) if !updated { t.Errorf("Deployment was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForDeploymentWithSecretAsEnvVarUsingErs(t *testing.T) { options.ReloadStrategy = constants.EnvVarsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.SecretResourceType, ersNamespace, ersSecretWithEnvName, "dGVzdFVwZGF0ZWRTZWNyZXRFbmNvZGluZ0ZvclJlbG9hZGVy") config := getConfigWithAnnotations(constants.SecretEnvVarPostfix, ersSecretWithEnvName, shaData, options.ReloaderAutoAnnotation) deploymentFuncs := GetDeploymentRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, deploymentFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for Deployment with Secret") } logrus.Infof("Verifying deployment update") updated := testutil.VerifyResourceEnvVarUpdate(clients, config, constants.SecretEnvVarPostfix, deploymentFuncs) if !updated { t.Errorf("Deployment was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForDeploymentWithSecretAsEnvVarFromUsingErs(t *testing.T) { options.ReloadStrategy = constants.EnvVarsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.SecretResourceType, ersNamespace, ersSecretWithEnvFromName, "dGVzdFVwZGF0ZWRTZWNyZXRFbmNvZGluZ0ZvclJlbG9hZGVy") config := getConfigWithAnnotations(constants.SecretEnvVarPostfix, ersSecretWithEnvFromName, shaData, options.ReloaderAutoAnnotation) deploymentFuncs := GetDeploymentRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, deploymentFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for Deployment with Secret") } logrus.Infof("Verifying deployment update") updated := testutil.VerifyResourceEnvVarUpdate(clients, config, constants.SecretEnvVarPostfix, deploymentFuncs) if !updated { t.Errorf("Deployment was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForDeploymentWithSecretAsEnvVarInInitContainerUsingErs(t *testing.T) { options.ReloadStrategy = constants.EnvVarsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.SecretResourceType, ersNamespace, ersSecretWithInitEnv, "dGVzdFVwZGF0ZWRTZWNyZXRFbmNvZGluZ0ZvclJlbG9hZGVy") config := getConfigWithAnnotations(constants.SecretEnvVarPostfix, ersSecretWithInitEnv, shaData, options.ReloaderAutoAnnotation) deploymentFuncs := GetDeploymentRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, deploymentFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for Deployment with Secret") } logrus.Infof("Verifying deployment update") updated := testutil.VerifyResourceEnvVarUpdate(clients, config, constants.SecretEnvVarPostfix, deploymentFuncs) if !updated { t.Errorf("Deployment was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForDaemonSetWithConfigmapUsingErs(t *testing.T) { options.ReloadStrategy = constants.EnvVarsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.ConfigmapResourceType, ersNamespace, ersConfigmapName, "www.facebook.com") config := getConfigWithAnnotations(constants.ConfigmapEnvVarPostfix, ersConfigmapName, shaData, options.ConfigmapUpdateOnChangeAnnotation) daemonSetFuncs := GetDaemonSetRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, daemonSetFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for DaemonSet with configmap") } logrus.Infof("Verifying daemonSet update") updated := testutil.VerifyResourceEnvVarUpdate(clients, config, constants.ConfigmapEnvVarPostfix, daemonSetFuncs) if !updated { t.Errorf("DaemonSet was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForDaemonSetWithConfigmapInProjectedVolumeUsingErs(t *testing.T) { options.ReloadStrategy = constants.EnvVarsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.ConfigmapResourceType, ersNamespace, ersProjectedConfigMapName, "www.facebook.com") config := getConfigWithAnnotations(constants.ConfigmapEnvVarPostfix, ersProjectedConfigMapName, shaData, options.ConfigmapUpdateOnChangeAnnotation) daemonSetFuncs := GetDaemonSetRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, daemonSetFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for DaemonSet with configmap in projected volume") } logrus.Infof("Verifying daemonSet update") updated := testutil.VerifyResourceEnvVarUpdate(clients, config, constants.ConfigmapEnvVarPostfix, daemonSetFuncs) if !updated { t.Errorf("DaemonSet was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForDaemonSetWithConfigmapAsEnvVarUsingErs(t *testing.T) { options.ReloadStrategy = constants.EnvVarsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.ConfigmapResourceType, ersNamespace, ersConfigmapWithEnvName, "www.facebook.com") config := getConfigWithAnnotations(constants.ConfigmapEnvVarPostfix, ersConfigmapWithEnvName, shaData, options.ReloaderAutoAnnotation) daemonSetFuncs := GetDaemonSetRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, daemonSetFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for DaemonSet with configmap used as env var") } logrus.Infof("Verifying daemonSet update") updated := testutil.VerifyResourceEnvVarUpdate(clients, config, constants.ConfigmapEnvVarPostfix, daemonSetFuncs) if !updated { t.Errorf("DaemonSet was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForDaemonSetWithSecretUsingErs(t *testing.T) { options.ReloadStrategy = constants.EnvVarsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.SecretResourceType, ersNamespace, ersSecretName, "d3d3LmZhY2Vib29rLmNvbQ==") config := getConfigWithAnnotations(constants.SecretEnvVarPostfix, ersSecretName, shaData, options.SecretUpdateOnChangeAnnotation) daemonSetFuncs := GetDaemonSetRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, daemonSetFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for DaemonSet with secret") } logrus.Infof("Verifying daemonSet update") updated := testutil.VerifyResourceEnvVarUpdate(clients, config, constants.SecretEnvVarPostfix, daemonSetFuncs) if !updated { t.Errorf("DaemonSet was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForDaemonSetWithSecretInProjectedVolumeUsingErs(t *testing.T) { options.ReloadStrategy = constants.EnvVarsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.SecretResourceType, ersNamespace, ersProjectedSecretName, "d3d3LmZhY2Vib29rLmNvbQ==") config := getConfigWithAnnotations(constants.SecretEnvVarPostfix, ersProjectedSecretName, shaData, options.SecretUpdateOnChangeAnnotation) daemonSetFuncs := GetDaemonSetRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, daemonSetFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for DaemonSet with secret in projected volume") } logrus.Infof("Verifying daemonSet update") updated := testutil.VerifyResourceEnvVarUpdate(clients, config, constants.SecretEnvVarPostfix, daemonSetFuncs) if !updated { t.Errorf("DaemonSet was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForStatefulSetWithConfigmapUsingErs(t *testing.T) { options.ReloadStrategy = constants.EnvVarsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.ConfigmapResourceType, ersNamespace, ersConfigmapName, "www.twitter.com") config := getConfigWithAnnotations(constants.ConfigmapEnvVarPostfix, ersConfigmapName, shaData, options.ConfigmapUpdateOnChangeAnnotation) statefulSetFuncs := GetStatefulSetRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, statefulSetFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for StatefulSet with configmap") } logrus.Infof("Verifying statefulSet update") updated := testutil.VerifyResourceEnvVarUpdate(clients, config, constants.ConfigmapEnvVarPostfix, statefulSetFuncs) if !updated { t.Errorf("StatefulSet was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForStatefulSetWithConfigmapInProjectedVolumeUsingErs(t *testing.T) { options.ReloadStrategy = constants.EnvVarsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.ConfigmapResourceType, ersNamespace, ersProjectedConfigMapName, "www.twitter.com") config := getConfigWithAnnotations(constants.ConfigmapEnvVarPostfix, ersProjectedConfigMapName, shaData, options.ConfigmapUpdateOnChangeAnnotation) statefulSetFuncs := GetStatefulSetRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, statefulSetFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for StatefulSet with configmap in projected volume") } logrus.Infof("Verifying statefulSet update") updated := testutil.VerifyResourceEnvVarUpdate(clients, config, constants.ConfigmapEnvVarPostfix, statefulSetFuncs) if !updated { t.Errorf("StatefulSet was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForStatefulSetWithSecretUsingErs(t *testing.T) { options.ReloadStrategy = constants.EnvVarsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.SecretResourceType, ersNamespace, ersSecretName, "d3d3LnR3aXR0ZXIuY29t") config := getConfigWithAnnotations(constants.SecretEnvVarPostfix, ersSecretName, shaData, options.SecretUpdateOnChangeAnnotation) statefulSetFuncs := GetStatefulSetRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, statefulSetFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for StatefulSet with secret") } logrus.Infof("Verifying statefulSet update") updated := testutil.VerifyResourceEnvVarUpdate(clients, config, constants.SecretEnvVarPostfix, statefulSetFuncs) if !updated { t.Errorf("StatefulSet was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForStatefulSetWithSecretInProjectedVolumeUsingErs(t *testing.T) { options.ReloadStrategy = constants.EnvVarsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.SecretResourceType, ersNamespace, ersProjectedSecretName, "d3d3LnR3aXR0ZXIuY29t") config := getConfigWithAnnotations(constants.SecretEnvVarPostfix, ersProjectedSecretName, shaData, options.SecretUpdateOnChangeAnnotation) statefulSetFuncs := GetStatefulSetRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, statefulSetFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for StatefulSet with secret in projected volume") } logrus.Infof("Verifying statefulSet update") updated := testutil.VerifyResourceEnvVarUpdate(clients, config, constants.SecretEnvVarPostfix, statefulSetFuncs) if !updated { t.Errorf("StatefulSet was not updated") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestRollingUpgradeForDeploymentWithPodAnnotationsUsingErs(t *testing.T) { options.ReloadStrategy = constants.EnvVarsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.ConfigmapResourceType, ersNamespace, ersConfigmapWithPodAnnotations, "www.stakater.com") config := getConfigWithAnnotations(constants.ConfigmapEnvVarPostfix, ersConfigmapWithPodAnnotations, shaData, options.ConfigmapUpdateOnChangeAnnotation) deploymentFuncs := GetDeploymentRollingUpgradeFuncs() collectors := getCollectors() err := PerformRollingUpgrade(clients, config, deploymentFuncs, collectors, nil) time.Sleep(5 * time.Second) if err != nil { t.Errorf("Rolling upgrade failed for Deployment with pod annotations") } logrus.Infof("Verifying deployment update") envName := constants.EnvVarPrefix + util.ConvertToEnvVarName(config.ResourceName) + "_" + constants.ConfigmapEnvVarPostfix items := deploymentFuncs.ItemsFunc(clients, config.Namespace) var foundPod, foundBoth bool for _, i := range items { accessor, err := meta.Accessor(i) if err != nil { t.Errorf("Error getting accessor for item: %v", err) } name := accessor.GetName() if name == ersConfigmapWithPodAnnotations { containers := deploymentFuncs.ContainersFunc(i) updated := testutil.GetResourceSHAFromEnvVar(containers, envName) if updated != config.SHAValue { t.Errorf("Deployment was not updated") } foundPod = true } if name == ersConfigmapWithBothAnnotations { containers := deploymentFuncs.ContainersFunc(i) updated := testutil.GetResourceSHAFromEnvVar(containers, envName) if updated == config.SHAValue { t.Errorf("Deployment was updated") } foundBoth = true } } if !foundPod { t.Errorf("Deployment with pod annotations was not found") } if !foundBoth { t.Errorf("Deployment with both annotations was not found") } if promtestutil.ToFloat64(collectors.Reloaded.With(labelSucceeded)) != 1 { t.Errorf("Counter was not increased") } } func TestFailedRollingUpgradeUsingErs(t *testing.T) { options.ReloadStrategy = constants.EnvVarsReloadStrategy shaData := testutil.ConvertResourceToSHA(testutil.ConfigmapResourceType, ersNamespace, ersConfigmapName, "fail.stakater.com") config := getConfigWithAnnotations(constants.ConfigmapEnvVarPostfix, ersConfigmapName, shaData, options.ConfigmapUpdateOnChangeAnnotation) deploymentFuncs := GetDeploymentRollingUpgradeFuncs() deploymentFuncs.UpdateFunc = func(_ kube.Clients, _ string, _ runtime.Object) error { return fmt.Errorf("error") } collectors := getCollectors() _ = PerformRollingUpgrade(clients, config, deploymentFuncs, collectors, nil) if promtestutil.ToFloat64(collectors.Reloaded.With(labelFailed)) != 1 { t.Errorf("Counter was not increased") } }