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}
144 ${neutron_networks} = OpenStackOperations.List Networks
145 : FOR ${network} IN @{NETWORKS}
146 \ BuiltIn.Should Contain ${neutron_networks} ${network}
147 ${NET_ID} = OpenStackOperations.Get Net Id @{NETWORKS}[0]
148 BuiltIn.Set Suite Variable ${NET_ID}
149 : FOR ${i} IN RANGE 0 3
150 \ OpenStackOperations.Create SubNet @{NETWORKS}[${i}] @{SUBNETS}[${i}] @{SUBNET_CIDRS}[${i}]
151 ${neutron_subnets} = OpenStackOperations.List Subnets
152 : FOR ${subnet} IN @{SUBNETS}
153 \ BuiltIn.Should Contain ${neutron_subnets} ${subnet}
154 OpenStackOperations.Create Allow All SecurityGroup ${SECURITY_GROUP}
155 OpenStackOperations.Create Port @{NETWORKS}[0] @{PORTS}[0] sg=${SECURITY_GROUP} allowed_address_pairs=@{EXTRA_NW_IP}
156 OpenStackOperations.Create Port @{NETWORKS}[0] @{PORTS}[1] sg=${SECURITY_GROUP} allowed_address_pairs=@{EXTRA_NW_IP}
157 OpenStackOperations.Create Port @{NETWORKS}[1] @{PORTS}[2] sg=${SECURITY_GROUP} allowed_address_pairs=@{EXTRA_NW_IP}
158 OpenStackOperations.Create Port @{NETWORKS}[1] @{PORTS}[3] sg=${SECURITY_GROUP} allowed_address_pairs=@{EXTRA_NW_IP}
159 OpenStackOperations.Create Port @{NETWORKS}[2] @{PORTS}[4] sg=${SECURITY_GROUP} allowed_address_pairs=@{EXTRA_NW_IP}
160 OpenStackOperations.Create Port @{NETWORKS}[2] @{PORTS}[5] sg=${SECURITY_GROUP} allowed_address_pairs=@{EXTRA_NW_IP}
161 Wait Until Keyword Succeeds 3s 1s Check For Elements At URI ${CONFIG_API}/neutron:neutron/ports/ ${PORTS}
162 OpenStackOperations.Create Vm Instance With Port On Compute Node @{PORTS}[0] @{NET_1_VMS}[0] ${OS_CMP1_HOSTNAME} sg=${SECURITY_GROUP}
163 OpenStackOperations.Create Vm Instance With Port On Compute Node @{PORTS}[1] @{NET_1_VMS}[1] ${OS_CMP2_HOSTNAME} sg=${SECURITY_GROUP}
164 OpenStackOperations.Create Vm Instance With Port On Compute Node @{PORTS}[2] @{NET_2_VMS}[0] ${OS_CMP1_HOSTNAME} sg=${SECURITY_GROUP}
165 OpenStackOperations.Create Vm Instance With Port On Compute Node @{PORTS}[3] @{NET_2_VMS}[1] ${OS_CMP2_HOSTNAME} sg=${SECURITY_GROUP}
166 OpenStackOperations.Create Vm Instance With Port On Compute Node @{PORTS}[4] @{NET_3_VMS}[0] ${OS_CMP1_HOSTNAME} sg=${SECURITY_GROUP}
167 OpenStackOperations.Create Vm Instance With Port On Compute Node @{PORTS}[5] @{NET_3_VMS}[1] ${OS_CMP2_HOSTNAME} sg=${SECURITY_GROUP}
168 @{NET_1_VM_IPS} ${NET_1_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_1_VMS}
169 @{NET_2_VM_IPS} ${NET_2_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_2_VMS}
170 @{NET_3_VM_IPS} ${NET_3_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_3_VMS}
171 BuiltIn.Set Suite Variable @{NET_1_VM_IPS}
172 BuiltIn.Set Suite Variable @{NET_2_VM_IPS}
173 BuiltIn.Set Suite Variable @{NET_3_VM_IPS}
174 BuiltIn.Should Not Contain ${NET_1_VM_IPS} None
175 BuiltIn.Should Not Contain ${NET_2_VM_IPS} None
176 BuiltIn.Should Not Contain ${NET_3_VM_IPS} None
177 BuiltIn.Should Not Contain ${NET_1_DHCP_IP} None
178 BuiltIn.Should Not Contain ${NET_2_DHCP_IP} None
179 BuiltIn.Should Not Contain ${NET_3_DHCP_IP} None
180 OpenStackOperations.Create Router ${ROUTER}
181 OpenStackOperations.Add Router Interface ${ROUTER} @{SUBNETS}[1]
182 OpenStackOperations.Add Router Interface ${ROUTER} @{SUBNETS}[2]
183 ${tenant_id} = OpenStackOperations.Get Tenant ID From Network ${NET_ID}
184 VpnOperations.VPN Create L3VPN vpnid=@{VPN_INSTANCE_IDS}[0] name=${VPN_NAMES[0]} rd=${RD1} exportrt=${EXPORT_RT} importrt=${IMPORT_RT} tenantid=${tenant_id}
185 ${resp} = VpnOperations.VPN Get L3VPN vpnid=@{VPN_INSTANCE_IDS}[0]
186 BuiltIn.Should Contain ${resp} @{VPN_INSTANCE_IDS}[0]
187 Associate L3VPN To ROUTER
188 OpenStackOperations.Show Debugs @{NET_1_VMS} @{NET_2_VMS} @{NET_3_VMS}
189 OpenStackOperations.Get Suite Debugs
192 [Documentation] Delete the setup
193 BuiltIn.Run Keyword And Ignore Error VpnOperations.Dissociate L3VPN From Networks networkid=${NET_ID} vpnid=@{VPN_INSTANCE_IDS}[0]
194 BuiltIn.Run Keyword And Ignore Error VpnOperations.Dissociate VPN to Router routerid=${ROUTER_ID} vpnid=@{VPN_INSTANCE_IDS}[0]
195 BuiltIn.Run Keyword And Ignore Error VpnOperations.VPN Delete L3VPN vpnid=@{VPN_INSTANCE_IDS}[0]
196 OpenStackOperations.OpenStack Suite Teardown
198 Associate L3VPN To ROUTER
199 VpnOperations.Associate L3VPN To Network networkid=${NET_ID} vpnid=@{VPN_INSTANCE_IDS}[0]
200 ${resp} = VpnOperations.VPN Get L3VPN vpnid=@{VPN_INSTANCE_IDS}[0]
201 BuiltIn.Should Contain ${resp} ${NET_ID}
202 ${ROUTER_ID} = OpenStackOperations.Get Router Id ${ROUTER}
203 BuiltIn.Set Suite Variable ${ROUTER_ID}
204 VpnOperations.Associate VPN to Router routerid=${ROUTER_ID} vpnid=@{VPN_INSTANCE_IDS}[0]
205 ${resp} = VpnOperations.VPN Get L3VPN vpnid=@{VPN_INSTANCE_IDS}[0]
206 BuiltIn.Should Contain ${resp} ${ROUTER_ID}
208 Verify Ping On Same Networks
209 [Documentation] Verify ping among VM of same network
210 ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET_1_VM_IPS}[0] ping -c 3 @{NET_1_VM_IPS}[1]
211 BuiltIn.Should Contain ${output} ${PING_REGEXP}
212 ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[1] @{NET_2_VM_IPS}[0] ping -c 3 @{NET_2_VM_IPS}[1]
213 BuiltIn.Should Contain ${output} ${PING_REGEXP}
214 ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET_1_VM_IPS}[1] ping -c 3 @{NET_1_VM_IPS}[0]
215 BuiltIn.Should Contain ${output} ${PING_REGEXP}
216 ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[1] @{NET_2_VM_IPS}[1] ping -c 3 @{NET_2_VM_IPS}[0]
217 BuiltIn.Should Contain ${output} ${PING_REGEXP}
218 ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[2] @{NET_3_VM_IPS}[0] ping -c 3 @{NET_3_VM_IPS}[1]
219 BuiltIn.Should Contain ${output} ${PING_REGEXP}
221 Verify Ping On Different Networks
222 [Documentation] Verify ping among VMs of different network
223 ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET_1_VM_IPS}[0] ping -c 3 @{NET_2_VM_IPS}[0]
224 BuiltIn.Should Contain ${output} ${PING_REGEXP}
225 ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[1] @{NET_2_VM_IPS}[0] ping -c 3 @{NET_3_VM_IPS}[0]
226 BuiltIn.Should Contain ${output} ${PING_REGEXP}
227 ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET_1_VM_IPS}[1] ping -c 3 @{NET_2_VM_IPS}[1]
228 BuiltIn.Should Contain ${output} ${PING_REGEXP}
229 ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[1] @{NET_2_VM_IPS}[1] ping -c 3 @{NET_3_VM_IPS}[1]
230 BuiltIn.Should Contain ${output} ${PING_REGEXP}
231 ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[2] @{NET_3_VM_IPS}[0] ping -c 3 @{NET_1_VM_IPS}[1]
232 BuiltIn.Should Contain ${output} ${PING_REGEXP}
234 Verify Flows Are Present
236 [Documentation] Verify Flows Are Present
237 ... Verify that Flows to support L3 Connectivity (like ELAN_SMAC_TABLE, FIB_TABLE)
238 ... and a FIB entry to reach all the VMs in the network exist in the OVS pipeline.
239 ${flow_output}= Utils.Run Command On Remote System ${ip} sudo ovs-ofctl -O OpenFlow13 dump-flows ${INTEGRATION_BRIDGE}
240 BuiltIn.Log ${flow_output}
241 ${resp} = BuiltIn.Should Contain ${flow_output} table=50
242 ${resp} = BuiltIn.Should Contain ${flow_output} table=21,
243 @{vm_ips} = BuiltIn.Create List @{NET_1_VM_IPS} @{NET_2_VM_IPS} @{NET_3_VM_IPS}
244 ${resp} = Should Match regexp ${flow_output} table=0.*goto_table:36
245 ${resp} = Should Match regexp ${flow_output} table=0.*goto_table:17
246 : FOR ${ip} IN @{vm_ips}
247 \ ${resp} = Should Match regexp ${flow_output} table=21.*nw_dst=${ip}
249 Verify Flows Are Present On All Compute Nodes
250 [Documentation] Verify Flows Are Present On All Compute Nodes
251 : FOR ${ip} IN @{OS_CMP_IPS}
252 \ BuiltIn.Wait Until Keyword Succeeds 10s 2s Verify Flows Are Present ${ip}
254 Verify Ping To Sub Interface
255 [Arguments] ${sub_interface_ip}
256 [Documentation] Verify ping to the sub-interface
257 ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET_1_VM_IPS}[0] ping -c 3 ${sub_interface_ip}
258 BuiltIn.Should Contain ${output} ${PING_REGEXP}
259 ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[1] @{NET_2_VM_IPS}[0] ping -c 3 ${sub_interface_ip}
260 BuiltIn.Should Contain ${output} ${PING_REGEXP}
261 ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[2] @{NET_3_VM_IPS}[0] ping -c 3 ${sub_interface_ip}
262 BuiltIn.Should Contain ${output} ${PING_REGEXP}
265 [Arguments] ${ip} ${session}
266 [Documentation] Check that sub interface ip has been learnt after ARP request
267 ${resp} RequestsLibrary.Get Request ${session} /restconf/operational/odl-l3vpn:learnt-vpn-vip-to-port-data/
268 BuiltIn.Log ${resp.content}
269 BuiltIn.Should Contain ${resp.content} ${ip}
272 Fail "Not implemented"