@@ -40,6 +40,7 @@ import (
4040 ovntest "github.com/ovn-org/ovn-kubernetes/go-controller/pkg/testing"
4141 coreinformermocks "github.com/ovn-org/ovn-kubernetes/go-controller/pkg/testing/mocks/k8s.io/client-go/informers/core/v1"
4242 v1mocks "github.com/ovn-org/ovn-kubernetes/go-controller/pkg/testing/mocks/k8s.io/client-go/listers/core/v1"
43+ fakenetworkmanager "github.com/ovn-org/ovn-kubernetes/go-controller/pkg/testing/networkmanager"
4344 "github.com/ovn-org/ovn-kubernetes/go-controller/pkg/types"
4445 "github.com/ovn-org/ovn-kubernetes/go-controller/pkg/util"
4546
@@ -1554,6 +1555,34 @@ var _ = Describe("UserDefinedNetworkGateway", func() {
15541555 Expect (err ).NotTo (HaveOccurred ())
15551556 Expect (fexec .CalledMatchesExpected ()).To (BeTrue (), fexec .ErrorDesc )
15561557 })
1558+
1559+ It ("should sync node port watcher successfully if a namespaces network is invalid" , func () {
1560+ // create new gateway, add ns with primary UDN, pod, expose pod via Node port service, delete pod, delete udn, ensure sync should succeeds
1561+ namespace := util .NewNamespace ("udn" )
1562+ config .OVNKubernetesFeature .EnableMultiNetwork = true
1563+ config .OVNKubernetesFeature .EnableNetworkSegmentation = true
1564+ namespace .Labels [types .RequiredUDNNamespaceLabel ] = ""
1565+ service := newService ("udn-svc" , namespace .Name , "10.96.0.10" , []corev1.ServicePort {{NodePort : int32 (30300 ),
1566+ Protocol : corev1 .ProtocolTCP , Port : int32 (8080 )}}, corev1 .ServiceTypeNodePort , []string {}, corev1.ServiceStatus {},
1567+ true , false )
1568+ fakeClient := util .GetOVNClientset (service , namespace )
1569+ wf , err := factory .NewNodeWatchFactory (fakeClient .GetNodeClientset (), "node" )
1570+ Expect (err ).ToNot (HaveOccurred (), "must get new node watch factory" )
1571+ Expect (wf .Start ()).NotTo (HaveOccurred (), "must start Node watch factory" )
1572+ defer func () {
1573+ wf .Shutdown ()
1574+ }()
1575+ iptV4 , iptV6 := util .SetFakeIPTablesHelpers ()
1576+ nodenft .SetFakeNFTablesHelper ()
1577+ fNPW := initFakeNodePortWatcher (iptV4 , iptV6 )
1578+ fNPW .watchFactory = wf
1579+ // in-order to simulate a namespace with an Invalid UDN (when GetActiveNamespace is called), we add an entry
1580+ // to the fake network manager but no specified network. GetActiveNetwork will return the appropriate error of Invalid Network for namespace.
1581+ // network manager may have a different implementation that fake network manager but both will return the same error.
1582+ fNPW .networkManager = & fakenetworkmanager.FakeNetworkManager {PrimaryNetworks : map [string ]util.NetInfo {namespace .Name : nil }}
1583+ services := append ([]interface {}{}, service )
1584+ Expect (fNPW .SyncServices (services )).NotTo (HaveOccurred (), "must sync services" )
1585+ })
15571586})
15581587
15591588func TestConstructUDNVRFIPRules (t * testing.T ) {
0 commit comments