2 Documentation Test suite to validate IPv6 vpnservice functionality in an Openstack integrated environment.
3 ... The assumption of this suite is that the environment is already configured with the proper
4 ... integration bridges and vxlan tunnels.
6 Library OperatingSystem
7 Library RequestsLibrary
8 Resource ../../../libraries/CompareStream.robot
9 Resource ../../../libraries/Utils.robot
10 Resource ../../../libraries/OpenStackOperations.robot
11 Resource ../../../libraries/DevstackUtils.robot
12 Resource ../../../libraries/VpnOperations.robot
13 Resource ../../../libraries/OVSDB.robot
14 Resource ../../../libraries/SetupUtils.robot
15 Resource ../../../libraries/Tcpdump.robot
16 Resource ../../../variables/Variables.robot
17 Resource ../../../variables/netvirt/Variables.robot
19 Suite Setup Suite Setup
20 Suite Teardown Suite Teardown
21 Test Setup SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
22 Test Teardown OpenStackOperations.Get Test Teardown Debugs
26 ${SECURITY_GROUP} vpn6_sg
27 @{NETWORKS} vpn6_net_1 vpn6_net_2
28 @{SUBNETS} vpn6_sub_1 vpn6_sub_2
29 @{SUBNET_CIDRS} 2001:db8:0:2::/64 2001:db8:0:3::/64
30 @{PORTS} vpn6_net_1_port_1 vpn6_net_1_port_2 vpn6_net_2_port_1 vpn6_net_2_port_2
31 @{NET_1_VMS} vpn6_net_1_vm_1 vpn6_net_1_vm_2
32 @{NET_2_VMS} vpn6_net_2_vm_1 vpn6_net_2_vm_2
34 @{EXTRA_NW_IP} 2001:db9:cafe:d::10 2001:db9:abcd:d::20
35 @{EXTRA_NW_SUBNET} 2001:db9:cafe:d::/64 2001:db9:abcd:d::/64
36 ${UPDATE_NETWORK} UpdateNetworkV6
37 ${UPDATE_SUBNET} UpdateSubnetV6
38 ${UPDATE_PORT} UpdatePortV6
40 ... 4ae8cd92-48ca-49b5-94e1-b2921a261661
41 ... 4ae8cd92-48ca-49b5-94e1-b2921a261662
42 ... 4ae8cd92-48ca-49b5-94e1-b2921a261663
43 @{VPN_NAMES} vpn6_1 vpn6_2 vpn6_3
44 @{RDS} ["2206:2"] ["2306:2"] ["2406:2"]
48 Check ELAN Datapath Traffic Within The Networks
49 ${output} = OpenStackOperations.Execute Command on VM Instance
52 ... ping6 -c 3 ${VM_IP_NET10}[1]
53 BuiltIn.Should Contain ${output} 64 bytes
54 ${output} = OpenStackOperations.Execute Command on VM Instance
57 ... ping6 -c 3 ${VM_IP_NET20}[1]
58 BuiltIn.Should Contain ${output} 64 bytes
60 Check L3_Datapath Traffic Across Networks With Router
61 BuiltIn.Log Verification of FIB Entries and Flow
62 @{tcpdump_conn_ids} = OpenStackOperations.Start Packet Capture On Nodes
66 ${vm_ips} = BuiltIn.Create List @{VM_IP_NET10} @{VM_IP_NET20}
67 BuiltIn.Wait Until Keyword Succeeds
70 ... Utils.Check For Elements At URI
73 BuiltIn.Wait Until Keyword Succeeds
76 ... VpnOperations.Verify Flows Are Present For L3VPN
79 BuiltIn.Wait Until Keyword Succeeds
82 ... VpnOperations.Verify Flows Are Present For L3VPN
85 BuiltIn.Wait Until Keyword Succeeds 30s 10s VpnOperations.Verify GWMAC Entry On ODL ${GWMAC_ADDRS}
86 Verify GWMAC Flow Entry On Flow Table On All Compute Nodes ipv6
87 ${dst_ip_list} = BuiltIn.Create List ${VM_IP_NET10}[1] @{VM_IP_NET20}
88 OpenStackOperations.Test Operations From Vm Instance ${NETWORKS}[0] ${VM_IP_NET10}[0] ${dst_ip_list}
89 ${dst_ip_list} = BuiltIn.Create List ${VM_IP_NET20}[1] @{VM_IP_NET10}
90 OpenStackOperations.Test Operations From Vm Instance ${NETWORKS}[1] ${VM_IP_NET20}[0] ${dst_ip_list}
91 [Teardown] VpnOperations.Test Teardown With Tcpdump Stop ${tcpdump_conn_ids}
93 Add Multiple Extra Routes And Check Datapath Before L3VPN Creation
94 ${CONFIG_EXTRA_ROUTE_IP1} = BuiltIn.Catenate sudo ip -6 addr add ${EXTRA_NW_IP}[0]/64 dev eth0
95 ${output} = OpenStackOperations.Execute Command on VM Instance
98 ... ${CONFIG_EXTRA_ROUTE_IP1}
99 ${output} = OpenStackOperations.Execute Command on VM Instance ${NETWORKS}[0] ${VM_IP_NET10}[0] ip -6 a
100 ${CONFIG_EXTRA_ROUTE_IP2} = BuiltIn.Catenate sudo ip -6 addr add ${EXTRA_NW_IP}[1]/64 dev eth0
101 ${output} = OpenStackOperations.Execute Command on VM Instance
103 ... ${VM_IP_NET10}[0]
104 ... ${CONFIG_EXTRA_ROUTE_IP2}
105 ${output} = OpenStackOperations.Execute Command on VM Instance ${NETWORKS}[0] ${VM_IP_NET10}[0] ip -6 a
106 ${EXT_RT1} = Set Variable destination=${EXTRA_NW_SUBNET}[0],gateway=${VM_IP_NET10}[0]
107 ${EXT_RT2} = Set Variable destination=${EXTRA_NW_SUBNET}[1],gateway=${VM_IP_NET10}[0]
108 ${cmd} = BuiltIn.Catenate ${RT_OPTIONS} ${EXT_RT1} ${RT_OPTIONS} ${EXT_RT2}
109 OpenStackOperations.Update Router ${ROUTER} ${cmd}
110 OpenStackOperations.Show Router ${ROUTER}
111 ${vm_ips} = BuiltIn.Create List @{EXTRA_NW_SUBNET}
112 BuiltIn.Wait Until Keyword Succeeds
115 ... Utils.Check For Elements At URI
118 ${output} = OpenStackOperations.Execute Command on VM Instance
120 ... ${VM_IP_NET10}[1]
121 ... ping6 -c 3 ${EXTRA_NW_IP}[1]
122 BuiltIn.Should Contain ${output} 64 bytes
123 ${output} = OpenStackOperations.Execute Command on VM Instance
125 ... ${VM_IP_NET20}[1]
126 ... ping6 -c 3 ${EXTRA_NW_IP}[1]
127 BuiltIn.Should Contain ${output} 64 bytes
128 ${output} = OpenStackOperations.Execute Command on VM Instance
130 ... ${VM_IP_NET10}[1]
131 ... ping6 -c 3 ${EXTRA_NW_IP}[0]
132 BuiltIn.Should Contain ${output} 64 bytes
135 OpenStackOperations.Update Router ${ROUTER} ${RT_CLEAR}
136 OpenStackOperations.Show Router ${ROUTER}
138 Delete And Recreate Extra Route
139 [Documentation] Recreate multiple extra route and check data path before L3VPN creation
140 ${CONFIG_EXTRA_ROUTE_IP1} = BuiltIn.Catenate sudo ip -6 addr add ${EXTRA_NW_IP}[1]/64 dev eth0
141 ${output} = OpenStackOperations.Execute Command on VM Instance
143 ... ${VM_IP_NET10}[0]
144 ... ${CONFIG_EXTRA_ROUTE_IP1}
145 ${EXT_RT1} = Set Variable destination=${EXTRA_NW_SUBNET}[0],gateway=${VM_IP_NET10}[0]
146 ${cmd} = BuiltIn.Catenate ${RT_OPTIONS} ${EXT_RT1}
147 OpenStackOperations.Update Router ${ROUTER} ${cmd}
148 OpenStackOperations.Show Router ${ROUTER}
149 ${output} = OpenStackOperations.Execute Command on VM Instance
151 ... ${VM_IP_NET10}[1]
152 ... ping6 -c 3 ${EXTRA_NW_IP}[0]
153 BuiltIn.Should Contain ${output} 64 bytes
154 # clear off extra-routes before the next set of tests
155 [Teardown] BuiltIn.Run Keywords OpenStackOperations.Update Router ${ROUTER} ${RT_CLEAR}
156 ... AND OpenStackOperations.Show Router ${ROUTER}
157 ... AND OpenStackOperations.Get Test Teardown Debugs
160 ${net_id} = OpenStackOperations.Get Net Id ${NETWORKS}[0]
161 ${tenant_id} = OpenStackOperations.Get Tenant ID From Network ${net_id}
162 VpnOperations.VPN Create L3VPN
163 ... vpnid=${VPN_INSTANCE_IDS}[0]
164 ... name=${VPN_NAMES}[0]
166 ... exportrt=${RDS}[0]
167 ... importrt=${RDS}[0]
168 ... tenantid=${tenant_id}
169 ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_IDS}[0]
170 BuiltIn.Should Contain ${resp} ${VPN_INSTANCE_IDS}[0]
172 Associate L3VPN To Routers
173 ${router_id} = OpenStackOperations.Get Router Id ${ROUTER}
174 VpnOperations.Associate VPN to Router routerid=${router_id} vpnid=${VPN_INSTANCE_IDS}[0]
175 ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_IDS}[0]
176 BuiltIn.Should Contain ${resp} ${router_id}
178 Verify L3VPN Datapath With Router Association
179 BuiltIn.Log Verify VPN interfaces, FIB entries and Flow table
180 ${vm_ips} = BuiltIn.Create List @{VM_IP_NET10} @{VM_IP_NET20}
181 CompareStream.Run_Keyword_If_Less_Than_Magnesium
182 ... BuiltIn.Wait Until Keyword Succeeds
185 ... Utils.Check For Elements At URI
186 ... ${VPN_IFACES_URL}
188 CompareStream.Run_Keyword_If_At_Least_Magnesium
189 ... BuiltIn.Wait Until Keyword Succeeds
192 ... Utils.Check For Elements At URI
193 ... ${VPN_INST_IFACES_URL}
195 ${RD} = Strip String ${RDS}[0] characters="[]
196 BuiltIn.Wait Until Keyword Succeeds
199 ... Utils.Check For Elements At URI
200 ... ${CONFIG_API}/odl-fib:fibEntries/vrfTables/${RD}/
202 Verify Flows Are Present For L3VPN On All Compute Nodes ${vm_ips}
203 BuiltIn.Wait Until Keyword Succeeds 30s 10s VpnOperations.Verify GWMAC Entry On ODL ${GWMAC_ADDRS}
204 Verify GWMAC Flow Entry On Flow Table On All Compute Nodes ipv6
205 BuiltIn.Log Check datapath from network1 to network2
206 ${dst_ip_list} = BuiltIn.Create List ${VM_IP_NET10}[1] @{VM_IP_NET20}
207 OpenStackOperations.Test Operations From Vm Instance ${NETWORKS}[0] ${VM_IP_NET10}[0] ${dst_ip_list}
208 BuiltIn.Log Check datapath from network2 to network1
209 ${dst_ip_list} = BuiltIn.Create List ${VM_IP_NET20}[1] @{VM_IP_NET10}
210 OpenStackOperations.Test Operations From Vm Instance ${NETWORKS}[1] ${VM_IP_NET20}[0] ${dst_ip_list}
212 Dissociate L3VPN From Routers
213 ${router_id} = OpenStackOperations.Get Router Id ${ROUTER}
214 VpnOperations.Dissociate VPN to Router routerid=${router_id} vpnid=${VPN_INSTANCE_IDS}[0]
215 ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_IDS}[0]
216 BuiltIn.Should Not Contain ${resp} ${router_id}
218 Delete Router And Router Interfaces With L3VPN
219 ${router_id} = OpenStackOperations.Get Router Id ${ROUTER}
220 VpnOperations.Associate VPN to Router routerid=${router_id} vpnid=${VPN_INSTANCE_IDS}[0]
221 ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_IDS}[0]
222 BuiltIn.Should Contain ${resp} ${router_id}
223 FOR ${INTERFACE} IN @{SUBNETS}
224 OpenStackOperations.Remove Interface ${ROUTER} ${INTERFACE}
226 ${interface_output} = OpenStackOperations.Show Router Interface ${ROUTER}
227 FOR ${INTERFACE} IN @{SUBNETS}
228 ${subnet_id} = OpenStackOperations.Get Subnet Id ${INTERFACE}
229 BuiltIn.Should Not Contain ${interface_output} ${subnet_id}
231 OpenStackOperations.Delete Router ${ROUTER}
232 ${router_output} = OpenStackOperations.List Routers
233 BuiltIn.Should Not Contain ${router_output} ${ROUTER}
234 @{router_list} = BuiltIn.Create List ${ROUTER}
235 BuiltIn.Wait Until Keyword Succeeds
238 ... Utils.Check For Elements Not At URI
241 ... check_for_null=True
242 ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_IDS}[0]
243 BuiltIn.Should Not Contain ${resp} ${router_id}
244 Verify GWMAC Flow Entry Removed From Flow Table On All Compute Nodes
246 Delete Router With NonExistentRouter Name
247 ${result} = Process.Run Process openstack router delete nonExistentRouter shell=True
248 BuiltIn.Log ${result.stdout}
249 BuiltIn.Log ${result.stderr}
250 BuiltIn.Should Be True '${result.rc}' == '1'
251 BuiltIn.Should Match Regexp
253 ... Failed to delete router with name or ID 'nonExistentRouter': No Router found for nonExistentRouter
256 VpnOperations.VPN Delete L3VPN vpnid=${VPN_INSTANCE_IDS}[0]
258 Create Multiple L3VPN
259 ${net_id} = Get Net Id ${NETWORKS}[0]
260 ${tenant_id} = Get Tenant ID From Network ${net_id}
261 VpnOperations.VPN Create L3VPN
262 ... vpnid=${VPN_INSTANCE_IDS}[0]
263 ... name=${VPN_NAMES}[0]
265 ... exportrt=${RDS}[0]
266 ... importrt=${RDS}[0]
267 ... tenantid=${tenant_id}
268 VpnOperations.VPN Create L3VPN
269 ... vpnid=${VPN_INSTANCE_IDS}[1]
270 ... name=${VPN_NAMES}[1]
272 ... exportrt=${RDS}[1]
273 ... importrt=${RDS}[1]
274 ... tenantid=${tenant_id}
275 VpnOperations.VPN Create L3VPN
276 ... vpnid=${VPN_INSTANCE_IDS}[2]
277 ... name=${VPN_NAMES}[2]
279 ... exportrt=${RDS}[2]
280 ... importrt=${RDS}[2]
281 ... tenantid=${tenant_id}
282 ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_IDS}[0]
283 BuiltIn.Should Contain ${resp} ${VPN_INSTANCE_IDS}[0]
284 ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_IDS}[1]
285 BuiltIn.Should Contain ${resp} ${VPN_INSTANCE_IDS}[1]
286 ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_IDS}[2]
287 BuiltIn.Should Contain ${resp} ${VPN_INSTANCE_IDS}[2]
292 VpnOperations.Basic Suite Setup
293 OpenStackOperations.Create Network ${NETWORKS}[0]
294 OpenStackOperations.Create Network ${NETWORKS}[1]
295 BuiltIn.Wait Until Keyword Succeeds 3s 1s Utils.Check For Elements At URI ${NETWORK_URL} ${NETWORKS}
296 OpenStackOperations.Update Network ${NETWORKS}[0] additional_args=--description ${UPDATE_NETWORK}
297 ${output} = OpenStackOperations.Show Network ${NETWORKS}[0]
298 BuiltIn.Should Contain ${output} ${UPDATE_NETWORK}
299 ${net1_additional_args} = BuiltIn.Catenate
300 ... --ip-version=6 --ipv6-address-mode=slaac --ipv6-ra-mode=slaac ${NET1_IPV6_ADDR_POOL}
301 ${net2_additional_args} = BuiltIn.Catenate
302 ... --ip-version=6 --ipv6-address-mode=slaac --ipv6-ra-mode=slaac ${NET2_IPV6_ADDR_POOL}
303 OpenStackOperations.Create SubNet
306 ... ${SUBNET_CIDRS}[0]
307 ... ${net1_additional_args}
308 OpenStackOperations.Create SubNet
311 ... ${SUBNET_CIDRS}[1]
312 ... ${net2_additional_args}
313 BuiltIn.Wait Until Keyword Succeeds
316 ... Utils.Check For Elements At URI
317 ... ${SUBNETWORK_URL}
319 OpenStackOperations.Update SubNet ${SUBNETS}[0] additional_args=--description ${UPDATE_SUBNET}
320 ${output} = OpenStackOperations.Show SubNet ${SUBNETS}[0]
321 BuiltIn.Should Contain ${output} ${UPDATE_SUBNET}
322 OpenStackOperations.Create Router ${ROUTER}
323 ${router_list} = BuiltIn.Create List ${ROUTER}
324 BuiltIn.Wait Until Keyword Succeeds
327 ... Utils.Check For Elements At URI
330 FOR ${interface} IN @{SUBNETS}
331 OpenStackOperations.Add Router Interface ${ROUTER} ${interface}
333 ${interface_output} = OpenStackOperations.Show Router Interface ${ROUTER}
334 FOR ${interface} IN @{SUBNETS}
335 ${subnet_id} = OpenStackOperations.Get Subnet Id ${interface}
336 BuiltIn.Should Contain ${interface_output} ${subnet_id}
338 ${GWMAC_ADDRS} ${GWIP_ADDRS} = VpnOperations.Get Gateway MAC And IP Address ${ROUTER} ${IP6_REGEX}
339 BuiltIn.Set Suite Variable ${GWMAC_ADDRS}
340 BuiltIn.Set Suite Variable ${GWIP_ADDRS}
341 OpenStackOperations.Create Allow All SecurityGroup ${SECURITY_GROUP} IPv6
342 ${allowed_address_pairs_args} = BuiltIn.Set Variable
343 ... --allowed-address ip-address=${EXTRA_NW_SUBNET}[0] --allowed-address ip-address=${EXTRA_NW_SUBNET}[1]
347 ... sg=${SECURITY_GROUP}
348 ... additional_args=${allowed_address_pairs_args}
352 ... sg=${SECURITY_GROUP}
353 ... additional_args=${allowed_address_pairs_args}
357 ... sg=${SECURITY_GROUP}
358 ... additional_args=${allowed_address_pairs_args}
362 ... sg=${SECURITY_GROUP}
363 ... additional_args=${allowed_address_pairs_args}
364 BuiltIn.Wait Until Keyword Succeeds 3s 1s Check For Elements At URI ${PORT_URL} ${PORTS}
365 OpenStackOperations.Update Port ${PORTS}[0] additional_args=--name ${UPDATE_PORT}
366 ${output} = Show Port ${UPDATE_PORT}
367 BuiltIn.Should Contain ${output} ${UPDATE_PORT}
368 OpenStackOperations.Update Port ${UPDATE_PORT} additional_args=--name ${PORTS}[0]
369 OpenStackOperations.Create Vm Instance With Port On Compute Node
372 ... ${OS_CMP1_HOSTNAME}
373 ... sg=${SECURITY_GROUP}
374 OpenStackOperations.Create Vm Instance With Port On Compute Node
377 ... ${OS_CMP2_HOSTNAME}
378 ... sg=${SECURITY_GROUP}
379 OpenStackOperations.Create Vm Instance With Port On Compute Node
382 ... ${OS_CMP1_HOSTNAME}
383 ... sg=${SECURITY_GROUP}
384 OpenStackOperations.Create Vm Instance With Port On Compute Node
387 ... ${OS_CMP2_HOSTNAME}
388 ... sg=${SECURITY_GROUP}
389 ${vms} = BuiltIn.Create List @{NET_1_VMS} @{NET_2_VMS}
391 OpenStackOperations.Poll VM Is ACTIVE ${vm}
393 BuiltIn.Wait Until Keyword Succeeds 30s 10s Wait For Routes To Propogate ${NETWORKS} ${SUBNET_CIDRS}
394 ${prefix_net10} = Replace String ${SUBNET_CIDRS}[0] ::/64 (:[a-f0-9]{,4}){,4}
395 ${status} ${message} = Run Keyword And Ignore Error
396 ... BuiltIn.Wait Until Keyword Succeeds
399 ... OpenStackOperations.Collect VM IPv6 SLAAC Addresses
400 ... fail_on_none=true
401 ... vm_list=${NET_1_VMS}
402 ... network=${NETWORKS}[0]
403 ... subnet=${prefix_net10}
404 ${prefix_net20} = Replace String ${SUBNET_CIDRS}[1] ::/64 (:[a-f0-9]{,4}){,4}
405 ${status} ${message} = Run Keyword And Ignore Error
406 ... BuiltIn.Wait Until Keyword Succeeds
409 ... OpenStackOperations.Collect VM IPv6 SLAAC Addresses
410 ... fail_on_none=true
411 ... vm_list=${NET_2_VMS}
412 ... network=${NETWORKS}[1]
413 ... subnet=${prefix_net20}
414 ${VM_IP_NET10} = OpenStackOperations.Collect VM IPv6 SLAAC Addresses
415 ... fail_on_none=false
416 ... vm_list=${NET_1_VMS}
417 ... network=${NETWORKS}[0]
418 ... subnet=${prefix_net10}
419 ${VM_IP_NET20} = OpenStackOperations.Collect VM IPv6 SLAAC Addresses
420 ... fail_on_none=false
421 ... vm_list=${NET_2_VMS}
422 ... network=${NETWORKS}[1]
423 ... subnet=${prefix_net20}
424 ${VM_INSTANCES} = Collections.Combine Lists ${NET_1_VMS} ${NET_2_VMS}
425 ${VM_IPS} = Collections.Combine Lists ${VM_IP_NET10} ${VM_IP_NET20}
426 ${LOOP_COUNT} = BuiltIn.Get Length ${NET_1_VMS}
427 FOR ${index} IN RANGE 0 ${LOOP_COUNT}
428 ${status} ${message} = Run Keyword And Ignore Error
429 ... BuiltIn.Should Not Contain
430 ... ${VM_IPS}[${index}]
432 IF '${status}' == 'FAIL'
433 OpenStack CLI openstack console log show ${VM_INSTANCES}[${index}] 30s
436 OpenStackOperations.Copy DHCP Files From Control Node
437 BuiltIn.Set Suite Variable ${VM_IP_NET10}
438 BuiltIn.Set Suite Variable ${VM_IP_NET20}
439 BuiltIn.Should Not Contain ${VM_IP_NET10} None
440 BuiltIn.Should Not Contain ${VM_IP_NET20} None
441 OpenStackOperations.Show Debugs @{NET_1_VMS} @{NET_2_VMS}
442 OpenStackOperations.Get Suite Debugs
445 [Documentation] Delete the setup
446 BuiltIn.Run Keyword And Ignore Error VpnOperations.VPN Delete L3VPN vpnid=${VPN_INSTANCE_IDS}[0]
447 BuiltIn.Run Keyword And Ignore Error VpnOperations.VPN Delete L3VPN vpnid=${VPN_INSTANCE_IDS}[1]
448 BuiltIn.Run Keyword And Ignore Error VpnOperations.VPN Delete L3VPN vpnid=${VPN_INSTANCE_IDS}[2]
449 OpenStackOperations.OpenStack Suite Teardown