*** Settings ***
-Documentation Test suite to validate dualstack (IPv4 + IPv6) vpnservice functionality in an Openstack
-... integrated environment.
-... The assumption of this suite is that the environment is already configured with the proper
-... integration bridges and vxlan tunnels.
-Suite Setup Suite Setup
-Suite Teardown Suite Teardown
-Test Setup SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
-Test Teardown OpenStackOperations.Get Test Teardown Debugs
-Library Collections
-Library OperatingSystem
-Library RequestsLibrary
-Resource ../../../libraries/Utils.robot
-Resource ../../../libraries/OpenStackOperations.robot
-Resource ../../../libraries/DevstackUtils.robot
-Resource ../../../libraries/VpnOperations.robot
-Resource ../../../libraries/OVSDB.robot
-Resource ../../../libraries/SetupUtils.robot
-Resource ../../../libraries/Tcpdump.robot
-Resource ../../../variables/Variables.robot
-Resource ../../../variables/netvirt/Variables.robot
+Documentation Test suite to validate dualstack (IPv4 + IPv6) vpnservice functionality in an Openstack
+... integrated environment.
+... The assumption of this suite is that the environment is already configured with the proper
+... integration bridges and vxlan tunnels.
+
+Library Collections
+Library OperatingSystem
+Library RequestsLibrary
+Resource ../../../libraries/Utils.robot
+Resource ../../../libraries/OpenStackOperations.robot
+Resource ../../../libraries/DevstackUtils.robot
+Resource ../../../libraries/VpnOperations.robot
+Resource ../../../libraries/OVSDB.robot
+Resource ../../../libraries/SetupUtils.robot
+Resource ../../../libraries/Tcpdump.robot
+Resource ../../../variables/Variables.robot
+Resource ../../../variables/netvirt/Variables.robot
+
+Suite Setup Suite Setup
+Suite Teardown Suite Teardown
+Test Setup SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
+Test Teardown OpenStackOperations.Get Test Teardown Debugs
+
*** Variables ***
-${SECURITY_GROUP} vpn_sg_dualstack
-@{NETWORKS} vpn_net_1_dualstack vpn_net_2_dualstack
-@{SUBNETS4} vpn_net_ipv4_1_dualstack vpn_net_ipv4_2_dualstack
-@{SUBNETS6} vpn_net_ipv6_1_dualstack vpn_net_ipv6_2_dualstack
-@{SUBNETS4_CIDR} 30.1.1.0/24 40.1.1.0/24
-@{SUBNETS6_CIDR} 2001:db5:0:2::/64 2001:db5:0:3::/64
-${SUBNET_ADDITIONAL_ARGS} --ip-version=6 --ipv6-address-mode=slaac --ipv6-ra-mode=slaac
-@{PORTS} vpn_port_1_dualstack vpn_port_2_dualstack vpn_port_3_dualstack vpn_port_4_dualstack
-@{NET_1_VM_INSTANCES} vpn_net_1_vm_1_dualstack vpn_net_1_vm_2_dualstack
-@{NET_2_VM_INSTANCES} vpn_net_2_vm_1_dualstack vpn_net_2_vm_2_dualstack
-@{EXTRA_NW_IPV4} 76.1.1.2 77.1.1.2
-@{EXTRA_NW_IPV6} 3001:db9:cafe:d::10 3001:db9:abcd:d::20
-@{EXTRA_NW_SUBNET_IPv4} 76.1.1.0/24 77.1.1.0/24
-@{EXTRA_NW_SUBNET_IPv6} 3001:db9:cafe:d::/64 3001:db9:abcd:d::/64
-${ROUTER} vpn_router_dualstack
-${UPDATE_NETWORK} UpdateNetwork_dualstack
-${UPDATE_SUBNET} UpdateSubnet_dualstack
-${UPDATE_PORT} UpdatePort_dualstack
-@{VPN_INSTANCE_ID} 1bc8cd92-48ca-49b5-94e1-b2921a261661 1bc8cd92-48ca-49b5-94e1-b2921a261662 1bc8cd92-48ca-49b5-94e1-b2921a261663
-@{VPN_NAME} vpn1_dualstack vpn2_dualstack vpn3_dualstack
-@{RDS} ["2506:2"] ["2606:2"] ["2706:2"]
+${SECURITY_GROUP} vpn_sg_dualstack
+@{NETWORKS} vpn_net_1_dualstack vpn_net_2_dualstack
+@{SUBNETS4} vpn_net_ipv4_1_dualstack vpn_net_ipv4_2_dualstack
+@{SUBNETS6} vpn_net_ipv6_1_dualstack vpn_net_ipv6_2_dualstack
+@{SUBNETS4_CIDR} 30.1.1.0/24 40.1.1.0/24
+@{SUBNETS6_CIDR} 2001:db5:0:2::/64 2001:db5:0:3::/64
+${SUBNET_ADDITIONAL_ARGS} --ip-version=6 --ipv6-address-mode=slaac --ipv6-ra-mode=slaac
+@{PORTS}
+... vpn_port_1_dualstack
+... vpn_port_2_dualstack
+... vpn_port_3_dualstack
+... vpn_port_4_dualstack
+@{NET_1_VM_INSTANCES} vpn_net_1_vm_1_dualstack vpn_net_1_vm_2_dualstack
+@{NET_2_VM_INSTANCES} vpn_net_2_vm_1_dualstack vpn_net_2_vm_2_dualstack
+@{EXTRA_NW_IPV4} 76.1.1.2 77.1.1.2
+@{EXTRA_NW_IPV6} 3001:db9:cafe:d::10 3001:db9:abcd:d::20
+@{EXTRA_NW_SUBNET_IPv4} 76.1.1.0/24 77.1.1.0/24
+@{EXTRA_NW_SUBNET_IPv6} 3001:db9:cafe:d::/64 3001:db9:abcd:d::/64
+${ROUTER} vpn_router_dualstack
+${UPDATE_NETWORK} UpdateNetwork_dualstack
+${UPDATE_SUBNET} UpdateSubnet_dualstack
+${UPDATE_PORT} UpdatePort_dualstack
+@{VPN_INSTANCE_ID}
+... 1bc8cd92-48ca-49b5-94e1-b2921a261661
+... 1bc8cd92-48ca-49b5-94e1-b2921a261662
+... 1bc8cd92-48ca-49b5-94e1-b2921a261663
+@{VPN_NAME} vpn1_dualstack vpn2_dualstack vpn3_dualstack
+@{RDS} ["2506:2"] ["2606:2"] ["2706:2"]
+
*** Test Cases ***
Check ELAN Datapath Traffic Within The Networks
[Documentation] Checks datapath within the same network with different vlans.
- ${output} = OpenStackOperations.Execute Command on VM Instance ${NETWORKS}[0] ${NET_1_VM_IPV4[0]} ping -I ${NET_1_VM_IPV4[0]} -c 3 ${NET_1_VM_IPV4[1]}
+ ${output} = OpenStackOperations.Execute Command on VM Instance
+ ... ${NETWORKS}[0]
+ ... ${NET_1_VM_IPV4[0]}
+ ... ping -I ${NET_1_VM_IPV4[0]} -c 3 ${NET_1_VM_IPV4[1]}
BuiltIn.Should Contain ${output} 64 bytes
- ${output} = OpenStackOperations.Execute Command on VM Instance ${NETWORKS}[0] ${NET_1_VM_IPV6[0]} ping6 -I ${NET_1_VM_IPV6[0]} -c 3 ${NET_1_VM_IPV6[1]}
+ ${output} = OpenStackOperations.Execute Command on VM Instance
+ ... ${NETWORKS}[0]
+ ... ${NET_1_VM_IPV6[0]}
+ ... ping6 -I ${NET_1_VM_IPV6[0]} -c 3 ${NET_1_VM_IPV6[1]}
BuiltIn.Should Contain ${output} 64 bytes
- ${output} = OpenStackOperations.Execute Command on VM Instance ${NETWORKS}[1] ${NET_2_VM_IPV4[0]} ping -I ${NET_2_VM_IPV4[0]} -c 3 ${NET_2_VM_IPV4[1]}
+ ${output} = OpenStackOperations.Execute Command on VM Instance
+ ... ${NETWORKS}[1]
+ ... ${NET_2_VM_IPV4[0]}
+ ... ping -I ${NET_2_VM_IPV4[0]} -c 3 ${NET_2_VM_IPV4[1]}
BuiltIn.Should Contain ${output} 64 bytes
- ${output} = OpenStackOperations.Execute Command on VM Instance ${NETWORKS}[1] ${NET_2_VM_IPV6[0]} ping6 -I ${NET_2_VM_IPV6[0]} -c 3 ${NET_2_VM_IPV6[1]}
+ ${output} = OpenStackOperations.Execute Command on VM Instance
+ ... ${NETWORKS}[1]
+ ... ${NET_2_VM_IPV6[0]}
+ ... ping6 -I ${NET_2_VM_IPV6[0]} -c 3 ${NET_2_VM_IPV6[1]}
BuiltIn.Should Contain ${output} 64 bytes
Create Router
[Documentation] Create Router.
OpenStackOperations.Create Router ${ROUTER}
@{ROUTER_LIST} = BuiltIn.Create List ${ROUTER}
- BuiltIn.Wait Until Keyword Succeeds 3s 1s Utils.Check For Elements At URI ${ROUTER_URL} ${ROUTER_LIST}
+ BuiltIn.Wait Until Keyword Succeeds
+ ... 3s
+ ... 1s
+ ... Utils.Check For Elements At URI
+ ... ${ROUTER_URL}
+ ... ${ROUTER_LIST}
Add Router Ports
[Documentation] Add created subnets to router.
Check L3_Datapath Traffic Across Networks With Router
[Documentation] L3 Datapath test across networks using previously created router.
BuiltIn.Log Verification of FIB Entries and Flow
- @{tcpdump_conn_ids} = OpenStackOperations.Start Packet Capture On Nodes tcpdump_vpn_ds ${EMPTY} @{OS_ALL_IPS}
- ${vm_instances} = BuiltIn.Create List @{NET_1_VM_IPV4} @{NET_2_VM_IPV4} @{NET_1_VM_IPV6} @{NET_2_VM_IPV6}
- BuiltIn.Wait Until Keyword Succeeds 30s 5s Utils.Check For Elements At URI ${FIB_ENTRY_URL} ${vm_instances}
+ @{tcpdump_conn_ids} = OpenStackOperations.Start Packet Capture On Nodes
+ ... tcpdump_vpn_ds
+ ... ${EMPTY}
+ ... @{OS_ALL_IPS}
+ ${vm_instances} = BuiltIn.Create List
+ ... @{NET_1_VM_IPV4}
+ ... @{NET_2_VM_IPV4}
+ ... @{NET_1_VM_IPV6}
+ ... @{NET_2_VM_IPV6}
+ BuiltIn.Wait Until Keyword Succeeds
+ ... 30s
+ ... 5s
+ ... Utils.Check For Elements At URI
+ ... ${FIB_ENTRY_URL}
+ ... ${vm_instances}
FOR ${VM} IN ${vm_instances}
- BuiltIn.Wait Until Keyword Succeeds 30s 5s VpnOperations.Verify Flows Are Present For L3VPN ${OS_CMP1_IP} ${VM}
+ BuiltIn.Wait Until Keyword Succeeds
+ ... 30s
+ ... 5s
+ ... VpnOperations.Verify Flows Are Present For L3VPN
+ ... ${OS_CMP1_IP}
+ ... ${VM}
END
BuiltIn.Wait Until Keyword Succeeds 30s 5s VpnOperations.Verify GWMAC Entry On ODL ${GW_MAC_ADDRS}
Verify GWMAC Flow Entry On Flow Table On All Compute Nodes
FOR ${extra_ip} IN @{EXTRA_NW_IPV4}
${cmd} = BuiltIn.Catenate sudo ip addr add ${extra_ip}/24 dev eth0
OpenStackOperations.Execute Command on VM Instance ${NETWORKS}[0] ${NET_1_VM_IPV4}[0] ${cmd}
- ${output} = OpenStackOperations.Execute Command on VM Instance ${NETWORKS}[0] ${NET_1_VM_IPV4}[0] ip a
+ ${output} = OpenStackOperations.Execute Command on VM Instance
+ ... ${NETWORKS}[0]
+ ... ${NET_1_VM_IPV4}[0]
+ ... ip a
BuiltIn.Should Contain ${output} ${extra_ip}/24
END
${ext_rt1} = BuiltIn.Set Variable destination=${EXTRA_NW_SUBNET_IPV4}[0],gateway=${NET_1_VM_IPV4}[0]
FOR ${extra_ip} IN @{EXTRA_NW_IPV6}
${cmd} = BuiltIn.Catenate sudo ip -6 addr add ${extra_ip}/64 dev eth0
OpenStackOperations.Execute Command on VM Instance ${NETWORKS}[0] ${NET_1_VM_IPV6}[0] ${cmd}
- ${output} = OpenStackOperations.Execute Command on VM Instance ${NETWORKS}[0] ${NET_1_VM_IPV6}[0] ip -6 a
+ ${output} = OpenStackOperations.Execute Command on VM Instance
+ ... ${NETWORKS}[0]
+ ... ${NET_1_VM_IPV6}[0]
+ ... ip -6 a
BuiltIn.Should Contain ${output} ${extra_ip}/64
END
${ext_rt3} = BuiltIn.Set Variable destination=${EXTRA_NW_SUBNET_IPV6}[0],gateway=${NET_1_VM_IPV6}[0]
OpenStackOperations.Show Router ${ROUTER}
BuiltIn.Log Verify FIB table
${vm_ips} = BuiltIn.Create List @{EXTRA_NW_SUBNET_IPV4} @{EXTRA_NW_SUBNET_IPV6}
- BuiltIn.Wait Until Keyword Succeeds 30s 5s Utils.Check For Elements At URI ${FIB_ENTRY_URL} ${vm_ips}
+ BuiltIn.Wait Until Keyword Succeeds
+ ... 30s
+ ... 5s
+ ... Utils.Check For Elements At URI
+ ... ${FIB_ENTRY_URL}
+ ... ${vm_ips}
FOR ${extra_ip} IN @{EXTRA_NW_IPV4}
- ${output} = OpenStackOperations.Execute Command on VM Instance ${NETWORKS}[0] ${NET_1_VM_IPV4[1]} ping -c 3 ${extra_ip}
+ ${output} = OpenStackOperations.Execute Command on VM Instance
+ ... ${NETWORKS}[0]
+ ... ${NET_1_VM_IPV4[1]}
+ ... ping -c 3 ${extra_ip}
BuiltIn.Should Contain ${output} 64 bytes
- ${output} = OpenStackOperations.Execute Command on VM Instance ${NETWORKS}[1] ${NET_2_VM_IPV4[0]} ping -c 3 ${extra_ip}
+ ${output} = OpenStackOperations.Execute Command on VM Instance
+ ... ${NETWORKS}[1]
+ ... ${NET_2_VM_IPV4[0]}
+ ... ping -c 3 ${extra_ip}
BuiltIn.Should Contain ${output} 64 bytes
- ${output} = OpenStackOperations.Execute Command on VM Instance ${NETWORKS}[1] ${NET_2_VM_IPV4[1]} ping -c 3 ${extra_ip}
+ ${output} = OpenStackOperations.Execute Command on VM Instance
+ ... ${NETWORKS}[1]
+ ... ${NET_2_VM_IPV4[1]}
+ ... ping -c 3 ${extra_ip}
BuiltIn.Should Contain ${output} 64 bytes
END
FOR ${extra_ip} IN @{EXTRA_NW_IPV6}
- ${output} = OpenStackOperations.Execute Command on VM Instance ${NETWORKS}[0] ${NET_1_VM_IPV6[1]} ping6 -c 3 ${extra_ip}
+ ${output} = OpenStackOperations.Execute Command on VM Instance
+ ... ${NETWORKS}[0]
+ ... ${NET_1_VM_IPV6[1]}
+ ... ping6 -c 3 ${extra_ip}
BuiltIn.Should Contain ${output} 64 bytes
- ${output} = OpenStackOperations.Execute Command on VM Instance ${NETWORKS}[1] ${NET_2_VM_IPV6[0]} ping6 -c 3 ${extra_ip}
+ ${output} = OpenStackOperations.Execute Command on VM Instance
+ ... ${NETWORKS}[1]
+ ... ${NET_2_VM_IPV6[0]}
+ ... ping6 -c 3 ${extra_ip}
BuiltIn.Should Contain ${output} 64 bytes
- ${output} = OpenStackOperations.Execute Command on VM Instance ${NETWORKS}[1] ${NET_2_VM_IPV6[1]} ping6 -c 3 ${extra_ip}
+ ${output} = OpenStackOperations.Execute Command on VM Instance
+ ... ${NETWORKS}[1]
+ ... ${NET_2_VM_IPV6[1]}
+ ... ping6 -c 3 ${extra_ip}
BuiltIn.Should Contain ${output} 64 bytes
END
BuiltIn.Log Delete all extra routes
OpenStackOperations.Update Router ${ROUTER} ${RT_CLEAR}
OpenStackOperations.Show Router ${ROUTER}
- ${cmd}= BuiltIn.Catenate sudo ip addr add ${EXTRA_NW_IPV4}[0]/24 dev eth0
+ ${cmd} = BuiltIn.Catenate sudo ip addr add ${EXTRA_NW_IPV4}[0]/24 dev eth0
OpenStackOperations.Execute Command on VM Instance ${NETWORKS}[0] ${NET_1_VM_IPV4}[0] ${cmd}
${ext_rt_ipv4} = BuiltIn.Set Variable destination=${EXTRA_NW_SUBNET_IPV4}[0],gateway=${NET_1_VM_IPV4}[0]
${cmd} = BuiltIn.Catenate ${RT_OPTIONS} ${ext_rt_ipv4}
OpenStackOperations.Update Router ${ROUTER} ${cmd}
OpenStackOperations.Show Router ${ROUTER}
- ${output} = OpenStackOperations.Execute Command on VM Instance ${NETWORKS}[0] ${NET_1_VM_IPV4}[1] ping -c 3 ${EXTRA_NW_IPV4}[0]
+ ${output} = OpenStackOperations.Execute Command on VM Instance
+ ... ${NETWORKS}[0]
+ ... ${NET_1_VM_IPV4}[1]
+ ... ping -c 3 ${EXTRA_NW_IPV4}[0]
BuiltIn.Should Contain ${output} 64 bytes
- ${output} = OpenStackOperations.Execute Command on VM Instance ${NETWORKS}[1] ${NET_2_VM_IPV4}[0] ping -c 3 ${EXTRA_NW_IPV4}[0]
+ ${output} = OpenStackOperations.Execute Command on VM Instance
+ ... ${NETWORKS}[1]
+ ... ${NET_2_VM_IPV4}[0]
+ ... ping -c 3 ${EXTRA_NW_IPV4}[0]
BuiltIn.Should Contain ${output} 64 bytes
${cmd} = BuiltIn.Catenate sudo ip -6 addr add ${EXTRA_NW_IPV6}[0]/64 dev eth0
OpenStackOperations.Execute Command on VM Instance ${NETWORKS}[0] ${NET_1_VM_IPV6}[0] ${cmd}
${cmd} = BuiltIn.Catenate ${RT_OPTIONS} ${ext_rt2}
OpenStackOperations.Update Router ${ROUTER} ${cmd}
OpenStackOperations.Show Router ${ROUTER}
- ${output} = OpenStackOperations.Execute Command on VM Instance ${NETWORKS}[0] ${NET_1_VM_IPV6}[1] ping6 -c 3 ${EXTRA_NW_IPV6}[0]
+ ${output} = OpenStackOperations.Execute Command on VM Instance
+ ... ${NETWORKS}[0]
+ ... ${NET_1_VM_IPV6}[1]
+ ... ping6 -c 3 ${EXTRA_NW_IPV6}[0]
BuiltIn.Should Contain ${output} 64 bytes
- ${output} = OpenStackOperations.Execute Command on VM Instance ${NETWORKS}[1] ${NET_2_VM_IPV6}[0] ping6 -c 3 ${EXTRA_NW_IPV6}[0]
+ ${output} = OpenStackOperations.Execute Command on VM Instance
+ ... ${NETWORKS}[1]
+ ... ${NET_2_VM_IPV6}[0]
+ ... ping6 -c 3 ${EXTRA_NW_IPV6}[0]
BuiltIn.Should Contain ${output} 64 bytes
# clear off extra-routes before the next set of tests
OpenStackOperations.Update Router ${ROUTER} ${RT_CLEAR}
Create L3VPN
${net_id} = OpenStackOperations.Get Net Id ${NETWORKS}[0]
${tenant_id} = OpenStackOperations.Get Tenant ID From Network ${net_id}
- VpnOperations.VPN Create L3VPN vpnid=${VPN_INSTANCE_ID[0]} name=${VPN_NAME[0]} rd=${RDS}[0] exportrt=${RDS}[0] importrt=${RDS}[0] tenantid=${tenant_id}
+ VpnOperations.VPN Create L3VPN
+ ... vpnid=${VPN_INSTANCE_ID[0]}
+ ... name=${VPN_NAME[0]}
+ ... rd=${RDS}[0]
+ ... exportrt=${RDS}[0]
+ ... importrt=${RDS}[0]
+ ... tenantid=${tenant_id}
${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_ID[0]}
BuiltIn.Should Contain ${resp} ${VPN_INSTANCE_ID[0]}
Verify L3VPN Datapath With Router Association
[Documentation] Datapath test across networks using L3VPN associated with router.
BuiltIn.Log Verify VPN interfaces, FIB entries and Flow table
- BuiltIn.Wait Until Keyword Succeeds 30s 5s Utils.Check For Elements At URI ${VPN_IFACES_URL} ${VM_IPS}
+ BuiltIn.Wait Until Keyword Succeeds
+ ... 30s
+ ... 5s
+ ... Utils.Check For Elements At URI
+ ... ${VPN_IFACES_URL}
+ ... ${VM_IPS}
${RD} = Strip String ${RDS[0]} characters="[]
- BuiltIn.Wait Until Keyword Succeeds 60s 15s Utils.Check For Elements At URI ${CONFIG_API}/odl-fib:fibEntries/vrfTables/${RD}/ ${VM_IPS}
+ BuiltIn.Wait Until Keyword Succeeds
+ ... 60s
+ ... 15s
+ ... Utils.Check For Elements At URI
+ ... ${CONFIG_API}/odl-fib:fibEntries/vrfTables/${RD}/
+ ... ${VM_IPS}
Verify Flows Are Present For L3VPN On All Compute Nodes ${VM_IPS}
BuiltIn.Wait Until Keyword Succeeds 30s 5s VpnOperations.Verify GWMAC Entry On ODL ${GW_MAC_ADDRS}
Verify GWMAC Flow Entry On Flow Table On All Compute Nodes
Remove Interface ${ROUTER} ${PORT}
END
BuiltIn.Log Test L2 datapath
- ${output} = OpenStackOperations.Execute Command on VM Instance ${NETWORKS}[0] ${NET_1_VM_IPV4[0]} ping -I ${NET_1_VM_IPV4[0]} -c 3 ${NET_1_VM_IPV4[1]}
+ ${output} = OpenStackOperations.Execute Command on VM Instance
+ ... ${NETWORKS}[0]
+ ... ${NET_1_VM_IPV4[0]}
+ ... ping -I ${NET_1_VM_IPV4[0]} -c 3 ${NET_1_VM_IPV4[1]}
BuiltIn.Should Contain ${output} 64 bytes
- ${output} = OpenStackOperations.Execute Command on VM Instance ${NETWORKS}[1] ${NET_2_VM_IPV4[0]} ping -I ${NET_2_VM_IPV4[0]} -c 3 ${NET_2_VM_IPV4[1]}
+ ${output} = OpenStackOperations.Execute Command on VM Instance
+ ... ${NETWORKS}[1]
+ ... ${NET_2_VM_IPV4[0]}
+ ... ping -I ${NET_2_VM_IPV4[0]} -c 3 ${NET_2_VM_IPV4[1]}
BuiltIn.Should Contain ${output} 64 bytes
BuiltIn.Log Test L3 datapath
${dst_ipv4_list1} = BuiltIn.Create List ${NET_1_VM_IPV4[1]} @{NET_2_VM_IPV4}
${router_output} = OpenStackOperations.List Routers
BuiltIn.Should Not Contain ${router_output} ${ROUTER}
${router_list} = BuiltIn.Create List ${ROUTER}
- BuiltIn.Wait Until Keyword Succeeds 3s 1s Utils.Check For Elements Not At URI ${ROUTER_URL} ${router_list} check_for_null=True
+ BuiltIn.Wait Until Keyword Succeeds
+ ... 3s
+ ... 1s
+ ... Utils.Check For Elements Not At URI
+ ... ${ROUTER_URL}
+ ... ${router_list}
+ ... check_for_null=True
# Verify Router Entry removed from L3VPN
${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_ID[0]}
BuiltIn.Should Not Contain ${resp} ${router_id}
Delete Router With NonExistentRouter Name
[Documentation] Delete router with nonExistentRouter name.
${rc} ${output} = Run And Return Rc And Output openstack router delete nonExistentRouter
- BuiltIn.Should Match Regexp ${output} Failed to delete router with name or ID 'nonExistentRouter'|Failed to delete router\\(s\\) with name or ID\\(s\\) 'nonExistentRouter'
+ BuiltIn.Should Match Regexp
+ ... ${output}
+ ... Failed to delete router with name or ID 'nonExistentRouter'|Failed to delete router\\(s\\) with name or ID\\(s\\) 'nonExistentRouter'
Associate L3VPN To Networks
[Documentation] Associates L3VPN to networks.
[Documentation] Creates three L3VPNs and then check the same.
${net_id} = OpenStackOperations.Get Net Id ${NETWORKS}[0]
${tenant_id} = OpenStackOperations.Get Tenant ID From Network ${net_id}
- VpnOperations.VPN Create L3VPN vpnid=${VPN_INSTANCE_ID[0]} name=${VPN_NAME[0]} rd=${RDS[0]} exportrt=${RDS[0]} importrt=${RDS[0]} tenantid=${tenant_id}
- VpnOperations.VPN Create L3VPN vpnid=${VPN_INSTANCE_ID[1]} name=${VPN_NAME[1]} rd=${RDS[1]} exportrt=${RDS[1]} importrt=${RDS[1]} tenantid=${tenant_id}
- VpnOperations.VPN Create L3VPN vpnid=${VPN_INSTANCE_ID[2]} name=${VPN_NAME[2]} rd=${RDS[2]} exportrt=${RDS[2]} importrt=${RDS[2]} tenantid=${tenant_id}
+ VpnOperations.VPN Create L3VPN
+ ... vpnid=${VPN_INSTANCE_ID[0]}
+ ... name=${VPN_NAME[0]}
+ ... rd=${RDS[0]}
+ ... exportrt=${RDS[0]}
+ ... importrt=${RDS[0]}
+ ... tenantid=${tenant_id}
+ VpnOperations.VPN Create L3VPN
+ ... vpnid=${VPN_INSTANCE_ID[1]}
+ ... name=${VPN_NAME[1]}
+ ... rd=${RDS[1]}
+ ... exportrt=${RDS[1]}
+ ... importrt=${RDS[1]}
+ ... tenantid=${tenant_id}
+ VpnOperations.VPN Create L3VPN
+ ... vpnid=${VPN_INSTANCE_ID[2]}
+ ... name=${VPN_NAME[2]}
+ ... rd=${RDS[2]}
+ ... exportrt=${RDS[2]}
+ ... importrt=${RDS[2]}
+ ... tenantid=${tenant_id}
${resp} = VPN Get L3VPN vpnid=${VPN_INSTANCE_ID[0]}
BuiltIn.Should Contain ${resp} ${VPN_INSTANCE_ID[0]}
${resp} = VPN Get L3VPN vpnid=${VPN_INSTANCE_ID[1]}
${resp} = VPN Get L3VPN vpnid=${VPN_INSTANCE_ID[2]}
BuiltIn.Should Contain ${resp} ${VPN_INSTANCE_ID[2]}
+
*** Keywords ***
Suite Setup
VpnOperations.Basic Suite Setup
${output} = OpenStackOperations.Show Network ${NETWORKS}[0]
BuiltIn.Should Contain ${output} ${UPDATE_NETWORK}
OpenStackOperations.Create SubNet ${NETWORKS}[0] ${SUBNETS4}[0] ${SUBNETS4_CIDR}[0]
- OpenStackOperations.Create SubNet ${NETWORKS}[0] ${SUBNETS6}[0] ${SUBNETS6_CIDR}[0] ${SUBNET_ADDITIONAL_ARGS}
+ OpenStackOperations.Create SubNet
+ ... ${NETWORKS}[0]
+ ... ${SUBNETS6}[0]
+ ... ${SUBNETS6_CIDR}[0]
+ ... ${SUBNET_ADDITIONAL_ARGS}
OpenStackOperations.Create SubNet ${NETWORKS}[1] ${SUBNETS4}[1] ${SUBNETS4_CIDR}[1]
- OpenStackOperations.Create SubNet ${NETWORKS}[1] ${SUBNETS6}[1] ${SUBNETS6_CIDR}[1] ${SUBNET_ADDITIONAL_ARGS}
+ OpenStackOperations.Create SubNet
+ ... ${NETWORKS}[1]
+ ... ${SUBNETS6}[1]
+ ... ${SUBNETS6_CIDR}[1]
+ ... ${SUBNET_ADDITIONAL_ARGS}
${SUB_LIST} = OpenStackOperations.List Subnets
- BuiltIn.Wait Until Keyword Succeeds 3s 1s Utils.Check For Elements At URI ${SUBNETWORK_URL} ${SUBNETS4}
- BuiltIn.Wait Until Keyword Succeeds 3s 1s Utils.Check For Elements At URI ${SUBNETWORK_URL} ${SUBNETS6}
+ BuiltIn.Wait Until Keyword Succeeds
+ ... 3s
+ ... 1s
+ ... Utils.Check For Elements At URI
+ ... ${SUBNETWORK_URL}
+ ... ${SUBNETS4}
+ BuiltIn.Wait Until Keyword Succeeds
+ ... 3s
+ ... 1s
+ ... Utils.Check For Elements At URI
+ ... ${SUBNETWORK_URL}
+ ... ${SUBNETS6}
OpenStackOperations.Update SubNet ${SUBNETS4}[0] additional_args=--description ${UPDATE_SUBNET}
${output} = OpenStackOperations.Show SubNet ${SUBNETS4}[0]
BuiltIn.Should Contain ${output} ${UPDATE_SUBNET}
OpenStackOperations.Create Allow All SecurityGroup ${SECURITY_GROUP} IPv4
- OpenStackOperations.Neutron Security Group Rule Create ${SECURITY_GROUP} direction=ingress ethertype=IPv6 port_range_max=65535 port_range_min=1 protocol=tcp
- OpenStackOperations.Neutron Security Group Rule Create ${SECURITY_GROUP} direction=egress ethertype=IPv6 port_range_max=65535 port_range_min=1 protocol=tcp
- OpenStackOperations.Neutron Security Group Rule Create ${SECURITY_GROUP} direction=ingress ethertype=IPv6 protocol=icmp
- OpenStackOperations.Neutron Security Group Rule Create ${SECURITY_GROUP} direction=egress ethertype=IPv6 protocol=icmp
- OpenStackOperations.Neutron Security Group Rule Create ${SECURITY_GROUP} direction=ingress ethertype=IPv6 port_range_max=65535 port_range_min=1 protocol=udp
- OpenStackOperations.Neutron Security Group Rule Create ${SECURITY_GROUP} direction=egress ethertype=IPv6 port_range_max=65535 port_range_min=1 protocol=udp
- ${allowed_address_pairs_args} = BuiltIn.Set Variable --allowed-address ip-address=${EXTRA_NW_SUBNET_IPV4}[0] --allowed-address ip-address=${EXTRA_NW_SUBNET_IPV4}[1] --allowed-address ip-address=${EXTRA_NW_SUBNET_IPV6}[0] --allowed-address ip-address=${EXTRA_NW_SUBNET_IPV6}[1]
- OpenStackOperations.Create Port ${NETWORKS}[0] ${PORTS}[0] sg=${SECURITY_GROUP} additional_args=${allowed_address_pairs_args}
- OpenStackOperations.Create Port ${NETWORKS}[0] ${PORTS}[1] sg=${SECURITY_GROUP} additional_args=${allowed_address_pairs_args}
- OpenStackOperations.Create Port ${NETWORKS}[1] ${PORTS}[2] sg=${SECURITY_GROUP} additional_args=${allowed_address_pairs_args}
- OpenStackOperations.Create Port ${NETWORKS}[1] ${PORTS}[3] sg=${SECURITY_GROUP} additional_args=${allowed_address_pairs_args}
+ OpenStackOperations.Neutron Security Group Rule Create
+ ... ${SECURITY_GROUP}
+ ... direction=ingress
+ ... ethertype=IPv6
+ ... port_range_max=65535
+ ... port_range_min=1
+ ... protocol=tcp
+ OpenStackOperations.Neutron Security Group Rule Create
+ ... ${SECURITY_GROUP}
+ ... direction=egress
+ ... ethertype=IPv6
+ ... port_range_max=65535
+ ... port_range_min=1
+ ... protocol=tcp
+ OpenStackOperations.Neutron Security Group Rule Create
+ ... ${SECURITY_GROUP}
+ ... direction=ingress
+ ... ethertype=IPv6
+ ... protocol=icmp
+ OpenStackOperations.Neutron Security Group Rule Create
+ ... ${SECURITY_GROUP}
+ ... direction=egress
+ ... ethertype=IPv6
+ ... protocol=icmp
+ OpenStackOperations.Neutron Security Group Rule Create
+ ... ${SECURITY_GROUP}
+ ... direction=ingress
+ ... ethertype=IPv6
+ ... port_range_max=65535
+ ... port_range_min=1
+ ... protocol=udp
+ OpenStackOperations.Neutron Security Group Rule Create
+ ... ${SECURITY_GROUP}
+ ... direction=egress
+ ... ethertype=IPv6
+ ... port_range_max=65535
+ ... port_range_min=1
+ ... protocol=udp
+ ${allowed_address_pairs_args} = BuiltIn.Set Variable
+ ... --allowed-address ip-address=${EXTRA_NW_SUBNET_IPV4}[0] --allowed-address ip-address=${EXTRA_NW_SUBNET_IPV4}[1] --allowed-address ip-address=${EXTRA_NW_SUBNET_IPV6}[0] --allowed-address ip-address=${EXTRA_NW_SUBNET_IPV6}[1]
+ OpenStackOperations.Create Port
+ ... ${NETWORKS}[0]
+ ... ${PORTS}[0]
+ ... sg=${SECURITY_GROUP}
+ ... additional_args=${allowed_address_pairs_args}
+ OpenStackOperations.Create Port
+ ... ${NETWORKS}[0]
+ ... ${PORTS}[1]
+ ... sg=${SECURITY_GROUP}
+ ... additional_args=${allowed_address_pairs_args}
+ OpenStackOperations.Create Port
+ ... ${NETWORKS}[1]
+ ... ${PORTS}[2]
+ ... sg=${SECURITY_GROUP}
+ ... additional_args=${allowed_address_pairs_args}
+ OpenStackOperations.Create Port
+ ... ${NETWORKS}[1]
+ ... ${PORTS}[3]
+ ... sg=${SECURITY_GROUP}
+ ... additional_args=${allowed_address_pairs_args}
BuiltIn.Wait Until Keyword Succeeds 3s 1s Utils.Check For Elements At URI ${PORT_URL} ${PORTS}
${PORTS_MACADDR} = OpenStackOperations.Get Ports MacAddr ${PORTS}
BuiltIn.Set Suite Variable ${PORTS_MACADDR}
${output} = Show Port ${UPDATE_PORT}
BuiltIn.Should Contain ${output} ${UPDATE_PORT}
OpenStackOperations.Update Port ${UPDATE_PORT} additional_args=--name ${PORTS}[0]
- OpenStackOperations.Create Vm Instance With Port On Compute Node ${PORTS}[0] ${NET_1_VM_INSTANCES[0]} ${OS_CMP1_HOSTNAME} sg=${SECURITY_GROUP}
- OpenStackOperations.Create Vm Instance With Port On Compute Node ${PORTS}[1] ${NET_1_VM_INSTANCES[1]} ${OS_CMP2_HOSTNAME} sg=${SECURITY_GROUP}
- OpenStackOperations.Create Vm Instance With Port On Compute Node ${PORTS}[2] ${NET_2_VM_INSTANCES[0]} ${OS_CMP1_HOSTNAME} sg=${SECURITY_GROUP}
- OpenStackOperations.Create Vm Instance With Port On Compute Node ${PORTS}[3] ${NET_2_VM_INSTANCES[1]} ${OS_CMP2_HOSTNAME} sg=${SECURITY_GROUP}
+ OpenStackOperations.Create Vm Instance With Port On Compute Node
+ ... ${PORTS}[0]
+ ... ${NET_1_VM_INSTANCES[0]}
+ ... ${OS_CMP1_HOSTNAME}
+ ... sg=${SECURITY_GROUP}
+ OpenStackOperations.Create Vm Instance With Port On Compute Node
+ ... ${PORTS}[1]
+ ... ${NET_1_VM_INSTANCES[1]}
+ ... ${OS_CMP2_HOSTNAME}
+ ... sg=${SECURITY_GROUP}
+ OpenStackOperations.Create Vm Instance With Port On Compute Node
+ ... ${PORTS}[2]
+ ... ${NET_2_VM_INSTANCES[0]}
+ ... ${OS_CMP1_HOSTNAME}
+ ... sg=${SECURITY_GROUP}
+ OpenStackOperations.Create Vm Instance With Port On Compute Node
+ ... ${PORTS}[3]
+ ... ${NET_2_VM_INSTANCES[1]}
+ ... ${OS_CMP2_HOSTNAME}
+ ... sg=${SECURITY_GROUP}
${VM_INSTANCES} = BuiltIn.Create List @{NET_1_VM_INSTANCES} @{NET_2_VM_INSTANCES}
BuiltIn.Set Suite Variable ${VM_INSTANCES}
- BuiltIn.Wait Until Keyword Succeeds 30s 10s OpenStackOperations.Wait For Routes To Propogate ${NETWORKS} ${SUBNETS4_CIDR}
- BuiltIn.Wait Until Keyword Succeeds 30s 10s OpenStackOperations.Wait For Routes To Propogate ${NETWORKS} ${SUBNETS6_CIDR}
+ BuiltIn.Wait Until Keyword Succeeds
+ ... 30s
+ ... 10s
+ ... OpenStackOperations.Wait For Routes To Propogate
+ ... ${NETWORKS}
+ ... ${SUBNETS4_CIDR}
+ BuiltIn.Wait Until Keyword Succeeds
+ ... 30s
+ ... 10s
+ ... OpenStackOperations.Wait For Routes To Propogate
+ ... ${NETWORKS}
+ ... ${SUBNETS6_CIDR}
@{NET_1_VM_IPV4} ${NET_1_DHCP_IPV4} = OpenStackOperations.Get VM IPs @{NET_1_VM_INSTANCES}
@{NET_2_VM_IPV4} ${NET_2_DHCP_IPV4} = OpenStackOperations.Get VM IPs @{NET_2_VM_INSTANCES}
BuiltIn.Should Not Contain ${NET_1_VM_IPV4} None
BuiltIn.Should Not Contain ${NET_1_DHCP_IPV4} None
BuiltIn.Should Not Contain ${NET_2_DHCP_IPV4} None
BuiltIn.Log Collect VMs IPv6 addresses
- ${prefix_net10} = String.Replace String ${SUBNETS6_CIDR}[0] ${IP6_SUBNET_CIDR_SUFFIX} ${IP6_ADDR_SUFFIX}
- ${prefix_net20} = String.Replace String ${SUBNETS6_CIDR}[1] ${IP6_SUBNET_CIDR_SUFFIX} ${IP6_ADDR_SUFFIX}
- ${status} ${message} Run Keyword And Ignore Error BuiltIn.Wait Until Keyword Succeeds 3x 60s OpenStackOperations.Collect VM IPv6 SLAAC Addresses
- ... true ${NET_1_VM_INSTANCES} ${NETWORKS}[0] ${prefix_net10}
- ${status} ${message} Run Keyword And Ignore Error BuiltIn.Wait Until Keyword Succeeds 3x 60s OpenStackOperations.Collect VM IPv6 SLAAC Addresses
- ... true ${NET_2_VM_INSTANCES} ${NETWORKS}[1] ${prefix_net20}
- ${NET_1_VM_IPV6} = OpenStackOperations.Collect VM IPv6 SLAAC Addresses false ${NET_1_VM_INSTANCES} ${NETWORKS}[0] ${prefix_net10}
- ${NET_2_VM_IPV6} = OpenStackOperations.Collect VM IPv6 SLAAC Addresses false ${NET_2_VM_INSTANCES} ${NETWORKS}[1] ${prefix_net20}
- ${LOOP_COUNT} Get Length ${NET_1_VM_INSTANCES}
+ ${prefix_net10} = String.Replace String
+ ... ${SUBNETS6_CIDR}[0]
+ ... ${IP6_SUBNET_CIDR_SUFFIX}
+ ... ${IP6_ADDR_SUFFIX}
+ ${prefix_net20} = String.Replace String
+ ... ${SUBNETS6_CIDR}[1]
+ ... ${IP6_SUBNET_CIDR_SUFFIX}
+ ... ${IP6_ADDR_SUFFIX}
+ ${status} ${message} = Run Keyword And Ignore Error
+ ... BuiltIn.Wait Until Keyword Succeeds
+ ... 3x
+ ... 60s
+ ... OpenStackOperations.Collect VM IPv6 SLAAC Addresses
+ ... true
+ ... ${NET_1_VM_INSTANCES}
+ ... ${NETWORKS}[0]
+ ... ${prefix_net10}
+ ${status} ${message} = Run Keyword And Ignore Error
+ ... BuiltIn.Wait Until Keyword Succeeds
+ ... 3x
+ ... 60s
+ ... OpenStackOperations.Collect VM IPv6 SLAAC Addresses
+ ... true
+ ... ${NET_2_VM_INSTANCES}
+ ... ${NETWORKS}[1]
+ ... ${prefix_net20}
+ ${NET_1_VM_IPV6} = OpenStackOperations.Collect VM IPv6 SLAAC Addresses
+ ... false
+ ... ${NET_1_VM_INSTANCES}
+ ... ${NETWORKS}[0]
+ ... ${prefix_net10}
+ ${NET_2_VM_IPV6} = OpenStackOperations.Collect VM IPv6 SLAAC Addresses
+ ... false
+ ... ${NET_2_VM_INSTANCES}
+ ... ${NETWORKS}[1]
+ ... ${prefix_net20}
+ ${LOOP_COUNT} = Get Length ${NET_1_VM_INSTANCES}
FOR ${index} IN RANGE 0 ${LOOP_COUNT}
- ${status} ${message} Run Keyword And Ignore Error BuiltIn.Should Not Contain ${NET_1_VM_IPV6}[${index}] None
- Run Keyword If '${status}' == 'FAIL' Write Commands Until Prompt nova console-log ${NET_1_VM_INSTANCES}[${index}] 30s
- ${status} ${message} Run Keyword And Ignore Error BuiltIn.Should Not Contain ${NET_2_VM_IPV6}[${index}] None
- Run Keyword If '${status}' == 'FAIL' Write Commands Until Prompt nova console-log ${NET_2_VM_INSTANCES}[${index}] 30s
+ ${status} ${message} = Run Keyword And Ignore Error
+ ... BuiltIn.Should Not Contain
+ ... ${NET_1_VM_IPV6}[${index}]
+ ... None
+ IF '${status}' == 'FAIL'
+ Write Commands Until Prompt nova console-log ${NET_1_VM_INSTANCES}[${index}] 30s
+ END
+ ${status} ${message} = Run Keyword And Ignore Error
+ ... BuiltIn.Should Not Contain
+ ... ${NET_2_VM_IPV6}[${index}]
+ ... None
+ IF '${status}' == 'FAIL'
+ Write Commands Until Prompt nova console-log ${NET_2_VM_INSTANCES}[${index}] 30s
+ END
END
BuiltIn.Set Suite Variable ${NET_1_VM_IPV4}
BuiltIn.Set Suite Variable ${NET_2_VM_IPV4}
OpenStackOperations.OpenStack Suite Teardown
Verify GWMAC Flow Entry On Flow Table
- [Arguments] ${cnIp}
[Documentation] Verify GWMAC Table, ARP Response table and Dispatcher table.
- ${flow_output} = Run Command On Remote System ${cnIp} sudo ovs-ofctl -O OpenFlow13 dump-flows ${INTEGRATION_BRIDGE}
- ${group_output} = Run Command On Remote System ${cnIp} sudo ovs-ofctl -O OpenFlow13 dump-groups ${INTEGRATION_BRIDGE}
+ [Arguments] ${cnIp}
+ ${flow_output} = Run Command On Remote System
+ ... ${cnIp}
+ ... sudo ovs-ofctl -O OpenFlow13 dump-flows ${INTEGRATION_BRIDGE}
+ ${group_output} = Run Command On Remote System
+ ... ${cnIp}
+ ... sudo ovs-ofctl -O OpenFlow13 dump-groups ${INTEGRATION_BRIDGE}
BuiltIn.Should Contain ${flow_output} table=${DISPATCHER_TABLE}
${dispatcher_table} = Get Lines Containing String ${flow_output} table=${DISPATCHER_TABLE}
BuiltIn.Should Contain ${dispatcher_table} goto_table:${GWMAC_TABLE}
${icmp_ipv6_flows} = Get Lines Containing String ${flow_output} icmp_type=${ICMP_TYPE}
# Verify IPv6 icmp_type=135
FOR ${ip_addr} IN @{GW_IPV6_ADDRS}
- ${rule} = BuiltIn.Set Variable icmp_type=${ICMP_TYPE},icmp_code=0,nd_target=${ip_addr} actions=CONTROLLER:65535
+ ${rule} = BuiltIn.Set Variable
+ ... icmp_type=${ICMP_TYPE},icmp_code=0,nd_target=${ip_addr} actions=CONTROLLER:65535
BuiltIn.Should Match Regexp ${icmp_ipv6_flows} ${rule}
END
VpnOperations.Verify ARP REQUEST in groupTable ${group_output} ${groupID[1]}
${arpResponder_table} = Get Lines Containing String ${flow_output} table=${ARP_RESPONSE_TABLE}
BuiltIn.Should Contain ${arpResponder_table} priority=0 actions=drop
FOR ${macAdd} ${ipAdd} IN ZIP ${GW1_MAC_ADDRS} ${GW_IPV4_ADDRS}
- ${ARP_RESPONSE_IP_MAC_REGEX} = BuiltIn.Set Variable arp_tpa=${ipAdd},arp_op=1 actions=.*,set_field:${macAdd}->eth_src
+ ${ARP_RESPONSE_IP_MAC_REGEX} = BuiltIn.Set Variable
+ ... arp_tpa=${ipAdd},arp_op=1 actions=.*,set_field:${macAdd}->eth_src
BuiltIn.Should Match Regexp ${arpResponder_table} ${ARP_RESPONSE_IP_MAC_REGEX}
END