@@ -18,6 +18,7 @@ import (
18
18
"k8s.io/apimachinery/pkg/util/intstr"
19
19
"k8s.io/client-go/kubernetes/scheme"
20
20
"k8s.io/utils/pointer"
21
+ "k8s.io/utils/ptr"
21
22
22
23
"sigs.k8s.io/controller-runtime/pkg/client/fake"
23
24
)
@@ -601,197 +602,71 @@ func TestPlugin_reconcileDeployment_changedTemplateLabels(t *testing.T) {
601
602
}
602
603
603
604
func 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
-
697
605
s := scheme .Scheme
698
606
addKnownTypesToScheme (s )
699
607
700
608
fakeClient := fake .NewClientBuilder ().WithScheme (s ).WithRuntimeObjects (newGitopsService ()).Build ()
701
609
reconciler := newReconcileGitOpsService (fakeClient , s )
702
610
instance := & pipelinesv1alpha1.GitopsService {}
703
- var replicas int32 = 1
704
611
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
+ }
767
636
768
- _ , err := reconciler .reconcileConsolePlugin (instance , newRequest (serviceNamespace , gitopsPluginName ))
769
- assertNoError (t , err )
637
+ _ , err := reconciler .reconcileDeployment (instance , newRequest (serviceNamespace , gitopsPluginName ))
638
+ assertNoError (t , err )
770
639
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 )
774
644
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
+ },
794
656
}
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 )
795
670
}
796
671
797
672
func TestPlugin_reconcileDeployment_changedRestartPolicy (t * testing.T ) {
0 commit comments