@@ -889,6 +889,132 @@ func TestReconcileBackend_DefaultRequestsAndLimits(t *testing.T) {
889889 assert .Equal (t , deployment .Spec .Template .Spec .Containers [0 ].Resources .Limits ["cpu" ], resourcev1 .MustParse ("500m" ))
890890}
891891
892+ // Tests for KAM component cleanup
893+ // No resources exist
894+ func TestCleanKAMResources_NoResourcesExist (t * testing.T ) {
895+ logf .SetLogger (zap .New (zap .UseDevMode (true )))
896+ s := scheme .Scheme
897+ addKnownTypesToScheme (s )
898+ fakeClient := fake .NewClientBuilder ().WithScheme (s ).Build ()
899+ reconciler := newReconcileGitOpsService (fakeClient , s )
900+ reqLogger := logs .WithValues ("Request.Namespace" , "test" , "Request.Name" , "test" )
901+
902+ // No KAM resources exist - function should be a silent no-op
903+ reconciler .cleanKAMResources (context .TODO (), reqLogger )
904+ }
905+
906+ // Deployment exist
907+ func TestCleanKAMResources_DeploymentExist (t * testing.T ) {
908+ logf .SetLogger (zap .New (zap .UseDevMode (true )))
909+ s := scheme .Scheme
910+ addKnownTypesToScheme (s )
911+
912+ kamDeploy := & appsv1.Deployment {
913+ ObjectMeta : v1.ObjectMeta {Name : kamResourceName , Namespace : serviceNamespace },
914+ }
915+ fakeClient := fake .NewClientBuilder ().WithScheme (s ).WithObjects (kamDeploy ).Build ()
916+ reconciler := newReconcileGitOpsService (fakeClient , s )
917+ reqLogger := logs .WithValues ("Request.Namespace" , "test" , "Request.Name" , "test" )
918+
919+ reconciler .cleanKAMResources (context .TODO (), reqLogger )
920+
921+ err := fakeClient .Get (context .TODO (), types.NamespacedName {Name : kamResourceName , Namespace : serviceNamespace }, & appsv1.Deployment {})
922+ if ! errors .IsNotFound (err ) {
923+ t .Fatalf ("expected KAM Deployment to be deleted , got err: %v" , err )
924+ }
925+ }
926+
927+ // Service exist
928+ func TestCleanKAMResources_ServiceExist (t * testing.T ) {
929+ logf .SetLogger (zap .New (zap .UseDevMode (true )))
930+ s := scheme .Scheme
931+ addKnownTypesToScheme (s )
932+ kamService := & corev1.Service {
933+ ObjectMeta : v1.ObjectMeta {Name : kamResourceName , Namespace : serviceNamespace },
934+ }
935+ fakeClient := fake .NewClientBuilder ().WithScheme (s ).WithObjects (kamService ).Build ()
936+ reconciler := newReconcileGitOpsService (fakeClient , s )
937+ reqLogger := logs .WithValues ("Request.Namespace" , "test" , "Request.Name" , "test" )
938+
939+ reconciler .cleanKAMResources (context .TODO (), reqLogger )
940+
941+ err := fakeClient .Get (context .TODO (), types.NamespacedName {Name : kamResourceName , Namespace : serviceNamespace }, & corev1.Service {})
942+ if ! errors .IsNotFound (err ) {
943+ t .Fatalf ("expected KAM Service to be deleted , got err: %v" , err )
944+ }
945+ }
946+
947+ // Route exist
948+ func TestCleanKAMResources_RouteExist (t * testing.T ) {
949+ logf .SetLogger (zap .New (zap .UseDevMode (true )))
950+ s := scheme .Scheme
951+ addKnownTypesToScheme (s )
952+ kamRoute := & routev1.Route {
953+ ObjectMeta : v1.ObjectMeta {Name : kamResourceName , Namespace : serviceNamespace },
954+ }
955+ fakeClient := fake .NewClientBuilder ().WithScheme (s ).WithObjects (kamRoute ).Build ()
956+ reconciler := newReconcileGitOpsService (fakeClient , s )
957+ reqLogger := logs .WithValues ("Request.Namespace" , "test" , "Request.Name" , "test" )
958+
959+ reconciler .cleanKAMResources (context .TODO (), reqLogger )
960+
961+ err := fakeClient .Get (context .TODO (), types.NamespacedName {Name : kamResourceName , Namespace : serviceNamespace }, & routev1.Route {})
962+ if ! errors .IsNotFound (err ) {
963+ t .Fatalf ("expected KAM Route to be deleted , got err: %v" , err )
964+ }
965+ }
966+
967+ // All Resources exist
968+ func TestCleanKAMResources_AllResourcesExist (t * testing.T ) {
969+ logf .SetLogger (zap .New (zap .UseDevMode (true )))
970+ s := scheme .Scheme
971+ addKnownTypesToScheme (s )
972+ kamDeploy := & appsv1.Deployment {
973+ ObjectMeta : v1.ObjectMeta {Name : kamResourceName , Namespace : serviceNamespace },
974+ }
975+ kamService := & corev1.Service {
976+ ObjectMeta : v1.ObjectMeta {Name : kamResourceName , Namespace : serviceNamespace },
977+ }
978+ kamRoute := & routev1.Route {
979+ ObjectMeta : v1.ObjectMeta {Name : kamResourceName , Namespace : serviceNamespace },
980+ }
981+ fakeClient := fake .NewClientBuilder ().WithScheme (s ).WithObjects (kamDeploy , kamService , kamRoute ).Build ()
982+ reconciler := newReconcileGitOpsService (fakeClient , s )
983+ reqLogger := logs .WithValues ("Request.Namespace" , "test" , "Request.Name" , "test" )
984+
985+ reconciler .cleanKAMResources (context .TODO (), reqLogger )
986+
987+ if err := fakeClient .Get (context .TODO (), types.NamespacedName {Name : kamResourceName , Namespace : serviceNamespace }, & appsv1.Deployment {}); ! errors .IsNotFound (err ) {
988+ t .Fatalf ("expected KAM Deployment to be deleted , got err: %v" , err )
989+ }
990+ if err := fakeClient .Get (context .TODO (), types.NamespacedName {Name : kamResourceName , Namespace : serviceNamespace }, & corev1.Service {}); ! errors .IsNotFound (err ) {
991+ t .Fatalf ("expected KAM Service to be deleted , got err: %v" , err )
992+ }
993+ if err := fakeClient .Get (context .TODO (), types.NamespacedName {Name : kamResourceName , Namespace : serviceNamespace }, & routev1.Route {}); ! errors .IsNotFound (err ) {
994+ t .Fatalf ("expected KAM Route to be deleted , got err: %v" , err )
995+ }
996+ }
997+
998+ // Idempotency
999+ func TestCleanKAMResources_Idempotent (t * testing.T ) {
1000+ logf .SetLogger (zap .New (zap .UseDevMode (true )))
1001+ s := scheme .Scheme
1002+ addKnownTypesToScheme (s )
1003+ kamDeploy := & appsv1.Deployment {
1004+ ObjectMeta : v1.ObjectMeta {Name : kamResourceName , Namespace : serviceNamespace },
1005+ }
1006+ fakeClient := fake .NewClientBuilder ().WithScheme (s ).WithObjects (kamDeploy ).Build ()
1007+ reconciler := newReconcileGitOpsService (fakeClient , s )
1008+ reqLogger := logs .WithValues ("Request.Namespace" , "test" , "Request.Name" , "test" )
1009+
1010+ // First call - deletes the KAM resource
1011+ reconciler .cleanKAMResources (context .TODO (), reqLogger )
1012+
1013+ // Second call - must not panic even if the resources are already deleted
1014+ reconciler .cleanKAMResources (context .TODO (), reqLogger )
1015+
1016+ }
1017+
8921018func addKnownTypesToScheme (scheme * runtime.Scheme ) {
8931019 scheme .AddKnownTypes (configv1 .GroupVersion , & configv1.ClusterVersion {})
8941020 scheme .AddKnownTypes (pipelinesv1alpha1 .GroupVersion , & pipelinesv1alpha1.GitopsService {})
0 commit comments