@@ -18,6 +18,7 @@ import (
1818 "k8s.io/apimachinery/pkg/util/intstr"
1919 "k8s.io/client-go/kubernetes/scheme"
2020 "k8s.io/utils/pointer"
21+ "k8s.io/utils/ptr"
2122
2223 "sigs.k8s.io/controller-runtime/pkg/client/fake"
2324)
@@ -601,197 +602,71 @@ func TestPlugin_reconcileDeployment_changedTemplateLabels(t *testing.T) {
601602}
602603
603604func TestPlugin_reconcileDeployment_changedContainers (t * testing.T ) {
604- tests := []struct {
605- name string
606- containers []corev1.Container
607- }{
608- {
609- name : "default containers" ,
610- containers : []corev1.Container {
611- {
612- Name : gitopsPluginName ,
613- Image : "fake-image-repo-rul" ,
614- ImagePullPolicy : corev1 .PullAlways ,
615- Ports : []corev1.ContainerPort {
616- {
617- Name : "http" ,
618- Protocol : corev1 .ProtocolTCP ,
619- ContainerPort : servicePort ,
620- },
621- },
622- VolumeMounts : []corev1.VolumeMount {
623- {
624- Name : pluginServingCertName ,
625- ReadOnly : true ,
626- MountPath : "/etc/httpd-ssl/certs/tls.crt" ,
627- SubPath : "tls.crt" ,
628- },
629- {
630- Name : pluginServingCertName ,
631- ReadOnly : true ,
632- MountPath : "/etc/httpd-ssl/private/tls.key" ,
633- SubPath : "tls.key" ,
634- },
635- {
636- Name : httpdConfigMapName ,
637- ReadOnly : true ,
638- MountPath : "/etc/httpd-cfg/httpd.conf" ,
639- SubPath : "httpd.conf" ,
640- },
641- },
642- Resources : corev1.ResourceRequirements {
643- Requests : corev1.ResourceList {
644- corev1 .ResourceMemory : resourcev1 .MustParse ("128Mi" ),
645- corev1 .ResourceCPU : resourcev1 .MustParse ("250m" ),
646- },
647- Limits : corev1.ResourceList {
648- corev1 .ResourceMemory : resourcev1 .MustParse ("256Mi" ),
649- corev1 .ResourceCPU : resourcev1 .MustParse ("500m" ),
650- },
651- },
652- },
653- },
654- },
655- {
656- name : "changed containers" ,
657- containers : []corev1.Container {
658- {
659- Name : "wrong name" ,
660- Image : "wrong image" ,
661- ImagePullPolicy : corev1 .PullIfNotPresent ,
662- Ports : []corev1.ContainerPort {
663- {
664- Name : "wrong http" ,
665- Protocol : corev1 .ProtocolSCTP ,
666- ContainerPort : int32 (9002 ),
667- },
668- },
669- VolumeMounts : []corev1.VolumeMount {
670- {
671- Name : "wrong name" ,
672- ReadOnly : false ,
673- MountPath : "/wrong-cert" ,
674- },
675- {
676- Name : "wrong name" ,
677- ReadOnly : false ,
678- MountPath : "/wrong-httpd.conf" ,
679- SubPath : "wrong/httpd.conf" ,
680- },
681- },
682- Resources : corev1.ResourceRequirements {
683- Requests : corev1.ResourceList {
684- corev1 .ResourceMemory : resourcev1 .MustParse ("250Mi" ),
685- corev1 .ResourceCPU : resourcev1 .MustParse ("128m" ),
686- },
687- Limits : corev1.ResourceList {
688- corev1 .ResourceMemory : resourcev1 .MustParse ("500Mi" ),
689- corev1 .ResourceCPU : resourcev1 .MustParse ("256m" ),
690- },
691- },
692- },
693- },
694- },
695- }
696-
697605 s := scheme .Scheme
698606 addKnownTypesToScheme (s )
699607
700608 fakeClient := fake .NewClientBuilder ().WithScheme (s ).WithRuntimeObjects (newGitopsService ()).Build ()
701609 reconciler := newReconcileGitOpsService (fakeClient , s )
702610 instance := & pipelinesv1alpha1.GitopsService {}
703- var replicas int32 = 1
704611
705- for _ , test := range tests {
706- t .Run (test .name , func (t * testing.T ) {
707- d := & appsv1.Deployment {
708- ObjectMeta : metav1.ObjectMeta {
709- Name : gitopsPluginName ,
710- Namespace : serviceNamespace ,
711- Labels : map [string ]string {
712- kubeAppLabelApp : gitopsPluginName ,
713- kubeAppLabelComponent : gitopsPluginName ,
714- kubeAppLabelInstance : gitopsPluginName ,
715- kubeAppLabelPartOf : gitopsPluginName ,
716- kubeAppLabelRuntimeNamespace : serviceNamespace ,
717- },
718- },
719- Spec : appsv1.DeploymentSpec {
720- Replicas : & replicas ,
721- Selector : & metav1.LabelSelector {
722- MatchLabels : map [string ]string {
723- kubeAppLabelName : gitopsPluginName ,
724- },
725- },
726- Template : corev1.PodTemplateSpec {
727- ObjectMeta : metav1.ObjectMeta {
728- Labels : map [string ]string {
729- kubeAppLabelApp : gitopsPluginName ,
730- kubeAppLabelComponent : gitopsPluginName ,
731- kubeAppLabelInstance : gitopsPluginName ,
732- kubeAppLabelPartOf : gitopsPluginName ,
733- kubeAppLabelRuntimeNamespace : serviceNamespace ,
734- },
735- },
736- Spec : corev1.PodSpec {
737- Containers : test .containers ,
738- Volumes : []corev1.Volume {
739- {
740- Name : pluginServingCertName ,
741- VolumeSource : corev1.VolumeSource {
742- Secret : & corev1.SecretVolumeSource {
743- SecretName : pluginServingCertName ,
744- DefaultMode : pointer .Int32Ptr (420 ),
745- },
746- },
747- },
748- {
749- Name : pluginServingCertName ,
750- VolumeSource : corev1.VolumeSource {
751- ConfigMap : & corev1.ConfigMapVolumeSource {
752- LocalObjectReference : corev1.LocalObjectReference {
753- Name : httpdConfigMapName ,
754- },
755- DefaultMode : pointer .Int32Ptr (420 ),
756- },
757- },
758- },
759- },
760- RestartPolicy : corev1 .RestartPolicyNever ,
761- DNSPolicy : corev1 .DNSClusterFirst ,
762- },
763- },
764- },
765- }
766- reconciler .Client .Create (context .TODO (), d )
612+ assertPluginDeploymentSpec := func (t * testing.T , deployment * appsv1.Deployment ) {
613+ t .Helper ()
614+
615+ consoleImage := common .DefaultConsoleImage + ":" + common .DefaultConsoleVersion
616+ assert .Equal (t , deployment .Spec .Template .Spec .Containers [0 ].Name , "gitops-plugin" )
617+ assert .Equal (t , deployment .Spec .Template .Spec .Containers [0 ].Image , consoleImage )
618+ assert .Equal (t , deployment .Spec .Template .Spec .Containers [0 ].ImagePullPolicy , corev1 .PullAlways )
619+ assert .Equal (t , deployment .Spec .Template .Spec .Containers [0 ].Ports [0 ].Name , "http" )
620+ assert .Equal (t , deployment .Spec .Template .Spec .Containers [0 ].Ports [0 ].Protocol , corev1 .ProtocolTCP )
621+ assert .Equal (t , deployment .Spec .Template .Spec .Containers [0 ].Ports [0 ].ContainerPort , int32 (9001 ))
622+ assert .Equal (t , deployment .Spec .Template .Spec .Containers [0 ].VolumeMounts [0 ].Name , "console-serving-cert" )
623+ assert .Equal (t , deployment .Spec .Template .Spec .Containers [0 ].VolumeMounts [0 ].ReadOnly , true )
624+ assert .Equal (t , deployment .Spec .Template .Spec .Containers [0 ].VolumeMounts [0 ].MountPath , "/etc/httpd-ssl/certs/tls.crt" )
625+ assert .Equal (t , deployment .Spec .Template .Spec .Containers [0 ].VolumeMounts [1 ].MountPath , "/etc/httpd-ssl/private/tls.key" )
626+ assert .Equal (t , deployment .Spec .Template .Spec .Containers [0 ].VolumeMounts [2 ].Name , "httpd-cfg" )
627+ assert .Equal (t , deployment .Spec .Template .Spec .Containers [0 ].VolumeMounts [1 ].ReadOnly , true )
628+ assert .Equal (t , deployment .Spec .Template .Spec .Containers [0 ].VolumeMounts [2 ].MountPath , "/etc/httpd-cfg/httpd.conf" )
629+ assert .Equal (t , deployment .Spec .Template .Spec .Containers [0 ].VolumeMounts [2 ].SubPath , "httpd.conf" )
630+ assert .Equal (t , deployment .Spec .Template .Spec .Containers [0 ].Resources .Requests ["memory" ], resourcev1 .MustParse ("128Mi" ))
631+ assert .Equal (t , deployment .Spec .Template .Spec .Containers [0 ].Resources .Requests ["cpu" ], resourcev1 .MustParse ("250m" ))
632+ assert .Equal (t , deployment .Spec .Template .Spec .Containers [0 ].Resources .Limits ["memory" ], resourcev1 .MustParse ("256Mi" ))
633+ assert .Equal (t , deployment .Spec .Template .Spec .Containers [0 ].Resources .Limits ["cpu" ], resourcev1 .MustParse ("500m" ))
634+ assert .DeepEqual (t , deployment .Spec .Template .Spec .Containers [0 ].SecurityContext , securityContextForPlugin ())
635+ }
767636
768- _ , err := reconciler .reconcileConsolePlugin (instance , newRequest (serviceNamespace , gitopsPluginName ))
769- assertNoError (t , err )
637+ _ , err := reconciler .reconcileDeployment (instance , newRequest (serviceNamespace , gitopsPluginName ))
638+ assertNoError (t , err )
770639
771- deployment := & appsv1.Deployment {}
772- err = fakeClient .Get (context .TODO (), types.NamespacedName {Name : gitopsPluginName , Namespace : serviceNamespace }, deployment )
773- assertNoError (t , err )
640+ // There should be a new console plugin deployment created
641+ deployment := & appsv1.Deployment {}
642+ err = fakeClient .Get (context .TODO (), types.NamespacedName {Name : gitopsPluginName , Namespace : serviceNamespace }, deployment )
643+ assertNoError (t , err )
774644
775- assert .Equal (t , deployment .Spec .Template .Spec .Containers [0 ].Name , "gitops-plugin" )
776- assert .Equal (t , deployment .Spec .Template .Spec .Containers [0 ].Image , "fake-image-repo-rul" )
777- assert .Equal (t , deployment .Spec .Template .Spec .Containers [0 ].ImagePullPolicy , corev1 .PullAlways )
778- assert .Equal (t , deployment .Spec .Template .Spec .Containers [0 ].Ports [0 ].Name , "http" )
779- assert .Equal (t , deployment .Spec .Template .Spec .Containers [0 ].Ports [0 ].Protocol , corev1 .ProtocolTCP )
780- assert .Equal (t , deployment .Spec .Template .Spec .Containers [0 ].Ports [0 ].ContainerPort , int32 (9001 ))
781- assert .Equal (t , deployment .Spec .Template .Spec .Containers [0 ].VolumeMounts [0 ].Name , "console-serving-cert" )
782- assert .Equal (t , deployment .Spec .Template .Spec .Containers [0 ].VolumeMounts [0 ].ReadOnly , true )
783- assert .Equal (t , deployment .Spec .Template .Spec .Containers [0 ].VolumeMounts [0 ].MountPath , "/etc/httpd-ssl/certs/tls.crt" )
784- assert .Equal (t , deployment .Spec .Template .Spec .Containers [0 ].VolumeMounts [1 ].MountPath , "/etc/httpd-ssl/private/tls.key" )
785- assert .Equal (t , deployment .Spec .Template .Spec .Containers [0 ].VolumeMounts [2 ].Name , "httpd-cfg" )
786- assert .Equal (t , deployment .Spec .Template .Spec .Containers [0 ].VolumeMounts [1 ].ReadOnly , true )
787- assert .Equal (t , deployment .Spec .Template .Spec .Containers [0 ].VolumeMounts [2 ].MountPath , "/etc/httpd-cfg/httpd.conf" )
788- assert .Equal (t , deployment .Spec .Template .Spec .Containers [0 ].VolumeMounts [2 ].SubPath , "httpd.conf" )
789- assert .Equal (t , deployment .Spec .Template .Spec .Containers [0 ].Resources .Requests ["memory" ], resourcev1 .MustParse ("128Mi" ))
790- assert .Equal (t , deployment .Spec .Template .Spec .Containers [0 ].Resources .Requests ["cpu" ], resourcev1 .MustParse ("250m" ))
791- assert .Equal (t , deployment .Spec .Template .Spec .Containers [0 ].Resources .Limits ["memory" ], resourcev1 .MustParse ("256Mi" ))
792- assert .Equal (t , deployment .Spec .Template .Spec .Containers [0 ].Resources .Limits ["cpu" ], resourcev1 .MustParse ("500m" ))
793- })
645+ assertPluginDeploymentSpec (t , deployment )
646+
647+ // Update the deployment with new containers
648+ deployment .Spec .Template .Spec .Containers = []corev1.Container {
649+ {
650+ Name : "wrong name" ,
651+ Image : "wrong image" ,
652+ SecurityContext : & corev1.SecurityContext {
653+ Privileged : ptr .To (true ),
654+ },
655+ },
794656 }
657+
658+ err = fakeClient .Update (context .TODO (), deployment )
659+ assertNoError (t , err )
660+
661+ // Verify if the containers are reconciled back to the default values
662+ _ , err = reconciler .reconcileDeployment (instance , newRequest (serviceNamespace , gitopsPluginName ))
663+ assertNoError (t , err )
664+
665+ deployment = & appsv1.Deployment {}
666+ err = fakeClient .Get (context .TODO (), types.NamespacedName {Name : gitopsPluginName , Namespace : serviceNamespace }, deployment )
667+ assertNoError (t , err )
668+
669+ assertPluginDeploymentSpec (t , deployment )
795670}
796671
797672func TestPlugin_reconcileDeployment_changedRestartPolicy (t * testing.T ) {
0 commit comments