@@ -542,7 +542,8 @@ func TestReconcile_VerifyResourceQuotaDeletionForUpgrade(t *testing.T) {
542542 // Create namespace object for default ArgoCD instance and set resource quota to it.
543543 defaultArgoNS := & corev1.Namespace {
544544 ObjectMeta : v1.ObjectMeta {
545- Name : serviceNamespace ,
545+ Name : serviceNamespace ,
546+ Namespace : serviceNamespace ,
546547 },
547548 }
548549 fakeClient .Create (context .TODO (), defaultArgoNS )
@@ -632,6 +633,110 @@ func TestReconcile_InfrastructureNode(t *testing.T) {
632633
633634}
634635
636+ func TestReconcile_PSSLabels (t * testing.T ) {
637+ logf .SetLogger (argocd .ZapLogger (true ))
638+ s := scheme .Scheme
639+ addKnownTypesToScheme (s )
640+
641+ testCases := []struct {
642+ name string
643+ namespace string
644+ labels map [string ]string
645+ }{
646+ {
647+ name : "modified valid PSS labels for openshift-gitops ns" ,
648+ namespace : "openshift-gitops" ,
649+ labels : map [string ]string {
650+ "pod-security.kubernetes.io/enforce" : "privileged" ,
651+ "pod-security.kubernetes.io/enforce-version" : "v1.30" ,
652+ "pod-security.kubernetes.io/audit" : "privileged" ,
653+ "pod-security.kubernetes.io/audit-version" : "v1.29" ,
654+ "pod-security.kubernetes.io/warn" : "privileged" ,
655+ "pod-security.kubernetes.io/warn-version" : "v1.29" ,
656+ },
657+ },
658+ {
659+ name : "modified invalid and empty PSS labels for openshift-gitops ns" ,
660+ namespace : "openshift-gitops" ,
661+ labels : map [string ]string {
662+ "pod-security.kubernetes.io/enforce" : "invalid" ,
663+ "pod-security.kubernetes.io/enforce-version" : "invalid" ,
664+ "pod-security.kubernetes.io/warn" : "invalid" ,
665+ "pod-security.kubernetes.io/warn-version" : "invalid" ,
666+ },
667+ },
668+ }
669+
670+ expected_labels := map [string ]string {
671+ "pod-security.kubernetes.io/enforce" : "restricted" ,
672+ "pod-security.kubernetes.io/enforce-version" : "v1.29" ,
673+ "pod-security.kubernetes.io/audit" : "restricted" ,
674+ "pod-security.kubernetes.io/audit-version" : "latest" ,
675+ "pod-security.kubernetes.io/warn" : "restricted" ,
676+ "pod-security.kubernetes.io/warn-version" : "latest" ,
677+ }
678+
679+ fakeClient := fake .NewFakeClient (util .NewClusterVersion ("4.7.1" ), newGitopsService ())
680+ reconciler := newReconcileGitOpsService (fakeClient , s )
681+
682+ _ , err := reconciler .Reconcile (context .TODO (), newRequest ("test" , "test" ))
683+ assertNoError (t , err )
684+
685+ // Create a user defined namespace
686+ testNS := newRestrictedNamespace ("test" )
687+ err = fakeClient .Create (context .TODO (), testNS )
688+ assertNoError (t , err )
689+
690+ // Create an ArgoCD instance in the user defined namespace
691+ testArgoCD := & argoapp.ArgoCD {
692+ ObjectMeta : v1.ObjectMeta {
693+ Name : "test" ,
694+ Namespace : "test" ,
695+ },
696+ Spec : argoapp.ArgoCDSpec {},
697+ }
698+ err = fakeClient .Create (context .TODO (), testArgoCD )
699+ assertNoError (t , err )
700+
701+ _ , err = reconciler .Reconcile (context .TODO (), newRequest ("test" , "test" ))
702+ assertNoError (t , err )
703+
704+ // Check if PSS labels are addded to the user defined ns
705+ reconciled_ns := & corev1.Namespace {}
706+ err = fakeClient .Get (context .TODO (), types.NamespacedName {Name : "test" },
707+ reconciled_ns )
708+ assertNoError (t , err )
709+
710+ for label , _ := range reconciled_ns .ObjectMeta .Labels {
711+ _ , found := expected_labels [label ]
712+ // Fail if label is found
713+ assert .Check (t , found != true )
714+ }
715+
716+ for _ , tc := range testCases {
717+ existing_ns := & corev1.Namespace {}
718+ assert .NilError (t , fakeClient .Get (context .TODO (), types.NamespacedName {Name : tc .namespace }, existing_ns ), err )
719+
720+ // Assign new values, confirm the assignment and update the PSS labels
721+ existing_ns .ObjectMeta .Labels = tc .labels
722+ fakeClient .Update (context .TODO (), existing_ns )
723+ assert .NilError (t , fakeClient .Get (context .TODO (), types.NamespacedName {Name : tc .namespace }, existing_ns ), err )
724+ assert .DeepEqual (t , existing_ns .ObjectMeta .Labels , tc .labels )
725+
726+ _ , err := reconciler .Reconcile (context .TODO (), newRequest ("test" , "test" ))
727+ assertNoError (t , err )
728+
729+ assert .NilError (t , fakeClient .Get (context .TODO (), types.NamespacedName {Name : tc .namespace }, reconciled_ns ), err )
730+
731+ for key , value := range expected_labels {
732+ label , found := reconciled_ns .ObjectMeta .Labels [key ]
733+ // Fail if label is not found, comapre the values with the expected values if found
734+ assert .Check (t , found )
735+ assert .Equal (t , label , value )
736+ }
737+ }
738+ }
739+
635740func addKnownTypesToScheme (scheme * runtime.Scheme ) {
636741 scheme .AddKnownTypes (configv1 .GroupVersion , & configv1.ClusterVersion {})
637742 scheme .AddKnownTypes (pipelinesv1alpha1 .GroupVersion , & pipelinesv1alpha1.GitopsService {})
0 commit comments