2 Documentation Test suite for ARP Request. More test cases to be added in subsequent patches.
3 Suite Setup Suite Setup
4 Suite Teardown Suite Teardown
5 Test Setup SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
6 Test Teardown OpenStackOperations.Get Test Teardown Debugs
7 Library RequestsLibrary
9 Resource ../../../libraries/DevstackUtils.robot
10 Resource ../../../libraries/OpenStackOperations.robot
11 Resource ../../../libraries/SetupUtils.robot
12 Resource ../../../libraries/VpnOperations.robot
13 Resource ../../../variables/netvirt/Variables.robot
14 Resource ../../../variables/Variables.robot
17 ${SECURITY_GROUP} vpna_sg
18 @{NETWORKS} vpna_net_1 vpna_net_2 vpna_net_3
19 @{SUBNETS} vpna_sub_1 vpna_sub_2 vpna_sub_3
20 @{SUBNET_CIDRS} 10.10.10.0/24 10.20.20.0/24 10.30.30.0/24
21 @{PORTS} vpna_net_1_port_1 vpna_net_1_port_2 vpna_net_2_port_1 vpna_net_2_port_2 vpna_net_3_port_1 vpna_net_3_port_2
22 @{NET_1_VMS} vpna_net_1_vm_1 vpna_net_1_vm_2
23 @{NET_2_VMS} vpna_net_2_vm_1 vpna_net_2_vm_2
24 @{NET_3_VMS} vpna_net_3_vm_1 vpna_net_3_vm_2
26 @{VPN_INSTANCE_IDS} 4ae8cd92-48ca-49b5-94e1-b2921a261111
30 ${EXPORT_RT} ["2200:2","2200:3"]
31 ${IMPORT_RT} ["2200:2","2200:3"]
33 @{EXTRA_NW_IP} 192.168.10.110 192.168.20.110
34 ${FIB_ENTRY_2} 192.168.10.110
35 ${RPING_MIP_IP} sudo arping -I eth0:1 -c 5 -b -s 192.168.10.110 192.168.10.110
36 ${RPING_MIP_IP_2} sudo arping -I eth0:1 -c 5 -b -s 192.168.20.110 192.168.20.110
37 ${RPING_EXP_STR} broadcast
41 [Documentation] Verify that VMs received ip and ping is happening between different VMs.
42 ... For this, we ssh to the VM using the dhcp-namespace on the controller node and verify ping
43 ... reachability to the second VM on the same network and VMs on other network (i.e., east-west routing)
44 ${vms} = BuiltIn.Create List @{NET_1_VM_IPS} @{NET_2_VM_IPS} @{NET_3_VM_IPS}
45 BuiltIn.Wait Until Keyword Succeeds 30s 10s Utils.Check For Elements At URI ${FIB_ENTRIES_URL} ${vms}
46 Verify Ping On Same Networks
47 Verify Ping On Different Networks
50 [Documentation] Verify that GARP request is sent to controller and controller learns this info.
51 ... In this test-case, before we validate the GARPs, we ensure that the necessary pipeline
52 ... flows for the VMs spawned on the networks are as expected (along with the FIB Entries
53 ... in the ODL Datastore). For triggering GARPs, we create an alias interface (eth0:1) on
54 ... VM1_net0, configure it with an extra_route_ip, trigger 5 GARPs from the VM for the
55 ... extra_route_ip and ensure that ODL learns (by looking at odl-fib:fibEntries) the
56 ... extra_route_ip info with the nexthop pointing to Compute-1 (where VM1_net0 is spawned)
57 ... hostIP. Finally, we verify ping reachability to the extra_route_ip from other VMs on
59 BuiltIn.Pass Execution If "${OPENSTACK_TOPO}" == "1cmb-0ctl-0cmp" "Test is not supported for combo node"
60 BuiltIn.Set Test Variable ${fib_entry_1} @{NET_1_VM_IPS}[0]
61 BuiltIn.Set Test Variable ${fib_entry_3} @{NET_1_VM_IPS}[1]
62 Verify Flows Are Present On All Compute Nodes
63 ${output} = VpnOperations.Get Fib Entries session
64 ${resp} = BuiltIn.Should Match Regexp ${output} destPrefix\\":\\"${fib_entry_3}\/32".*"${OS_CMP2_IP}\\"
65 ${resp} = BuiltIn.Should Match Regexp ${output} destPrefix\\":\\"${fib_entry_1}\/32".*"${OS_CMP1_IP}\\"
66 ${rx_packet1_before} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET_1_VM_IPS}[1] ifconfig eth0
67 ${rx_packet0_before} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET_1_VM_IPS}[0] ifconfig eth0
68 ${config_extra_route_ip1} = BuiltIn.Catenate sudo ifconfig ${SUB_IF} @{EXTRA_NW_IP}[0] netmask 255.255.255.0 up
69 ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET_1_VM_IPS}[1] ${config_extra_route_ip1}
70 ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET_1_VM_IPS}[1] ifconfig
71 BuiltIn.Should Contain ${output} ${SUB_IF}
72 ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET_1_VM_IPS}[1] ${RPING_MIP_IP}
73 BuiltIn.Should Contain ${output} broadcast
74 BuiltIn.Should Contain ${output} Received 0 reply
75 ${rx_packet1_after} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET_1_VM_IPS}[1] ifconfig eth0
76 ${rx_packet0_after} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET_1_VM_IPS}[0] ifconfig eth0
77 BuiltIn.Should Not Be Equal ${rx_packet0_before} ${rx_packet0_after}
78 BuiltIn.Should Not Be Equal ${rx_packet1_before} ${rx_packet1_after}
79 Verify Flows Are Present On All Compute Nodes
80 BuiltIn.Wait Until Keyword Succeeds 5s 1s Verify Learnt IP ${FIB_ENTRY_2} session
81 ${output} = VpnOperations.Get Fib Entries session
82 ${resp} = BuiltIn.Should Match Regexp ${output} destPrefix\\":\\"${fib_entry_3}\\/32".*"${OS_CMP2_IP}\\"
83 ${resp} = BuiltIn.Should Match Regexp ${output} destPrefix\\":\\"${fib_entry_1}\\/32".*"${OS_CMP1_IP}\\"
84 ${resp} = BuiltIn.Should Match Regexp ${output} destPrefix\\":\\"${FIB_ENTRY_2}\\/32".*"${OS_CMP2_IP}\\"
85 Verify Ping To Sub Interface ${FIB_ENTRY_2}
88 [Documentation] Verify that after migration of movable ip across compute nodes, the controller updates the routes.
89 ... Unconfigure the extra_route_ip on VM1_net0 and configure it on vm0_net0 (on Compute-0 host).
90 ... Trigger 5 GARPs from the VM for the extra_route_ip and ensure that ODL learns/updates
91 ... the extra_route_ip info with nexthop in the FIB entry pointing to Compute-0 hostip.
92 BuiltIn.Pass Execution If "${OPENSTACK_TOPO}" == "1cmb-0ctl-0cmp" "Test is not supported for combo node"
93 ${unconfig_extra_route_ip1} = BuiltIn.Catenate sudo ifconfig ${SUB_IF} down
94 ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET_1_VM_IPS}[1] ${unconfig_extra_route_ip1}
95 ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET_1_VM_IPS}[1] ifconfig
96 BuiltIn.Should Not Contain ${output} ${SUB_IF}
97 ${config_extra_route_ip1} = BuiltIn.Catenate sudo ifconfig ${SUB_IF} @{EXTRA_NW_IP}[0] netmask 255.255.255.0 up
98 ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET_1_VM_IPS}[0] ${config_extra_route_ip1}
99 ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET_1_VM_IPS}[0] ifconfig
100 BuiltIn.Should Contain ${output} ${SUB_IF}
101 ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET_1_VM_IPS}[0] ifconfig ${SUB_IF}
102 ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET_1_VM_IPS}[0] ${RPING_MIP_IP}
103 BuiltIn.Should Contain ${output} Received 0 reply
104 BuiltIn.Should Contain ${output} broadcast
105 BuiltIn.Wait Until Keyword Succeeds 5s 1s Verify Learnt IP ${FIB_ENTRY_2} session
106 ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET_1_VM_IPS}[0] ${RPING_MIP_IP}
107 ${output} VpnOperations.Get Fib Entries session
108 ${resp}= BuiltIn.Should Match Regexp ${output} destPrefix\\":\\"${FIB_ENTRY_2}\\/32".*"${OS_CMP1_IP}\\"
109 Verify Ping To Sub Interface ${FIB_ENTRY_2}
110 ${unconfig_extra_route_ip1} = BuiltIn.Catenate sudo ifconfig ${SUB_IF} down
111 ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET_1_VM_IPS}[0] ${unconfig_extra_route_ip1}
113 Verify ping to subnet gateway
114 [Documentation] Verify ping happens to subnet gateway. To be submitted in next patch
115 [Tags] not-implemented exclude
118 If anything other than subnet ip then no reply
119 [Documentation] If anything other than subnet ip then no reply. To be submitted in next patch
120 [Tags] not-implemented exclude
123 Validate multiple mip migration
124 [Documentation] Validate multiple mip migration. To be submitted in next patch
125 [Tags] not-implemented exclude
128 Same DPN MIP Migration
129 [Documentation] Same DPN MIP Migration. To be submitted in next patch
130 [Tags] not-implemented exclude
135 [Documentation] Suite Setup to create the necessary resources.
136 ... Create three tenant networks with a subnet in each network and an allow-all Security Group.
137 ... In each of the networks, create two ports (i.e., total of 6 ports, two in each network)
138 ... Create two VMs in each network (so total of 6 VMs). VM0_net0 on Compute-0 and VM1_net0 on Compute-1.
139 ... Create a Neutron Router and associate subnet1 and subnet2.
140 ... Create an L3VPN instance and associate the L3VPN instance to the neutron router.
141 VpnOperations.Basic Suite Setup
142 FOR ${network} IN @{NETWORKS}
143 OpenStackOperations.Create Network ${network}
145 ${neutron_networks} = OpenStackOperations.List Networks
146 FOR ${network} IN @{NETWORKS}
147 BuiltIn.Should Contain ${neutron_networks} ${network}
149 ${NET_ID} = OpenStackOperations.Get Net Id @{NETWORKS}[0]
150 BuiltIn.Set Suite Variable ${NET_ID}
151 FOR ${i} IN RANGE 0 3
152 OpenStackOperations.Create SubNet @{NETWORKS}[${i}] @{SUBNETS}[${i}] @{SUBNET_CIDRS}[${i}]
154 ${neutron_subnets} = OpenStackOperations.List Subnets
155 FOR ${subnet} IN @{SUBNETS}
156 BuiltIn.Should Contain ${neutron_subnets} ${subnet}
158 OpenStackOperations.Create Allow All SecurityGroup ${SECURITY_GROUP}
159 OpenStackOperations.Create Port @{NETWORKS}[0] @{PORTS}[0] sg=${SECURITY_GROUP} allowed_address_pairs=@{EXTRA_NW_IP}
160 OpenStackOperations.Create Port @{NETWORKS}[0] @{PORTS}[1] sg=${SECURITY_GROUP} allowed_address_pairs=@{EXTRA_NW_IP}
161 OpenStackOperations.Create Port @{NETWORKS}[1] @{PORTS}[2] sg=${SECURITY_GROUP} allowed_address_pairs=@{EXTRA_NW_IP}
162 OpenStackOperations.Create Port @{NETWORKS}[1] @{PORTS}[3] sg=${SECURITY_GROUP} allowed_address_pairs=@{EXTRA_NW_IP}
163 OpenStackOperations.Create Port @{NETWORKS}[2] @{PORTS}[4] sg=${SECURITY_GROUP} allowed_address_pairs=@{EXTRA_NW_IP}
164 OpenStackOperations.Create Port @{NETWORKS}[2] @{PORTS}[5] sg=${SECURITY_GROUP} allowed_address_pairs=@{EXTRA_NW_IP}
165 Wait Until Keyword Succeeds 3s 1s Check For Elements At URI ${CONFIG_API}/neutron:neutron/ports/ ${PORTS}
166 OpenStackOperations.Create Vm Instance With Port On Compute Node @{PORTS}[0] @{NET_1_VMS}[0] ${OS_CMP1_HOSTNAME} sg=${SECURITY_GROUP}
167 OpenStackOperations.Create Vm Instance With Port On Compute Node @{PORTS}[1] @{NET_1_VMS}[1] ${OS_CMP2_HOSTNAME} sg=${SECURITY_GROUP}
168 OpenStackOperations.Create Vm Instance With Port On Compute Node @{PORTS}[2] @{NET_2_VMS}[0] ${OS_CMP1_HOSTNAME} sg=${SECURITY_GROUP}
169 OpenStackOperations.Create Vm Instance With Port On Compute Node @{PORTS}[3] @{NET_2_VMS}[1] ${OS_CMP2_HOSTNAME} sg=${SECURITY_GROUP}
170 OpenStackOperations.Create Vm Instance With Port On Compute Node @{PORTS}[4] @{NET_3_VMS}[0] ${OS_CMP1_HOSTNAME} sg=${SECURITY_GROUP}
171 OpenStackOperations.Create Vm Instance With Port On Compute Node @{PORTS}[5] @{NET_3_VMS}[1] ${OS_CMP2_HOSTNAME} sg=${SECURITY_GROUP}
172 @{NET_1_VM_IPS} ${NET_1_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_1_VMS}
173 @{NET_2_VM_IPS} ${NET_2_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_2_VMS}
174 @{NET_3_VM_IPS} ${NET_3_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_3_VMS}
175 BuiltIn.Set Suite Variable @{NET_1_VM_IPS}
176 BuiltIn.Set Suite Variable @{NET_2_VM_IPS}
177 BuiltIn.Set Suite Variable @{NET_3_VM_IPS}
178 BuiltIn.Should Not Contain ${NET_1_VM_IPS} None
179 BuiltIn.Should Not Contain ${NET_2_VM_IPS} None
180 BuiltIn.Should Not Contain ${NET_3_VM_IPS} None
181 BuiltIn.Should Not Contain ${NET_1_DHCP_IP} None
182 BuiltIn.Should Not Contain ${NET_2_DHCP_IP} None
183 BuiltIn.Should Not Contain ${NET_3_DHCP_IP} None
184 OpenStackOperations.Create Router ${ROUTER}
185 OpenStackOperations.Add Router Interface ${ROUTER} @{SUBNETS}[1]
186 OpenStackOperations.Add Router Interface ${ROUTER} @{SUBNETS}[2]
187 ${tenant_id} = OpenStackOperations.Get Tenant ID From Network ${NET_ID}
188 VpnOperations.VPN Create L3VPN vpnid=@{VPN_INSTANCE_IDS}[0] name=${VPN_NAMES[0]} rd=${RD1} exportrt=${EXPORT_RT} importrt=${IMPORT_RT} tenantid=${tenant_id}
189 ${resp} = VpnOperations.VPN Get L3VPN vpnid=@{VPN_INSTANCE_IDS}[0]
190 BuiltIn.Should Contain ${resp} @{VPN_INSTANCE_IDS}[0]
191 Associate L3VPN To ROUTER
192 OpenStackOperations.Show Debugs @{NET_1_VMS} @{NET_2_VMS} @{NET_3_VMS}
193 OpenStackOperations.Get Suite Debugs
196 [Documentation] Delete the setup
197 BuiltIn.Run Keyword And Ignore Error VpnOperations.Dissociate L3VPN From Networks networkid=${NET_ID} vpnid=@{VPN_INSTANCE_IDS}[0]
198 BuiltIn.Run Keyword And Ignore Error VpnOperations.Dissociate VPN to Router routerid=${ROUTER_ID} vpnid=@{VPN_INSTANCE_IDS}[0]
199 BuiltIn.Run Keyword And Ignore Error VpnOperations.VPN Delete L3VPN vpnid=@{VPN_INSTANCE_IDS}[0]
200 OpenStackOperations.OpenStack Suite Teardown
202 Associate L3VPN To ROUTER
203 VpnOperations.Associate L3VPN To Network networkid=${NET_ID} vpnid=@{VPN_INSTANCE_IDS}[0]
204 ${resp} = VpnOperations.VPN Get L3VPN vpnid=@{VPN_INSTANCE_IDS}[0]
205 BuiltIn.Should Contain ${resp} ${NET_ID}
206 ${ROUTER_ID} = OpenStackOperations.Get Router Id ${ROUTER}
207 BuiltIn.Set Suite Variable ${ROUTER_ID}
208 VpnOperations.Associate VPN to Router routerid=${ROUTER_ID} vpnid=@{VPN_INSTANCE_IDS}[0]
209 ${resp} = VpnOperations.VPN Get L3VPN vpnid=@{VPN_INSTANCE_IDS}[0]
210 BuiltIn.Should Contain ${resp} ${ROUTER_ID}
212 Verify Ping On Same Networks
213 [Documentation] Verify ping among VM of same network
214 ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET_1_VM_IPS}[0] ping -c 3 @{NET_1_VM_IPS}[1]
215 BuiltIn.Should Contain ${output} ${PING_REGEXP}
216 ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[1] @{NET_2_VM_IPS}[0] ping -c 3 @{NET_2_VM_IPS}[1]
217 BuiltIn.Should Contain ${output} ${PING_REGEXP}
218 ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET_1_VM_IPS}[1] ping -c 3 @{NET_1_VM_IPS}[0]
219 BuiltIn.Should Contain ${output} ${PING_REGEXP}
220 ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[1] @{NET_2_VM_IPS}[1] ping -c 3 @{NET_2_VM_IPS}[0]
221 BuiltIn.Should Contain ${output} ${PING_REGEXP}
222 ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[2] @{NET_3_VM_IPS}[0] ping -c 3 @{NET_3_VM_IPS}[1]
223 BuiltIn.Should Contain ${output} ${PING_REGEXP}
225 Verify Ping On Different Networks
226 [Documentation] Verify ping among VMs of different network
227 ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET_1_VM_IPS}[0] ping -c 3 @{NET_2_VM_IPS}[0]
228 BuiltIn.Should Contain ${output} ${PING_REGEXP}
229 ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[1] @{NET_2_VM_IPS}[0] ping -c 3 @{NET_3_VM_IPS}[0]
230 BuiltIn.Should Contain ${output} ${PING_REGEXP}
231 ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET_1_VM_IPS}[1] ping -c 3 @{NET_2_VM_IPS}[1]
232 BuiltIn.Should Contain ${output} ${PING_REGEXP}
233 ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[1] @{NET_2_VM_IPS}[1] ping -c 3 @{NET_3_VM_IPS}[1]
234 BuiltIn.Should Contain ${output} ${PING_REGEXP}
235 ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[2] @{NET_3_VM_IPS}[0] ping -c 3 @{NET_1_VM_IPS}[1]
236 BuiltIn.Should Contain ${output} ${PING_REGEXP}
238 Verify Flows Are Present
240 [Documentation] Verify Flows Are Present
241 ... Verify that Flows to support L3 Connectivity (like ELAN_SMAC_TABLE, FIB_TABLE)
242 ... and a FIB entry to reach all the VMs in the network exist in the OVS pipeline.
243 ${flow_output}= Utils.Run Command On Remote System ${ip} sudo ovs-ofctl -O OpenFlow13 dump-flows ${INTEGRATION_BRIDGE}
244 BuiltIn.Log ${flow_output}
245 ${resp} = BuiltIn.Should Contain ${flow_output} table=50
246 ${resp} = BuiltIn.Should Contain ${flow_output} table=21,
247 @{vm_ips} = BuiltIn.Create List @{NET_1_VM_IPS} @{NET_2_VM_IPS} @{NET_3_VM_IPS}
248 ${resp} = Should Match regexp ${flow_output} table=0.*goto_table:36
249 ${resp} = Should Match regexp ${flow_output} table=0.*goto_table:17
250 FOR ${ip} IN @{vm_ips}
251 ${resp} = Should Match regexp ${flow_output} table=21.*nw_dst=${ip}
254 Verify Flows Are Present On All Compute Nodes
255 [Documentation] Verify Flows Are Present On All Compute Nodes
256 FOR ${ip} IN @{OS_CMP_IPS}
257 BuiltIn.Wait Until Keyword Succeeds 10s 2s Verify Flows Are Present ${ip}
260 Verify Ping To Sub Interface
261 [Arguments] ${sub_interface_ip}
262 [Documentation] Verify ping to the sub-interface
263 ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET_1_VM_IPS}[0] ping -c 3 ${sub_interface_ip}
264 BuiltIn.Should Contain ${output} ${PING_REGEXP}
265 ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[1] @{NET_2_VM_IPS}[0] ping -c 3 ${sub_interface_ip}
266 BuiltIn.Should Contain ${output} ${PING_REGEXP}
267 ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[2] @{NET_3_VM_IPS}[0] ping -c 3 ${sub_interface_ip}
268 BuiltIn.Should Contain ${output} ${PING_REGEXP}
271 [Arguments] ${ip} ${session}
272 [Documentation] Check that sub interface ip has been learnt after ARP request
273 ${resp} RequestsLibrary.Get Request ${session} /restconf/operational/odl-l3vpn:learnt-vpn-vip-to-port-data/
274 BuiltIn.Log ${resp.content}
275 BuiltIn.Should Contain ${resp.content} ${ip}
278 Fail "Not implemented"