@@ -135,6 +135,42 @@ var _ = Describe("OvsIPaddressReconciler", func() {
135135 Expect (err ).To (BeNil ())
136136 Expect (result ).To (Equal (ctrl.Result {}))
137137 })
138+ It ("should succeed reconcile - ip already exists on the bridge" , func () {
139+ By ("Reconciling the created config map with valid json" )
140+ updateConfigMap (ctx , ns .Name , validConfig ())
141+ // Port 1
142+ eth0Link := & netlink.Dummy {}
143+ internalLink1 := & netlink.Dummy {}
144+ mockExec .EXPECT ().Execute ("ovs-vsctl port-to-br eth0" ).Return ("br-0000_08_00.1" , nil )
145+ mockNetlink .EXPECT ().LinkByName ("br-0000_08_00.1" ).Return (internalLink1 , nil ).AnyTimes ()
146+ mockNetlink .EXPECT ().IsLinkAdminStateUp (internalLink1 ).Return (false )
147+ mockNetlink .EXPECT ().LinkSetUp (internalLink1 ).Return (nil )
148+ By ("ip already exists on the bridge and need to be removed from the physical port" )
149+ eth0Addr := netlink.Addr {IPNet : & net.IPNet {IP : net .ParseIP ("172.0.0.2" ), Mask : net .CIDRMask (24 , 32 )}}
150+ mockNetlink .EXPECT ().IPv4Addresses (internalLink1 ).Return ([]netlink.Addr {eth0Addr }, nil )
151+ mockNetlink .EXPECT ().AddrAdd (internalLink1 , "192.0.0.1/31" ).Return (nil )
152+ mockNetlink .EXPECT ().LinkByName ("eth0" ).Return (eth0Link , nil ).AnyTimes ()
153+ mockNetlink .EXPECT ().IPv4Addresses (eth0Link ).Return ([]netlink.Addr {eth0Addr }, nil )
154+ mockNetlink .EXPECT ().AddrDel (eth0Link , "172.0.0.2/24" ).Return (nil )
155+ // Port 2
156+ internalLink2 := & netlink.Dummy {}
157+ mockExec .EXPECT ().Execute ("ovs-vsctl port-to-br eth1" ).Return ("br-0000_08_00.2" , nil )
158+ mockNetlink .EXPECT ().LinkByName ("br-0000_08_00.2" ).Return (internalLink2 , nil ).AnyTimes ()
159+ mockNetlink .EXPECT ().IsLinkAdminStateUp (internalLink2 ).Return (false )
160+ mockNetlink .EXPECT ().LinkSetUp (internalLink2 ).Return (nil )
161+ mockNetlink .EXPECT ().IPv4Addresses (internalLink2 ).Return ([]netlink.Addr {}, nil )
162+ mockNetlink .EXPECT ().AddrAdd (internalLink2 , "192.32.0.1/31" ).Return (nil )
163+ eth1Link := & netlink.Dummy {}
164+ mockNetlink .EXPECT ().LinkByName ("eth1" ).Return (eth1Link , nil ).AnyTimes ()
165+ mockNetlink .EXPECT ().IPv4Addresses (eth1Link ).Return ([]netlink.Addr {
166+ {IPNet : & net.IPNet {IP : net .ParseIP ("172.32.0.2" ), Mask : net .CIDRMask (24 , 32 )}},
167+ }, nil )
168+ mockNetlink .EXPECT ().AddrAdd (internalLink2 , "172.32.0.2/24" ).Return (nil )
169+ mockNetlink .EXPECT ().AddrDel (eth1Link , "172.32.0.2/24" ).Return (nil )
170+ result , err := r .Reconcile (ctx , request )
171+ Expect (err ).To (BeNil ())
172+ Expect (result ).To (Equal (ctrl.Result {}))
173+ })
138174 })
139175
140176 Describe ("processRailDeviceMapping" , func () {
0 commit comments