@@ -95,7 +95,10 @@ var _ = Describe("Flows", func() {
9595 execMock .EXPECT ().Execute ("ovs-vsctl br-get-external-id br-rail1 rail_peer_ip" ).Return ("192.168.1.1" , nil )
9696
9797 // Mock getting TOR MAC
98- execMock .EXPECT ().ExecutePrivileged (gomock .Any ()).Return ("00:11:22:33:44:55" , nil )
98+ execMock .EXPECT ().ExecutePrivileged ("arping 192.168.1.1 -c 1 &> /dev/null" ).Return ("" , nil )
99+
100+ // check
101+ execMock .EXPECT ().ExecutePrivileged ("ip neighbor | grep 192.168.1.1 | awk '{print $5}'" ).Return ("00:11:22:33:44:55" , nil )
99102
100103 // Mock getting uplink
101104 execMock .EXPECT ().Execute ("ovs-vsctl br-get-external-id br-rail1 rail_uplink" ).Return ("p0" , nil )
@@ -119,7 +122,8 @@ var _ = Describe("Flows", func() {
119122 execMock .EXPECT ().Execute (matchSubstring ("ovs-ofctl add-flow br-rail1" )).Return ("" , nil )
120123 netlinkMock .EXPECT ().LinkByName ("br-rail1" ).Return (mockLink , nil )
121124 execMock .EXPECT ().Execute ("ovs-vsctl br-get-external-id br-rail1 rail_peer_ip" ).Return ("192.168.1.1" , nil )
122- execMock .EXPECT ().ExecutePrivileged (gomock .Any ()).Return ("00:11:22:33:44:55" , nil )
125+ execMock .EXPECT ().ExecutePrivileged ("arping 192.168.1.1 -c 1 &> /dev/null" ).Return ("" , nil )
126+ execMock .EXPECT ().ExecutePrivileged ("ip neighbor | grep 192.168.1.1 | awk '{print $5}'" ).Return ("00:11:22:33:44:55" , nil )
123127 execMock .EXPECT ().Execute ("ovs-vsctl br-get-external-id br-rail1 rail_uplink" ).Return ("p0" , nil )
124128 // Second IP flow fails
125129 execMock .EXPECT ().Execute (matchSubstring ("ovs-ofctl add-flow br-rail1" )).Return ("" , fmt .Errorf ("failed to add ip flow" ))
@@ -134,7 +138,8 @@ var _ = Describe("Flows", func() {
134138 execMock .EXPECT ().Execute (matchSubstring ("ovs-ofctl add-flow br-rail1" )).Return ("" , nil )
135139 netlinkMock .EXPECT ().LinkByName ("br-rail1" ).Return (mockLink , nil )
136140 execMock .EXPECT ().Execute ("ovs-vsctl br-get-external-id br-rail1 rail_peer_ip" ).Return ("192.168.1.1" , nil )
137- execMock .EXPECT ().ExecutePrivileged (gomock .Any ()).Return ("00:11:22:33:44:55" , nil )
141+ execMock .EXPECT ().ExecutePrivileged ("arping 192.168.1.1 -c 1 &> /dev/null" ).Return ("" , nil )
142+ execMock .EXPECT ().ExecutePrivileged ("ip neighbor | grep 192.168.1.1 | awk '{print $5}'" ).Return ("00:11:22:33:44:55" , nil )
138143 execMock .EXPECT ().Execute ("ovs-vsctl br-get-external-id br-rail1 rail_uplink" ).Return ("p0" , nil )
139144 // Second IP flow succeeds
140145 execMock .EXPECT ().Execute (matchSubstring ("ovs-ofctl add-flow br-rail1" )).Return ("" , nil )
@@ -184,7 +189,8 @@ var _ = Describe("Flows", func() {
184189 // Then it checks for TOR IP
185190 execMock .EXPECT ().Execute ("ovs-vsctl br-get-external-id br-rail1 rail_peer_ip" ).Return ("192.168.1.1" , nil )
186191 // Then it gets TOR MAC
187- execMock .EXPECT ().ExecutePrivileged (gomock .Any ()).Return ("00:11:22:33:44:55" , nil )
192+ execMock .EXPECT ().ExecutePrivileged ("arping 192.168.1.1 -c 1 &> /dev/null" ).Return ("" , nil )
193+ execMock .EXPECT ().ExecutePrivileged ("ip neighbor | grep 192.168.1.1 | awk '{print $5}'" ).Return ("00:11:22:33:44:55" , nil )
188194 // Finally it checks for uplink
189195 execMock .EXPECT ().Execute ("ovs-vsctl br-get-external-id br-rail1 rail_uplink" ).Return ("" , nil )
190196
@@ -199,7 +205,22 @@ var _ = Describe("Flows", func() {
199205 netlinkMock .EXPECT ().LinkByName ("br-rail1" ).Return (mockLink , nil )
200206 execMock .EXPECT ().Execute ("ovs-vsctl br-get-external-id br-rail1 rail_peer_ip" ).Return ("192.168.1.1" , nil )
201207 // TOR MAC retrieval fails
202- execMock .EXPECT ().ExecutePrivileged (gomock .Any ()).Return ("" , fmt .Errorf ("failed to get TOR MAC" ))
208+ execMock .EXPECT ().ExecutePrivileged ("arping 192.168.1.1 -c 1 &> /dev/null" ).Return ("" , fmt .Errorf ("failed to get TOR MAC" ))
209+ execMock .EXPECT ().ExecutePrivileged ("ip neighbor | grep 192.168.1.1 | awk '{print $5}'" ).Return ("" , fmt .Errorf ("failed to get TOR MAC" ))
210+
211+ err := flows .AddPodRailFlows (0x5 , "vf0" , "br-rail1" , "10.0.0.1" , "00:11:22:33:44:66" )
212+ Expect (err ).Should (HaveOccurred ())
213+ Expect (err .Error ()).Should (ContainSubstring ("failed to get tor mac for bridge" ))
214+ })
215+
216+ It ("should return error if fails to get TOR MAC from arping" , func () {
217+ // First ARP flow succeeds
218+ execMock .EXPECT ().Execute (matchSubstring ("ovs-ofctl add-flow br-rail1" )).Return ("" , nil )
219+ netlinkMock .EXPECT ().LinkByName ("br-rail1" ).Return (mockLink , nil )
220+ execMock .EXPECT ().Execute ("ovs-vsctl br-get-external-id br-rail1 rail_peer_ip" ).Return ("192.168.1.1" , nil )
221+ // TOR MAC retrieval fails
222+ execMock .EXPECT ().ExecutePrivileged ("arping 192.168.1.1 -c 1 &> /dev/null" ).Return ("" , fmt .Errorf ("failed to get TOR MAC" ))
223+ execMock .EXPECT ().ExecutePrivileged ("ip neighbor | grep 192.168.1.1 | awk '{print $5}'" ).Return ("" , nil )
203224
204225 err := flows .AddPodRailFlows (0x5 , "vf0" , "br-rail1" , "10.0.0.1" , "00:11:22:33:44:66" )
205226 Expect (err ).Should (HaveOccurred ())
@@ -212,6 +233,7 @@ var _ = Describe("Flows", func() {
212233 netlinkMock .EXPECT ().LinkByName ("br-rail1" ).Return (mockLink , nil )
213234 execMock .EXPECT ().Execute ("ovs-vsctl br-get-external-id br-rail1 rail_peer_ip" ).Return ("192.168.1.1" , nil )
214235 // TOR MAC retrieval succeeds
236+ execMock .EXPECT ().ExecutePrivileged ("arping 192.168.1.1 -c 1 &> /dev/null" ).Return ("" , nil )
215237 execMock .EXPECT ().ExecutePrivileged (gomock .Any ()).Return ("00:11:22:33:44:55" , nil )
216238 // Uplink retrieval fails
217239 execMock .EXPECT ().Execute ("ovs-vsctl br-get-external-id br-rail1 rail_uplink" ).Return ("" , fmt .Errorf ("failed to get uplink" ))
0 commit comments