@@ -407,6 +407,101 @@ func (s *NetworkPolicyHandlerTestSuite) TestNetworkPolicyHandler_HandleAlways_Se
407407 s .ExpectEvent (ReasonCreatingWebhookTrafficNetpolSuccess )
408408}
409409
410+ func (s * NetworkPolicyHandlerTestSuite ) TestNetworkPolicyHandler_HandleAlways_ServiceHasNoTargetPortThanPort_CreatePolicy () {
411+ s .handler = NewNetworkPolicyHandler (s .Client , & runtime.Scheme {}, automate_third_party_network_policy .Always , 32 , false )
412+ s .handler .InjectRecorder (s .Recorder )
413+
414+ s .webhookService = & corev1.Service {
415+ ObjectMeta : metav1.ObjectMeta {
416+ Name : TestServiceName ,
417+ Namespace : TestNamespace ,
418+ },
419+ Spec : corev1.ServiceSpec {
420+ Selector : map [string ]string {
421+ "Taylor" : "Swift" ,
422+ },
423+ Ports : []corev1.ServicePort {
424+ {
425+ Port : TestServicePort ,
426+ Protocol : corev1 .ProtocolTCP ,
427+ },
428+ },
429+ },
430+ }
431+
432+ s .mockForReturningValidatingWebhook ()
433+ s .mockReturningWebhookService ()
434+ //s.mockServiceIsBlockedByOtterize(make([]v1.NetworkPolicy, 0))
435+ s .mockGetControlPlaneIPs ()
436+ s .mockGetExistingOtterizeWebhooksNetpols ([]v1.NetworkPolicy {})
437+
438+ netpolMatcher := NewNetworkPolicyMatcher ([]int32 {TestServicePort }, s .handler .allowAllIncomingTraffic , nil )
439+ s .Client .EXPECT ().Create (gomock .Any (), gomock .All (netpolMatcher )).Return (nil )
440+ err := s .handler .HandleAll (context .Background ())
441+ s .Require ().NoError (err )
442+ s .ExpectEvent (ReasonCreatingWebhookTrafficNetpol )
443+ s .ExpectEvent (ReasonCreatingWebhookTrafficNetpolSuccess )
444+ }
445+
446+ func (s * NetworkPolicyHandlerTestSuite ) TestNetworkPolicyHandler_HandleAlways_WebhookDoesNotDefinePort_CreatePolicyWithDefaultPort () {
447+ s .handler = NewNetworkPolicyHandler (s .Client , & runtime.Scheme {}, automate_third_party_network_policy .Always , 32 , false )
448+ s .handler .InjectRecorder (s .Recorder )
449+
450+ s .validatingWebhook = ValidatingWebhookConfiguration .DeepCopy ()
451+ s .validatingWebhook .Webhooks [0 ].ClientConfig .Service .Port = nil
452+
453+ s .webhookService = & corev1.Service {
454+ ObjectMeta : metav1.ObjectMeta {
455+ Name : TestServiceName ,
456+ Namespace : TestNamespace ,
457+ },
458+ Spec : corev1.ServiceSpec {
459+ Selector : map [string ]string {
460+ "Taylor" : "Swift" ,
461+ },
462+ Ports : []corev1.ServicePort {
463+ {
464+ Port : 443 ,
465+ Protocol : corev1 .ProtocolTCP ,
466+ },
467+ },
468+ },
469+ }
470+
471+ s .mockForReturningValidatingWebhook ()
472+ s .mockReturningWebhookService ()
473+ //s.mockServiceIsBlockedByOtterize(make([]v1.NetworkPolicy, 0))
474+ s .mockGetControlPlaneIPs ()
475+ s .mockGetExistingOtterizeWebhooksNetpols ([]v1.NetworkPolicy {})
476+
477+ netpolMatcher := NewNetworkPolicyMatcher ([]int32 {443 }, s .handler .allowAllIncomingTraffic , nil )
478+ s .Client .EXPECT ().Create (gomock .Any (), gomock .All (netpolMatcher )).Return (nil )
479+ err := s .handler .HandleAll (context .Background ())
480+ s .Require ().NoError (err )
481+ s .ExpectEvent (ReasonCreatingWebhookTrafficNetpol )
482+ s .ExpectEvent (ReasonCreatingWebhookTrafficNetpolSuccess )
483+ }
484+
485+ func (s * NetworkPolicyHandlerTestSuite ) TestNetworkPolicyHandler_HandleAlways_WebhookPortNotFoundOnService_ExpectErrors () {
486+ s .handler = NewNetworkPolicyHandler (s .Client , & runtime.Scheme {}, automate_third_party_network_policy .Always , 32 , false )
487+ s .handler .InjectRecorder (s .Recorder )
488+
489+ s .validatingWebhook = ValidatingWebhookConfiguration .DeepCopy ()
490+ s .validatingWebhook .Webhooks [0 ].ClientConfig .Service .Port = nil
491+
492+ s .mockForReturningValidatingWebhook ()
493+ s .mockReturningWebhookService ()
494+ //s.mockServiceIsBlockedByOtterize(make([]v1.NetworkPolicy, 0))
495+ s .mockGetControlPlaneIPs ()
496+ //s.mockGetExistingOtterizeWebhooksNetpols([]v1.NetworkPolicy{})
497+
498+ //netpolMatcher := NewNetworkPolicyMatcher([]int32{443}, s.handler.allowAllIncomingTraffic, nil)
499+ //s.Client.EXPECT().Create(gomock.Any(), gomock.All(netpolMatcher)).Return(nil)
500+ err := s .handler .HandleAll (context .Background ())
501+ s .Require ().Error (err , "Webhook port was not found on service" )
502+ s .ExpectEvent (ReasonWebhookPortNotFoundOnServiceError )
503+ }
504+
410505func (s * NetworkPolicyHandlerTestSuite ) TestNetworkPolicyHandler_HandleAlways_WebhookNameTooLong_CreatePolicy () {
411506 s .handler = NewNetworkPolicyHandler (s .Client , & runtime.Scheme {}, automate_third_party_network_policy .Always , 32 , false )
412507 s .handler .InjectRecorder (s .Recorder )
@@ -427,6 +522,46 @@ func (s *NetworkPolicyHandlerTestSuite) TestNetworkPolicyHandler_HandleAlways_We
427522 s .ExpectEvent (ReasonCreatingWebhookTrafficNetpolSuccess )
428523}
429524
525+ func (s * NetworkPolicyHandlerTestSuite ) TestNetworkPolicyHandler_HandleIfBlockedByOtterize_ServiceIsBlockedByOtterize_TwoWebhooksToSameServiceDifferentPorts_CreatingOneWebhookPolicy () {
526+ secondPort := int32 (1432 )
527+ s .validatingWebhook .Webhooks = append (s .validatingWebhook .Webhooks ,
528+ admissionv1.ValidatingWebhook {
529+ Name : "Second" ,
530+ ClientConfig : admissionv1.WebhookClientConfig {
531+ Service : & admissionv1.ServiceReference {
532+ Name : TestServiceName ,
533+ Namespace : TestNamespace ,
534+ Port : lo .ToPtr (secondPort ),
535+ },
536+ },
537+ })
538+ s .webhookService .Spec .Ports = append (s .webhookService .Spec .Ports , corev1.ServicePort {
539+ Port : secondPort ,
540+ Protocol : corev1 .ProtocolTCP ,
541+ })
542+
543+ s .mockForReturningValidatingWebhook ()
544+
545+ // Called once for "First" webhook
546+ s .mockReturningWebhookService ()
547+ s .mockServiceIsBlockedByOtterize (OtterizeIngressNetpols )
548+ s .mockGetControlPlaneIPs ()
549+
550+ // Called second time for "Second"" webhook
551+ s .mockReturningWebhookService ()
552+ s .mockServiceIsBlockedByOtterize (OtterizeIngressNetpols )
553+ s .mockGetControlPlaneIPs ()
554+
555+ s .mockGetExistingOtterizeWebhooksNetpols ([]v1.NetworkPolicy {})
556+
557+ netpolMatcher := NewNetworkPolicyMatcher ([]int32 {secondPort , TestServicePort }, s .handler .allowAllIncomingTraffic , nil )
558+ s .Client .EXPECT ().Create (gomock .Any (), gomock .All (netpolMatcher )).Return (nil )
559+ err := s .handler .HandleAll (context .Background ())
560+ s .Require ().NoError (err )
561+ s .ExpectEvent (ReasonCreatingWebhookTrafficNetpol )
562+ s .ExpectEvent (ReasonCreatingWebhookTrafficNetpolSuccess )
563+ }
564+
430565func (s * NetworkPolicyHandlerTestSuite ) mockForReturningValidatingWebhook () {
431566 s .Client .EXPECT ().List (
432567 gomock .Any (), gomock .Eq (& admissionv1.ValidatingWebhookConfigurationList {}),
0 commit comments