Skip to content

Commit

Permalink
Add cronjob env utest
Browse files Browse the repository at this point in the history
Signed-off-by: Arnon Gilboa <[email protected]>
  • Loading branch information
arnongilboa authored and kubevirt-bot committed Nov 3, 2022
1 parent b0cc095 commit 367607b
Show file tree
Hide file tree
Showing 2 changed files with 86 additions and 4 deletions.
1 change: 1 addition & 0 deletions pkg/controller/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,7 @@ go_test(
"//vendor/k8s.io/client-go/tools/cache:go_default_library",
"//vendor/k8s.io/client-go/tools/record:go_default_library",
"//vendor/k8s.io/cluster-bootstrap/token/api:go_default_library",
"//vendor/k8s.io/utils/pointer:go_default_library",
"//vendor/kubevirt.io/controller-lifecycle-operator-sdk/api:go_default_library",
"//vendor/sigs.k8s.io/controller-runtime/pkg/client:go_default_library",
"//vendor/sigs.k8s.io/controller-runtime/pkg/client/fake:go_default_library",
Expand Down
89 changes: 85 additions & 4 deletions pkg/controller/dataimportcron-controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ import (
"k8s.io/apimachinery/pkg/types"
"k8s.io/client-go/kubernetes/scheme"
"k8s.io/client-go/tools/record"
"k8s.io/utils/pointer"

"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/client/fake"
Expand All @@ -50,8 +51,12 @@ import (
)

var (
cronLog = logf.Log.WithName("data-import-cron-controller-test")
cronName = "test-cron"
cronLog = logf.Log.WithName("data-import-cron-controller-test")
cronName = "test-cron"
httpProxy = "test-http-proxy"
httpsProxy = "test-https-proxy"
noProxy = "test-no-proxy"
trustedCAProxy = "test-trusted-ca-proxy"
)

const (
Expand Down Expand Up @@ -194,14 +199,49 @@ var _ = Describe("All DataImportCron Tests", func() {
})

It("Should create and delete CronJob if DataImportCron is created and deleted", func() {
cdiConfig := MakeEmptyCDIConfigSpec(common.ConfigName)
cdiConfig.Status.ImportProxy = &cdiv1.ImportProxy{
HTTPProxy: &httpProxy,
HTTPSProxy: &httpsProxy,
NoProxy: &noProxy,
TrustedCAProxy: &trustedCAProxy,
}

cron = newDataImportCron(cronName)
reconciler = createDataImportCronReconciler(cron)
reconciler = createDataImportCronReconcilerWithoutConfig(cron, cdiConfig)
_, err := reconciler.Reconcile(context.TODO(), cronReq)
Expect(err).ToNot(HaveOccurred())

cronjob := &batchv1.CronJob{}
err = reconciler.client.Get(context.TODO(), cronJobKey(cron), cronjob)
Expect(err).ToNot(HaveOccurred())
containers := cronjob.Spec.JobTemplate.Spec.Template.Spec.Containers
Expect(containers).To(HaveLen(1))

env := containers[0].Env
Expect(getEnvVar(env, common.ImportProxyHTTP)).To(Equal(httpProxy))
Expect(getEnvVar(env, common.ImportProxyHTTPS)).To(Equal(httpsProxy))
Expect(getEnvVar(env, common.ImportProxyNoProxy)).To(Equal(noProxy))

volMounts := containers[0].VolumeMounts
Expect(volMounts).To(HaveLen(1))
Expect(volMounts[0]).To(Equal(corev1.VolumeMount{
Name: ProxyCertVolName,
MountPath: common.ImporterProxyCertDir,
}))

volumes := cronjob.Spec.JobTemplate.Spec.Template.Spec.Volumes
Expect(volumes).To(HaveLen(1))
Expect(volumes[0]).To(Equal(corev1.Volume{
Name: ProxyCertVolName,
VolumeSource: corev1.VolumeSource{
ConfigMap: &corev1.ConfigMapVolumeSource{
LocalObjectReference: corev1.LocalObjectReference{
Name: trustedCAProxy,
},
},
},
}))

err = reconciler.client.Get(context.TODO(), cronKey, cron)
Expect(err).ToNot(HaveOccurred())
Expand All @@ -218,6 +258,32 @@ var _ = Describe("All DataImportCron Tests", func() {
Expect(err).To(HaveOccurred())
})

It("Should verify CronJob container env variables are empty and no extra volume is set when proxy is not configured", func() {
cron = newDataImportCron(cronName)
reconciler = createDataImportCronReconciler(cron)
_, err := reconciler.Reconcile(context.TODO(), cronReq)
Expect(err).ToNot(HaveOccurred())

cronjob := &batchv1.CronJob{}
err = reconciler.client.Get(context.TODO(), cronJobKey(cron), cronjob)
Expect(err).ToNot(HaveOccurred())

Expect(cronjob.Spec.SuccessfulJobsHistoryLimit).To(Equal(pointer.Int32(1)))
Expect(cronjob.Spec.FailedJobsHistoryLimit).To(BeNil())

jobTemplateSpec := cronjob.Spec.JobTemplate.Spec.Template.Spec
containers := jobTemplateSpec.Containers
Expect(containers).To(HaveLen(1))

env := containers[0].Env
Expect(getEnvVar(env, common.ImportProxyHTTP)).To(BeEmpty())
Expect(getEnvVar(env, common.ImportProxyHTTPS)).To(BeEmpty())
Expect(getEnvVar(env, common.ImportProxyNoProxy)).To(BeEmpty())

Expect(containers[0].VolumeMounts).To(HaveLen(0))
Expect(jobTemplateSpec.Volumes).To(HaveLen(0))
})

It("Should update CronJob on reconcile", func() {
cron = newDataImportCron(cronName)
reconciler = createDataImportCronReconciler(cron)
Expand Down Expand Up @@ -562,8 +628,14 @@ var _ = Describe("untagURL", func() {

func createDataImportCronReconciler(objects ...runtime.Object) *DataImportCronReconciler {
cdiConfig := MakeEmptyCDIConfigSpec(common.ConfigName)
objs := []runtime.Object{cdiConfig}
objs = append(objs, objects...)
return createDataImportCronReconcilerWithoutConfig(objs...)
}

func createDataImportCronReconcilerWithoutConfig(objects ...runtime.Object) *DataImportCronReconciler {
crd := &extv1.CustomResourceDefinition{ObjectMeta: metav1.ObjectMeta{Name: "dataimportcrons.cdi.kubevirt.io"}}
objs := []runtime.Object{cdiConfig, crd}
objs := []runtime.Object{crd}
objs = append(objs, objects...)

s := scheme.Scheme
Expand Down Expand Up @@ -662,3 +734,12 @@ func verifyConditionState(condType string, condState cdiv1.ConditionState, desir
Expect(condState.Status).To(Equal(desiredStatus))
Expect(condState.Reason).To(Equal(desiredReason))
}

func getEnvVar(env []corev1.EnvVar, name string) string {
for _, envVar := range env {
if envVar.Name == name {
return envVar.Value
}
}
return ""
}

0 comments on commit 367607b

Please sign in to comment.