Removed test suites for netvirt project.
JIRA: INTTEST-140
Change-Id: Iea59e2149ae2b2a51d017968ef2076dab9de3e6b
Signed-off-by: Oleksandr Zharov <oleksandr.zharov@pantheon.tech>
+++ /dev/null
-*** Settings ***
-Documentation Test Suite for ACL Service Recovery:
-... The Service Recovery Manager provides
-... common interface to recover services in ODL.
-... This feature will register ACL service for recovery
-... and implement the mechanism to recover ACL service.
-
-Library OperatingSystem
-Library RequestsLibrary
-Library String
-Resource ../../../libraries/DevstackUtils.robot
-Resource ../../../libraries/KarafKeywords.robot
-Resource ../../../libraries/OVSDB.robot
-Resource ../../../libraries/OvsManager.robot
-Resource ../../../libraries/OpenStackOperations.robot
-Resource ../../../libraries/SetupUtils.robot
-Resource ../../../libraries/Utils.robot
-Resource ../../../variables/netvirt/Variables.robot
-Resource ../../../variables/Variables.robot
-
-Suite Setup Suite Setup
-Suite Teardown Run Keywords OpenStackOperations.OpenStack Suite Teardown
-... AND SetupUtils.Setup_Logging_For_Debug_Purposes_On_List_Or_All INFO ${TEST_LOG_COMPONENTS}
-Test Setup Run Keywords SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
-... AND OpenStackOperations.Get DumpFlows And Ovsconfig ${OS_CMP1_CONN_ID}
-Test Teardown OpenStackOperations.Get Test Teardown Debugs
-
-
-*** Variables ***
-${acl_sr_security_group} acl_sr_sg
-@{acl_sr_networks} acl_sr_net_1 acl_sr_net_2 acl_sr_net_3
-@{acl_sr_subnets} acl_sr_sub_1 acl_sr_sub_2 acl_sr_sub_3
-@{acl_sr_subnet_cidrs} 81.1.1.0/24 82.1.1.0/24 83.1.1.0/24
-@{acl_sr_net_1_ports} acl_sr_net_1_port_1 acl_sr_net_1_port_2
-@{acl_sr_net_1_vms} acl_sr_net_1_vm_1 acl_sr_net_1_vm_2
-${TEST_LOG_LEVEL} trace
-@{TEST_LOG_COMPONENTS}
-... org.opendaylight.netvirt.aclservice
-
-
-*** Test Cases ***
-ACL Service Recovery CLI
- [Documentation] This test case covers ACL service recovery.
- ${count_before} = OvsManager.Get Dump Flows Count ${OS_CMP1_CONN_ID} ${INGRESS_ACL_REMOTE_ACL_TABLE}
- ${node_id} = OVSDB.Get DPID ${OS_CMP1_IP}
- ${resp} = RequestsLibrary.Delete Request
- ... session
- ... ${CONFIG_NODES_API}/node/openflow:${node_id}/flow-node-inventory:table/${INGRESS_ACL_REMOTE_ACL_TABLE}
- BuiltIn.Should Be Equal As Strings ${resp.status_code} 200
- OpenStackOperations.Ping From DHCP Should Not Succeed ${acl_sr_networks}[0] ${ACL_SR_NET_1_VM_IPS}[0]
- ${flow_after_delete} = OvsManager.Get Dump Flows Count ${OS_CMP1_CONN_ID} ${INGRESS_ACL_REMOTE_ACL_TABLE}
- BuiltIn.Should Be Equal As Strings ${flow_after_delete} 0
- ${output} = Issue_Command_On_Karaf_Console srm:recover service acl
- BuiltIn.Should Contain ${output} RPC call to recover was successful
- OpenStackOperations.Ping Vm From DHCP Namespace ${acl_sr_networks}[0] ${ACL_SR_NET_1_VM_IPS}[0]
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 5s
- ... Verify Flow Counts Are Same
- ... ${count_before}
- ... ${INGRESS_ACL_REMOTE_ACL_TABLE}
-
-ACL Instance Recovery CLI
- [Documentation] This test case covers ACL instance recovery.
- ${count_before} = OvsManager.Get Dump Flows Count ${OS_CMP1_CONN_ID} ${EGRESS_LEARN_ACL_FILTER_TABLE}
- ${node_id} = OVSDB.Get DPID ${OS_CMP1_IP}
- Write Commands Until Expected Prompt
- ... sudo ovs-ofctl del-flows br-int -OOpenflow13 "table=${EGRESS_LEARN_ACL_FILTER_TABLE},icmp"
- ... ${DEFAULT_LINUX_PROMPT_STRICT}
- Wait Until Keyword Succeeds
- ... 30s
- ... 5s
- ... OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${EGRESS_LEARN_ACL_FILTER_TABLE}
- ... False
- ... |grep icmp
- OpenStackOperations.Ping From DHCP Should Not Succeed ${acl_sr_networks}[0] ${ACL_SR_NET_1_VM_IPS}[0]
- ${output} = OpenStack CLI openstack security group show ${acl_sr_security_group} | awk '/ id / {print $4}'
- ${splitted_output} = String.Split String ${output} ${EMPTY}
- ${instance_id} = Collections.Get from List ${splitted_output} 0
- ${output} = Issue_Command_On_Karaf_Console srm:recover instance acl-instance ${instance_id}
- BuiltIn.Should Contain ${output} RPC call to recover was successful
- OpenStackOperations.Ping Vm From DHCP Namespace ${acl_sr_networks}[0] ${ACL_SR_NET_1_VM_IPS}[0]
- Wait Until Keyword Succeeds
- ... 30s
- ... 5s
- ... OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${EGRESS_LEARN_ACL_FILTER_TABLE}
- ... True
- ... ${EMPTY}
- ... icmp
- Wait Until Keyword Succeeds
- ... 30s
- ... 5s
- ... Verify Flow Counts Are Same
- ... ${count_before}
- ... ${EGRESS_LEARN_ACL_FILTER_TABLE}
-
-ACL Interface Recovery CLI
- [Documentation] This test case covers ACL interface recovery.
- ${output} = OpenStack CLI openstack port show ${acl_sr_net_1_ports[0]} |awk '/ mac_address / {print$4}'
- @{list} = Split String ${output}
- ${port_mac} = Set Variable ${list[0]}
- ${count_before} = OvsManager.Get Dump Flows Count
- ... ${OS_CMP1_CONN_ID}
- ... ${EGRESS_ACL_TABLE}
- ... port_mac=${port_mac}
- ${node_id} = OVSDB.Get DPID ${OS_CMP1_IP}
- Write Commands Until Expected Prompt
- ... sudo ovs-ofctl del-flows br-int -OOpenflow13 "table=${EGRESS_ACL_TABLE},dl_dst=${port_mac}"
- ... ${DEFAULT_LINUX_PROMPT_STRICT}
- OpenStackOperations.Ping From DHCP Should Not Succeed ${acl_sr_networks}[0] ${ACL_SR_NET_1_VM_IPS}[0]
- Wait Until Keyword Succeeds
- ... 30s
- ... 5s
- ... OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${EGRESS_LEARN_ACL_FILTER_TABLE}
- ... False
- ... |grep ${port_mac}
- ${output} = OpenStack CLI openstack port show ${acl_sr_net_1_ports[0]} |awk '/ id / {print$4}'
- ${splitted_output} = String.Split String ${output} ${EMPTY}
- ${interface_id} = Collections.Get from List ${splitted_output} 0
- ${output} = Issue_Command_On_Karaf_Console srm:recover instance acl-interface ${interface_id}
- BuiltIn.Should Contain ${output} RPC call to recover was successful
- OpenStackOperations.Ping Vm From DHCP Namespace ${acl_sr_networks}[0] ${ACL_SR_NET_1_VM_IPS}[0]
- Wait Until Keyword Succeeds
- ... 30s
- ... 5s
- ... OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${EGRESS_ACL_TABLE}
- ... True
- ... ${EMPTY}
- ... ${port_mac}
- Wait Until Keyword Succeeds
- ... 30s
- ... 5s
- ... Verify Flow Counts Are Same
- ... ${count_before}
- ... ${EGRESS_ACL_TABLE}
- ... port_mac=${port_mac}
-
-
-*** Keywords ***
-Verify Flow Counts Are Same
- [Documentation] Verify flows count should be same as before and after for a table id with a given port mac.
- [Arguments] ${count_before} ${table_id} ${port_mac}=""
- ${count_after} = OvsManager.Get Dump Flows Count ${OS_CMP1_CONN_ID} ${table_id} port_mac=${port_mac}
- BuiltIn.Should Be Equal As Numbers ${count_before} ${count_after}
-
-Suite Setup
- [Documentation] Create Basic setup for the feature. Creates single network, subnet, two ports and two VMs.
- OpenStackOperations.OpenStack Suite Setup
- SetupUtils.Setup_Logging_For_Debug_Purposes_On_List_Or_All ${TEST_LOG_LEVEL} ${TEST_LOG_COMPONENTS}
- OpenStackOperations.Create Allow All SecurityGroup ${acl_sr_security_group}
- OpenStackOperations.Create Network ${acl_sr_networks}[0]
- OpenStackOperations.Create SubNet ${acl_sr_networks}[0] ${acl_sr_subnets}[0] ${acl_sr_subnet_cidrs[0]}
- OpenStackOperations.Create Port ${acl_sr_networks}[0] ${acl_sr_net_1_ports[0]} sg=${acl_sr_security_group}
- OpenStackOperations.Create Port ${acl_sr_networks}[0] ${acl_sr_net_1_ports[1]} sg=${acl_sr_security_group}
- BuiltIn.Wait Until Keyword Succeeds
- ... 3s
- ... 1s
- ... Utils.Check For Elements At URI
- ... ${PORT_URL}
- ... ${acl_sr_net_1_ports}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${acl_sr_net_1_ports[0]}
- ... ${acl_sr_net_1_vms[0]}
- ... ${OS_CMP1_HOSTNAME}
- ... sg=${acl_sr_security_group}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${acl_sr_net_1_ports[1]}
- ... ${acl_sr_net_1_vms[1]}
- ... ${OS_CMP2_HOSTNAME}
- ... sg=${acl_sr_security_group}
- @{ACL_SR_NET_1_VM_IPS} ${net1_dhcp_ip} = OpenStackOperations.Get VM IPs @{acl_sr_net_1_vms}
- BuiltIn.Set Suite Variable @{ACL_SR_NET_1_VM_IPS}
- BuiltIn.Should Not Contain ${ACL_SR_NET_1_VM_IPS} None
- BuiltIn.Should Not Contain ${net1_dhcp_ip} None
- OpenStackOperations.Ping Vm From DHCP Namespace ${acl_sr_networks}[0] ${ACL_SR_NET_1_VM_IPS}[0]
- OpenStackOperations.Ping Vm From DHCP Namespace ${acl_sr_networks}[0] ${ACL_SR_NET_1_VM_IPS}[1]
+++ /dev/null
-*** Settings ***
-Documentation Test suite to validate bgpvpn configuration commands in an openstack integrated environment.
-
-Library OperatingSystem
-Library RequestsLibrary
-Resource ../../../libraries/BgpOperations.robot
-Resource ../../../libraries/DevstackUtils.robot
-Resource ../../../libraries/OpenStackOperations.robot
-Resource ../../../libraries/OVSDB.robot
-Resource ../../../libraries/SetupUtils.robot
-Resource ../../../libraries/Tcpdump.robot
-Resource ../../../libraries/Utils.robot
-Resource ../../../libraries/VpnOperations.robot
-Resource ../../../variables/Variables.robot
-Resource ../../../variables/netvirt/Variables.robot
-
-Suite Setup OpenStackOperations.OpenStack Suite Setup
-Suite Teardown OpenStackOperations.OpenStack Suite Teardown
-Test Setup SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
-Test Teardown OpenStackOperations.Get Test Teardown Debugs
-
-
-*** Test Cases ***
-Verify ODL supports VPN creation via neutron bgpvpn create command
- [Documentation] Verify ODL supports VPN creation via neutron bgpvpn create command
- OpenStackOperations.Create Bgpvpn BgpVpn1 --route-distinguisher 100:10
- ${vpnid} = OpenStackOperations.Get Bgpvpn Id BgpVpn1
+++ /dev/null
-*** Settings ***
-Documentation Test suite to validate elan service functionality in ODL environment.
-... The assumption of this suite is that the environment is already configured with the proper
-... integration bridges and vxlan tunnels.
-
-Library OperatingSystem
-Library RequestsLibrary
-Library String
-Resource ../../../libraries/KarafKeywords.robot
-Resource ../../../libraries/Utils.robot
-Resource ../../../libraries/OVSDB.robot
-Resource ../../../libraries/OpenStackOperations.robot
-Resource ../../../libraries/DevstackUtils.robot
-Resource ../../../libraries/SetupUtils.robot
-Resource ../../../variables/Variables.robot
-Resource ../../../variables/netvirt/Variables.robot
-
-Suite Setup Suite Setup
-Suite Teardown OpenStackOperations.OpenStack Suite Teardown
-Test Setup SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
-Test Teardown OpenStackOperations.Get Test Teardown Debugs
-
-
-*** Variables ***
-${SECURITY_GROUP} elan_sg
-@{NETWORKS} elan_net_1 elan_net_2 elan_net_3
-@{SUBNETS} elan_sub_1 elan_sub_2 elan_sub_3
-@{SUBNET_CIDRS} 81.1.1.0/24 82.1.1.0/24 83.1.1.0/24
-@{NET_1_PORTS} elan_net_1_port_1 elan_net_1_port_2
-@{NET_2_PORTS} elan_net_2_port_1 elan_net_2_port_2
-@{NET_3_PORTS} elan_net_3_port_1 elan_net_3_port_2
-@{NET_1_VMS} elan_net_1_vm_1 elan_net_1_vm_2
-@{NET_2_VMS} elan_net_2_vm_1 elan_net_2_vm_2
-@{NET_3_VMS} elan_net_3_vm_1 elan_net_3_vm_2
-
-
-*** Test Cases ***
-Verify Datapath for Single ELAN with Multiple DPN
- [Documentation] Verify Flow Table and Datapath
- ${smac_cn1} = BuiltIn.Create List ${NET_1_MACS}[0]
- ${smac_cn2} = BuiltIn.Create List ${NET_1_MACS}[1]
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 10s
- ... Verify Flows Are Present For ELAN Service
- ... ${OS_CMP1_IP}
- ... ${smac_cn1}
- ... ${NET_1_MACS}
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 10s
- ... Verify Flows Are Present For ELAN Service
- ... ${OS_CMP2_IP}
- ... ${smac_cn2}
- ... ${NET_1_MACS}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[0]
- ... ping -c 3 ${NET_1_VM_IPS}[1]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[1]
- ... ping -c 3 ${NET_1_VM_IPS}[0]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
-
-Verify Datapath After OVS Restart
- [Documentation] Verify datapath after OVS restart
- FOR ${ip} IN @{OS_CMP_IPS}
- OVSDB.Restart OVSDB ${ip}
- END
- FOR ${ip} IN @{OS_CMP_IPS}
- BuiltIn.Wait Until Keyword Succeeds 30s 10s OVSDB.Verify OVS Reports Connected tools_system=${ip}
- END
- ${smac_cn1} = BuiltIn.Create List ${NET_1_MACS}[0]
- ${smac_cn2} = BuiltIn.Create List ${NET_1_MACS}[1]
- BuiltIn.Wait Until Keyword Succeeds
- ... 60s
- ... 10s
- ... Verify Flows Are Present For ELAN Service
- ... ${OS_CMP1_IP}
- ... ${smac_cn1}
- ... ${NET_1_MACS}
- BuiltIn.Wait Until Keyword Succeeds
- ... 60s
- ... 10s
- ... Verify Flows Are Present For ELAN Service
- ... ${OS_CMP2_IP}
- ... ${smac_cn2}
- ... ${NET_1_MACS}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[0]
- ... ping -c 3 ${NET_1_VM_IPS}[1]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[1]
- ... ping -c 3 ${NET_1_VM_IPS}[0]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
-
-Verify Datapath After Recreate VM Instance
- [Documentation] Verify datapath after recreating Vm instance
- OpenStackOperations.Delete Vm Instance ${NET_1_VMS[0]}
- ${smac_cn1} = BuiltIn.Create List ${NET_1_MACS}[0]
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 10s
- ... Verify Flows Are Removed For ELAN Service
- ... ${OS_CMP1_IP}
- ... ${smac_cn1}
- OpenStackOperations.Remove RSA Key From KnownHosts ${NET_1_VM_IPS}[0]
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${NET_1_PORTS[0]}
- ... ${NET_1_VMS[0]}
- ... ${OS_CMP1_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- @{NET_1_VM_IPS} ${NET_1_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_1_VMS}
- Builtin.Set Suite Variable @{NET_1_VM_IPS}
- BuiltIn.Should Not Contain ${NET_1_VM_IPS} None
- BuiltIn.Should Not Contain ${NET_1_DHCP_IP} None
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 10s
- ... Verify Flows Are Present For ELAN Service
- ... ${OS_CMP1_IP}
- ... ${smac_cn1}
- ... ${NET_1_MACS}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[0]
- ... ping -c 3 ${NET_1_VM_IPS}[1]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[1]
- ... ping -c 3 ${NET_1_VM_IPS}[0]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
-
-Delete All elan_net_1 VM And Verify Flow Table Updated
- [Documentation] Verify Flow table after all VM instance deleted
- FOR ${vm} IN @{NET_1_VMS}
- OpenStackOperations.Delete Vm Instance ${vm}
- END
- Verify Flows Are Removed For ELAN Service On All compute Nodes ${NET_1_MACS}
-
-Verify Datapath for Multiple ELAN with Multiple DPN
- [Documentation] Verify Flow Table and Data path for Multiple ELAN with Multiple DPN
- [Setup] BuiltIn.Run Keywords SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
- ... AND MultipleElan Testsuite Setup
- ${smac_cn1} = BuiltIn.Create List ${VM_MACAddr_elan_net_2}[0] ${VM_MACAddr_elan_net_3}[0]
- ${smac_cn2} = BuiltIn.Create List ${VM_MACAddr_elan_net_2}[1] ${VM_MACAddr_elan_net_3}[1]
- ${MAC_LIST} = BuiltIn.Create List @{VM_MACAddr_elan_net_2} @{VM_MACAddr_elan_net_3}
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 10s
- ... Verify Flows Are Present For ELAN Service
- ... ${OS_CMP1_IP}
- ... ${smac_cn1}
- ... ${MAC_LIST}
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 10s
- ... Verify Flows Are Present For ELAN Service
- ... ${OS_CMP2_IP}
- ... ${smac_cn2}
- ... ${MAC_LIST}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[1]
- ... ${NET_2_VM_IPS}[0]
- ... ping -c 3 ${NET_2_VM_IPS[1]}
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[2]
- ... ${NET_3_VM_IPS}[1]
- ... ping -c 3 ${NET_3_VM_IPS[0]}
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[1]
- ... ${NET_2_VM_IPS}[0]
- ... ping -c 3 ${NET_3_VM_IPS[0]}
- BuiltIn.Should Not Contain ${output} ${PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[2]
- ... ${NET_3_VM_IPS}[1]
- ... ping -c 3 ${NET_2_VM_IPS[1]}
- BuiltIn.Should Not Contain ${output} ${PING_REGEXP}
- @{NET_2_VM_IPS} ${NET_2_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_2_VMS}
- BuiltIn.Should Not Contain ${NET_2_VM_IPS} None
- BuiltIn.Should Not Contain ${NET_2_DHCP_IP} None
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 10s
- ... Verify Flows Are Present For ELAN Service
- ... ${OS_CMP1_IP}
- ... ${smac_cn1}
- ... ${MAC_LIST}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[1]
- ... ${NET_2_VM_IPS[1]}
- ... ping -c 3 ${NET_2_VM_IPS}[0]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
-
-
-*** Keywords ***
-Suite Setup
- OpenStackOperations.OpenStack Suite Setup
- Create Single Elan
- OpenStackOperations.Show Debugs @{NET_1_VMS}
- OpenStackOperations.Get Suite Debugs
-
-Create Single Elan
- OpenStackOperations.Create Allow All SecurityGroup ${SECURITY_GROUP}
- OpenStackOperations.Create Network ${NETWORKS}[0]
- OpenStackOperations.Create SubNet ${NETWORKS}[0] ${SUBNETS}[0] ${SUBNET_CIDRS[0]}
- OpenStackOperations.Create Port ${NETWORKS}[0] ${NET_1_PORTS[0]} sg=${SECURITY_GROUP}
- OpenStackOperations.Create Port ${NETWORKS}[0] ${NET_1_PORTS[1]} sg=${SECURITY_GROUP}
- BuiltIn.Wait Until Keyword Succeeds 3s 1s Utils.Check For Elements At URI ${PORT_URL} ${NET_1_PORTS}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${NET_1_PORTS[0]}
- ... ${NET_1_VMS[0]}
- ... ${OS_CMP1_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${NET_1_PORTS[1]}
- ... ${NET_1_VMS[1]}
- ... ${OS_CMP2_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- @{NET_1_VM_IPS} ${NET_1_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_1_VMS}
- Builtin.Set Suite Variable @{NET_1_VM_IPS}
- BuiltIn.Should Not Contain ${NET_1_VM_IPS} None
- BuiltIn.Should Not Contain ${NET_1_DHCP_IP} None
- @{NET_1_MACS} = BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 10s
- ... OpenStackOperations.Get Ports MacAddr
- ... ${NET_1_PORTS}
- Builtin.Set Suite Variable @{NET_1_MACS}
-
-MultipleElan Testsuite Setup
- [Documentation] Create additional ELAN for multipleElan with Multiple DPN test
- OpenStackOperations.Create Network ${NETWORKS}[1]
- OpenStackOperations.Create Network ${NETWORKS}[2]
- OpenStackOperations.Create SubNet ${NETWORKS}[1] ${SUBNETS}[1] ${SUBNET_CIDRS[1]}
- OpenStackOperations.Create SubNet ${NETWORKS}[2] ${SUBNETS}[2] ${SUBNET_CIDRS[2]}
- OpenStackOperations.Create Port ${NETWORKS}[1] ${NET_2_PORTS[0]} sg=${SECURITY_GROUP}
- OpenStackOperations.Create Port ${NETWORKS}[1] ${NET_2_PORTS[1]} sg=${SECURITY_GROUP}
- OpenStackOperations.Create Port ${NETWORKS}[2] ${NET_3_PORTS[0]} sg=${SECURITY_GROUP}
- OpenStackOperations.Create Port ${NETWORKS}[2] ${NET_3_PORTS[1]} sg=${SECURITY_GROUP}
- BuiltIn.Wait Until Keyword Succeeds 3s 1s Utils.Check For Elements At URI ${PORT_URL} ${NET_3_PORTS}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${NET_2_PORTS[0]}
- ... ${NET_2_VMS[0]}
- ... ${OS_CMP1_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${NET_2_PORTS[1]}
- ... ${NET_2_VMS[1]}
- ... ${OS_CMP2_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${NET_3_PORTS[0]}
- ... ${NET_3_VMS[0]}
- ... ${OS_CMP1_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${NET_3_PORTS[1]}
- ... ${NET_3_VMS[1]}
- ... ${OS_CMP2_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- @{NET_2_VM_IPS} ${NET_2_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_2_VMS}
- @{NET_3_VM_IPS} ${NET_3_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_3_VMS}
- Builtin.Set Suite Variable @{NET_2_VM_IPS}
- Builtin.Set Suite Variable @{NET_3_VM_IPS}
- BuiltIn.Should Not Contain ${NET_2_VM_IPS} None
- BuiltIn.Should Not Contain ${NET_2_DHCP_IP} None
- BuiltIn.Should Not Contain ${NET_3_VM_IPS} None
- BuiltIn.Should Not Contain ${NET_3_DHCP_IP} None
- @{VM_MACAddr_elan_net_2} = BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 10s
- ... OpenStackOperations.Get Ports MacAddr
- ... ${NET_2_PORTS}
- Builtin.Set Suite Variable @{VM_MACAddr_elan_net_2}
- @{VM_MACAddr_elan_net_3} = BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 10s
- ... OpenStackOperations.Get Ports MacAddr
- ... ${NET_3_PORTS}
- Builtin.Set Suite Variable @{VM_MACAddr_elan_net_3}
- OpenStackOperations.Show Debugs @{NET_2_VMS} @{NET_3_VMS}
- OpenStackOperations.Get Suite Debugs
-
-Verify Flows Are Present For ELAN Service
- [Arguments] ${ip} ${smacs} ${dmacs}
- ${flow_output} = Utils.Run Command On Remote System And Log
- ... ${ip}
- ... sudo ovs-ofctl -O OpenFlow13 dump-flows ${INTEGRATION_BRIDGE}
- BuiltIn.Should Contain ${flow_output} table=${ELAN_SMACTABLE}
- ${smac_output} = String.Get Lines Containing String ${flow_output} table=${ELAN_SMACTABLE}
- Builtin.Log ${smac_output}
- FOR ${smac} IN @{smacs}
- ${resp} = BuiltIn.Should Contain ${smac_output} ${smac}
- END
- BuiltIn.Should Contain ${flow_output} table=${ELAN_DMACTABLE}
- ${dmac_output} = String.Get Lines Containing String ${flow_output} table=${ELAN_DMACTABLE}
- Builtin.Log ${dmac_output}
- FOR ${dmac} IN @{dmacs}
- ${resp} = BuiltIn.Should Contain ${dmac_output} ${dmac}
- END
- BuiltIn.Should Contain ${flow_output} table=${ELAN_UNKNOWNMACTABLE}
- ${smac_output} = String.Get Lines Containing String ${flow_output} table=${ELAN_UNKNOWNMACTABLE}
- Builtin.Log ${smac_output}
-
-Verify Flows Are Removed For ELAN Service
- [Arguments] ${ip} ${smacs}
- ${flow_output} = Utils.Run Command On Remote System And Log
- ... ${ip}
- ... sudo ovs-ofctl -O OpenFlow13 dump-flows ${INTEGRATION_BRIDGE}
- BuiltIn.Should Contain ${flow_output} table=${ELAN_SMACTABLE}
- ${smac_output} = String.Get Lines Containing String ${flow_output} table=${ELAN_SMACTABLE}
- Builtin.Log ${smac_output}
- FOR ${smac} IN @{smacs}
- ${resp} = BuiltIn.Should Not Contain ${smac_output} ${smac}
- END
- BuiltIn.Should Contain ${flow_output} table=${ELAN_DMACTABLE}
- ${dmac_output} = String.Get Lines Containing String ${flow_output} table=${ELAN_DMACTABLE}
- Builtin.Log ${dmac_output}
- FOR ${dmac} IN @{smacs}
- ${resp} = BuiltIn.Should Not Contain ${dmac_output} ${dmac}
- END
-
-Verify Flows Are Removed For ELAN Service On All compute Nodes
- [Arguments] ${smacs}
- FOR ${ip} IN @{OS_CMP_IPS}
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 10s
- ... Verify Flows Are Removed For ELAN Service
- ... ${ip}
- ... ${smacs}
- END
+++ /dev/null
-*** Settings ***
-Documentation Test Suite for elan interface and service recovery
-
-Library Collections
-Library String
-Resource ../../../libraries/DevstackUtils.robot
-Resource ../../../libraries/FlowLib.robot
-Resource ../../../libraries/KarafKeywords.robot
-Resource ../../../libraries/OpenStackOperations.robot
-Resource ../../../libraries/OVSDB.robot
-Resource ../../../libraries/SetupUtils.robot
-Resource ../../../libraries/Utils.robot
-Resource ../../../libraries/VpnOperations.robot
-Resource ../../../variables/netvirt/Variables.robot
-Resource ../../../variables/Variables.robot
-
-Suite Setup Suite Setup
-Suite Teardown OpenStackOperations.OpenStack Suite Teardown
-Test Setup SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
-Test Teardown OpenStackOperations.Get Test Teardown Debugs
-
-
-*** Variables ***
-${REQ_NETWORK} elansr_net_1
-${REQ_SUBNET} elansr_sub_1
-${REQ_SUBNET_CIDR} 85.1.0.0/16
-${SECURITY_GROUP} elansr_sg
-${SERVICE-STATUS-CLI} srm:recover service elan
-${INTERFACE-STATUS-CLI} srm:recover instance elan-interface
-${NUM_OF_PORTS_PER_HOST} 2
-@{NET_1_VMS} elansr_net_1_vm_1 elansr_net_1_vm_2
-@{NET_2_VMS} elansr_net_2_vm_3 elansr_net_2_vm_4
-@{PORT_LIST} elansr_net_1_port_1 elansr_net_1_port_2 elansr_net_1_port_3 elansr_net_1_port_4
-
-
-*** Test Cases ***
-To Verify ELAN Service Recovery
- [Documentation] To Verify Elan Service recovery by deleting and recovering multiple flows
- OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${ELAN_SMAC_TABLE}
- ... True
- ... ${EMPTY}
- ... dl_src=${PORT_MAC_ADDR}[0]
- ... actions=goto_table:${ELAN_DMACTABLE}
- OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP2_IP}
- ... ${ELAN_SMAC_TABLE}
- ... True
- ... ${EMPTY}
- ... dl_src=${PORT_MAC_ADDR}[2]
- ... actions=goto_table:${ELAN_DMACTABLE}
- ${flow_id} = FlowLib.Get Flow Id ${DPNID_1} ${ELAN_SMAC_TABLE} ${PORT_MAC_ADDR}[0]
- FlowLib.Delete Flow Via Restconf ${DPNID_1} ${ELAN_SMAC_TABLE} ${flow_id}
- ${flow_id} = FlowLib.Get Flow Id ${DPNID_2} ${ELAN_SMAC_TABLE} ${PORT_MAC_ADDR}[2]
- FlowLib.Delete Flow Via Restconf ${DPNID_2} ${ELAN_SMAC_TABLE} ${flow_id}
- ${mac_elements} = BuiltIn.Create List ${PORT_MAC_ADDR}[0]
- Utils.Check For Elements Not At URI
- ... ${CONFIG_NODES_API}/node/openflow:${DPNID_1}/table/${ELAN_SMAC_TABLE}
- ... ${mac_elements}
- ${mac_elements} = BuiltIn.Create List ${PORT_MAC_ADDR}[2]
- Utils.Check For Elements Not At URI
- ... ${CONFIG_NODES_API}/node/openflow:${DPNID_2}/table/${ELAN_SMAC_TABLE}
- ... ${mac_elements}
- BuiltIn.Wait Until Keyword Succeeds
- ... 10s
- ... 5s
- ... OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${ELAN_SMAC_TABLE}
- ... False
- ... ${EMPTY}
- ... dl_src=${PORT_MAC_ADDR}[0]
- BuiltIn.Wait Until Keyword Succeeds
- ... 10s
- ... 5s
- ... OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP2_IP}
- ... ${ELAN_SMAC_TABLE}
- ... False
- ... ${EMPTY}
- ... dl_src=${PORT_MAC_ADDR}[2]
- KarafKeywords.Issue Command On Karaf Console ${SERVICE-STATUS-CLI}
- OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${ELAN_SMAC_TABLE}
- ... True
- ... ${EMPTY}
- ... dl_src=${PORT_MAC_ADDR}[0]
- ... actions=goto_table:${ELAN_DMACTABLE}
- OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP2_IP}
- ... ${ELAN_SMAC_TABLE}
- ... True
- ... ${EMPTY}
- ... dl_src=${PORT_MAC_ADDR}[2]
- ... actions=goto_table:${ELAN_DMACTABLE}
- ${mac_elements} = BuiltIn.Create List ${PORT_MAC_ADDR}[0]
- Utils.Check For Elements At URI
- ... ${CONFIG_NODES_API}/node/openflow:${DPNID_1}/table/${ELAN_SMAC_TABLE}
- ... ${mac_elements}
- ${mac_elements} = BuiltIn.Create List ${PORT_MAC_ADDR}[2]
- Utils.Check For Elements At URI
- ... ${CONFIG_NODES_API}/node/openflow:${DPNID_2}/table/${ELAN_SMAC_TABLE}
- ... ${mac_elements}
-
-To Verify Elan Interface recovery
- [Documentation] To Verify the Elan Interface recovery by deleting single Flow
- BuiltIn.Wait Until Keyword Succeeds
- ... 60s
- ... 15s
- ... OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${ELAN_SMAC_TABLE}
- ... True
- ... ${EMPTY}
- ... dl_src=${PORT_MAC_ADDR}[0]
- ... actions=goto_table:${ELAN_DMACTABLE}
- ${flow_id} = FlowLib.Get Flow Id ${DPNID_1} ${ELAN_SMAC_TABLE} ${PORT_MAC_ADDR}[0]
- FlowLib.Delete Flow Via Restconf ${DPNID_1} ${ELAN_SMAC_TABLE} ${flow_id}
- ${mac_elements} = BuiltIn.Create List ${PORT_MAC_ADDR}[0]
- Utils.Check For Elements Not At URI
- ... ${CONFIG_NODES_API}/node/openflow:${DPNID_1}/table/${ELAN_SMAC_TABLE}
- ... ${mac_elements}
- BuiltIn.Wait Until Keyword Succeeds
- ... 60s
- ... 15s
- ... OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${ELAN_SMAC_TABLE}
- ... False
- ... ${EMPTY}
- ... dl_src=${PORT_MAC_ADDR}[0]
- ${elan_instance_id} = Get Elan Instance ID
- ${elan_interface_id} = Get Elan Interfaces ID ${elan_instance_id} ${PORT_MAC_ADDR}[0]
- Recover Elan Flows ${elan_interface_id}
- ${mac_elements} = BuiltIn.Create List ${PORT_MAC_ADDR}[0]
- BuiltIn.Wait Until Keyword Succeeds
- ... 10s
- ... 5s
- ... Utils.Check For Elements At URI
- ... ${CONFIG_NODES_API}/node/openflow:${DPNID_1}/table/${ELAN_SMAC_TABLE}
- ... ${mac_elements}
- OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${ELAN_SMAC_TABLE}
- ... True
- ... ${EMPTY}
- ... dl_src=${PORT_MAC_ADDR}[0]
- ... actions=goto_table:${ELAN_DMACTABLE}
-
-
-*** Keywords ***
-Suite Setup
- [Documentation] Test Suite for Elan interface and service recovery
- OpenStackOperations.OpenStack Suite Setup
- Create Setup
- OpenStackOperations.Show Debugs @{NET_1_VMS} @{NET_2_VMS}
- OpenStackOperations.Get Suite Debugs
-
-Create Neutron Ports
- [Documentation] Create required number of ports under previously created subnets
- FOR ${index} IN RANGE 0 ${NUM_OF_PORTS_PER_HOST}
- OpenStackOperations.Create Port ${REQ_NETWORK} ${PORT_LIST}[${index}] sg=${SECURITY_GROUP}
- OpenStackOperations.Create Port ${REQ_NETWORK} ${PORT_LIST}[${index + 2}] sg=${SECURITY_GROUP}
- END
- @{PORT_MAC_ADDR} = OpenStackOperations.Get Ports MacAddr ${PORT_LIST}
- BuiltIn.Set Suite Variable @{PORT_MAC_ADDR}
-
-Create Nova VMs
- [Documentation] Create Vm instances on compute nodes
- [Arguments] ${num_of_vms_per_dpn}
- FOR ${index} IN RANGE 0 ${num_of_vms_per_dpn}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${PORT_LIST}[${index}]
- ... ${NET_1_VMS}[${index}]
- ... ${OS_CMP1_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${PORT_LIST}[${index + 2}]
- ... ${NET_2_VMS}[${index}]
- ... ${OS_CMP2_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- END
- @{NET_1_VM_IPS} ${NET_1_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_1_VMS}
- @{NET_2_VM_IPS} ${NET_2_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_2_VMS}
- BuiltIn.Should Not Contain ${NET_1_VM_IPS} None
- BuiltIn.Should Not Contain ${NET_2_VM_IPS} None
- BuiltIn.Should Not Contain ${NET_1_DHCP_IP} None
- BuiltIn.Should Not Contain ${NET_2_DHCP_IP} None
-
-Create Setup
- [Documentation] Create basic topology
- BuiltIn.Wait Until Keyword Succeeds 60s 10s VpnOperations.Verify Tunnel Status as UP
- OpenStackOperations.Create Network ${REQ_NETWORK}
- OpenStackOperations.Create SubNet ${REQ_NETWORK} ${REQ_SUBNET} ${REQ_SUBNET_CIDR}
- OpenStackOperations.Create Allow All SecurityGroup ${SECURITY_GROUP}
- Create Neutron Ports
- Create Nova VMs ${2}
- ${DPNID_1} = OVSDB.Get DPID ${OS_CMP1_IP}
- ${DPNID_2} = OVSDB.Get DPID ${OS_CMP2_IP}
- BuiltIn.Set Suite Variable ${DPNID_1}
- BuiltIn.Set Suite Variable ${DPNID_2}
-
-Get Elan Instance ID
- [Documentation] Retrieving ELAN instance ID
- ${output} = KarafKeywords.Issue Command On Karaf Console elaninterface:show
- ${elan_instance} = String.Split String ${output}
- ${elan_instance_with_tag} = BuiltIn.Set Variable ${elan_instance[5]}
- ${elan_instance_id} = String.Split String ${elan_instance_with_tag} /
- RETURN ${elan_instance_id}[0]
-
-Get Elan Interfaces ID
- [Documentation] Getting the ELAN interface ID with corresponding mac address and returning interface ID list
- [Arguments] ${elan_id} ${mac}
- ${elan_output} = KarafKeywords.Issue Command On Karaf Console elanmactable:show ${elan_id}
- ${interface_id} = String.Get Regexp Matches ${elan_output} (${REGEX_UUID})\\s*${mac} 1
- RETURN ${interface_id}[0]
-
-Recover Elan Flows
- [Documentation] Recover ELAN flows for the given interfaces
- [Arguments] ${interface}
- ${recover_msg} = KarafKeywords.Issue Command On Karaf Console ${INTERFACE-STATUS-CLI} ${interface}
- BuiltIn.Should Contain ${recover_msg} RPC call to recover was successful
+++ /dev/null
-*** Settings ***
-Documentation Test suite for VM based Host Route Handling
-
-Library Collections
-Library RequestsLibrary
-Library SSHLibrary
-Library String
-Resource ../../../libraries/DevstackUtils.robot
-Resource ../../../libraries/OpenStackOperations.robot
-Resource ../../../libraries/VpnOperations.robot
-Resource ../../../variables/netvirt/Variables.robot
-Resource ../../../variables/Variables.robot
-
-Suite Setup Suite Setup
-Suite Teardown OpenStackOperations.OpenStack Suite Teardown
-Test Setup SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
-Test Teardown OpenStackOperations.Get Test Teardown Debugs
-
-
-*** Variables ***
-@{NETWORKS}
-... host_route_network_1
-... host_route_network_2
-... host_route_network_3
-... host_route_network_4
-@{SUBNETS}
-... host_route_subnet_1
-... host_route_subnet_2
-... host_route_subnet_3
-... host_route_subnet_4
-@{SUBNET_CIDR} 10.10.10.0 10.20.20.0 10.30.30.0 10.40.40.0
-${PREFIX24} /24
-${SECURITY_GROUP} host_route_security_group
-@{PORTS}
-... host_route_port_1
-... host_route_port_2
-... host_route_port_3
-... host_route_port_4
-... host_route_port_5
-... host_route_port_6
-... host_route_port_7
-@{GATEWAY_PORTS}
-... host_route_gw_port_1
-... host_route_gw_port_2
-... host_route_gw_port_3
-... host_route_gw_port_4
-... host_route_gw_port_5
-... host_route_gw_port_6
-... host_route_gw_port_7
-${ALLOWED_ADDRESS_PAIR} 0.0.0.0/0
-${NETWORK_1_VM} host_route_vm_1
-@{NETWORK_2_VMS} host_route_vm_2 host_route_vm_3
-@{NETWORK_3_VMS} host_route_vm_4 host_route_vm_5
-@{NETWORK_4_VMS} host_route_vm_6 host_route_vm_7
-@{GATEWAY_VMS} host_route_gw_vm_1 host_route_gw_vm_2
-${ROUTER} host_route_router_1
-@{NON_NEUTRON_DESTINATION} 5.5.5.0 6.6.6.0
-${NON_NEUTRON_NEXTHOP} 10.10.10.250
-
-
-*** Test Cases ***
-Verify creation of host route via openstack subnet create option
- [Documentation] Creating subnet host route via openstack cli and verifying in controller and openstack.
- OpenStackOperations.Create SubNet
- ... ${NETWORKS}[0]
- ... ${SUBNETS}[0]
- ... ${SUBNET_CIDR}[0]${PREFIX24}
- ... --host-route destination=${SUBNET_CIDR}[2]${PREFIX24},gateway=${NON_NEUTRON_NEXTHOP}
- ${SUBNET_GW_IP} = BuiltIn.Create List
- FOR ${subnet} IN @{SUBNETS}
- ${ip} = OpenStackOperations.Get Subnet Gateway Ip ${subnet}
- Collections.Append To List ${SUBNET_GW_IP} ${ip}
- END
- BuiltIn.Set Suite Variable ${SUBNET_GW_IP}
- ${elements} = BuiltIn.Create List
- ... "destination":"${SUBNET_CIDR}[2]${PREFIX24}","nexthop":"${NON_NEUTRON_NEXTHOP}"
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 5s
- ... Utils.Check For Elements At URI
- ... ${SUBNETWORK_URL}
- ... ${elements}
- Verify Hostroutes In Subnet
- ... ${SUBNETS}[0]
- ... destination='${SUBNET_CIDR}[2]${PREFIX24}',\\sgateway='${NON_NEUTRON_NEXTHOP}'
- OpenStackOperations.Create Port
- ... ${NETWORKS}[0]
- ... ${PORTS}[0]
- ... sg=${SECURITY_GROUP}
- ... allowed_address_pairs=${ALLOWED_ADDRESS_PAIR}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${PORTS}[0]
- ... ${NETWORK_1_VM}
- ... ${OS_CMP1_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- OpenStackOperations.Create Port
- ... ${NETWORKS}[0]
- ... ${GATEWAY_PORTS}[0]
- ... sg=${SECURITY_GROUP}
- ... allowed_address_pairs=${ALLOWED_ADDRESS_PAIR}
- OpenStackOperations.Create Vm Instance With Ports On Compute Node
- ... ${GATEWAY_PORTS}[0]
- ... ${GATEWAY_PORTS}[1]
- ... ${GATEWAY_VMS}[0]
- ... ${OS_CMP1_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- OpenStackOperations.Create Vm Instance With Ports On Compute Node
- ... ${GATEWAY_PORTS}[4]
- ... ${GATEWAY_PORTS}[5]
- ... ${GATEWAY_VMS}[1]
- ... ${OS_CMP2_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- OpenStackOperations.Poll VM Is ACTIVE ${NETWORK_1_VM}
- BuiltIn.Wait Until Keyword Succeeds 180s 15s OpenStackOperations.Get VM IP true ${NETWORK_1_VM}
- ${NETWORK_1_VM_IPS} ${NETWORK_1_DHCP_IP} ${VM_COSOLE_OUTPUT} = OpenStackOperations.Get VM IP
- ... true
- ... ${NETWORK_1_VM}
- BuiltIn.Set Suite Variable ${NETWORK_1_VM_IPS}
- @{GATEWAY_VM_IPS} ${GATEWAY_DHCP_IP} = OpenStackOperations.Get VM IPs @{GATEWAY_VMS}
- BuiltIn.Set Suite Variable @{GATEWAY_VM_IPS}
- #TODO: Verifiy the routes in VM.
- OpenStackOperations.Show Debugs ${NETWORK_1_VM} @{GATEWAY_VMS}
- OpenStackOperations.Get Suite Debugs
-
-Verify creation of host route via openstack subnet update option
- [Documentation] Creating host route using subnet update option and setting nexthop ip to subnet gateway ip. Verifying in controller and openstack.
- OpenStackOperations.Update SubNet
- ... ${SUBNETS}[0]
- ... --host-route destination=${NON_NEUTRON_DESTINATION}[0]${PREFIX24},gateway=${SUBNET_GW_IP}[0]
- ${elements} = BuiltIn.Create List
- ... "destination":"${NON_NEUTRON_DESTINATION}[0]${PREFIX24}","nexthop":"${SUBNET_GW_IP}[0]"
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 5s
- ... Utils.Check For Elements At URI
- ... ${SUBNETWORK_URL}
- ... ${elements}
- Verify Hostroutes In Subnet
- ... ${SUBNETS}[0]
- ... destination='${NON_NEUTRON_DESTINATION}[0]${PREFIX24}',\\sgateway='${SUBNET_GW_IP}[0]'
-
-Verify removal of host route
- [Documentation] Removing subnet host routes via cli and verifying in controller and openstack.
- OpenStackOperations.Unset SubNet
- ... ${SUBNETS}[0]
- ... --host-route destination=${NON_NEUTRON_DESTINATION}[0]${PREFIX24},gateway=${SUBNET_GW_IP}[0]
- ${elements} = BuiltIn.Create List
- ... "destination":"${NON_NEUTRON_DESTINATION}[0]${PREFIX24}","nexthop":"${SUBNET_GW_IP}[0]"
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 5s
- ... Utils.Check For Elements Not At URI
- ... ${SUBNETWORK_URL}
- ... ${elements}
- Verify No Hostroutes In Subnet
- ... ${SUBNETS}[0]
- ... destination='${NON_NEUTRON_DESTINATION}[0]${PREFIX24}',\\sgateway='${SUBNET_GW_IP}[0]'
-
-Verify creation of host route via openstack subnet set option with VM port as next hop IP
- [Documentation] Creating host route using subnet update option and setting nexthop to gateway vm ip and verifying in controller and openstack.
- OpenStackOperations.Update SubNet
- ... ${SUBNETS}[0]
- ... --host-route destination=${SUBNET_CIDR}[2]${PREFIX24},gateway=${GATEWAY_VM_IPS}[0]
- ${elements} = BuiltIn.Create List
- ... "destination":"${SUBNET_CIDR}[2]${PREFIX24}","nexthop":"${GATEWAY_VM_IPS}[0]"
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 5s
- ... Utils.Check For Elements At URI
- ... ${SUBNETWORK_URL}
- ... ${elements}
- Verify Hostroutes In Subnet
- ... ${SUBNETS}[0]
- ... destination='${SUBNET_CIDR}[2]${PREFIX24}',\\sgateway='${GATEWAY_VM_IPS}[0]'
-
-Verify creation of host route via openstack subnet set option with VM port as next hop IP with change in destination prefix
- [Documentation] Creating host route using subnet update option and setting nexthop ip to gateway vm ip and changing destination prefix.
- ... Verifying in controller and openstack.
- OpenStackOperations.Update SubNet
- ... ${SUBNETS}[0]
- ... --host-route destination=${SUBNET_CIDR}[1]${PREFIX24},gateway=${GATEWAY_VM_IPS}[0]
- ${elements} = BuiltIn.Create List
- ... "destination":"${SUBNET_CIDR}[1]${PREFIX24}","nexthop":"${GATEWAY_VM_IPS}[0]"
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 5s
- ... Utils.Check For Elements At URI
- ... ${SUBNETWORK_URL}
- ... ${elements}
- Verify Hostroutes In Subnet
- ... ${SUBNETS}[0]
- ... destination='${SUBNET_CIDR}[1]${PREFIX24}',\\sgateway='${GATEWAY_VM_IPS}[0]'
-
-Verify creation of host route via openstack subnet set option with change in next hop IP
- [Documentation] Creating host route using subnet update option and setting nexthop ip to new gateway vm ip without changing the
- ... destination prefix. Verifying in controller and openstack.
- OpenStackOperations.Update SubNet
- ... ${SUBNETS}[0]
- ... --host-route destination=${SUBNET_CIDR}[1]${PREFIX24},gateway=${GATEWAY_VM_IPS}[1]
- ${elements} = BuiltIn.Create List
- ... "destination":"${SUBNET_CIDR}[1]${PREFIX24}","nexthop":"${GATEWAY_VM_IPS}[1]"
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 5s
- ... Utils.Check For Elements At URI
- ... ${SUBNETWORK_URL}
- ... ${elements}
- Verify Hostroutes In Subnet
- ... ${SUBNETS}[0]
- ... destination='${SUBNET_CIDR}[1]${PREFIX24}',\\sgateway='${GATEWAY_VM_IPS}[1]'
-
-
-*** Keywords ***
-Suite Setup
- [Documentation] Creates initial setup.
- VpnOperations.Basic Suite Setup
- OpenStackOperations.Create Allow All SecurityGroup ${SECURITY_GROUP}
- FOR ${network} IN @{NETWORKS}
- OpenStackOperations.Create Network ${network}
- END
- FOR ${i} IN RANGE 1 4
- OpenStackOperations.Create SubNet ${NETWORKS}[${i}] ${SUBNETS}[${i}] ${SUBNET_CIDR}[${i}]${PREFIX24}
- OpenStackOperations.Create Port
- ... ${NETWORKS}[${i}]
- ... ${PORTS}[${i}]
- ... sg=${SECURITY_GROUP}
- ... allowed_address_pairs=${ALLOWED_ADDRESS_PAIR}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${PORTS}[${i}]
- ... ${NETWORK_${i+1}_VMS}[0]
- ... ${OS_CMP1_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- OpenStackOperations.Create Port
- ... ${NETWORKS}[${i}]
- ... ${PORTS}[${i+3}]
- ... sg=${SECURITY_GROUP}
- ... allowed_address_pairs=${ALLOWED_ADDRESS_PAIR}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${PORTS}[${i+3}]
- ... ${NETWORK_${i+1}_VMS}[1]
- ... ${OS_CMP2_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- OpenStackOperations.Create Port
- ... ${NETWORKS}[${i}]
- ... ${GATEWAY_PORTS}[${i}]
- ... sg=${SECURITY_GROUP}
- ... allowed_address_pairs=${ALLOWED_ADDRESS_PAIR}
- OpenStackOperations.Create Port
- ... ${NETWORKS}[${i}]
- ... ${GATEWAY_PORTS}[${i+3}]
- ... sg=${SECURITY_GROUP}
- ... allowed_address_pairs=${ALLOWED_ADDRESS_PAIR}
- END
- @{NETWORK_2_VM_IPS} ${NETWORK_2_DHCP_IP} = OpenStackOperations.Get VM IPs @{NETWORK_2_VMS}
- BuiltIn.Set Suite Variable @{NETWORK_2_VM_IPS}
- @{NETWORK_3_VM_IPS} ${NETWORK_3_DHCP_IP} = OpenStackOperations.Get VM IPs @{NETWORK_3_VMS}
- BuiltIn.Set Suite Variable @{NETWORK_3_VM_IPS}
- @{NETWORK_4_VM_IPS} ${NETWORK_4_DHCP_IP} = OpenStackOperations.Get VM IPs @{NETWORK_4_VMS}
- BuiltIn.Set Suite Variable @{NETWORK_4_VM_IPS}
- OpenStackOperations.Show Debugs @{NETWORK_2_VMS} @{NETWORK_3_VMS} @(NETWORK_4_VMS)
- OpenStackOperations.Get Suite Debugs
-
-Verify Hostroutes In Subnet
- [Documentation] Show subnet with openstack request and verifies given hostroute in subnet.
- [Arguments] ${subnet_name} @{elements}
- ${output} = OpenStackOperations.Show SubNet ${subnet_name}
- FOR ${element} IN @{elements}
- BuiltIn.Should Match Regexp ${output} ${element}
- END
-
-Verify No Hostroutes In Subnet
- [Documentation] Show subnet with openstack request and verifies no given hostroute in subnet.
- [Arguments] ${subnet_name} @{elements}
- ${output} = OpenStackOperations.Show SubNet ${subnet_name}
- FOR ${element} IN @{elements}
- BuiltIn.Should Not Match Regexp ${output} ${element}
- END
+++ /dev/null
-*** Settings ***
-Documentation Test Suite for Gateway mac based L2L3 seggragation
-
-Library Collections
-Library RequestsLibrary
-Library SSHLibrary
-Library String
-Resource ../../libraries/BgpOperations.robot
-Resource ../../libraries/DevstackUtils.robot
-Resource ../../libraries/KarafKeywords.robot
-Resource ../../libraries/OVSDB.robot
-Resource ../../libraries/OpenStackOperations.robot
-Resource ../../libraries/OvsManager.robot
-Resource ../../libraries/SetupUtils.robot
-Resource ../../libraries/Utils.robot
-Resource ../../libraries/VpnOperations.robot
-Resource ../../variables/netvirt/Variables.robot
-Resource ../../variables/Variables.robot
-
-Suite Setup Suite Setup
-Suite Teardown OpenStackOperations.OpenStack Suite Teardown
-Test Setup SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
-Test Teardown OpenStackOperations.Get Test Teardown Debugs
-
-
-*** Variables ***
-${REQ_NUM_NET} 2
-${REQ_NUM_SUBNET} 2
-${REQ_NUM_OF_PORTS} 4
-${REQ_NUM_OF_VMS_PER_DPN} 2
-${NUM_OF_PORTS_PER_HOST} 2
-${NEXTHOP} 0.0.0.0
-@{REQ_NETWORKS} l2l3_gw_mac_arp_net1 l2l3_gw_mac_arp_net2
-@{VM_NAMES}
-... l2l3_gw_mac_arp_vm1
-... l2l3_gw_mac_arp_vm2
-... l2l3_gw_mac_arp_vm3
-... l2l3_gw_mac_arp_vm4
-@{NET_1_VMS} l2l3_gw_mac_arp_vm1 l2l3_gw_mac_arp_vm2
-@{NET_2_VMS} l2l3_gw_mac_arp_vm3 l2l3_gw_mac_arp_vm4
-@{PORT_LIST}
-... l2l3_gw_mac_arp_port1
-... l2l3_gw_mac_arp_port2
-... l2l3_gw_mac_arp_port3
-... l2l3_gw_mac_arp_port4
-@{REQ_SUBNETS} l2l3_gw_mac_arp_subnet1 l2l3_gw_mac_arp_subnet2
-@{REQ_SUBNET_CIDR} 10.1.0.0/16 10.2.0.0/16
-${REQ_ROUTER} l2l3_gw_mac_arp_rtr1
-@{DEFAULT_GATEWAY_IPS} 10.1.0.1 10.2.0.1
-${VPN_INSTANCE_ID} 4ae8cd92-48ca-49b5-94e1-b2921a261112
-${VPN_NAME} l2l3_gw_mac_arp_vpn1
-${VPN_REST} ${CONFIG_API}/odl-l3vpn:vpn-instance-to-vpn-id/
-${VRF_ID} 100:31
-${L3VPN_RD} ["${VRF_ID}"]
-${SECURITY_GROUP} l2l3_gw_mac_arp_sg
-${TABLE_NO_0} 0
-${TABLE_NO_220} 220
-${DUMP_FLOWS} sudo ovs-ofctl -O OpenFlow13 dump-flows ${INTEGRATION_BRIDGE}
-${GROUP_FLOWS} sudo ovs-ofctl -O OpenFlow13 dump-groups ${INTEGRATION_BRIDGE}
-${ARP_REQUEST_OPERATIONAL_CODE} 1
-${ARP_RESPONSE_OPERATIONAL_CODE} 2
-${RESUBMIT_VALUE} actions=resubmit\(,${DISPATCHER_TABLE}\)
-${PING_COUNT_VALUE} 0
-
-
-*** Test Cases ***
-Verify that table Miss entry for GWMAC table 19 points to table 17 dispatcher table
- [Documentation] To Verify there should be an entry for table=17,in the table=19 DUMP_FLOWS
- OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${GWMAC_TABLE}
- ... True
- ... ${EMPTY}
- ... priority=0
- ... actions=resubmit(,17)
-
-Verify the pipeline flow from dispatcher table 17 (L3VPN) to table 19
- [Documentation] To Verify the end to end pipeline flow from table=17 to table=19 DUMP_FLOWS
- ${subport_id_1} = OpenStackOperations.Get Sub Port Id ${PORT_LIST[0]}
- ${subport_id_2} = OpenStackOperations.Get Sub Port Id ${PORT_LIST[1]}
- ${port_num_1} = OVSDB.Get Port Number ${subport_id_1} ${OS_CMP1_IP}
- ${port_num_2} = OVSDB.Get Port Number ${subport_id_2} ${OS_CMP1_IP}
- OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${TABLE_NO_0}
- ... True
- ... ${EMPTY}
- ... in_port=${port_num_1}
- ... goto_table:${DISPATCHER_TABLE}
- ${metadata} = OVSDB.Get Port Metadata ${OS_CMP1_IP} ${port_num_1}
- ${vpn_id} = VpnOperations.VPN Get L3VPN ID ${VRF_ID}
- OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${DISPATCHER_TABLE}
- ... True
- ... |grep ${vpn_id}
- ... ${vpn_id}
- ... goto_table:${GWMAC_TABLE}
- ${gw_mac_addr} = OpenStackOperations.Get Port Mac Address From Ip ${DEFAULT_GATEWAY_IPS[0]}
- Verify Flows Are Present For ARP ${ARP_REQUEST_OPERATIONAL_CODE} |grep ${metadata}
- OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${ARP_RESPONSE_TABLE}
- ... True
- ... ${EMPTY}
- ... set_field:${gw_mac_addr}
- ... resubmit(,220)
- OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${TABLE_NO_220}
- ... True
- ... ${EMPTY}
- ... output:${port_num_2}
-
-Verify that ARP requests and ARP response received on GWMAC table are punted to controller for learning ,resubmitted to table 17,sent to ARP responder
- [Documentation] To verify the ARP Request and ARP response entry should be there after the dump_groups and dispatcher table should point to ARP responder
- Verify Flows Are Present For ARP ${ARP_REQUEST_OPERATIONAL_CODE}
- Verify Flows Are Present For ARP ${ARP_RESPONSE_OPERATIONAL_CODE}
-
-Verify that table miss entry for table 17 should not point to table 81 arp table
- [Documentation] To Verify there should not be an entry for the arp_responder_table in table=17
- OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${DISPATCHER_TABLE}
- ... False
- ... |grep priority=0
- ... goto_table:${ARP_RESPONSE_TABLE}
-
-Verify that Multiple GWMAC entries in GWMAC table points to FIB table 21 (L3VPN pipeline)
- [Documentation] To Verify the one or more default gateway mac enteries on the table=19 flows that points to FIB table 21
- ${gw_mac_addr_1} = OpenStackOperations.Get Port Mac Address From Ip ${DEFAULT_GATEWAY_IPS[0]}
- ${gw_mac_addr_2} = OpenStackOperations.Get Port Mac Address From Ip ${DEFAULT_GATEWAY_IPS[1]}
- OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${GWMAC_TABLE}
- ... True
- ... ${EMPTY}
- ... dl_dst=${gw_mac_addr_1}
- ... actions=goto_table:${L3_TABLE}
- ${pkt_count_before_ping} = OvsManager.Get Packet Count From Table
- ... ${OS_CMP1_IP}
- ... ${INTEGRATION_BRIDGE}
- ... table=${GWMAC_TABLE} | grep dl_dst=${gw_mac_addr_1}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${REQ_NETWORKS}[0]
- ... ${NET_1_VM_IPS}[0]
- ... ping -c 8 ${NET_2_VM_IPS}[1]
- BuiltIn.Should Contain ${output} 64 bytes
- ${pkt_count_after_ping} = OvsManager.Get Packet Count From Table
- ... ${OS_CMP1_IP}
- ... ${INTEGRATION_BRIDGE}
- ... table=${GWMAC_TABLE} | grep dl_dst=${gw_mac_addr_1}
- ${pkt_diff} = Evaluate int(${pkt_count_after_ping})-int(${pkt_count_before_ping})
- BuiltIn.Should Be True ${pkt_diff} > ${PING_COUNT_VALUE}
- ${pkt_count_before_ping} = OvsManager.Get Packet Count From Table
- ... ${OS_CMP2_IP}
- ... ${INTEGRATION_BRIDGE}
- ... table=${GWMAC_TABLE} | grep dl_dst=${gw_mac_addr_1}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${REQ_NETWORKS}[0]
- ... ${NET_2_VM_IPS}[0]
- ... ping -c 8 ${NET_1_VM_IPS}[1]
- BuiltIn.Should Contain ${output} 64 bytes
- ${pkt_count_after_ping} = OvsManager.Get Packet Count From Table
- ... ${OS_CMP2_IP}
- ... ${INTEGRATION_BRIDGE}
- ... table=${GWMAC_TABLE} | grep dl_dst=${gw_mac_addr_1}
- ${pkt_diff} = Evaluate int(${pkt_count_after_ping})-int(${pkt_count_before_ping})
- BuiltIn.Should Be True ${pkt_diff} > ${PING_COUNT_VALUE}
-
-Verify table miss entry of ARP responder table points to drop actions
- [Documentation] To Verify the default flow entry of table=81 drops when openflow controller connected to compute node
- OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${ARP_RESPONSE_TABLE}
- ... True
- ... |grep priority=0
- ... actions=drop
-
-Verify ARP eth_type entries and actions for ARP request and ARP response are populated on GWMAC table
- [Documentation] To Verify the entry of ARP request(arp=1) and ARP response(arp=2) in table=19
- OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${GWMAC_TABLE}
- ... True
- ... ${EMPTY}
- ... arp_op=${ARP_REQUEST_OPERATIONAL_CODE}
- ... ${RESUBMIT_VALUE}
-
-Verify GWMAC entires are populated with Neutron Router MAC address per network in GWMAC table
- [Documentation] To Verify gateway mac entires are populated with neutron router mac address for network with vpn dissociation from router
- VpnOperations.Dissociate VPN to Router routerid=${router_id} vpnid=${VPN_INSTANCE_ID}
- ${gw_mac_addr} = OpenStackOperations.Get Port Mac Address From Ip ${DEFAULT_GATEWAY_IPS[1]}
- BuiltIn.Wait Until Keyword Succeeds
- ... 60s
- ... 15s
- ... OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${GWMAC_TABLE}
- ... True
- ... ${EMPTY}
- ... dl_dst=${gw_mac_addr}
- ... actions=goto_table:${L3_TABLE}
- ${output} = VpnOperations.Get Fib Entries session
- BuiltIn.Should Match Regexp ${output} .*${DEFAULT_GATEWAY_IPS}[1]/32.*${NEXTHOP}
-
-Verify GWMAC entires are populated with port MAC address for network with vpn association to router in GWMAC table
- [Documentation] To Verify gateway mac entires are populated with port MAC address for network with vpn association to router
- VpnOperations.Associate VPN to Router routerid=${router_id} vpnid=${VPN_INSTANCE_ID}
- ${gw_mac_addr} = OpenStackOperations.Get Port Mac Address From Ip ${DEFAULT_GATEWAY_IPS[1]}
- BuiltIn.Wait Until Keyword Succeeds
- ... 60s
- ... 15s
- ... OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${GWMAC_TABLE}
- ... True
- ... ${EMPTY}
- ... dl_dst=${gw_mac_addr}
- ... actions=goto_table:${L3_TABLE}
- ${output} = VpnOperations.Get Fib Entries session
- BuiltIn.Should Match Regexp ${output} .*${VRF_ID}.*${REQ_SUBNET_CIDR[0]}
- BuiltIn.Should Match Regexp ${output} .*${VRF_ID}.*${REQ_SUBNET_CIDR[1]}
-
-
-*** Keywords ***
-Suite Setup
- [Documentation] Test Suite for Gateway mac based L2L3 seggragation
- VpnOperations.Basic Suite Setup
- Create Setup
- OpenStackOperations.Show Debugs @{NET_1_VMS} @{NET_2_VMS}
- OpenStackOperations.Get Suite Debugs
-
-Create Neutron Networks
- [Documentation] Create required number of networks
- [Arguments] ${NUM_OF_NETWORK}
- FOR ${NET} IN @{REQ_NETWORKS}
- OpenStackOperations.Create Network ${NET}
- END
- BuiltIn.Wait Until Keyword Succeeds
- ... 3s
- ... 1s
- ... Utils.Check For Elements At URI
- ... ${NETWORK_URL}
- ... ${REQ_NETWORKS}
-
-Create Neutron Subnets
- [Documentation] Create required number of subnets for previously created networks
- [Arguments] ${NUM_OF_NETWORK}
- FOR ${index} IN RANGE 0 ${NUM_OF_NETWORK}
- OpenStackOperations.Create SubNet
- ... ${REQ_NETWORKS[${index}]}
- ... ${REQ_SUBNETS[${index}]}
- ... ${REQ_SUBNET_CIDR[${index}]}
- END
- BuiltIn.Wait Until Keyword Succeeds
- ... 3s
- ... 1s
- ... Utils.Check For Elements At URI
- ... ${SUBNETWORK_URL}
- ... ${REQ_SUBNETS}
-
-Create Neutron Ports
- [Documentation] Create required number of ports under previously created subnets
- FOR ${index} IN RANGE 0 ${NUM_OF_PORTS_PER_HOST}
- OpenStackOperations.Create Port ${REQ_NETWORKS}[${index}] ${PORT_LIST}[${index}] sg=${SECURITY_GROUP}
- OpenStackOperations.Create Port
- ... ${REQ_NETWORKS}[${index}]
- ... ${PORT_LIST}[${index + 2}]
- ... sg=${SECURITY_GROUP}
- END
- BuiltIn.Wait Until Keyword Succeeds 3s 1s Utils.Check For Elements At URI ${PORT_URL} ${PORT_LIST}
-
-Create Nova VMs
- [Documentation] Create Vm instances on compute nodes
- [Arguments] ${NUM_OF_VMS_PER_DPN}
- FOR ${index} IN RANGE 0 ${NUM_OF_VMS_PER_DPN}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${PORT_LIST[${index}]}
- ... ${VM_NAMES[${index}]}
- ... ${OS_CMP1_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- END
- ${start} = Evaluate ${index}+1
- ${NUM_OF_VMS_PER_DPN} = Evaluate ${start}+${NUM_OF_VMS_PER_DPN}
- FOR ${index} IN RANGE ${start} ${NUM_OF_VMS_PER_DPN}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${PORT_LIST[${index}]}
- ... ${VM_NAMES[${index}]}
- ... ${OS_CMP2_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- END
- @{NET_1_VM_IPS} ${NET_1_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_1_VMS}
- @{NET_2_VM_IPS} ${NET_2_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_2_VMS}
- BuiltIn.Set Suite Variable @{NET_1_VM_IPS}
- BuiltIn.Set Suite Variable @{NET_2_VM_IPS}
- BuiltIn.Should Not Contain ${NET_1_VM_IPS} None
- BuiltIn.Should Not Contain ${NET_2_VM_IPS} None
- BuiltIn.Should Not Contain ${NET_1_DHCP_IP} None
- BuiltIn.Should Not Contain ${NET_2_DHCP_IP} None
-
-Create Setup
- [Documentation] Create Two Networks, Two Subnets, Four Ports And Four VMs on each DPN
- ${output} = Issue Command On Karaf Console ${TEP_SHOW}
- Create Neutron Networks ${REQ_NUM_NET}
- Create Neutron Subnets ${REQ_NUM_SUBNET}
- OpenStackOperations.Create Allow All SecurityGroup ${SECURITY_GROUP}
- Create Neutron Ports
- OpenStackOperations.Create Router ${REQ_ROUTER}
- Add Interfaces To Routers
- Create Nova VMs ${REQ_NUM_OF_VMS_PER_DPN}
- ${router_id} = OpenStackOperations.Get Router Id ${REQ_ROUTER}
- Builtin.Set Suite Variable ${router_id}
- VpnOperations.VPN Create L3VPN
- ... vpnid=${VPN_INSTANCE_ID}
- ... name=${VPN_NAME}
- ... rd=${L3VPN_RD}
- ... exportrt=${L3VPN_RD}
- ... importrt=${L3VPN_RD}
- VpnOperations.Associate VPN to Router routerid=${router_id} vpnid=${VPN_INSTANCE_ID}
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_ID}
-
-Add Interfaces To Routers
- [Documentation] Add Multiple Interfaces to Router and Verify
- FOR ${INTERFACE} IN @{REQ_SUBNETS}
- OpenStackOperations.Add Router Interface ${REQ_ROUTER} ${INTERFACE}
- END
- ${interface_output} = OpenStackOperations.Show Router Interface ${REQ_ROUTER}
- FOR ${INTERFACE} IN @{REQ_SUBNETS}
- ${subnet_id} = OpenStackOperations.Get Subnet Id ${INTERFACE}
- BuiltIn.Should Contain ${interface_output} ${subnet_id}
- END
-
-Verify Flows Are Present For ARP
- [Documentation] Verify Flows Are Present For ARP entry
- [Arguments] ${arp_op_code} ${additional_args}=${EMPTY}
- ${flow_output} = Utils.Run Command On Remote System
- ... ${OS_CMP1_IP}
- ... ${DUMP_FLOWS} | grep table=${GWMAC_TABLE}
- BuiltIn.Should Contain ${flow_output} arp,arp_op=${arp_op_code} ${RESUBMIT_VALUE}
- ${flow_output} = Utils.Run Command On Remote System
- ... ${OS_CMP1_IP}
- ... ${DUMP_FLOWS} | grep table=${DISPATCHER_TABLE} ${additional_args}
- BuiltIn.Should Contain ${flow_output} goto_table:${ARP_CHECK_TABLE}
- ${flow_output} = Utils.Run Command On Remote System
- ... ${OS_CMP1_IP}
- ... ${DUMP_FLOWS} | grep table=${ARP_CHECK_TABLE}
- @{group_id} = String.Get Regexp Matches ${flow_output} group:(\\d+) 1
- BuiltIn.Should Contain ${flow_output} arp,arp_op=1 actions=group:${group_id[0]}
- ${flow_output} = Utils.Run Command On Remote System
- ... ${OS_CMP1_IP}
- ... ${GROUP_FLOWS} | grep group_id=${group_id[0]}
- BuiltIn.Should Contain ${flow_output} bucket=actions=resubmit(,81)
+++ /dev/null
-*** Settings ***
-Documentation Test Case to configure and validate default bfd configuration
-
-Resource ../../../libraries/KarafKeywords.robot
-Resource ../../../libraries/OpenStackOperations.robot
-Resource ../../../libraries/SetupUtils.robot
-Resource ../../../libraries/Utils.robot
-Resource ../../../libraries/VpnOperations.robot
-Resource ../../../variables/Variables.robot
-Resource ../../../variables/netvirt/Variables.robot
-
-Suite Setup Suite Setup
-Suite Teardown OpenStackOperations.OpenStack Suite Teardown
-Test Setup SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
-Test Teardown OpenStackOperations.Get Test Teardown Debugs
-
-
-*** Variables ***
-${BFD_CONFIG_ADD_CMD} bfd-config add
-${BFD_CONFIG_REMOVE_CMD} bfd-config del
-${BFD_CACHE_CMD} bfd-cache
-${BFD_TX} 6000
-${BFD_RX} 500
-${BFD_STATE} yes
-${BFD_MULTIPLIER} 3
-${BFD_MULTIHOP} yes
-
-
-*** Test Cases ***
-Verify BGP_BFD Configuration
- [Documentation] Validate bfd configuration parameters in ODL
- KarafKeywords.Issue Command On Karaf Console ${BFD_CONFIG_ADD_CMD}
- ${output} = KarafKeywords.Issue Command On Karaf Console ${BFD_CACHE_CMD}
- BuiltIn.Should Match Regexp
- ... ${output}
- ... .*${BFD_STATE}\\s+.*${BFD_RX}\\s+.*${BFD_TX}\\s+.*${BFD_MULTIPLIER}\\s+.*${BFD_MULTIHOP}
- KarafKeywords.Issue Command On Karaf Console ${BFD_CONFIG_REMOVE_CMD}
-
-
-*** Keywords ***
-Suite Setup
- [Documentation] Setup start suite
- VpnOperations.Basic Suite Setup
+++ /dev/null
-*** Settings ***
-Documentation The objective of this testsuite is to test QBGP and ODL for multipath/ECMP support.
-... QBGP should be capable to receive multiple ECMP paths from different DC-GWs and
-... to export the ECMP paths to ODL instead of best path selection.
-... ODL should be capable to receive ECMP paths and it should program the FIB with ECMP paths.
-
-Resource ../../../libraries/BgpOperations.robot
-Resource ../../../libraries/KarafKeywords.robot
-Resource ../../../libraries/OpenStackOperations.robot
-Resource ../../../libraries/Utils.robot
-Resource ../../../libraries/VpnOperations.robot
-Resource ../../../variables/Variables.robot
-
-Suite Setup Suite Setup
-Suite Teardown Stop Suite
-Test Setup SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
-Test Teardown Test Cleanup
-
-
-*** Variables ***
-@{DCGW_RD_IRT_ERT} 11:1 22:2 33:3
-@{DCGW_IP_LIST} ${TOOLS_SYSTEM_1_IP} ${TOOLS_SYSTEM_2_IP} ${TOOLS_SYSTEM_3_IP}
-@{LABEL} 51 52 53
-${L3VPN_RD_IRT_ERT} ["${DCGW_RD_IRT_ERT}[0]"] ["${DCGW_RD_IRT_ERT}[1]"] ["${DCGW_RD_IRT_ERT}[2]"]
-@{MAX_PATH_LIST} 1 2 3 8 64
-@{MAX_PATH_INVALID_LIST} -1 0 65
-@{NETWORK_IP} 10.1.1.1 20.1.1.1 30.1.1.1
-@{NUM_OF_ROUTES} 1 2 3 4 5 6
-@{VPN_NAME} multipath_vpn_1 multipath_vpn_2 multipath_vpn_3
-@{VPN_ID}
-... 12345678-1234-1234-1234-123456789301
-... 12345678-1234-1234-1234-123456789302
-... 12345678-1234-1234-1234-123456789303
-@{NETWORKS} multipath_net_1 multipath_net_2 multipath_net_3
-@{SUBNETS} multipath_subnet_1 multipath_subnet_2 multipath_subnet_3
-@{SUBNET_CIDR} 22.1.1.0/24 33.1.1.0/24 44.1.1.0/24
-@{ROUTERS} multipath_router_1 multipath_router_2 multipath_router_3
-${AS_ID} 100
-${BGP_CACHE} bgp-cache
-${DIPSLAY_FIB} fib-show
-${ENABLE} enable
-${DISABLE} disable
-${MAXPATH_ERROR} error: --maxpath range[1 - 64]
-${NUM_OF_DCGW} 3
-${NUM_OF_L3VPN} 3
-${START_VALUE} 0
-
-
-*** Test Cases ***
-Verify ODL supports CLI for multipath configuration (enable/disable multipath)
- [Documentation] Enable and disable multipath on ODL using karaf CLI and verify
- Configure Multipath On ODL ${ENABLE}
- Verify Multipath ${ENABLE}
- Configure Multipath On ODL ${DISABLE}
- Verify Multipath ${DISABLE}
- Configure Multipath On ODL ${ENABLE}
- Verify Multipath ${ENABLE}
-
-Verify CSC supports CLI for max path configuration
- [Documentation] Verify CSC supports CLI for max path configuration
- FOR ${idx} IN RANGE ${START_VALUE} ${NUM_OF_DCGW}
- VpnOperations.VPN Create L3VPN
- ... name=${VPN_NAME}[${idx}]
- ... vpnid=${VPN_ID}[${idx}]
- ... rd=${L3VPN_RD_IRT_ERT}[${idx}]
- ... exportrt=${L3VPN_RD_IRT_ERT}[${idx}]
- ... importrt=${L3VPN_RD_IRT_ERT}[${idx}]
- END
- VpnOperations.Verify L3VPN On ODL @{VPN_ID}
- FOR ${dcgw} IN @{DCGW_IP_LIST}
- BgpOperations.Create L3VPN on DCGW ${dcgw} ${AS_ID} ${VPN_NAME}[0] ${DCGW_RD_IRT_ERT}[0]
- BgpOperations.Verify L3VPN On DCGW ${dcgw} ${VPN_NAME}[0] ${DCGW_RD_IRT_ERT}[0]
- END
- FOR ${idx} IN RANGE ${START_VALUE} ${NUM_OF_DCGW}
- Configure Maxpath ${MAX_PATH_LIST}[2] ${DCGW_RD_IRT_ERT}[${idx}]
- BuiltIn.Wait Until Keyword Succeeds
- ... 10s
- ... 2s
- ... Verify Maxpath
- ... ${MAX_PATH_LIST}[2]
- ... ${DCGW_RD_IRT_ERT}[${idx}]
- END
- BuiltIn.Wait Until Keyword Succeeds
- ... 60s
- ... 10s
- ... BgpOperations.Check BGP VPNv4 Nbr On ODL
- ... ${NUM_OF_DCGW}
- ... False
-
-Verify max-path error message with invalid inputs
- [Documentation] Verify max path error message while configuring maxpath with invalid range
- VpnOperations.VPN Create L3VPN
- ... name=${VPN_NAME}[0]
- ... vpnid=${VPN_ID}[0]
- ... rd=${L3VPN_RD_IRT_ERT}[0]
- ... exportrt=${L3VPN_RD_IRT_ERT}[0]
- ... importrt=${L3VPN_RD_IRT_ERT}[0]
- VpnOperations.Verify L3VPN On ODL ${VPN_ID}[0]
- FOR ${dcgw} IN @{DCGW_IP_LIST}
- BgpOperations.Create L3VPN on DCGW ${dcgw} ${AS_ID} ${VPN_NAME}[0] ${DCGW_RD_IRT_ERT}[0]
- BgpOperations.Verify L3VPN On DCGW ${dcgw} ${VPN_NAME}[0] ${DCGW_RD_IRT_ERT}[0]
- END
- FOR ${invalid} IN @{MAX_PATH_INVALID_LIST}
- Configure Maxpath ${invalid} ${DCGW_RD_IRT_ERT}[0]
- BuiltIn.Wait Until Keyword Succeeds 10s 2s Verify Maxpath ${invalid} ${DCGW_RD_IRT_ERT}[0]
- END
- BuiltIn.Wait Until Keyword Succeeds
- ... 60s
- ... 10s
- ... BgpOperations.Check BGP VPNv4 Nbr On ODL
- ... ${NUM_OF_DCGW}
- ... False
-
-Verify ODL supports dynamic configuration changes for max path value
- [Documentation] Verify ODL supports dynamic configuration changes for max path value
- VpnOperations.VPN Create L3VPN
- ... name=${VPN_NAME}[0]
- ... vpnid=${VPN_ID}[0]
- ... rd=${L3VPN_RD_IRT_ERT}[0]
- ... exportrt=${L3VPN_RD_IRT_ERT}[0]
- ... importrt=${L3VPN_RD_IRT_ERT}[0]
- VpnOperations.Verify L3VPN On ODL ${VPN_ID}[0]
- VpnOperations.Associate VPN to Router routerid=${router_id_list}[0] vpnid=${VPN_ID}[0]
- FOR ${dcgw} IN @{DCGW_IP_LIST}
- BgpOperations.Create L3VPN on DCGW ${dcgw} ${AS_ID} ${VPN_NAME}[0] ${DCGW_RD_IRT_ERT}[0]
- BgpOperations.Verify L3VPN On DCGW ${dcgw} ${VPN_NAME}[0] ${DCGW_RD_IRT_ERT}[0]
- END
- Configure Maxpath ${MAX_PATH_LIST}[2] ${DCGW_RD_IRT_ERT}[0]
- BuiltIn.Wait Until Keyword Succeeds 10s 2s Verify Maxpath ${MAX_PATH_LIST}[2] ${DCGW_RD_IRT_ERT}[0]
- FOR ${idx} IN RANGE ${START_VALUE} ${NUM_OF_DCGW}
- BgpOperations.Add Routes On DCGW
- ... ${DCGW_IP_LIST}[${idx}]
- ... ${DCGW_RD_IRT_ERT}[0]
- ... ${NETWORK_IP}[0]
- ... ${LABEL}[${idx}]
- END
- BuiltIn.Wait Until Keyword Succeeds 60s 10s BgpOperations.Check BGP VPNv4 Nbr On ODL ${NUM_OF_DCGW}
- BuiltIn.Wait Until Keyword Succeeds
- ... 60s
- ... 10s
- ... Verify Routing Entry On ODL
- ... ${DCGW_RD_IRT_ERT}[0]
- ... ${NETWORK_IP}[0]
- ... ${NUM_OF_ROUTES}[2]
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 5s
- ... Verify FIB Entry On ODL
- ... ${NETWORK_IP}[0]
- ... ${NUM_OF_ROUTES}[2]
- FOR ${index} IN RANGE 0 3
- Configure Maxpath ${MAX_PATH_LIST}[${index}] ${DCGW_RD_IRT_ERT}[0]
- BuiltIn.Wait Until Keyword Succeeds
- ... 10s
- ... 2s
- ... Verify Maxpath
- ... ${MAX_PATH_LIST}[${index}]
- ... ${DCGW_RD_IRT_ERT}[0]
- BuiltIn.Wait Until Keyword Succeeds
- ... 60s
- ... 10s
- ... Verify Routing Entry On ODL
- ... ${DCGW_RD_IRT_ERT}[0]
- ... ${NETWORK_IP}[0]
- ... ${NUM_OF_ROUTES}[2]
- BuiltIn.Wait Until Keyword Succeeds
- ... 60s
- ... 10s
- ... Verify FIB Entry On ODL
- ... ${NETWORK_IP}[0]
- ... ${NUM_OF_ROUTES}[${index}]
- END
-
-Verify that ECMP path gets withdrawn by QBGP after disabling multipath
- [Documentation] Verify that ECMP path gets withdrawn by QBGP after disabling multipath by setting multipath value to 1
- VpnOperations.VPN Create L3VPN
- ... name=${VPN_NAME}[0]
- ... vpnid=${VPN_ID}[0]
- ... rd=${L3VPN_RD_IRT_ERT}[0]
- ... exportrt=${L3VPN_RD_IRT_ERT}[0]
- ... importrt=${L3VPN_RD_IRT_ERT}[0]
- VpnOperations.Verify L3VPN On ODL ${VPN_ID}[0]
- VpnOperations.Associate VPN to Router routerid=${router_id_list}[0] vpnid=${VPN_ID}[0]
- FOR ${dcgw} IN @{DCGW_IP_LIST}
- BgpOperations.Create L3VPN on DCGW ${dcgw} ${AS_ID} ${VPN_NAME}[0] ${DCGW_RD_IRT_ERT}[0]
- BgpOperations.Verify L3VPN On DCGW ${dcgw} ${VPN_NAME}[0] ${DCGW_RD_IRT_ERT}[0]
- END
- Configure Maxpath ${MAX_PATH_LIST}[2] ${DCGW_RD_IRT_ERT}[0]
- BuiltIn.Wait Until Keyword Succeeds 10s 2s Verify Maxpath ${MAX_PATH_LIST}[2] ${DCGW_RD_IRT_ERT}[0]
- FOR ${idx} IN RANGE ${START_VALUE} ${NUM_OF_DCGW}
- BgpOperations.Add Routes On DCGW
- ... ${DCGW_IP_LIST}[${idx}]
- ... ${DCGW_RD_IRT_ERT}[0]
- ... ${NETWORK_IP}[0]
- ... ${LABEL}[${idx}]
- END
- BuiltIn.Wait Until Keyword Succeeds 60s 10s BgpOperations.Check BGP VPNv4 Nbr On ODL ${NUM_OF_DCGW}
- BuiltIn.Wait Until Keyword Succeeds
- ... 60s
- ... 10s
- ... Verify Routing Entry On ODL
- ... ${DCGW_RD_IRT_ERT}[0]
- ... ${NETWORK_IP}[0]
- ... ${NUM_OF_ROUTES}[2]
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 5s
- ... Verify FIB Entry On ODL
- ... ${NETWORK_IP}[0]
- ... ${NUM_OF_ROUTES}[2]
- Configure Maxpath ${MAX_PATH_LIST}[0] ${DCGW_RD_IRT_ERT}[0]
- BuiltIn.Wait Until Keyword Succeeds
- ... 60s
- ... 10s
- ... Verify Routing Entry On ODL
- ... ${DCGW_RD_IRT_ERT}[0]
- ... ${NETWORK_IP}[0]
- ... ${NUM_OF_ROUTES}[2]
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 5s
- ... Verify FIB Entry On ODL
- ... ${NETWORK_IP}[0]
- ... ${NUM_OF_ROUTES}[0]
- Configure Maxpath ${MAX_PATH_LIST}[2] ${DCGW_RD_IRT_ERT}[0]
- BuiltIn.Wait Until Keyword Succeeds
- ... 60s
- ... 10s
- ... Verify Routing Entry On ODL
- ... ${DCGW_RD_IRT_ERT}[0]
- ... ${NETWORK_IP}[0]
- ... ${NUM_OF_ROUTES}[2]
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 5s
- ... Verify FIB Entry On ODL
- ... ${NETWORK_IP}[0]
- ... ${NUM_OF_ROUTES}[2]
-
-
-*** Keywords ***
-Suite Setup
- [Documentation] Setup start suite
- VpnOperations.Basic Suite Setup
- Create Setup
-
-Stop Suite
- [Documentation] Deleting all BGP neighbors and configurations
- BgpOperations.Delete BGP Configuration On ODL session
- OpenStackOperations.OpenStack Suite Teardown
-
-Test Cleanup
- [Documentation] Posttest case cleanup
- FOR ${l3vpn_rd} IN @{DCGW_RD_IRT_ERT}
- Configure Maxpath ${MAX_PATH_LIST}[0] ${l3vpn_rd}
- END
- FOR ${vpn} IN @{VPN_ID}
- BuiltIn.Run Keyword And Ignore Error VpnOperations.VPN Delete L3VPN vpnid=${vpn}
- END
- FOR ${dcgw} IN @{DCGW_IP_LIST}
- BuiltIn.Run Keyword And Ignore Error
- ... BgpOperations.Delete L3VPN on DCGW
- ... ${dcgw}
- ... ${AS_ID}
- ... ${VPN_NAME}
- END
-
-Create Setup
- [Documentation] Starting BGP process on each DCGW and ODL
- ... Verifying BGP neighbor session status
- ... Creating 3 networks, 3 subnets, one router
- FOR ${dcgw} IN @{DCGW_IP_LIST}
- BgpOperations.Start Quagga Processes On DCGW ${dcgw}
- END
- BgpOperations.Start Quagga Processes On ODL ${ODL_SYSTEM_IP}
- KarafKeywords.Issue Command On Karaf Console ${BGP_CONFIG_SERVER_CMD}
- BgpOperations.Create BGP Configuration On ODL localas=${AS_ID} routerid=${ODL_SYSTEM_IP}
- FOR ${dcgw} IN @{DCGW_IP_LIST}
- BgpOperations.AddNeighbor To BGP Configuration On ODL remoteas=${AS_ID} neighborAddr=${dcgw}
- ${output} = BgpOperations.Get BGP Configuration On ODL session
- BuiltIn.Should Contain ${output} ${dcgw}
- BgpOperations.Configure BGP And Add Neighbor On DCGW
- ... ${dcgw}
- ... ${AS_ID}
- ... ${dcgw}
- ... ${ODL_SYSTEM_IP}
- ... ${VPN_NAME}[0]
- ... ${DCGW_RD_IRT_ERT}[0]
- ... ${NETWORK_IP}[0]
- BuiltIn.Wait Until Keyword Succeeds
- ... 120s
- ... 20s
- ... BgpOperations.Verify BGP Neighbor Status On Quagga
- ... ${dcgw}
- ... ${ODL_SYSTEM_IP}
- END
- FOR ${network} IN @{NETWORKS}
- OpenStackOperations.Create Network ${network}
- END
- BuiltIn.Wait Until Keyword Succeeds
- ... 10s
- ... 2s
- ... Utils.Check For Elements At URI
- ... ${NETWORK_URL}
- ... ${NETWORKS}
- FOR ${index} IN RANGE 0 3
- OpenStackOperations.Create SubNet ${NETWORKS}[${index}] ${SUBNETS}[${index}] ${SUBNET_CIDR}[${index}]
- END
- BuiltIn.Wait Until Keyword Succeeds
- ... 10s
- ... 2s
- ... Utils.Check For Elements At URI
- ... ${SUBNETWORK_URL}
- ... ${SUBNETS}
- ${router_id_list} = BuiltIn.Create List @{EMPTY}
- FOR ${router} IN @{ROUTERS}
- OpenStackOperations.Create Router ${router}
- ${router_id} = OpenStackOperations.Get Router Id ${router}
- Collections.Append To List ${router_id_list} ${router_id}
- END
- BuiltIn.Set Suite Variable ${router_id_list}
- FOR ${index} IN RANGE 0 3
- OpenStackOperations.Add Router Interface ${ROUTERS}[${index}] ${SUBNETS}[${index}]
- ${output} = OpenStackOperations.Show Router Interface ${ROUTERS}[${index}]
- ${subnet_id} = OpenStackOperations.Get Subnet Id ${SUBNETS}[${index}]
- BuiltIn.Should Contain ${output} ${subnet_id}
- END
-
-Configure Multipath On ODL
- [Documentation] Enabling or disabling multipath on ODL using karaf CLI
- [Arguments] ${setting}
- IF '${setting}' == 'enable'
- KarafKeywords.Issue Command On Karaf Console odl:multipath -f ${VPNV4_ADDR_FAMILY} ${setting}
- ELSE
- KarafKeywords.Issue Command On Karaf Console odl:multipath -f ${VPNV4_ADDR_FAMILY} ${setting}
- END
-
-Verify Multipath
- [Documentation] verify multipath on ODL
- [Arguments] ${setting}
- ${output} = KarafKeywords.Issue Command On Karaf Console ${BGP_CACHE}
- IF '${setting}' == 'enable'
- BuiltIn.Should Contain ${output} ${VPNV4_ADDR_FAMILY}
- ELSE
- BuiltIn.Should Not Contain ${output} ${VPNV4_ADDR_FAMILY}
- END
-
-Configure Maxpath
- [Documentation] Setting maxpath on ODL using karaf CLI
- [Arguments] ${maxpath} ${rd}
- ${maxpath_command} = BuiltIn.Set Variable multipath -r ${rd} -f ${VPNV4_ADDR_FAMILY} -n ${maxpath} setmaxpath
- ${output} = KarafKeywords.Issue Command On Karaf Console ${maxpath_command}
- IF 0 < ${maxpath} < 65
- BuiltIn.Should Not Contain ${output} ${MAXPATH_ERROR}
- ELSE
- BuiltIn.Should Contain ${output} ${MAXPATH_ERROR}
- END
-
-Verify Maxpath
- [Documentation] Verify maxpath is set properly on ODL
- [Arguments] ${maxpath} ${rd}
- ${output} = KarafKeywords.Issue Command On Karaf Console ${BGP_CACHE}
- IF 0 < ${maxpath} < 65
- BuiltIn.Should Match Regexp ${output} ${rd}\\s*${maxpath}
- ELSE
- BuiltIn.Should Not Match Regexp ${output} ${rd}\\s*${maxpath}
- END
-
-Verify Routing Entry On ODL
- [Documentation] Verify routing table for specific prefix
- [Arguments] ${rd} ${prefix} ${no_of_times}
- ${output} = KarafKeywords.Issue Command On Karaf Console show-bgp --cmd "ip bgp vrf ${rd}"
- BuiltIn.Should Contain X Times
- ... ${output}
- ... ${prefix}
- ... ${no_of_times}
- ... msg="Routing table does not contain ${prefix} prefix ${no_of_times} times"
-
-Verify FIB Entry On ODL
- [Documentation] Checking FIB entries with valid counts
- [Arguments] ${prefix} ${no_of_times}
- ${output} = KarafKeywords.Issue Command On Karaf Console ${DIPSLAY_FIB}
- BuiltIn.Should Contain X Times
- ... ${output}
- ... ${prefix}
- ... ${no_of_times}
- ... msg="FIB table does not contain ${prefix} prefix ${no_of_times} times"
+++ /dev/null
-*** Settings ***
-Documentation Test suite to validate multiple 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 OperatingSystem
-Library RequestsLibrary
-Resource ../../../libraries/BgpOperations.robot
-Resource ../../../libraries/DevstackUtils.robot
-Resource ../../../libraries/OpenStackOperations.robot
-Resource ../../../libraries/OVSDB.robot
-Resource ../../../libraries/SetupUtils.robot
-Resource ../../../libraries/Tcpdump.robot
-Resource ../../../libraries/Utils.robot
-Resource ../../../libraries/VpnOperations.robot
-Resource ../../../variables/Variables.robot
-Resource ../../../variables/netvirt/Variables.robot
-
-Suite Setup Suite Setup
-Suite Teardown OpenStackOperations.OpenStack Suite Teardown
-Test Setup SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
-Test Teardown OpenStackOperations.Get Test Teardown Debugs
-
-
-*** Variables ***
-${NUM_OF_PORTS_PER_HOST} 3
-${NUM_OF_VMS_PER_HOST} 3
-${NUM_OF_L3VPN} 3
-${AS_ID} 100
-${DCGW_SYSTEM_IP} ${TOOLS_SYSTEM_1_IP}
-${NET} mvpn_net_new
-${ROUTER} mvpn_router
-${LOOPBACK_IP} 5.5.5.2/32
-${CREATE_RT} ["2200:2","2300:2","2400:2"]
-${RT_LIST_1} ["2200:2","2300:2"]
-${RT_LIST_2} ["2200:2","2400:2"]
-@{SECURITY_GROUP} mvpn_sg mvpn_custom_sg
-@{REQ_PREFIXLENGTHS} 40.1.0.0/28 41.1.0.0/16
-@{REQ_SUBNETS_PREFIX} mvpn_subnet10 mvpn_subnet11
-@{NETWORKS} mvpn_net_1 mvpn_net_2 mvpn_net_3
-@{SUBNETS} mvpn_sub_1 mvpn_sub_2 mvpn_sub_3
-@{SUBNET_CIDRS} 11.1.1.0/24 22.1.1.0/24 33.1.1.0/24
-@{PORTS_HOST1}
-... mvpn_net_1_port_1
-... mvpn_net_2_port_1
-... mvpn_net_3_port_1
-... mvpn_net_1_port1_csg
-... mvpn_net_2_port1_csg
-@{PORTS_HOST2} mvpn_net_1_port_2 mvpn_net_2_port_2 mvpn_net_3_port_2 mvpn_net_2_port2_csg
-@{VMS_HOST1}
-... mvpn_net_1_vm_1
-... mvpn_net_2_vm_1
-... mvpn_net_3_vm_1
-... mvpn_net_1_vm1_csg
-... mvpn_net_2_vm1_csg
-@{VMS_HOST2} mvpn_net_1_vm_2 mvpn_net_2_vm_2 mvpn_net_3_vm_2 mvpn_net_2_vm2_csg
-@{NET_1_VMS} mvpn_net_1_vm_1 mvpn_net_1_vm_2 mvpn_net_1_vm1_csg
-@{NET_2_VMS} mvpn_net_2_vm_1 mvpn_net_2_vm_2 mvpn_net_2_vm1_csg mvpn_net_2_vm2_csg
-@{NET_3_VMS} mvpn_net_3_vm_1 mvpn_net_3_vm_2
-@{VPN_INSTANCE_IDS}
-... 4ae8cd92-48ca-49b5-94e1-b2921a261441
-... 4ae8cd92-48ca-49b5-94e1-b2921a261442
-... 4ae8cd92-48ca-49b5-94e1-b2921a261443
-@{VPN_NAMES} mvpn_1 mvpn_2 mvpn_3
-@{RDS} ["2200:2"] ["2300:2"] ["2400:2"]
-@{DCGW_RD} 2200:2 2300:2 2400:2
-@{LOOPBACK_IPS} 5.5.5.2 2.2.2.2 3.3.3.3
-@{LOOPBACK_NAMES} int1 int2 int3
-
-
-*** Test Cases ***
-Check Datapath Traffic Across Networks With L3VPN
- [Documentation] Datapath Test Across the networks with VPN.
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[0]
- ... ping -c 20 ${NET_1_VM_IPS}[1]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[0]
- ... ping -c 20 ${NET_2_VM_IPS}[1]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[0]
- ... ping -c 20 ${NET_2_VM_IPS}[0]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[2]
- ... ping -c 20 ${NET_2_VM_IPS}[2]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[2]
- ... ping -c 20 ${NET_2_VM_IPS}[3]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
-
-Verify Route Update In Bgp For Routes With Default Route And Various Prefix Lengths
- [Documentation] Create network with different prefix lengths and check the route update in bgp.
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 10s
- ... Utils.Check For Elements At URI
- ... ${FIB_ENTRY_URL}
- ... ${SUBNET_CIDRS}
- OpenStackOperations.Create Network ${NET}
- ${length} = BuiltIn.Get Length ${REQ_SUBNETS_PREFIX}
- FOR ${idx} IN RANGE ${length}
- OpenStackOperations.Create SubNet ${NET} ${REQ_SUBNETS_PREFIX}[${idx}] ${REQ_PREFIXLENGTHS}[${idx}]
- END
- BuiltIn.Wait Until Keyword Succeeds
- ... 3s
- ... 1s
- ... Utils.Check For Elements At URI
- ... ${SUBNETWORK_URL}
- ... ${REQ_SUBNETS_PREFIX}
- ${net_id} = OpenStackOperations.Get Net Id ${NET}
- VpnOperations.Associate L3VPN To Network networkid=${net_id} vpnid=${VPN_INSTANCE_IDS}[0]
- VpnOperations.Verify L3VPN On ODL ${VPN_INSTANCE_IDS}[0]
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 10s
- ... Utils.Check For Elements At URI
- ... ${FIB_ENTRY_URL}
- ... ${REQ_PREFIXLENGTHS}
- [Teardown] BuiltIn.Run Keywords VpnOperations.Dissociate L3VPN From Networks networkid=${net_id} vpnid=${VPN_INSTANCE_IDS}[0]
- ... AND OpenStackOperations.Delete Network ${NET}
- ... AND Post Test Cleanup ${VPN_INSTANCE_IDS}[0]
-
-Verification Of Route Download With Three Vpns In SE And Qbgp With One-One Export Import Route Target
- [Documentation] Check the datapath traffic with one-one export import route target with three vpns.
- Create Multiple L3VPN ${NETWORKS}[0] ${3}
- FOR ${index} IN RANGE 0 ${NUM_OF_L3VPN}
- BgpOperations.Configure BGP And Add Neighbor On DCGW
- ... ${DCGW_SYSTEM_IP}
- ... ${AS_ID}
- ... ${DCGW_SYSTEM_IP}
- ... ${ODL_SYSTEM_IP}
- ... ${VPN_NAMES}[${index}]
- ... ${DCGW_RD}[${index}]
- ... ${LOOPBACK_IPS}[${index}]
- END
- VpnOperations.Associate L3VPNs To Networks ${VPN_INSTANCE_IDS} ${NETWORKS}
- ${fib_values} = BuiltIn.Create List
- ... @{NET_1_VM_IPS}
- ... @{NET_2_VM_IPS}
- ... @{NET_3_VM_IPS}
- ... @{SUBNET_CIDRS}
- ... @{LOOPBACK_IPS}
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 10s
- ... Utils.Check For Elements At URI
- ... ${FIB_ENTRY_URL}
- ... ${fib_values}
- ${fib1_values} = BuiltIn.Create List ${NET_1_VM_IPS} ${SUBNET_CIDRS}[0] ${LOOPBACK_IPS}[0]
- BuiltIn.Wait Until Keyword Succeeds
- ... 60s
- ... 15s
- ... BgpOperations.Verify Routes On Quagga
- ... ${DCGW_SYSTEM_IP}
- ... ${DCGW_RD}[0]
- ... ${fib1_values}
- ${fib2_values} = BuiltIn.Create List ${NET_2_VM_IPS} ${SUBNET_CIDRS}[1] ${LOOPBACK_IPS}[1]
- BuiltIn.Wait Until Keyword Succeeds
- ... 60s
- ... 15s
- ... BgpOperations.Verify Routes On Quagga
- ... ${DCGW_SYSTEM_IP}
- ... ${DCGW_RD}[1]
- ... ${fib2_values}
- ${fib3_values} = BuiltIn.Create List ${NET_3_VM_IPS} ${SUBNET_CIDRS}[2] ${LOOPBACK_IPS}[2]
- BuiltIn.Wait Until Keyword Succeeds
- ... 60s
- ... 15s
- ... BgpOperations.Verify Routes On Quagga
- ... ${DCGW_SYSTEM_IP}
- ... ${DCGW_RD}[2]
- ... ${fib3_values}
- VpnOperations.Verify Flows Are Present For L3VPN ${OS_CMP1_IP} ${NET_1_VM_IPS}
- VpnOperations.Verify Flows Are Present For L3VPN ${OS_CMP1_IP} ${NET_2_VM_IPS}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[0]
- ... ping -c 3 ${NET_1_VM_IPS}[1]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[1]
- ... ${NET_2_VM_IPS}[0]
- ... ping -c 3 ${NET_2_VM_IPS}[1]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[0]
- ... ping -c 3 ${NET_2_VM_IPS}[0]
- BuiltIn.Should Contain ${output} ${NO_PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[0]
- ... ping -c 3 ${NET_2_VM_IPS}[1]
- BuiltIn.Should Contain ${output} ${NO_PING_REGEXP}
- [Teardown] Post Test Cleanup @{VPN_INSTANCE_IDS}
-
-Verification Of Route Download With Three Vpns In SE And Qbgp With One-Many Export Import Route Target
- [Documentation] Check the datapath traffic with one-many export import route target with three vpns.
- VpnOperations.VPN Create L3VPN
- ... vpnid=${VPN_INSTANCE_IDS}[0]
- ... name=${VPN_NAMES}[0]
- ... rd=${RDS}[0]
- ... exportrt=${CREATE_RT}
- ... importrt=${RDS}[0]
- FOR ${index} IN RANGE 1 ${NUM_OF_L3VPN}
- VpnOperations.VPN Create L3VPN
- ... vpnid=${VPN_INSTANCE_IDS}[${index}]
- ... name=${VPN_NAMES}[${index}]
- ... rd=${RDS}[${index}]
- ... exportrt=${RDS}[${index}]
- ... importrt=${RT_LIST_${index}}
- END
- FOR ${index} IN RANGE 0 ${NUM_OF_L3VPN}
- BgpOperations.Configure BGP And Add Neighbor On DCGW
- ... ${DCGW_SYSTEM_IP}
- ... ${AS_ID}
- ... ${DCGW_SYSTEM_IP}
- ... ${ODL_SYSTEM_IP}
- ... ${VPN_NAMES}[${index}]
- ... ${DCGW_RD}[${index}]
- ... ${LOOPBACK_IPS}[${index}]
- END
- ${networks} = BuiltIn.Create List ${NETWORKS}[0] ${NETWORKS}[1]
- VpnOperations.Associate L3VPNs To Networks ${VPN_INSTANCE_IDS} ${networks}
- ${fib_values} = BuiltIn.Create List
- ... ${NET_1_VM_IPS}
- ... ${NET_2_VM_IPS}
- ... ${SUBNET_CIDRS}[0]
- ... ${SUBNET_CIDRS}[1]
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 10s
- ... Utils.Check For Elements At URI
- ... ${FIB_ENTRY_URL}
- ... ${fib_values}
- VpnOperations.Verify Flows Are Present For L3VPN ${OS_CMP1_IP} ${NET_1_VM_IPS}
- VpnOperations.Verify Flows Are Present For L3VPN ${OS_CMP1_IP} ${NET_2_VM_IPS}
- [Teardown] Post Test Cleanup @{VPN_INSTANCE_IDS}
-
-Verification Of Route Download With Three Vpns In SE And Qbgp With Many-One Export Import Route Target
- [Documentation] Check the datapath traffic with many-one export import route target with three vpns.
- VpnOperations.VPN Create L3VPN
- ... vpnid=${VPN_INSTANCE_IDS}[0]
- ... name=${VPN_NAMES}[0]
- ... rd=${RDS}[0]
- ... exportrt=${RDS}[0]
- ... importrt=${CREATE_RT}
- FOR ${index} IN RANGE 1 ${NUM_OF_L3VPN}
- VpnOperations.VPN Create L3VPN
- ... vpnid=${VPN_INSTANCE_IDS}[${index}]
- ... name=${VPN_NAMES}[${index}]
- ... rd=${RDS}[${index}]
- ... exportrt=${RT_LIST_${index}}
- ... importrt=${RDS}[${index}]
- END
- FOR ${index} IN RANGE 0 ${NUM_OF_L3VPN}
- BgpOperations.Configure BGP And Add Neighbor On DCGW
- ... ${DCGW_SYSTEM_IP}
- ... ${AS_ID}
- ... ${DCGW_SYSTEM_IP}
- ... ${ODL_SYSTEM_IP}
- ... ${VPN_NAMES}[${index}]
- ... ${DCGW_RD}[${index}]
- ... ${LOOPBACK_IPS}[${index}]
- END
- ${networks} = BuiltIn.Create List ${NETWORKS}[0] ${NETWORKS}[1]
- VpnOperations.Associate L3VPNs To Networks ${VPN_INSTANCE_IDS} ${networks}
- ${fib_values} = BuiltIn.Create List
- ... ${NET_1_VM_IPS}
- ... ${NET_2_VM_IPS}
- ... ${SUBNET_CIDRS}[0]
- ... ${SUBNET_CIDRS}[1]
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 10s
- ... Utils.Check For Elements At URI
- ... ${FIB_ENTRY_URL}
- ... ${fib_values}
- VpnOperations.Verify Flows Are Present For L3VPN ${OS_CMP1_IP} ${NET_1_VM_IPS}
- VpnOperations.Verify Flows Are Present For L3VPN ${OS_CMP1_IP} ${NET_2_VM_IPS}
- [Teardown] Post Test Cleanup @{VPN_INSTANCE_IDS}
-
-Verification Of Route Download With Three Vpns In SE And Qbgp With Many-Many Export Import Route Target
- [Documentation] Check the datapath traffic with many-many export import route target with three vpns.
- FOR ${index} IN RANGE 0 ${NUM_OF_L3VPN}
- VpnOperations.VPN Create L3VPN
- ... vpnid=${VPN_INSTANCE_IDS}[${index}]
- ... name=${VPN_NAMES}[${index}]
- ... rd=${RDS}[${index}]
- ... exportrt=${CREATE_RT}
- ... importrt=${CREATE_RT}
- END
- FOR ${index} IN RANGE 0 ${NUM_OF_L3VPN}
- BgpOperations.Configure BGP And Add Neighbor On DCGW
- ... ${DCGW_SYSTEM_IP}
- ... ${AS_ID}
- ... ${DCGW_SYSTEM_IP}
- ... ${ODL_SYSTEM_IP}
- ... ${VPN_NAMES}[${index}]
- ... ${DCGW_RD}[${index}]
- ... ${LOOPBACK_IPS}[${index}]
- END
- ${networks} = BuiltIn.Create List ${NETWORKS}[0] ${NETWORKS}[1]
- VpnOperations.Associate L3VPNs To Networks ${VPN_INSTANCE_IDS} ${networks}
- ${fib_values} = BuiltIn.Create List
- ... ${NET_1_VM_IPS}
- ... ${NET_2_VM_IPS}
- ... ${SUBNET_CIDRS}[0]
- ... ${SUBNET_CIDRS}[1]
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 10s
- ... Utils.Check For Elements At URI
- ... ${FIB_ENTRY_URL}
- ... ${fib_values}
- VpnOperations.Verify Flows Are Present For L3VPN ${OS_CMP1_IP} ${NET_1_VM_IPS}
- VpnOperations.Verify Flows Are Present For L3VPN ${OS_CMP1_IP} ${NET_2_VM_IPS}
-
-
-*** Keywords ***
-Suite Setup
- [Documentation] Basic setup.
- VpnOperations.Basic Suite Setup
- BgpOperations.Start Quagga Processes On ODL ${ODL_SYSTEM_IP}
- BgpOperations.Start Quagga Processes On DCGW ${DCGW_SYSTEM_IP}
- Create Setup
- OpenStackOperations.Show Debugs @{NET_1_VMS} @{NET_2_VMS} @{NET_3_VMS}
- OpenStackOperations.Get Suite Debugs
-
-Create Setup
- [Documentation] Create basic topology
- Create Neutron Networks
- Create Neutron Subnets
- OpenStackOperations.Create Allow All SecurityGroup ${SECURITY_GROUP[0]}
- Security Group Rule with Remote SG ${SECURITY_GROUP[1]}
- Create Neutron Ports
- Create Nova VMs
- VpnOperations.VPN Create L3VPN
- ... vpnid=${VPN_INSTANCE_IDS}[0]
- ... name=${VPN_NAMES}[0]
- ... rd=${RDS}[0]
- ... exportrt=${RDS}[0]
- ... importrt=${RDS}[0]
- VpnOperations.Verify L3VPN On ODL ${VPN_INSTANCE_IDS}[0]
- FOR ${network} IN @{NETWORKS}
- ${network_id} = OpenStackOperations.Get Net Id ${network}
- VpnOperations.Associate L3VPN To Network networkid=${network_id} vpnid=${VPN_INSTANCE_IDS}[0]
- END
- Create BGP Config On ODL
- Create BGP Config On DCGW
- Create External Tunnel Endpoint
-
-Create Neutron Networks
- [Documentation] Create required number of networks
- FOR ${NET} IN @{NETWORKS}
- OpenStackOperations.Create Network ${NET}
- END
- BuiltIn.Wait Until Keyword Succeeds 3s 1s Utils.Check For Elements At URI ${NETWORK_URL} ${NETWORKS}
-
-Create Neutron Subnets
- [Documentation] Create required number of subnets for previously created networks
- ${num_of_networks} = BuiltIn.Get Length ${NETWORKS}
- FOR ${index} IN RANGE 0 ${num_of_networks}
- OpenStackOperations.Create SubNet ${NETWORKS}[${index}] ${SUBNETS}[${index}] ${SUBNET_CIDRS}[${index}]
- END
- BuiltIn.Wait Until Keyword Succeeds
- ... 3s
- ... 1s
- ... Utils.Check For Elements At URI
- ... ${SUBNETWORK_URL}
- ... ${SUBNETS}
-
-Create Neutron Ports
- [Documentation] Create required number of ports under previously created subnets
- FOR ${index} IN RANGE 0 ${NUM_OF_PORTS_PER_HOST}
- OpenStackOperations.Create Port ${NETWORKS}[${index}] ${PORTS_HOST1}[${index}] sg=${SECURITY_GROUP}[0]
- END
- FOR ${index} IN RANGE 0 ${NUM_OF_PORTS_PER_HOST}
- OpenStackOperations.Create Port ${NETWORKS}[${index}] ${PORTS_HOST2}[${index}] sg=${SECURITY_GROUP}[0]
- END
- OpenStackOperations.Create Port ${NETWORKS}[0] ${PORTS_HOST1}[3] ${SECURITY_GROUP}[1]
- OpenStackOperations.Create Port ${NETWORKS}[1] ${PORTS_HOST1}[4] ${SECURITY_GROUP}[1]
- OpenStackOperations.Create Port ${NETWORKS}[1] ${PORTS_HOST2}[3] ${SECURITY_GROUP}[1]
- ${PORTS} = BuiltIn.Create List @{PORTS_HOST1} @{PORTS_HOST2}
- BuiltIn.Wait Until Keyword Succeeds
- ... 3s
- ... 1s
- ... Utils.Check For Elements At URI
- ... ${CONFIG_API}/neutron:neutron/ports/
- ... ${PORTS}
-
-Create Nova VMs
- [Documentation] Create Vm instances on compute nodes
- FOR ${index} IN RANGE 0 ${NUM_OF_VMS_PER_HOST}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${PORTS_HOST1}[${index}]
- ... ${VMS_HOST1}[${index}]
- ... ${OS_CMP1_HOSTNAME}
- ... sg=${SECURITY_GROUP}[0]
- END
- FOR ${index} IN RANGE 0 ${NUM_OF_VMS_PER_HOST}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${PORTS_HOST2}[${index}]
- ... ${VMS_HOST2}[${index}]
- ... ${OS_CMP2_HOSTNAME}
- ... sg=${SECURITY_GROUP}[0]
- END
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${PORTS_HOST1}[3]
- ... ${VMS_HOST1}[3]
- ... ${OS_CMP1_HOSTNAME}
- ... sg=${SECURITY_GROUP}[1]
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${PORTS_HOST1}[4]
- ... ${VMS_HOST1}[4]
- ... ${OS_CMP1_HOSTNAME}
- ... sg=${SECURITY_GROUP}[1]
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${PORTS_HOST2}[3]
- ... ${VMS_HOST2}[3]
- ... ${OS_CMP2_HOSTNAME}
- ... sg=${SECURITY_GROUP}[1]
- @{NET_1_VM_IPS} ${NET_1_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_1_VMS}
- @{NET_2_VM_IPS} ${NET_2_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_2_VMS}
- @{NET_3_VM_IPS} ${NET_3_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_3_VMS}
- BuiltIn.Set Suite Variable @{NET_1_VM_IPS}
- BuiltIn.Set Suite Variable @{NET_2_VM_IPS}
- BuiltIn.Set Suite Variable @{NET_3_VM_IPS}
- BuiltIn.Should Not Contain ${NET_1_VM_IPS} None
- BuiltIn.Should Not Contain ${NET_2_VM_IPS} None
- BuiltIn.Should Not Contain ${NET_3_VM_IPS} None
- BuiltIn.Should Not Contain ${NET_1_DHCP_IP} None
- BuiltIn.Should Not Contain ${NET_2_DHCP_IP} None
- BuiltIn.Should Not Contain ${NET_3_DHCP_IP} None
-
-Create External Tunnel Endpoint
- [Documentation] Create and verify external tunnel endpoint between ODL and GWIP
- BgpOperations.Create External Tunnel Endpoint Configuration destIp=${DCGW_SYSTEM_IP}
- ${output} = BgpOperations.Get External Tunnel Endpoint Configuration ${DCGW_SYSTEM_IP}
- BuiltIn.Should Contain ${output} ${DCGW_SYSTEM_IP}
-
-Create BGP Config On ODL
- [Documentation] Configure BGP Config on ODL
- KarafKeywords.Issue Command On Karaf Console ${BGP_CONFIG_SERVER_CMD}
- BgpOperations.Create BGP Configuration On ODL localas=${AS_ID} routerid=${ODL_SYSTEM_IP}
- BgpOperations.AddNeighbor To BGP Configuration On ODL remoteas=${AS_ID} neighborAddr=${DCGW_SYSTEM_IP}
- ${output} = BgpOperations.Get BGP Configuration On ODL session
- BuiltIn.Should Contain ${output} ${DCGW_SYSTEM_IP}
-
-Create BGP Config On DCGW
- [Documentation] Configure BGP on DCGW
- BgpOperations.Configure BGP And Add Neighbor On DCGW
- ... ${DCGW_SYSTEM_IP}
- ... ${AS_ID}
- ... ${DCGW_SYSTEM_IP}
- ... ${ODL_SYSTEM_IP}
- ... ${VPN_NAMES}[0]
- ... ${DCGW_RD}[0]
- ... ${LOOPBACK_IPS}[0]
- ${output} = BgpOperations.Execute Show Command On Quagga ${DCGW_SYSTEM_IP} ${RUN_CONFIG}
- BuiltIn.Should Contain ${output} ${ODL_SYSTEM_IP}
- ${output} = BuiltIn.Wait Until Keyword Succeeds
- ... 180s
- ... 10s
- ... BgpOperations.Verify BGP Neighbor Status On Quagga
- ... ${DCGW_SYSTEM_IP}
- ... ${ODL_SYSTEM_IP}
-
-Create Multiple L3VPN
- [Documentation] Creates multiple L3VPNs and then verify the same
- [Arguments] ${network} ${num_of_l3vpns}
- FOR ${index} IN RANGE 0 ${num_of_l3vpns}
- BuiltIn.Wait Until Keyword Succeeds
- ... 40s
- ... 10s
- ... VpnOperations.VPN Create L3VPN
- ... vpnid=${VPN_INSTANCE_IDS}[${index}]
- ... name=${VPN_NAMES}[${index}]
- ... rd=${RDS}[${index}]
- ... exportrt=${RDS}[${index}]
- ... importrt=${RDS}[${index}]
- VpnOperations.Verify L3VPN On ODL ${VPN_INSTANCE_IDS}[${index}]
- END
-
-Security Group Rule with Remote SG
- [Documentation] Allow all TCP/UDP/ICMP packets for this suite
- [Arguments] ${sec_grp}
- OpenStackOperations.Neutron Security Group Create ${sec_grp}
- OpenStackOperations.Neutron Security Group Rule Create
- ... ${sec_grp}
- ... direction=ingress
- ... port_range_max=65535
- ... port_range_min=1
- ... protocol=tcp
- ... remote-group-id=${sec_grp}
- OpenStackOperations.Neutron Security Group Rule Create
- ... ${sec_grp}
- ... direction=egress
- ... port_range_max=65535
- ... port_range_min=1
- ... protocol=tcp
- ... remote-group-id=${sec_grp}
- OpenStackOperations.Neutron Security Group Rule Create
- ... ${sec_grp}
- ... direction=ingress
- ... protocol=icmp
- ... remote-group-id=${sec_grp}
- OpenStackOperations.Neutron Security Group Rule Create
- ... ${sec_grp}
- ... direction=egress
- ... protocol=icmp
- ... remote-group-id=${sec_grp}
- OpenStackOperations.Neutron Security Group Rule Create
- ... ${sec_grp}
- ... direction=ingress
- ... port_range_max=65535
- ... port_range_min=1
- ... protocol=udp
- ... remote_group_id=${sec_grp}
- OpenStackOperations.Neutron Security Group Rule Create
- ... ${sec_grp}
- ... direction=egress
- ... port_range_max=65535
- ... port_range_min=1
- ... protocol=udp
- ... remote-group-id=${sec_grp}
-
-Post Test Cleanup
- [Documentation] Test Case Cleanup.
- [Arguments] @{vpn_ids}
- VpnOperations.Delete Multiple L3VPNs @{vpn_ids}
- BgpOperations.Delete BGP Config On Quagga ${DCGW_SYSTEM_IP} ${AS_ID}
+++ /dev/null
-*** Settings ***
-Documentation Test suite for OpenFlow punt path protection for subnet route, SNAT, ARP and GARP
-
-Resource ../../../libraries/ClusterManagement.robot
-Resource ../../../libraries/OpenStackOperations.robot
-Resource ../../../libraries/OvsManager.robot
-Resource ../../../libraries/OVSDB.robot
-Resource ../../../libraries/Utils.robot
-Resource ../../../libraries/VpnOperations.robot
-Resource ../../../variables/Variables.robot
-Resource ../../../variables/netvirt/Variables.robot
-
-Suite Setup Suite Setup
-Suite Teardown OpenStackOperations.OpenStack Suite Teardown
-Test Setup SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
-Test Teardown OpenStackOperations.Get Test Teardown Debugs
-
-
-*** Variables ***
-@{NETWORKS} of_punt_net_1 of_punt_net_2 of_punt_net_3
-${EXT_NETWORKS} of_punt_ext_net_1
-@{PORT_LIST}
-... of_punt_net1_port_1
-... of_punt_net1_port_2
-... of_punt_net2_port_1
-... of_punt_net2_port_2
-... of_punt_net3_port_1
-... of_punt_net3_port_2
-@{EXTRA_PORTS} of_punt_net_1_port_3 of_punt_net_2_port_3
-@{EXTRA_VMS} of_punt_net_1_vm_3 of_punt_net_2_vm_3
-@{EXTRA_NW_IP} 11.1.1.100 22.1.1.100 12.1.1.12 13.1.1.13
-@{VM_LIST}
-... of_punt_net1_vm_1
-... of_punt_net1_vm_2
-... of_punt_net2_vm_1
-... of_punt_net2_vm_2
-... of_punt_net3_vm_1
-... of_punt_net3_vm_2
-@{SUBNETS} of_punt_sub_1 of_punt_sub_2 of_punt_sub_3
-${EXT_SUBNETS} of_punt_ext_sub_1
-@{SUBNETS_CIDR} 11.1.1.0/24 22.1.1.0/24 33.1.1.0/24
-${EXT_SUBNETS_CIDR} 55.1.1.0/24
-${EXT_SUBNETS_FIXED_IP} 55.1.1.100
-@{VPN_ID} 4ae8cd92-48ca-49b5-94e1-b2921a261111 4ae8cd92-48ca-49b5-94e1-b2921a262222
-@{VPN_NAME} of_punt_vpn_1 of_punt_vpn_2
-@{ROUTERS} of_punt_router_1 of_punt_router_2
-@{ROUTERS_ID} @{EMPTY}
-@{DPN_IDS} @{EMPTY}
-${SECURITY_GROUP} of_punt_sg
-@{DCGW_RD_IRT_ERT} 11:1 22:1
-${L3VPN_RD_IRT_ERT} ["${DCGW_RD_IRT_ERT}[0]"] ["${DCGW_RD_IRT_ERT}[1]"]
-@{FILES_PATH}
-... ${KARAF_HOME}/etc/opendaylight/datastore/initial/config/netvirt-vpnmanager-config.xml
-... ${KARAF_HOME}/etc/opendaylight/datastore/initial/config/netvirt-natservice-config.xml
-... ${KARAF_HOME}/etc/opendaylight/datastore/initial/config/netvirt-elanmanager-config.xml
-${SNAT_ORIGINAL_TIMEOUT} 5
-${L3_ORIGINAL_TIMEOUT} 10
-${ARP_ORIGINAL_TIMEOUT} 5
-@{ORIGINAL_TIMEOUTS} ${L3_ORIGINAL_TIMEOUT} ${SNAT_ORIGINAL_TIMEOUT} ${ARP_ORIGINAL_TIMEOUT}
-@{OF_PUNT_TABLES} ${L3_PUNT_TABLE} ${SNAT_PUNT_TABLE} ${ARP_PUNT_TABLE} ${ARP_LEARN_TABLE}
-@{VALID_TIMEOUTS} 20 30 100 1000 10000
-${TCP_PORT} 80
-${UDP_PORT} 33435
-${TELNET_PORT} 23
-${ARP_REG} 0x1
-${GARP_REG} 0x101
-
-
-*** Test Cases ***
-Verify default punt timeout values and flows
- [Documentation] Verify default time out for subnet route, SNAT and ARP in respective defualt openflow tables
- ${snat_napt_switch_ip} = Get NAPT Switch IP From DPID ${ROUTERS}[1]
- FOR ${index} IN RANGE 0 3
- BuiltIn.Wait Until Keyword Succeeds
- ... 120s
- ... 20s
- ... OVSDB.Verify Dump Flows For Specific Table
- ... ${snat_napt_switch_ip}
- ... ${OF_PUNT_TABLES}[${index}]
- ... True
- ... ${EMPTY}
- ... learn(table=${OF_PUNT_TABLES}[${index}],hard_timeout=${ORIGINAL_TIMEOUTS}[${index}]
- END
-
-Set punt timeout to zero and verify flows
- [Documentation] Verify default flows in OVS for subnet route, SNAT and ARP after the changing the default punt timeout value to zero.
- ... Default subnet route, SNAT and ARP should get deleted after changing default timeout value to zero
- FOR ${index} IN RANGE 0 3
- Change Hard Timeout Value In XML File ${FILES_PATH}[${index}] ${ORIGINAL_TIMEOUTS}[${index}] ${0}
- Verify Punt Values In XML File ${FILES_PATH}[${index}] ${0}
- END
- ClusterManagement.Stop_Members_From_List_Or_All
- ClusterManagement.Start_Members_From_List_Or_All
- ${snat_napt_switch_ip} = Get NAPT Switch IP From DPID ${ROUTERS}[1]
- BuiltIn.Wait Until Keyword Succeeds 120s 20s OVSDB.Check OVS OpenFlow Connections ${OS_CMP1_IP} 2
- FOR ${index} IN RANGE 0 3
- OVSDB.Verify Dump Flows For Specific Table
- ... ${snat_napt_switch_ip}
- ... ${OF_PUNT_TABLES}[${index}]
- ... False
- ... ${EMPTY}
- ... learn(table=${OF_PUNT_TABLES}[${index}],hard_timeout=${ORIGINAL_TIMEOUTS}[${index}]
- END
-
-Set punt timeout to combination of valid ranges and verfiy flows
- [Documentation] Verify the default flow in OVS for subnet route, SNAT and ARP after the changing the default value to different set of values.
- ... Default subnet route, SNAT and ARP flows should get changed after changing default timeout value to different set of values
- Set Original TimeOut In Xml ${0}
- FOR ${index} IN RANGE 0 3
- Change Hard Timeout Value In XML File
- ... ${FILES_PATH}[${index}]
- ... ${ORIGINAL_TIMEOUTS}[${index}]
- ... ${VALID_TIMEOUTS}[0]
- Verify Punt Values In XML File ${FILES_PATH}[${index}] ${VALID_TIMEOUTS}[0]
- END
- ${count} = BuiltIn.Get length ${VALID_TIMEOUTS}
- FOR ${index} IN RANGE 1 ${count}
- Change Hard Timeout Value In XML File
- ... ${FILES_PATH}[0]
- ... ${VALID_TIMEOUTS}[${index - 1}]
- ... ${VALID_TIMEOUTS}[${index}]
- Verify Punt Values In XML File ${FILES_PATH}[0] ${VALID_TIMEOUTS}[${index}]
- Change Hard Timeout Value In XML File
- ... ${FILES_PATH}[1]
- ... ${VALID_TIMEOUTS}[${index - 1}]
- ... ${VALID_TIMEOUTS}[${index}]
- Verify Punt Values In XML File ${FILES_PATH}[1] ${VALID_TIMEOUTS}[${index}]
- Change Hard Timeout Value In XML File
- ... ${FILES_PATH}[2]
- ... ${VALID_TIMEOUTS}[${index - 1}]
- ... ${VALID_TIMEOUTS}[${index}]
- Verify Punt Values In XML File ${FILES_PATH}[2] ${VALID_TIMEOUTS}[${index}]
- ClusterManagement.Stop_Members_From_List_Or_All
- ClusterManagement.Start_Members_From_List_Or_All
- BuiltIn.Wait Until Keyword Succeeds
- ... 120s
- ... 20s
- ... OVSDB.Check OVS OpenFlow Connections
- ... ${OS_CMP1_IP}
- ... 2
- ${snat_napt_switch_ip} = Get NAPT Switch IP From DPID ${ROUTERS}[1]
- BuiltIn.Wait Until Keyword Succeeds
- ... 120s
- ... 5s
- ... OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_COMPUTE_1_IP}
- ... ${L3_PUNT_TABLE}
- ... True
- ... ${EMPTY}
- ... learn(table=${L3_PUNT_TABLE},hard_timeout=${VALID_TIMEOUTS}[${index}]
- BuiltIn.Wait Until Keyword Succeeds
- ... 120s
- ... 5s
- ... OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_COMPUTE_1_IP}
- ... ${ARP_PUNT_TABLE}
- ... True
- ... ${EMPTY}
- ... learn(table=${ARP_PUNT_TABLE},hard_timeout=${VALID_TIMEOUTS}[${index}]
- BuiltIn.Wait Until Keyword Succeeds
- ... 180s
- ... 5s
- ... OVSDB.Verify Dump Flows For Specific Table
- ... ${snat_napt_switch_ip}
- ... ${SNAT_PUNT_TABLE}
- ... True
- ... ${EMPTY}
- ... learn(table=${SNAT_PUNT_TABLE},hard_timeout=${VALID_TIMEOUTS}[${index}]
- END
- Set Original TimeOut In Xml ${VALID_TIMEOUTS}[4]
-
-Verify learnt flow for subnet route flow table
- [Documentation] Get default subnet table packet count before sending traffic to unkwon destination.
- ... Send subnet route traffic using Ping with packet count 5.
- ... Punt the first packet to controller and add new rule to stop pipeline processing.
- ... Check packet count before and after traffic for both(defualt and learnt tables).
- FOR ${index} IN RANGE 0 3
- Change Hard Timeout Value In XML File
- ... ${FILES_PATH}[${index}]
- ... ${ORIGINAL_TIMEOUTS}[${index}]
- ... ${VALID_TIMEOUTS}[0]
- Verify Punt Values In XML File ${FILES_PATH}[${index}] ${VALID_TIMEOUTS}[0]
- END
- ClusterManagement.Stop_Members_From_List_Or_All
- ClusterManagement.Start_Members_From_List_Or_All
- BuiltIn.Wait Until Keyword Succeeds 120s 20s OVSDB.Check OVS OpenFlow Connections ${OS_CMP1_IP} 2
- ${count_before_traffic} = OvsManager.Get Packet Count From Table
- ... ${OS_CMP1_IP}
- ... ${INTEGRATION_BRIDGE}
- ... table=${L3_PUNT_TABLE},
- ... |grep "ip actions=CONTROLLER:65535,learn(table=${L3_PUNT_TABLE},hard_timeout=${VALID_TIMEOUTS}[0]"
- OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${VM_IPS}[0]
- ... sudo ping -c 5 ${EXTRA_NW_IP}[1]
- OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${L3_PUNT_TABLE}
- ... True
- ... ${EMPTY}
- ... nw_dst=${EXTRA_NW_IP}[1] actions=drop
- ${learnt_packet_count} = OvsManager.Get Packet Count From Table
- ... ${OS_CMP1_IP}
- ... ${INTEGRATION_BRIDGE}
- ... table=${L3_PUNT_TABLE},
- ... |grep "nw_dst=${EXTRA_NW_IP}[1] actions=drop"
- BuiltIn.Should be true ${learnt_packet_count} > 1
- ${count_after_traffic} = OvsManager.Get Packet Count From Table
- ... ${OS_CMP1_IP}
- ... ${INTEGRATION_BRIDGE}
- ... table=${L3_PUNT_TABLE},
- ... |grep "ip actions=CONTROLLER:65535,learn(table=${L3_PUNT_TABLE},hard_timeout=${VALID_TIMEOUTS}[0]"
- ${count_before_traffic} = BuiltIn.Evaluate ${count_before_traffic} + 1
- BuiltIn.Should be true ${count_after_traffic} == ${count_before_traffic}
-
-Verify learnt flow for UDP in SNAT flow table
- [Documentation] Get default SNAT table packet count before sending traffic to unkwon destination.
- ... Send UDP traffic using traceroute with packet count 4.
- ... Punt the first packet to controller and add new rule to stop pipeline processing.
- ... Check packet count before and after traffic for both(defualt and learnt tables).
- ${compute_ip} = Get NAPT Switch IP From DPID ${ROUTERS}[1]
- OVSDB.Verify Dump Flows For Specific Table ${compute_ip} ${SNAT_PUNT_TABLE} ${VALID_TIMEOUTS}[0]
- ${count_before_traffic} = OvsManager.Get Packet Count From Table
- ... ${compute_ip}
- ... ${INTEGRATION_BRIDGE}
- ... table=${SNAT_PUNT_TABLE}
- ... |grep "table=46.*n_packets=[\0-9+].*udp.*learn(table=46"
- BuiltIn.Should be true ${count_before_traffic} == 0
- OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[2]
- ... ${VM_IPS}[4]
- ... traceroute ${EXTRA_NW_IP}[2] -w 1 -q 1 -m 4
- OVSDB.Verify Dump Flows For Specific Table
- ... ${compute_ip}
- ... ${SNAT_PUNT_TABLE}
- ... True
- ... ${EMPTY}
- ... tp_dst=${UDP_PORT} actions=drop
- ${count_after_traffic} = OvsManager.Get Packet Count From Table
- ... ${compute_ip}
- ... ${INTEGRATION_BRIDGE}
- ... table=${SNAT_PUNT_TABLE}
- ... |grep "table=46.*n_packets=[\0-9+].*udp.*learn(table=46"
- ${count_before_traffic} = BuiltIn.Evaluate ${count_before_traffic} + 1
- BuiltIn.Should be true ${count_after_traffic} == ${count_before_traffic}
- OVSDB.Verify Dump Flows For Specific Table
- ... ${compute_ip}
- ... ${SNAT_PUNT_TABLE}
- ... True
- ... ${EMPTY}
- ... actions=set_field:${EXT_SUBNETS_FIXED_IP}->ip_src
- ${controller_packet_count} = OvsManager.Get Packet Count From Table
- ... ${compute_ip}
- ... ${INTEGRATION_BRIDGE}
- ... table=${SNAT_PUNT_TABLE}
- ... |grep "table=46.*n_packets=[\0-9+].*udp.*nw_src=${VM_IPS}[4].*actions=set_field:${EXT_SUBNETS_FIXED_IP}.*goto_table:47"
- BuiltIn.Should be true ${controller_packet_count} > 1
-
-Verify learnt flow for TCP in SNAT flow table
- [Documentation] Get default SNAT table packet count before sending traffic to unkwon destination.
- ... Send TCP traffic using wget.
- ... Punt the first packet to controller and add new rule to stop pipeline processing.
- ... Check packet count before and after traffic for both(defualt and learnt tables).
- ${compute_ip} = Get NAPT Switch IP From DPID ${ROUTERS}[1]
- OVSDB.Verify Dump Flows For Specific Table ${compute_ip} ${SNAT_PUNT_TABLE} ${VALID_TIMEOUTS}[0]
- ${count_before_traffic} = OvsManager.Get Packet Count From Table
- ... ${compute_ip}
- ... ${INTEGRATION_BRIDGE}
- ... table=${SNAT_PUNT_TABLE}
- ... |grep "table=46.*n_packets=[\0-9+].*tcp.*learn(table=46"
- BuiltIn.Should be true ${count_before_traffic} == 0
- OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[2]
- ... ${VM_IPS}[4]
- ... wget -qc http://${EXTRA_NW_IP}[2]/ &
- OVSDB.Verify Dump Flows For Specific Table
- ... ${compute_ip}
- ... ${SNAT_PUNT_TABLE}
- ... True
- ... ${EMPTY}
- ... tp_dst=${TCP_PORT} actions=drop
- ${count_after_traffic} = OvsManager.Get Packet Count From Table
- ... ${compute_ip}
- ... ${INTEGRATION_BRIDGE}
- ... table=${SNAT_PUNT_TABLE}
- ... |grep "table=46.*n_packets=[\0-9+].*tcp.*learn(table=46"
- ${count_before_traffic} = BuiltIn.Evaluate ${count_before_traffic} + 1
- BuiltIn.Should be true ${count_after_traffic} == ${count_before_traffic}
- OVSDB.Verify Dump Flows For Specific Table
- ... ${compute_ip}
- ... ${SNAT_PUNT_TABLE}
- ... True
- ... ${EMPTY}
- ... actions=set_field:${EXT_SUBNETS_FIXED_IP}->ip_src
- ${controller_packet_count} = OvsManager.Get Packet Count From Table
- ... ${compute_ip}
- ... ${INTEGRATION_BRIDGE}
- ... table=${SNAT_PUNT_TABLE}
- ... |grep "table=46.*n_packets=[\0-9+].*tcp.*nw_src=${VM_IPS}[4].*actions=set_field:${EXT_SUBNETS_FIXED_IP}.*goto_table:47"
- BuiltIn.Should be true ${controller_packet_count} > 1
-
-Verify learnt flow for ARP request in ARP tables
- [Documentation] Get default ARP table packet count before sending traffic to unkwon destination.
- ... Send ARP request traffic using arping.
- ... Punt the first packet to controller and add new rule to stop pipeline processing.
- ... Check packet count before and after traffic for both(defualt and learnt tables).
- OVSDB.Verify Dump Flows For Specific Table ${OS_CMP2_IP} ${ARP_PUNT_TABLE} ${VALID_TIMEOUTS}[0]
- ${count_before_traffic} = OvsManager.Get Packet Count From Table
- ... ${OS_CMP2_IP}
- ... ${INTEGRATION_BRIDGE}
- ... table=${ARP_PUNT_TABLE}
- ... |grep "arp actions=CONTROLLER:65535,learn(table=${ARP_PUNT_TABLE},hard_timeout=${VALID_TIMEOUTS}[0]"
- ${count_before_traffic_arp} = OvsManager.Get Packet Count From Table
- ... ${OS_CMP2_IP}
- ... ${INTEGRATION_BRIDGE}
- ... table=${ELAN_BASETABLE}
- ... |grep "n_packets=[\0-9+].*reg4=${ARP_REG}.0xffff"
- OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[1]
- ... ${VM_IPS}[3]
- ... sudo arping -c 5 -I eth0 22.1.1.101
- OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP2_IP}
- ... ${ARP_PUNT_TABLE}
- ... True
- ... ${EMPTY}
- ... arp_tpa=22.1.1.101,arp_op=1
- OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP2_IP}
- ... ${ARP_LEARN_TABLE}
- ... True
- ... ${EMPTY}
- ... arp_spa=22.1.1.101,arp_op=1
- ${count_after_traffic} = OvsManager.Get Packet Count From Table
- ... ${OS_CMP2_IP}
- ... ${INTEGRATION_BRIDGE}
- ... table=${ARP_PUNT_TABLE}
- ... |grep "arp actions=CONTROLLER:65535,learn(table=${ARP_PUNT_TABLE},hard_timeout=${VALID_TIMEOUTS}[0]"
- BuiltIn.Should be true ${count_after_traffic} > ${count_before_traffic}
- ${learnt_packet_count} = OvsManager.Get Packet Count From Table
- ... ${OS_CMP2_IP}
- ... ${INTEGRATION_BRIDGE}
- ... table=${ARP_PUNT_TABLE}
- ... |grep "n_packets=[\0-9+].*arp_tpa=22.1.1.101,arp_op=1.*actions=load:0x1"
- BuiltIn.Should be true ${learnt_packet_count} > 0
- ${count_after_traffic_arp} = OvsManager.Get Packet Count From Table
- ... ${OS_CMP2_IP}
- ... ${INTEGRATION_BRIDGE}
- ... table=${ELAN_BASETABLE}
- ... |grep "n_packets=[\0-9+].*reg4=${ARP_REG}.0xffff"
- BuiltIn.Should be true ${count_after_traffic_arp} > ${count_before_traffic_arp}
-
-Verify learnt flow for ARP reply in ARP tables
- [Documentation] Get default ARP table packet count before sending traffic to unkwon destination.
- ... Send ARP reply traffic using arping.
- ... Punt the first packet to controller and add new rule to stop pipeline processing.
- ... Check packet count before and after traffic for both(defualt and learnt tables).
- OVSDB.Verify Dump Flows For Specific Table ${OS_CMP2_IP} ${ARP_PUNT_TABLE} ${VALID_TIMEOUTS}[0]
- ${count_before_traffic} = OvsManager.Get Packet Count From Table
- ... ${OS_CMP2_IP}
- ... ${INTEGRATION_BRIDGE}
- ... table=${ARP_PUNT_TABLE}
- ... |grep "arp actions=CONTROLLER:65535,learn(table=${ARP_PUNT_TABLE},hard_timeout=${VALID_TIMEOUTS}[0]"
- ${count_before_traffic_arp} = OvsManager.Get Packet Count From Table
- ... ${OS_CMP2_IP}
- ... ${INTEGRATION_BRIDGE}
- ... table=${ELAN_BASETABLE}
- ... |grep "n_packets=[\0-9+].*reg4=${ARP_REG}.0xffff"
- OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${VM_IPS}[1]
- ... sudo arping -A -c 5 -I eth0 -s ${VM_IPS}[1] 11.1.1.101
- OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP2_IP}
- ... ${ARP_PUNT_TABLE}
- ... True
- ... ${EMPTY}
- ... arp_tpa=11.1.1.101,arp_op=2
- OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP2_IP}
- ... ${ARP_LEARN_TABLE}
- ... True
- ... ${EMPTY}
- ... arp_spa=11.1.1.101,arp_op=2
- ${count_after_traffic} = OvsManager.Get Packet Count From Table
- ... ${OS_CMP2_IP}
- ... ${INTEGRATION_BRIDGE}
- ... table=${ARP_PUNT_TABLE}
- ... |grep "arp actions=CONTROLLER:65535,learn(table=${ARP_PUNT_TABLE},hard_timeout=${VALID_TIMEOUTS}[0]"
- BuiltIn.Should be true ${count_after_traffic} > ${count_before_traffic}
- ${learnt_packet_count} = OvsManager.Get Packet Count From Table
- ... ${OS_CMP2_IP}
- ... ${INTEGRATION_BRIDGE}
- ... table=${ARP_PUNT_TABLE}
- ... |grep "n_packets=[\0-9+].*arp_tpa=11.1.1.101,arp_op=2.*actions=load:0x1"
- BuiltIn.Should be true ${learnt_packet_count} > 0
- ${count_after_traffic_arp} = OvsManager.Get Packet Count From Table
- ... ${OS_CMP2_IP}
- ... ${INTEGRATION_BRIDGE}
- ... table=${ELAN_BASETABLE}
- ... |grep "n_packets=[\0-9+].*reg4=${ARP_REG}.0xffff"
- BuiltIn.Should be true ${count_after_traffic_arp} > ${count_before_traffic_arp}
-
-Verify learnt flow for GARP (Gratuitous ARP) in ARP tables
- [Documentation] Get default ARP table packet count before sending traffic to unkwon destination.
- ... Send GARP traffic using arping.
- ... Punt the first packet to controller and add new rule to stop pipeline processing.
- ... Check packet count before and after traffic for both(defualt and learnt tables).
- OVSDB.Verify Dump Flows For Specific Table ${OS_CMP1_IP} ${ARP_PUNT_TABLE} ${VALID_TIMEOUTS}[0]
- ${count_before_traffic} = OvsManager.Get Packet Count From Table
- ... ${OS_CMP1_IP}
- ... ${INTEGRATION_BRIDGE}
- ... table=${ARP_PUNT_TABLE}
- ... |grep "arp actions=CONTROLLER:65535,learn(table=${ARP_PUNT_TABLE},hard_timeout=${VALID_TIMEOUTS}[0]"
- ${count_before_traffic_arp} = OvsManager.Get Packet Count From Table
- ... ${OS_CMP1_IP}
- ... ${INTEGRATION_BRIDGE}
- ... table=${ELAN_BASETABLE}
- ... |grep "n_packets=[\0-9+].*reg4=${GARP_REG}.0xffff"
- OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${VM_IPS}[0]
- ... sudo arping -U -c 5 -I eth0 ${VM_IPS}[0] &
- OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${ARP_PUNT_TABLE}
- ... True
- ... ${EMPTY}
- ... arp_tpa=${VM_IPS}[0],arp_op=1
- OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${ARP_LEARN_TABLE}
- ... True
- ... ${EMPTY}
- ... arp_spa=${VM_IPS}[0],arp_op=1
- ${count_after_traffic} = OvsManager.Get Packet Count From Table
- ... ${OS_CMP1_IP}
- ... ${INTEGRATION_BRIDGE}
- ... table=${ARP_PUNT_TABLE}
- ... |grep "arp actions=CONTROLLER:65535,learn(table=${ARP_PUNT_TABLE},hard_timeout=${VALID_TIMEOUTS}[0]"
- BuiltIn.Should be true ${count_after_traffic} > ${count_before_traffic}
- ${learnt_packet_count} = OvsManager.Get Packet Count From Table
- ... ${OS_CMP1_IP}
- ... ${INTEGRATION_BRIDGE}
- ... table=${ARP_PUNT_TABLE}
- ... |grep "arp_tpa=${VM_IPS}[0],arp_op=1"
- BuiltIn.Should be true ${learnt_packet_count} > 0
- ${count_after_traffic_arp} = OvsManager.Get Packet Count From Table
- ... ${OS_CMP1_IP}
- ... ${INTEGRATION_BRIDGE}
- ... table=${ELAN_BASETABLE}
- ... |grep "n_packets=[\0-9+].*reg4=${GARP_REG}.0xffff"
- BuiltIn.Should be true ${count_after_traffic_arp} > ${count_before_traffic_arp}
-
-Verify resync subnet route, SNAT and ARP route flow tables after disconnect and reconnecting OVS control path
- [Documentation] Verify learnt subnet route, SNAT and ARP flows.
- ... Delete OVS manager and controller and verify learnt flows for subnet, SNAT and ARP.
- ... Set OVS manager and controoler again and verify learnt flows for subnet, SNAT and ARP.
- ... Verify subnet, SNAT and ARP default flows
- ${snat_napt_switch_ip} = Get NAPT Switch IP From DPID ${ROUTERS}[1]
- BuiltIn.Wait Until Keyword Succeeds 120s 20s OVSDB.Check OVS OpenFlow Connections ${OS_CMP1_IP} 2
- OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${VM_IPS}[0]
- ... sudo ping -c 5 ${EXTRA_NW_IP}[1]
- OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${L3_PUNT_TABLE}
- ... True
- ... ${EMPTY}
- ... nw_dst=11.1.1.255 actions=drop
- OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${L3_PUNT_TABLE}
- ... True
- ... ${EMPTY}
- ... nw_dst=${EXTRA_NW_IP}[1] actions=drop
- OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[2]
- ... ${VM_IPS}[4]
- ... traceroute ${EXTRA_NW_IP}[2] -w 1 -q 1 -m 4
- OVSDB.Verify Dump Flows For Specific Table
- ... ${snat_napt_switch_ip}
- ... ${SNAT_PUNT_TABLE}
- ... True
- ... ${EMPTY}
- ... tp_dst=${UDP_PORT} actions=drop
- OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[2]
- ... ${VM_IPS}[4]
- ... wget -qc http://${EXTRA_NW_IP}[2]/ &
- OVSDB.Verify Dump Flows For Specific Table
- ... ${snat_napt_switch_ip}
- ... ${SNAT_PUNT_TABLE}
- ... True
- ... ${EMPTY}
- ... tp_dst=${TCP_PORT} actions=drop
- OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${VM_IPS}[0]
- ... sudo arping -c 2 ${VM_IPS}[1]
- OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${ARP_PUNT_TABLE}
- ... True
- ... ${EMPTY}
- ... arp_tpa=${VM_IPS}[1],arp_op=1
- OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${ARP_LEARN_TABLE}
- ... True
- ... ${EMPTY}
- ... arp_spa=${VM_IPS}[1],arp_op=1
- OVSDB.Delete OVS Manager ${OS_CMP1_IP}
- OVSDB.Delete OVS Controller ${OS_CMP1_IP}
- OVSDB.Delete OVS Manager ${snat_napt_switch_ip}
- OVSDB.Delete OVS Controller ${snat_napt_switch_ip}
- OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${L3_PUNT_TABLE}
- ... False
- ... ${EMPTY}
- ... nw_dst=11.1.1.255 actions=drop
- OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${L3_PUNT_TABLE}
- ... False
- ... ${EMPTY}
- ... nw_dst=${EXTRA_NW_IP}[1] actions=drop
- OVSDB.Verify Dump Flows For Specific Table
- ... ${snat_napt_switch_ip}
- ... ${SNAT_PUNT_TABLE}
- ... False
- ... ${EMPTY}
- ... nw_dst=11.1.1.255 actions=drop
- OVSDB.Verify Dump Flows For Specific Table
- ... ${snat_napt_switch_ip}
- ... ${SNAT_PUNT_TABLE}
- ... False
- ... ${EMPTY}
- ... tp_dst=${TCP_PORT} actions=drop
- OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${ARP_PUNT_TABLE}
- ... False
- ... ${EMPTY}
- ... arp_tpa=${VM_IPS}[1],arp_op=1
- OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${ARP_LEARN_TABLE}
- ... False
- ... ${EMPTY}
- ... arp_spa=${VM_IPS}[1],arp_op=1
- OVSDB.Set Controller In OVS Bridge ${OS_CMP1_IP} ${INTEGRATION_BRIDGE} tcp:${ODL_SYSTEM_IP}:6653
- OVSDB.Set Controller In OVS Bridge ${snat_napt_switch_ip} ${INTEGRATION_BRIDGE} tcp:${ODL_SYSTEM_IP}:6653
- OVSDB.Add Multiple Managers to OVS ${OS_CMP1_IP}
- OVSDB.Add Multiple Managers to OVS ${snat_napt_switch_ip}
- ${snat_napt_switch_ip} = Get NAPT Switch IP From DPID ${ROUTERS}[1]
- BuiltIn.Wait Until Keyword Succeeds 120s 20s OVSDB.Check OVS OpenFlow Connections ${OS_CMP1_IP} 2
- BuiltIn.Wait Until Keyword Succeeds
- ... 120s
- ... 20s
- ... OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${L3_PUNT_TABLE}
- ... True
- ... ${EMPTY}
- ... nw_dst=11.1.1.255 actions=drop
- BuiltIn.Wait Until Keyword Succeeds
- ... 120s
- ... 20s
- ... OVSDB.Verify Dump Flows For Specific Table
- ... ${snat_napt_switch_ip}
- ... ${SNAT_PUNT_TABLE}
- ... False
- ... ${EMPTY}
- ... tp_dst=${UDP_PORT} actions=drop
- BuiltIn.Wait Until Keyword Succeeds
- ... 190s
- ... 40s
- ... OVSDB.Verify Dump Flows For Specific Table
- ... ${snat_napt_switch_ip}
- ... ${SNAT_PUNT_TABLE}
- ... False
- ... ${EMPTY}
- ... tp_dst=${TCP_PORT} actions=drop
- BuiltIn.Wait Until Keyword Succeeds
- ... 120s
- ... 20s
- ... OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${ARP_PUNT_TABLE}
- ... False
- ... ${EMPTY}
- ... arp_tpa=${EXTRA_NW_IP}[1],arp_op=1
- BuiltIn.Wait Until Keyword Succeeds
- ... 120s
- ... 20s
- ... OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${ARP_LEARN_TABLE}
- ... False
- ... ${EMPTY}
- ... arp_spa=${EXTRA_NW_IP}[1],arp_op=1
- OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${L3_PUNT_TABLE}
- ... True
- ... ${EMPTY}
- ... learn(table=${L3_PUNT_TABLE},hard_timeout=${VALID_TIMEOUTS}[0]
- OVSDB.Verify Dump Flows For Specific Table
- ... ${snat_napt_switch_ip}
- ... ${SNAT_PUNT_TABLE}
- ... True
- ... ${EMPTY}
- ... learn(table=${SNAT_PUNT_TABLE},hard_timeout=${VALID_TIMEOUTS}[0]
- OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${ARP_PUNT_TABLE}
- ... True
- ... ${EMPTY}
- ... learn(table=${ARP_PUNT_TABLE},hard_timeout=${VALID_TIMEOUTS}[0]
-
-
-*** Keywords ***
-Suite Setup
- [Documentation] Create common setup related to openflow punt path protection
- VpnOperations.Basic Suite Setup
- FOR ${network} IN @{NETWORKS}
- OpenStackOperations.Create Network ${network}
- END
- OpenStackOperations.Create Network ${EXT_NETWORKS} additional_args=--external --provider-network-type gre
- ${elements} = BuiltIn.Create List ${EXT_NETWORKS}
- ${count} = BuiltIn.Get length ${SUBNETS}
- FOR ${index} IN RANGE 0 ${count}
- OpenStackOperations.Create SubNet ${NETWORKS}[${index}] ${SUBNETS}[${index}] ${SUBNETS_CIDR}[${index}]
- END
- OpenStackOperations.Create SubNet
- ... ${EXT_NETWORKS}
- ... ${EXT_SUBNETS}
- ... ${EXT_SUBNETS_CIDR}
- ... additional_args=--no-dhcp
- FOR ${router} IN @{ROUTERS}
- OpenStackOperations.Create Router ${router}
- ${router_id} = OpenStackOperations.Get Router Id ${router}
- Collections.Append To List ${ROUTERS_ID} ${router_id}
- END
- BuiltIn.Set Suite Variable @{ROUTERS_ID}
- FOR ${index} IN RANGE 0 2
- OpenStackOperations.Add Router Interface ${ROUTERS}[0] ${SUBNETS}[${index}]
- END
- OpenStackOperations.Add Router Interface ${ROUTERS}[1] ${SUBNETS}[2]
- OpenStackOperations.Create And Configure Security Group ${SECURITY_GROUP}
- ${ext_net} = BuiltIn.Create List ${EXT_NETWORKS}
- ${NETWORKS_ALL} = Collections.Combine Lists ${NETWORKS} ${ext_net}
- FOR ${index} IN RANGE 0 3
- OpenStackOperations.Create Port
- ... ${NETWORKS_ALL}[${index}]
- ... ${PORT_LIST}[${index + ${index}}]
- ... sg=${SECURITY_GROUP}
- OpenStackOperations.Create Port
- ... ${NETWORKS_ALL}[${index}]
- ... ${PORT_LIST}[${index + ${index + 1}}]
- ... sg=${SECURITY_GROUP}
- END
- OpenStackOperations.Create Port
- ... ${NETWORKS}[0]
- ... ${EXTRA_PORTS}[0]
- ... sg=${SECURITY_GROUP}
- ... additional_args=--allowed-address ip-address=0.0.0.0 --fixed-ip subnet=${SUBNETS}[0],ip-address=${EXTRA_NW_IP}[0]
- OpenStackOperations.Create Port
- ... ${NETWORKS}[1]
- ... ${EXTRA_PORTS}[1]
- ... sg=${SECURITY_GROUP}
- ... additional_args=--allowed-address ip-address=0.0.0.0 --fixed-ip subnet=${SUBNETS}[1],ip-address=${EXTRA_NW_IP}[1]
- FOR ${index} IN RANGE 0 3
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${PORT_LIST}[${index + ${index}}]
- ... ${VM_LIST}[${index + ${index}}]
- ... ${OS_CMP1_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${PORT_LIST}[${index + ${index + 1}}]
- ... ${VM_LIST}[${index + ${index + 1}}]
- ... ${OS_CMP2_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- END
- @{VM_IPS} ${dhcp_ip} = OpenStackOperations.Get VM IPs @{VM_LIST}
- BuiltIn.Set Suite Variable ${VM_IPS}
- OpenStackOperations.Show Debugs @{VM_LIST}
- BuiltIn.Should Not Contain ${VM_IPS} None
- BuiltIn.Should Not Contain ${dhcp_ip} None
- FOR ${index} IN RANGE 0 2
- VpnOperations.VPN Create L3VPN
- ... name=${VPN_NAME}[${index}]
- ... vpnid=${VPN_ID}[${index}]
- ... rd=${L3VPN_RD_IRT_ERT}[${index}]
- ... exportrt=${L3VPN_RD_IRT_ERT}[${index}]
- ... importrt=${L3VPN_RD_IRT_ERT}[${index}]
- END
- VpnOperations.Associate VPN to Router routerid=${ROUTERS_ID}[0] vpnid=${VPN_ID}[0]
- ${network_id} = OpenStackOperations.Get Net Id ${EXT_NETWORKS}
- VpnOperations.Associate L3VPN To Network networkid=${network_id} vpnid=${VPN_ID}[1]
- OpenStackOperations.Add Router Gateway
- ... ${ROUTERS}[1]
- ... ${EXT_NETWORKS}
- ... additional_args=--fixed-ip subnet=${EXT_SUBNETS},ip-address=${EXT_SUBNETS_FIXED_IP} --enable-snat
- Create Dictionary For DPN ID And Compute IP Mapping For All DPNS
- OpenStackOperations.Get Suite Debugs
-
-Set Original TimeOut In Xml
- [Documentation] Set default timeout in XML for all the punt files
- [Arguments] ${hard_timeout}
- FOR ${index} IN RANGE 0 3
- Change Hard Timeout Value In XML File
- ... ${FILES_PATH}[${index}]
- ... ${hard_timeout}
- ... ${ORIGINAL_TIMEOUTS}[${index}]
- Verify Punt Values In XML File ${FILES_PATH}[${index}] ${ORIGINAL_TIMEOUTS}[${index}]
- END
- ClusterManagement.Stop_Members_From_List_Or_All
- ClusterManagement.Start_Members_From_List_Or_All
- BuiltIn.Wait Until Keyword Succeeds 120s 20s OVSDB.Check OVS OpenFlow Connections ${OS_CMP1_IP} 2
-
-Verify Punt Values In XML File
- [Documentation] Verify the default value for SNAT, ARP in ELAN, Subnet Routing in the xml file in ODL Controller
- [Arguments] ${file_path} ${value}
- ${output} = Utils.Run Command On Remote System And Log
- ... ${ODL_SYSTEM_IP}
- ... cat ${file_path} | grep punt-timeout
- @{matches} = BuiltIn.Should Match Regexp ${output} punt.timeout.*?([0-9]+)
- BuiltIn.Should be true ${matches}[1] == ${value}
-
-Change Hard Timeout Value In XML File
- [Documentation] Change the default value in xml in the ODL controller for subnet route, SNAT and ARP
- [Arguments] ${file_path} ${value_1} ${value_2}
- Utils.Run Command On Remote System And Log
- ... ${ODL_SYSTEM_IP}
- ... sed -i -e 's/punt-timeout\>${value_1}/punt-timeout\>${value_2}/' ${file_path}
-
-Create Dictionary For DPN ID And Compute IP Mapping For All DPNS
- [Documentation] Creating dictionary for DPN ID and compute IP mapping
- FOR ${ip} IN @{OS_ALL_IPS}
- ${dpnid} = OVSDB.Get DPID ${ip}
- Collections.Append To List ${DPN_IDS} ${dpnid}
- END
- ${DPN_TO_COMPUTE_IP} = BuiltIn.Create Dictionary
- ${count} = BuiltIn.Get length ${OS_ALL_IPS}
- FOR ${index} IN RANGE 0 ${count}
- Collections.Set To Dictionary ${DPN_TO_COMPUTE_IP} ${DPN_IDS}[${index}] ${OS_ALL_IPS}[${index}]
- END
- FOR ${dp_id} IN @{DPN_IDS}
- Collections.Dictionary Should Contain Key ${DPN_TO_COMPUTE_IP} ${dp_id}
- END
- BuiltIn.Set Suite Variable ${DPN_TO_COMPUTE_IP}
-
-Get SNAT NAPT Switch DPID
- [Documentation] Returns the SNAT NAPT switch dpnid from odl rest call.
- [Arguments] ${router_name}
- ${router_id} = OpenStackOperations.Get Router Id ${router_name}
- ${resp} = RequestsLibrary.Get Request
- ... session
- ... ${CONFIG_API}/odl-nat:napt-switches/router-to-napt-switch/${router_id}
- Log ${resp.content}
- @{matches} = BuiltIn.Should Match Regexp ${resp.content} switch.id.*?([0-9]+)
- ${dpnid} = BuiltIn.Convert To Integer ${matches}[1]
- RETURN ${dpnid}
-
-Get NAPT Switch IP From DPID
- [Documentation] Return SNAT NAPT switch ip for the given router name
- [Arguments] ${router_name}
- ${dpnid} = BuiltIn.Wait Until Keyword Succeeds 60s 15s Get SNAT NAPT Switch DPID ${router_name}
- ${compute_ip} = Collections.Get From Dictionary ${DPN_TO_COMPUTE_IP} ${dpnid}
- RETURN ${compute_ip}
+++ /dev/null
-*** Settings ***
-Documentation Test suite to validate network address translation(snat/dnat) functionality in openstack integrated environment.
-... All the testcases were written to do flow validation since dc gateway is unavailable in csit environment.
-... This suite assumes proper integration bridges and vxlan tunnels are configured in the environment.
-
-Library Collections
-Library RequestsLibrary
-Library SSHLibrary
-Library String
-Resource ../../../libraries/BgpOperations.robot
-Resource ../../../libraries/OpenStackOperations.robot
-Resource ../../../libraries/SetupUtils.robot
-Resource ../../../libraries/Tcpdump.robot
-Resource ../../../libraries/Utils.robot
-Resource ../../../libraries/VpnOperations.robot
-Resource ../../../variables/Variables.robot
-Resource ../../../variables/netvirt/Variables.robot
-
-Suite Setup Suite Setup
-Suite Teardown Stop Suite
-Test Setup SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
-Test Teardown OpenStackOperations.Get Test Teardown Debugs
-
-
-*** Variables ***
-${SECURITY_GROUP} nat_sg
-${NETWORK_TYPE} gre
-${SNAT_ENABLED} "enable_snat": true
-${SNAT_DISABLED} "enable_snat": false
-${ROUTER} nat_router
-${AS_ID} 100
-${DCGW_SYSTEM_IP} ${TOOLS_SYSTEM_1_IP}
-${LOOPBACK_IP} 5.5.5.2
-${DCGW_RD} 100:1
-${VPN_NAME} vpn_1
-${VPN_INSTANCE_ID} 4ae8cd92-48ca-49b5-94e1-b2921a261442
-${ExtIP} 100.100.100.24
-@{NETWORKS} nat_net_1 nat_net_2
-@{EXTERNAL_NETWORKS} nat_ext_11 nat_ext_22
-@{EXTERNAL_SUB_NETWORKS} nat_ext_sub_net_1 nat_ext_sub_net_2
-@{SUBNETS} nat_sub_net_1 nat_sub_net_2
-@{SUBNET_CIDRS} 10.1.1.0/24 20.1.1.0/24
-@{EXT_SUBNET_CIDRS} 100.100.100.0/24 200.200.200.0/24
-@{PORTS} nat_port_1 nat_port_2 nat_port_3 nat_port_4
-@{NET_1_VMS} nat_net_1_vm_1 nat_net_1_vm_2 nat_net_1_vm_3 nat_net_1_vm_4
-
-
-*** Test Cases ***
-Verify Successful Creation Of External Network With Router External Set To TRUE
- [Documentation] Create external network,enable snat on router and validate the same.
- OpenStackOperations.Add Router Gateway ${ROUTER} ${EXTERNAL_NETWORKS}[0] --enable-snat
- ${output} = OpenStackOperations.Show Router ${ROUTER}
- BuiltIn.Should Contain ${output} ${SNAT_ENABLED}
- ${output} = OpenStackOperations.Show Network ${EXTERNAL_NETWORKS}[0]
- BuiltIn.Should Contain ${output} ${EXTERNAL_NETWORKS}[0]
-
-Verify Successful Update Of Router With External_gateway_info, Disable SNAT And Enable SNAT
- [Documentation] Disable snat, enable snat and validate the same.
- OpenStackOperations.Add Router Gateway ${ROUTER} ${EXTERNAL_NETWORKS}[0] --disable-snat
- ${output} = OpenStackOperations.Show Router ${ROUTER}
- BuiltIn.Should Contain ${output} ${SNAT_DISABLED}
- OpenStackOperations.Add Router Gateway ${ROUTER} ${EXTERNAL_NETWORKS}[0] --enable-snat
- ${output} = OpenStackOperations.Show Router ${ROUTER}
- BuiltIn.Should Contain ${output} ${SNAT_ENABLED}
-
-Verify Successful Deletion Of External Network
- [Documentation] Delete the external network and validate the same.
- OpenStackOperations.Remove Gateway ${ROUTER}
- ${output} = OpenStackOperations.Show Router ${ROUTER}
- BuiltIn.Should Not Contain ${output} ${SNAT_ENABLED}
-
-Verify Floating Ip Provision And Reachability From External Network Via Neutron Router Through L3vpn
- [Documentation] Check floating IP should be present in dump flows after creating the floating IP and associating it to external network
- ... which is associated to L3VPN
- VpnOperations.VPN Create L3VPN
- ... vpnid=${VPN_INSTANCE_ID}
- ... name=${VPN_NAME}
- ... rd=["${DCGW_RD}"]
- ... exportrt=["${DCGW_RD}"]
- ... importrt=["${DCGW_RD}"]
- ${ext_net_id} = OpenStackOperations.Get Net Id ${EXTERNAL_NETWORKS}[0]
- VpnOperations.Associate L3VPN To Network networkid=${ext_net_id} vpnid=${VPN_INSTANCE_ID}
- OpenStackOperations.Add Router Gateway ${ROUTER} ${EXTERNAL_NETWORKS}[0] --disable-snat
- ${output} = OpenStackOperations.Show Router ${ROUTER}
- BuiltIn.Should Contain ${output} ${SNAT_DISABLED}
- ${subnetid} = OpenStackOperations.Get Subnet Id ${EXTERNAL_SUB_NETWORKS}[0]
- OpenStackOperations.Add Router Gateway
- ... ${ROUTER}
- ... ${EXTERNAL_NETWORKS}[0]
- ... --fixed-ip subnet=${subnetid},ip-address=${ExtIP}
- ${float} = OpenStackOperations.Create And Associate Floating IPs ${EXTERNAL_NETWORKS}[0] ${NET_1_VMS}[0]
- ${float} = BuiltIn.Set Variable ${float}[0]
- @{matching_paras} = BuiltIn.Create List nw_dst=${float} goto_table:${DNAT_TABLE}
- BuiltIn.Wait Until Keyword Succeeds
- ... 10s
- ... 5s
- ... OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${PDNAT_TABLE}
- ... True
- ... ${EMPTY}
- ... @{matching_paras}
- @{matching_paras} = BuiltIn.Create List actions=set_field:${float} goto_table:${SNAT_TABLE}
- BuiltIn.Wait Until Keyword Succeeds
- ... 10s
- ... 5s
- ... OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${PSNAT_TABLE}
- ... True
- ... ${EMPTY}
- ... @{matching_paras}
-
-Verify Floating Ip De-provision And Reachability From External Network Via Neutron Router Through L3vpn
- [Documentation] Check floating IP should not be present in dump flows after deleting the floating IP
- ... and removing the external gateway from router which is associated to L3VPN
- OpenStackOperations.Get ControlNode Connection
- ${output} = OpenStackOperations.OpenStack CLI openstack floating ip list |awk '{print$2}'
- ${floating_id} = BuiltIn.Should Match Regexp
- ... ${output}
- ... [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}
- OpenStackOperations.Delete Floating IP ${floating_id}
- OpenStackOperations.Remove Gateway ${ROUTER}
- ${output} = OVSDB.Get Flow Entries On Node ${OS_CMP1_CONN_ID}
- BuiltIn.Should Not Contain ${output} ${ExtIP}
-
-Verify Floating Ip Re-provision And Reachability From External Network Via Neutron Router Through L3vpn
- [Documentation] Check floating IP should be present in dump flows after creating the floating IP again wnd associating it to external network
- ... which is associated to L3VPN
- ${subnetid} = OpenStackOperations.Get Subnet Id ${EXTERNAL_SUB_NETWORKS}[0]
- OpenStackOperations.Add Router Gateway
- ... ${ROUTER}
- ... ${EXTERNAL_NETWORKS}[0]
- ... --fixed-ip subnet=${subnetid},ip-address=${ExtIP}
- ${float} = OpenStackOperations.Create And Associate Floating IPs ${EXTERNAL_NETWORKS}[0] ${NET_1_VMS}[0]
- ${float} = BuiltIn.Set Variable ${float}[0]
- @{matching_paras} = BuiltIn.Create List nw_dst=${float} goto_table:${DNAT_TABLE}
- BuiltIn.Wait Until Keyword Succeeds
- ... 10s
- ... 5s
- ... OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${PDNAT_TABLE}
- ... True
- ... ${EMPTY}
- ... @{matching_paras}
- @{matching_paras} = BuiltIn.Create List actions=set_field:${float} goto_table:${SNAT_TABLE}
- BuiltIn.Wait Until Keyword Succeeds
- ... 10s
- ... 5s
- ... OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${PSNAT_TABLE}
- ... True
- ... ${EMPTY}
- ... @{matching_paras}
-
-Verify Multiple Floating Ip Creation and Association to external network
- [Documentation] Check Multiple floating IPs should be present in dump flows after creating multiple floating IPs and associating it to external network
- ... which is associated to L3VPN
- ${subnetid} = OpenStackOperations.Get Subnet Id ${EXTERNAL_SUB_NETWORKS}[0]
- OpenStackOperations.Add Router Gateway
- ... ${ROUTER}
- ... ${EXTERNAL_NETWORKS}[0]
- ... --fixed-ip subnet=${subnetid},ip-address=${ExtIP}
- ${FloatIp1} = OpenStackOperations.Create And Associate Floating IPs
- ... ${EXTERNAL_NETWORKS}[0]
- ... ${NET_1_VMS}[1]
- ${FloatIp2} = OpenStackOperations.Create And Associate Floating IPs
- ... ${EXTERNAL_NETWORKS}[0]
- ... ${NET_1_VMS}[2]
- ${FloatIp3} = OpenStackOperations.Create And Associate Floating IPs
- ... ${EXTERNAL_NETWORKS}[0]
- ... ${NET_1_VMS}[3]
- ${output} = OVSDB.Get Flow Entries On Node ${OS_CMP2_CONN_ID}
- BuiltIn.Should Match Regexp ${output} ${ExtIP}
- BuiltIn.Should Match Regexp ${output} .*${FloatIp1}.*
- BuiltIn.Should Match Regexp ${output} .*${FloatIp2}.*
- BuiltIn.Should Match Regexp ${output} .*${FloatIp3}.*
-
-
-*** Keywords ***
-Suite Setup
- [Documentation] Test Suite for Subnet_Routing_and_Multicast_Deployments.
- VpnOperations.Basic Suite Setup
- BgpOperations.Start Quagga Processes On ODL ${ODL_SYSTEM_IP}
- BgpOperations.Start Quagga Processes On DCGW ${DCGW_SYSTEM_IP}
- Create Setup
- OpenStackOperations.Show Debugs @{NET_1_VMS}
- OpenStackOperations.Get Suite Debugs
-
-Create Setup
- Create Neutron Networks
- Create Neutron Subnets
- OpenStackOperations.Create SubNet
- ... ${EXTERNAL_NETWORKS}[0]
- ... ${EXTERNAL_SUB_NETWORKS}[0]
- ... ${EXT_SUBNET_CIDRS}[0]
- OpenStackOperations.Create Allow All SecurityGroup ${SECURITY_GROUP}
- Create Neutron Ports
- Create Nova VMs
- BgpOperations.Setup BGP Peering On ODL ${ODL_SYSTEM_IP} ${AS_ID} ${DCGW_SYSTEM_IP}
- BgpOperations.Setup BGP Peering On DCGW
- ... ${DCGW_SYSTEM_IP}
- ... ${AS_ID}
- ... ${ODL_SYSTEM_IP}
- ... ${VPN_NAME}
- ... ${DCGW_RD}
- ... ${LOOPBACK_IP}
- OpenStackOperations.Create Router ${ROUTER}
- OpenStackOperations.Add Router Interface ${ROUTER} ${SUBNETS}[0]
- OpenStackOperations.Add Router Interface ${ROUTER} ${SUBNETS}[1]
-
-Create Neutron Networks
- [Documentation] Create required number of networks
- FOR ${NET} IN @{NETWORKS}
- OpenStackOperations.Create Network ${NET}
- END
- OpenStackOperations.Create Network ${EXTERNAL_NETWORKS}[0] --external --provider-network-type ${NETWORK_TYPE}
- BuiltIn.Wait Until Keyword Succeeds 3s 1s Utils.Check For Elements At URI ${NETWORK_URL} ${NETWORKS}
-
-Create Neutron Subnets
- [Documentation] Create required number of subnets for previously created networks
- ${num_of_networks} = BuiltIn.Get Length ${NETWORKS}
- FOR ${index} IN RANGE 0 ${num_of_networks}
- OpenStackOperations.Create SubNet ${NETWORKS}[${index}] ${SUBNETS}[${index}] ${SUBNET_CIDRS}[${index}]
- END
- BuiltIn.Wait Until Keyword Succeeds
- ... 3s
- ... 1s
- ... Utils.Check For Elements At URI
- ... ${SUBNETWORK_URL}
- ... ${SUBNETS}
-
-Create Neutron Ports
- [Documentation] Create required number of ports under previously created subnets
- OpenStackOperations.Create Port ${NETWORKS}[0] ${PORTS}[0] sg=${SECURITY_GROUP}
- OpenStackOperations.Create Port ${NETWORKS}[0] ${PORTS}[1] sg=${SECURITY_GROUP}
- OpenStackOperations.Create Port ${NETWORKS}[1] ${PORTS}[2] sg=${SECURITY_GROUP}
- OpenStackOperations.Create Port ${NETWORKS}[1] ${PORTS}[3] sg=${SECURITY_GROUP}
- BuiltIn.Wait Until Keyword Succeeds
- ... 3s
- ... 1s
- ... Utils.Check For Elements At URI
- ... ${CONFIG_API}/neutron:neutron/ports/
- ... ${PORTS}
-
-Create Nova VMs
- [Documentation] Create Vm instances on compute nodes
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${PORTS}[0]
- ... ${NET_1_VMS}[0]
- ... ${OS_CMP1_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${PORTS}[1]
- ... ${NET_1_VMS}[1]
- ... ${OS_CMP2_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${PORTS}[2]
- ... ${NET_1_VMS}[2]
- ... ${OS_CMP1_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${PORTS}[3]
- ... ${NET_1_VMS}[3]
- ... ${OS_CMP2_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- @{NET_1_VM_IPS} ${NET_1_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_1_VMS}
- BuiltIn.Set Suite Variable @{NET_1_VM_IPS}
- BuiltIn.Should Not Contain ${NET_1_VM_IPS} None
- BuiltIn.Should Not Contain ${NET_1_DHCP_IP} None
-
-Stop Suite
- [Documentation] Test teardown for snat suite.
- BgpOperations.Delete BGP Configuration On ODL session
- BgpOperations.Delete BGP Config On Quagga ${DCGW_SYSTEM_IP} ${AS_ID}
- BgpOperations.Stop BGP Processes On Node ${ODL_SYSTEM_IP}
- BgpOperations.Stop BGP Processes On Node ${DCGW_SYSTEM_IP}
- OpenStackOperations.OpenStack Suite Teardown
+++ /dev/null
-*** Settings ***
-Documentation Test suite to validate subnet routing and multicast 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.
-
-Resource ../../../libraries/BgpOperations.robot
-Resource ../../../libraries/KarafKeywords.robot
-Resource ../../../libraries/OpenStackOperations.robot
-Resource ../../../libraries/Utils.robot
-Resource ../../../libraries/SetupUtils.robot
-Resource ../../../variables/Variables.robot
-Resource ../../../variables/netvirt/Variables.robot
-Resource ../../../libraries/VpnOperations.robot
-
-Suite Setup Suite Setup
-Suite Teardown Stop Suite
-Test Setup SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
-Test Teardown OpenStackOperations.Get Test Teardown Debugs
-
-
-*** Variables ***
-${AS_ID} 100
-${SECURITY_GROUP} mc_sg
-${NUM_OF_PORTS_PER_NETWORK} 4
-${NUM_OF_INSTANCES} 20
-${VPN_INSTANCE_ID} 4ae8cd92-48ca-49b5-94e1-b2921a261111
-${VPN_NAME} mc_vpn1
-${LOOPBACK_IP} 5.5.5.2
-${L3VPN_RD} 2200:2
-${DCGW_SYSTEM_IP} ${TOOLS_SYSTEM_1_IP}
-${RPING_MIP_IP} sudo arping -I eth0:1 -c 5 -b -s ${EXTRA_NW_SUBNET}[0] ${EXTRA_NW_SUBNET}[0]
-${RPING_MIP_IP1} sudo arping -I eth0:1 -c 5 -b -s ${EXTRA_NW_SUBNET}[1] ${EXTRA_NW_SUBNET}[1]
-${RPING_MIP_IP2} sudo arping -I eth0:1 -c 5 -b -s ${EXTRA_NW_SUBNET}[2] ${EXTRA_NW_SUBNET}[2]
-${RPING_MIP_IP3} sudo arping -I eth0:1 -c 5 -b -s ${NEW_EXTRA_NW_SUBNET} ${NEW_EXTRA_NW_SUBNET}
-@{INTERFACE_STATE} up down
-@{NETWORKS} mc_net_1 mc_net_2 mc_net_3
-@{NET_1_VMS} mc_net_1_vm_1 mc_net_1_vm_2 mc_net_1_vm_3 mc_net_1_vm_4
-@{NET_2_VMS} mc_net_2_vm_1 mc_net_2_vm_2 mc_net_2_vm_3 mc_net_2_vm_4
-@{NET_3_VMS} mc_net_3_vm_1 mc_net_3_vm_2 mc_net_3_vm_3 mc_net_3_vm_4
-@{NET_1_PORTS} mc_net_1_port_1 mc_net_1_port_2 mc_net_1_port_3 mc_net_1_port_4
-@{NET_2_PORTS} mc_net_2_port_1 mc_net_2_port_2 mc_net_2_port_3 mc_net_2_port_4
-@{NET_3_PORTS} mc_net_3_port_1 mc_net_3_port_2 mc_net_3_port_3 mc_net_3_port_4
-@{SUBNETS} mc_sub_1 mc_sub_2 mc_sub_3
-@{SUBNET_CIDR} 10.1.0.0/24 10.2.0.0/24 10.3.0.0/24
-@{EXTRA_NW_SUBNET} 10.1.0.100 10.2.0.100 10.3.0.100
-${NEW_EXTRA_NW_SUBNET} 10.1.0.110
-${MASK} 255.255.255.0
-
-
-*** Test Cases ***
-Verify The Subnet Route When Neutron Port Hosting Subnet Route Is Down/up On Single VSwitch Topology
- [Documentation] Verify the subnet route when enterprise host is down and up.
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 5s
- ... OpenStackOperations.Configure_IP_On_Sub_Interface
- ... ${NETWORKS}[0]
- ... ${EXTRA_NW_SUBNET}[0]
- ... ${NET_1_VM_IPS}[0]
- ... ${MASK}
- ... ${INTERFACE_STATE}[1]
- ${allowed_ip_list} = BuiltIn.Create List ${EXTRA_NW_SUBNET}[0]
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 10s
- ... Utils.Check For Elements At URI
- ... ${FIB_ENTRY_URL}
- ... ${allowed_ip_list}
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 5s
- ... OpenStackOperations.Configure_IP_On_Sub_Interface
- ... ${NETWORKS}[0]
- ... ${EXTRA_NW_SUBNET}[0]
- ... ${NET_1_VM_IPS}[0]
- ... ${MASK}
- ... ${INTERFACE_STATE}[0]
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 5s
- ... OpenStackOperations.Verify_IP_Configured_On_Sub_Interface
- ... ${NETWORKS}[0]
- ... ${EXTRA_NW_SUBNET}[0]
- ... ${NET_1_VM_IPS}[0]
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 10s
- ... Utils.Check For Elements At URI
- ... ${FIB_ENTRY_URL}
- ... ${allowed_ip_list}
- Verify Ping between Inter Intra And Enterprise host
-
-Verify Enterprise Hosts Reachability After VM Reboot
- [Documentation] Restart the VSwitch1 which is hosting the enterprise host and check the subnet route
- OpenStackOperations.Get ControlNode Connection
- @{NET_1_VM_IPS} ${NET1_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_1_VMS}
- OpenStackOperations.Reboot Nova VM ${NET_1_VMS}[0]
- @{NET_1_VM_IPS} ${NET1_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_1_VMS}
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 5s
- ... OpenStackOperations.Configure_IP_On_Sub_Interface
- ... ${NETWORKS}[0]
- ... ${EXTRA_NW_SUBNET}[0]
- ... ${NET_1_VM_IPS}[0]
- ... ${MASK}
- ... ${INTERFACE_STATE}[0]
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 5s
- ... OpenStackOperations.Verify_IP_Configured_On_Sub_Interface
- ... ${NETWORKS}[0]
- ... ${EXTRA_NW_SUBNET}[0]
- ... ${NET_1_VM_IPS}[0]
- Verify Ping between Inter Intra And Enterprise host
-
-Verify The Subnet Route For Multiple Subnets On Multi VSwitch Topology When DC-GW Is Restarted
- [Documentation] Restart dcgw and check enterprise hosts reachability
- BgpOperations.Restart BGP Processes On DCGW ${DCGW_SYSTEM_IP}
- Create BGP Config On DCGW
- Verify Ping between Inter Intra And Enterprise host
-
-Verify The Subnet Route For Multiple Subnets On Multi VSwitch Topology When Qbgp Is Restarted
- [Documentation] Restart qbgp and check enterprise hosts reachability
- BgpOperations.Restart BGP Processes On ODL ${ODL_SYSTEM_IP}
- Verify Ping between Inter Intra And Enterprise host
-
-Verify The Subnet Route When Vswitch Hosting Subnet Route Is Restarted On Single Vswitch Topology
- [Documentation] Restart single OVS node on which subnet route is configured and verify enterprise hosts reachability
- OVSDB.Restart OVSDB ${OS_COMPUTE_2_IP}
- BuiltIn.Wait Until Keyword Succeeds 10s 20s OVSDB.Verify Ovsdb State ${OS_COMPUTE_2_IP}
- VpnOperations.Verify Tunnel Status as UP
- Verify Ping between Inter Intra And Enterprise host
-
-Verify The Subnet Route When Vswitch Hosting Subnet Enterprise Host Is Restarted On Multiple Vswitch Topology
- [Documentation] Restart the OVS node on both compute nodes and verify the subnet route
- OVSDB.Restart OVSDB ${OS_COMPUTE_1_IP}
- OVSDB.Restart OVSDB ${OS_COMPUTE_2_IP}
- BuiltIn.Wait Until Keyword Succeeds 10s 20s OVSDB.Verify Ovsdb State ${OS_COMPUTE_1_IP}
- BuiltIn.Wait Until Keyword Succeeds 10s 20s OVSDB.Verify Ovsdb State ${OS_COMPUTE_2_IP}
- VpnOperations.Verify Tunnel Status as UP
- Verify Ping between Inter Intra And Enterprise host
-
-Verify The Subnet Route For One Subnet On Single Vswitch
- [Documentation] Verify the subnet route for one subnet on a single VSwitch
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[2]
- ... ${NET_2_VM_IPS}[1]
- ... ping -c 3 ${EXTRA_NW_SUBNET}[1]
- BuiltIn.Should Contain ${output} 64 bytes
- Utils.Check For Elements At URI ${FIB_ENTRY_URL} ${EXTRA_NW_SUBNET}
- Verify Ping between Inter Intra And Enterprise host
-
-Verify The Subnet Route For Multiple Subnets On Multi Vswitch Topology
- [Documentation] Configure one more IP on sub interface and verify the subnet route for multiple subnets on multi VSwitch topology
- BuiltIn.Log Bring up enterprise host in another vswitch
- Configure_IP_On_Sub_Interface ${NETWORKS}[0] ${NEW_EXTRA_NW_SUBNET} ${NET_1_VM_IPS}[2] ${MASK}
- Verify_IP_Configured_On_Sub_Interface ${NETWORKS}[0] ${NEW_EXTRA_NW_SUBNET} ${NET_1_VM_IPS}[2]
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[2]
- ... ${RPING_MIP_IP3}
- BuiltIn.Should Contain ${output} broadcast
- BuiltIn.Should Contain ${output} Received 0 reply
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[2]
- ... ${NET_1_VM_IPS}[2]
- ... ping -c 3 ${NEW_EXTRA_NW_SUBNET}
- BuiltIn.Should Contain ${output} 64 bytes
- Verify Ping between Inter Intra And Enterprise host
-
-Verify The Subnet Route When The Network Is Removed From The Vpn
- [Documentation] Dissociate vpn from the network and verify the subnet route
- FOR ${network} IN @{NETWORKS}
- ${network_id} = OpenStackOperations.Get Net Id ${network}
- VpnOperations.Dissociate L3VPN From Networks networkid=${network_id} vpnid=${VPN_INSTANCE_ID}
- END
- ${vm_ip_list} = BuiltIn.Create List @{NET_1_VM_IPS} @{NET_2_VM_IPS} @{NET_3_VM_IPS}
- Utils.Check For Elements Not At URI ${FIB_ENTRY_URL} ${vm_ip_list}
- FOR ${network} IN @{NETWORKS}
- ${network_id} = OpenStackOperations.Get Net Id ${network}
- VpnOperations.Associate L3VPN To Network networkid=${network_id} vpnid=${VPN_INSTANCE_ID}
- END
- Utils.Check For Elements At URI ${FIB_ENTRY_URL} ${vm_ip_list}
- Verify Ping between Inter Intra And Enterprise host
-
-
-*** Keywords ***
-Suite Setup
- [Documentation] Test Suite for Subnet_Routing_and_Multicast_Deployments.
- VpnOperations.Basic Suite Setup
- BgpOperations.Start Quagga Processes On ODL ${ODL_SYSTEM_IP}
- BgpOperations.Start Quagga Processes On DCGW ${DCGW_SYSTEM_IP}
- Create Setup
-
-Stop Suite
- [Documentation] Test Teardown for Subnet_Routing_and_Multicast_Deployments.
- BgpOperations.Delete BGP Configuration On ODL session
- BgpOperations.Delete BGP Config On Quagga ${DCGW_SYSTEM_IP} ${AS_ID}
- BgpOperations.Stop BGP Processes On Node ${ODL_SYSTEM_IP}
- BgpOperations.Stop BGP Processes On Node ${DCGW_SYSTEM_IP}
- OpenStackOperations.OpenStack Suite Teardown
-
-Create Setup
- [Documentation] Create basic topology
- OpenStackOperations.OpenStack Suite Setup
- ${id} = OpenStackOperations.Get Project Id ${ODL_RESTCONF_USER}
- OpenStackOperations.Set Instance Quota For Project ${NUM_OF_INSTANCES} ${id}
- Create Neutron Networks
- Create Neutron Subnets ${3}
- OpenStackOperations.Create And Configure Security Group ${SECURITY_GROUP}
- Create Neutron Ports
- Create Nova VMs
- Create Sub Interfaces And Verify
- Create L3VPN
- FOR ${network} IN @{NETWORKS}
- ${network_id} = OpenStackOperations.Get Net Id ${network}
- VpnOperations.Associate L3VPN To Network networkid=${network_id} vpnid=${VPN_INSTANCE_ID}
- END
- Create BGP Config On ODL
- Create BGP Config On DCGW
- BuiltIn.Wait Until Keyword Succeeds 60s 10s VpnOperations.Verify Tunnel Status as UP
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[0]
- ... ${RPING_MIP_IP}
- BuiltIn.Should Contain ${output} broadcast Received 0 reply
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[1]
- ... ${NET_2_VM_IPS}[0]
- ... ${RPING_MIP_IP1}
- BuiltIn.Should Contain ${output} broadcast Received 0 reply
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[2]
- ... ${NET_3_VM_IPS}[0]
- ... ${RPING_MIP_IP2}
- BuiltIn.Should Contain ${output} broadcast Received 0 reply
-
-Create Neutron Networks
- [Documentation] Create required number of networks
- FOR ${net} IN @{NETWORKS}
- OpenStackOperations.Create Network ${net}
- END
- BuiltIn.Wait Until Keyword Succeeds 3s 1s Utils.Check For Elements At URI ${NETWORK_URL} ${NETWORKS}
-
-Create Neutron Subnets
- [Documentation] Create required number of subnets for previously created networks
- [Arguments] ${num_of_network} ${additional_args}=${EMPTY} ${verbose}=TRUE
- FOR ${index} IN RANGE 0 ${num_of_network}
- OpenStackOperations.Create SubNet ${NETWORKS}[${index}] ${SUBNETS}[${index}] ${SUBNET_CIDR}[${index}]
- END
- BuiltIn.Wait Until Keyword Succeeds
- ... 3s
- ... 1s
- ... Utils.Check For Elements At URI
- ... ${SUBNETWORK_URL}
- ... ${SUBNETS}
-
-Create Neutron Ports
- [Documentation] Create required number of ports under previously created subnets
- ${allowed_address_pairs_args1} = BuiltIn.Set Variable
- ... --allowed-address ip-address=${EXTRA_NW_SUBNET}[0] --allowed-address ip-address=${EXTRA_NW_SUBNET}[1]
- ${allowed_address_pairs_args2} = BuiltIn.Set Variable
- ... --allowed-address ip-address=${EXTRA_NW_SUBNET}[1] --allowed-address ip-address=${EXTRA_NW_SUBNET}[2]
- ${allowed_address_pairs_args3} = BuiltIn.Set Variable
- ... --allowed-address ip-address=${EXTRA_NW_SUBNET}[2] --allowed-address ip-address=${EXTRA_NW_SUBNET}[0]
- FOR ${index} IN RANGE 0 ${NUM_OF_PORTS_PER_NETWORK}
- OpenStackOperations.Create Port
- ... ${NETWORKS}[0]
- ... ${NET_1_PORTS}[${index}]
- ... sg=${SECURITY_GROUP}
- ... additional_args=${allowed_address_pairs_args1}
- END
- FOR ${index} IN RANGE 0 ${NUM_OF_PORTS_PER_NETWORK}
- OpenStackOperations.Create Port
- ... ${NETWORKS}[1]
- ... ${NET_2_PORTS}[${index}]
- ... sg=${SECURITY_GROUP}
- ... additional_args=${allowed_address_pairs_args2}
- END
- FOR ${index} IN RANGE 0 ${NUM_OF_PORTS_PER_NETWORK}
- OpenStackOperations.Create Port
- ... ${NETWORKS}[2]
- ... ${NET_3_PORTS}[${index}]
- ... sg=${SECURITY_GROUP}
- ... additional_args=${allowed_address_pairs_args3}
- END
-
-Create Nova VMs
- [Documentation] Create Vm instances on compute nodes
- FOR ${index} IN RANGE 0 2
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${NET_1_PORTS}[${index}]
- ... ${NET_1_VMS}[${index}]
- ... ${OS_CMP1_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${NET_1_PORTS}[${index+2}]
- ... ${NET_1_VMS}[${index+2}]
- ... ${OS_CMP2_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${NET_2_PORTS}[${index}]
- ... ${NET_2_VMS}[${index}]
- ... ${OS_CMP1_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${NET_2_PORTS}[${index+2}]
- ... ${NET_2_VMS}[${index+2}]
- ... ${OS_CMP2_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${NET_3_PORTS}[${index}]
- ... ${NET_3_VMS}[${index}]
- ... ${OS_CMP1_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${NET_3_PORTS}[${index+2}]
- ... ${NET_3_VMS}[${index+2}]
- ... ${OS_CMP2_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- END
- @{NET_1_VM_IPS} ${NET1_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_1_VMS}
- @{NET_2_VM_IPS} ${NET2_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_2_VMS}
- @{NET_3_VM_IPS} ${NET3_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_3_VMS}
- BuiltIn.Set Suite Variable @{NET_1_VM_IPS}
- BuiltIn.Set Suite Variable @{NET_2_VM_IPS}
- BuiltIn.Set Suite Variable @{NET_3_VM_IPS}
- BuiltIn.Should Not Contain ${NET_1_VM_IPS} None
- BuiltIn.Should Not Contain ${NET_2_VM_IPS} None
- BuiltIn.Should Not Contain ${NET_3_VM_IPS} None
- OpenStackOperations.Show Debugs @{NET_1_VMS} @{NET_2_VMS} @{NET_3_VMS}
-
-Create Sub Interfaces And Verify
- [Documentation] Create Sub Interface and verify for all VMs
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 5s
- ... OpenStackOperations.Configure_IP_On_Sub_Interface
- ... ${NETWORKS}[0]
- ... ${EXTRA_NW_SUBNET}[0]
- ... ${NET_1_VM_IPS}[0]
- ... ${MASK}
- ... ${INTERFACE_STATE}[0]
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 5s
- ... OpenStackOperations.Verify_IP_Configured_On_Sub_Interface
- ... ${NETWORKS}[0]
- ... ${EXTRA_NW_SUBNET}[0]
- ... ${NET_1_VM_IPS}[0]
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 5s
- ... OpenStackOperations.Configure_IP_On_Sub_Interface
- ... ${NETWORKS}[1]
- ... ${EXTRA_NW_SUBNET}[1]
- ... ${NET_2_VM_IPS}[0]
- ... ${MASK}
- ... ${INTERFACE_STATE}[0]
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 5s
- ... OpenStackOperations.Verify_IP_Configured_On_Sub_Interface
- ... ${NETWORKS}[1]
- ... ${EXTRA_NW_SUBNET}[1]
- ... ${NET_2_VM_IPS}[0]
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 5s
- ... OpenStackOperations.Configure_IP_On_Sub_Interface
- ... ${NETWORKS}[2]
- ... ${EXTRA_NW_SUBNET}[2]
- ... ${NET_3_VM_IPS}[0]
- ... ${MASK}
- ... ${INTERFACE_STATE}[0]
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 5s
- ... OpenStackOperations.Verify_IP_Configured_On_Sub_Interface
- ... ${NETWORKS}[2]
- ... ${EXTRA_NW_SUBNET}[2]
- ... ${NET_3_VM_IPS}[0]
-
-Create L3VPN
- [Documentation] Create L3VPN and verify 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}
- ... name=${VPN_NAME}
- ... rd=["${L3VPN_RD}"]
- ... exportrt=["${L3VPN_RD}"]
- ... importrt=["${L3VPN_RD}"]
- ... tenantid=${tenant_id}
- VpnOperations.Verify L3VPN On ODL ${VPN_INSTANCE_ID}
-
-Create BGP Config On ODL
- [Documentation] Configure BGP Config on ODL
- KarafKeywords.Issue Command On Karaf Console ${BGP_CONFIG_SERVER_CMD}
- BgpOperations.Create BGP Configuration On ODL localas=${AS_ID} routerid=${ODL_SYSTEM_IP}
- BgpOperations.AddNeighbor To BGP Configuration On ODL remoteas=${AS_ID} neighborAddr=${DCGW_SYSTEM_IP}
- ${output} = BgpOperations.Get BGP Configuration On ODL session
- BuiltIn.Should Contain ${output} ${DCGW_SYSTEM_IP}
-
-Create BGP Config On DCGW
- [Documentation] Configure BGP on DCGW
- BgpOperations.Configure BGP And Add Neighbor On DCGW
- ... ${DCGW_SYSTEM_IP}
- ... ${AS_ID}
- ... ${DCGW_SYSTEM_IP}
- ... ${ODL_SYSTEM_IP}
- ... ${VPN_NAME}
- ... ${L3VPN_RD}
- ... ${LOOPBACK_IP}
- ${output} = BgpOperations.Execute Show Command On Quagga ${DCGW_SYSTEM_IP} ${RUN_CONFIG}
- BuiltIn.Should Contain ${output} ${ODL_SYSTEM_IP}
- ${output} = BuiltIn.Wait Until Keyword Succeeds
- ... 180s
- ... 10s
- ... BgpOperations.Verify BGP Neighbor Status On Quagga
- ... ${DCGW_SYSTEM_IP}
- ... ${ODL_SYSTEM_IP}
-
-Verify Ping between Inter Intra And Enterprise host
- [Documentation] Ping Enterprise Host for Intra, Inter from different and same network
- ${dst_ip_list} = BuiltIn.Create List @{NET_1_VM_IPS} @{NET_2_VM_IPS} @{EXTRA_NW_SUBNET}
- OpenStackOperations.Test Operations From Vm Instance ${NETWORKS}[0] ${NET_1_VM_IPS}[0] ${dst_ip_list}
- OpenStackOperations.Test Operations From Vm Instance ${NETWORKS}[1] ${NET_2_VM_IPS}[0] ${dst_ip_list}
- OpenStackOperations.Test Operations From Vm Instance ${NETWORKS}[0] ${NET_1_VM_IPS}[2] ${dst_ip_list}
- OpenStackOperations.Test Operations From Vm Instance ${NETWORKS}[1] ${NET_2_VM_IPS}[2] ${dst_ip_list}
+++ /dev/null
-*** Settings ***
-Documentation Test suite for ODL Upgrade. It is assumed that OLD + OpenStack
-... integrated environment is deployed and ready.
-
-Library OperatingSystem
-Library RequestsLibrary
-Library SSHLibrary
-Resource ../../../libraries/ClusterManagement.robot
-Resource ../../../libraries/DevstackUtils.robot
-Resource ../../../libraries/KarafKeywords.robot
-Resource ../../../libraries/OpenStackOperations.robot
-Resource ../../../libraries/OVSDB.robot
-Resource ../../../libraries/SetupUtils.robot
-Resource ../../../libraries/Utils.robot
-
-Suite Setup Suite Setup
-Suite Teardown Upgrade Suite Teardown
-Test Setup SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
-Test Teardown Get Test Teardown Debugs
-
-
-*** Variables ***
-${SECURITY_GROUP} upgrade_sg
-@{NETWORKS} upgrade_net_1 upgrade_net_2
-@{SUBNETS} upgrade_sub_1 upgrade_sub_2
-@{NET_1_VMS} upgrade_net_1_vm_1 upgrade_net_1_vm_2
-@{NET_2_VMS} upgrade_net_2_vm_1 upgrade_net_2_vm_2
-@{SUBNETS_RANGE} 91.0.0.0/24 92.0.0.0/24
-${ROUTER} upgrade_router_1
-${TYPE} tun
-${PASSIVE_MANAGER} ptcp:6641:127.0.0.1
-@{DEBUG_LOG_COMPONENTS}
-... org.opendaylight.ovsdb
-... org.opendaylight.ovsdb.lib
-... org.opendaylight.netvirt
-${UPDATE_FLAG_PATH} /restconf/config/odl-serviceutils-upgrade:upgrade-config
-${GET_ACTIVE_BUNDLE_URI} /restconf/operations/arbitrator-reconcile:get-active-bundle
-${COMMIT_ACTIVE_BUNDLE_URI} /restconf/operations/arbitrator-reconcile:commit-active-bundle
-${COMMIT_ACTIVE_BUNDLE_DIR} ${CURDIR}/../../../variables/netvirt/commit_active_bundle
-${SET_BUNDLE_TIMEOUT} sudo ovs-vsctl set O . other_config:bundle-idle-timeout=3600
-
-
-*** Test Cases ***
-Create Setup And Verify Instance Connectivity
- [Documentation] Create 2 VXLAN networks, subnets with 2 VMs each and a router. Ping all 4 VMs.
- Check Resource Connectivity
-
-Stop ODL
- ClusterManagement.Stop_Members_From_List_Or_All
-
-Disconnect OVS
- [Documentation] Delete OVS manager, controller and groups and tun ports
- FOR ${node} IN @{OS_ALL_IPS}
- OVSDB.Delete OVS Manager ${node}
- OVSDB.Delete OVS Controller ${node}
- OVSDB.Delete Groups On Bridge ${node} ${INTEGRATION_BRIDGE}
- OVSDB.Delete Ports On Bridge By Type ${node} ${INTEGRATION_BRIDGE} ${TYPE}
- Utils.Run Command On Remote System ${node} ${SET_BUNDLE_TIMEOUT}
- END
-
-Wipe Local Data
- [Documentation] Delete data/, journal/, snapshots/
- ClusterManagement.Clean_Journals_Data_And_Snapshots_On_List_Or_All
-
-Start ODL
- [Documentation] Start controller, wait for it to come "UP" and make sure netvirt is installed
- ClusterManagement.Start_Members_From_List_Or_All wait_for_sync=True
- Wait Until Keyword Succeeds 100s 5s Utils.Check Diagstatus
- BuiltIn.Set_Suite_Variable \${ClusterManagement__has_setup_run} False
- KarafKeywords.Verify_Feature_Is_Installed odl-netvirt-openstack
- Set Custom Component Logging To DEBUG
-
-Wait For Full Sync
- [Documentation] Wait for networking_odl to sync neutron configuration
- Wait Until Keyword Succeeds 90s 5s Canary Network Should Exist
-
-Set Upgrade Flag
- ${resp} = RequestsLibrary.Put Request
- ... session
- ... ${UPDATE_FLAG_PATH}
- ... {"upgrade-config":{"upgradeInProgress":true}}
- BuiltIn.Should Be Equal As Strings ${resp.status_code} 200
-
-Set OVS Manager And Controller
- [Documentation] Set controller and manager on each OpenStack node and check that egress flows are present
- FOR ${node} IN @{OS_ALL_IPS}
- Utils.Run Command On Remote System And Log
- ... ${node}
- ... sudo ovs-vsctl set-manager tcp:${ODL_SYSTEM_IP}:${OVSDBPORT} ${PASSIVE_MANAGER}
- END
- Wait Until Keyword Succeeds 60s 10s Verify Bundle Active State
- FOR ${node} IN @{OS_ALL_IPS}
- ${dpnid} = OVSDB.Get DPID ${node}
- ${dpnid} = BuiltIn.Convert To String ${dpnid}
- ${body} = OperatingSystem.Get File ${COMMIT_ACTIVE_BUNDLE_DIR}/data.json
- ${body} = Replace String ${body} DPNID ${dpnid}
- ${resp} = RequestsLibrary.Post Request session ${COMMIT_ACTIVE_BUNDLE_URI} data=${body}
- BuiltIn.Should Contain ${ALLOWED_STATUS_CODES} ${resp.status_code}
- END
- Wait Until Keyword Succeeds 180s 15s Check OVS Nodes Have Egress Flows
-
-UnSet Upgrade Flag
- ${resp} = RequestsLibrary.Put Request
- ... session
- ... ${UPDATE_FLAG_PATH}
- ... {"upgrade-config":{"upgradeInProgress":false}}
- BuiltIn.Should Be Equal As Strings ${resp.status_code} 200
-
-Check Connectivity With Previously Created Resources And br-int Info
- [Documentation] Check that pre-existing instance connectivity still works after the new controller is brought
- ... up and config is sync'd
- Wait Until Keyword Succeeds 90s 10s Check Resource Connectivity
-
-
-*** Keywords ***
-Suite Setup
- OpenStackOperations.OpenStack Suite Setup
- Create Resources
- OpenStackOperations.Show Debugs @{NET_1_VMS} @{NET_2_VMS}
- OpenStackOperations.Get Suite Debugs
-
-Create Resources
- [Documentation] Create 2 VXLAN networks, subnets with 2 VMs each and a router. Ping all 4 VMs.
- FOR ${net} IN @{NETWORKS}
- OpenStackOperations.Create Network ${net}
- END
- OpenStackOperations.Create SubNet ${NETWORKS}[0] ${SUBNETS}[0] ${SUBNETS_RANGE}[0]
- OpenStackOperations.Create SubNet ${NETWORKS}[1] ${SUBNETS}[1] ${SUBNETS_RANGE}[1]
- OpenStackOperations.Create Allow All SecurityGroup ${SECURITY_GROUP}
- OpenStackOperations.Create Nano Flavor
- FOR ${vm} IN @{NET_1_VMS}
- OpenStackOperations.Create Vm Instance On Compute Node
- ... ${NETWORKS}[0]
- ... ${vm}
- ... ${OS_CMP1_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- END
- FOR ${vm} IN @{NET_2_VMS}
- OpenStackOperations.Create Vm Instance On Compute Node
- ... ${NETWORKS}[1]
- ... ${vm}
- ... ${OS_CMP2_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- END
- OpenStackOperations.Create Router ${ROUTER}
- FOR ${interface} IN @{SUBNETS}
- OpenStackOperations.Add Router Interface ${ROUTER} ${interface}
- END
- @{NET1_VM_IPS} ${NET1_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_1_VMS}
- @{NET2_VM_IPS} ${NET2_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_2_VMS}
- BuiltIn.Set Suite Variable @{NET1_VM_IPS}
- BuiltIn.Set Suite Variable @{NET2_VM_IPS}
- BuiltIn.Should Not Contain ${NET1_VM_IPS} None
- BuiltIn.Should Not Contain ${NET2_VM_IPS} None
- BuiltIn.Should Not Contain ${NET1_DHCP_IP} None
- BuiltIn.Should Not Contain ${NET2_DHCP_IP} None
-
-Check Resource Connectivity
- [Documentation] Ping 2 VMs in the same net and 1 from another net.
- OpenStackOperations.Ping Vm From DHCP Namespace upgrade_net_1 ${NET1_VM_IPS}[0]
- OpenStackOperations.Ping Vm From DHCP Namespace upgrade_net_1 ${NET1_VM_IPS}[1]
- OpenStackOperations.Ping Vm From DHCP Namespace upgrade_net_1 ${NET2_VM_IPS}[0]
- OpenStackOperations.Ping Vm From DHCP Namespace upgrade_net_2 ${NET2_VM_IPS}[0]
- OpenStackOperations.Ping Vm From DHCP Namespace upgrade_net_2 ${NET2_VM_IPS}[1]
- OpenStackOperations.Ping Vm From DHCP Namespace upgrade_net_2 ${NET1_VM_IPS}[0]
-
-Check OVS Nodes Have Egress Flows
- [Documentation] Loop over all openstack nodes to ensure they have the proper flows installed.
- FOR ${node} IN @{OS_ALL_IPS}
- Does OVS Have Multiple Egress Flows ${node}
- END
-
-Does OVS Have Multiple Egress Flows
- [Documentation] Verifies that at least 1 flow exists on the node for the ${EGRESS_L2_FWD_TABLE}
- [Arguments] ${ip}
- ${flows} = Utils.Run Command On Remote System And Log
- ... ${ip}
- ... sudo ovs-ofctl -O OpenFlow13 dump-flows ${INTEGRATION_BRIDGE}
- ${egress_flows} = String.Get Lines Containing String ${flows} table=${EGRESS_LPORT_DISPATCHER_TABLE}
- ${num_egress_flows} = String.Get Line Count ${egress_flows}
- BuiltIn.Should Be True ${num_egress_flows} > 1
-
-Set Custom Component Logging To
- [Arguments] ${level}
- SetupUtils.Setup_Logging_For_Debug_Purposes_On_List_Or_All ${level} ${DEBUG_LOG_COMPONENTS}
- KarafKeywords.Issue_Command_On_Karaf_Console log:list
-
-Canary Network Should Exist
- OpenStackOperations.Get Neutron Network Rest bd8db3a8-2b30-4083-a8b3-b3fd46401142
-
-Upgrade Suite Teardown
- Set Custom Component Logging To INFO
- OpenStackOperations.OpenStack Suite Teardown
-
-Verify Bundle Active State
- [Documentation] Verify if the bundle is active for the node.
- FOR ${node} IN @{OS_ALL_IPS}
- ${dpnid} = OVSDB.Get DPID ${node}
- ${dpnid} = BuiltIn.Convert To String ${dpnid}
- ${body} = OperatingSystem.Get File ${COMMIT_ACTIVE_BUNDLE_DIR}/data.json
- ${body} = Replace String ${body} DPNID ${dpnid}
- ${resp} = RequestsLibrary.Post Request session ${GET_ACTIVE_BUNDLE_URI} data=${body}
- BuiltIn.Log ${resp.text}
- BuiltIn.Should Contain ${resp.text} "result":
- BuiltIn.Should Contain ${ALLOWED_STATUS_CODES} ${resp.status_code}
- END
+++ /dev/null
-*** Settings ***
-Documentation Test Suite for vni-based-l2-l3-nat:
-... This feature attempts to realize the use of VxLAN VNI
-... (Virtual Network Identifier) for VxLAN tenant traffic
-... flowing on the cloud data-network. This is applicable
-... to L2 switching, L3 forwarding and NATing for all VxLAN
-... based provider networks. In doing so, it eliminates the
-... presence of LPort tags, ELAN tags and MPLS labels on the
-... wire and instead, replaces them with VNIs supplied by the
-... tenant’s OpenStack.
-
-Library OperatingSystem
-Library RequestsLibrary
-Library String
-Resource ../../../libraries/DevstackUtils.robot
-Resource ../../../libraries/KarafKeywords.robot
-Resource ../../../variables/netvirt/Variables.robot
-Resource ../../../libraries/OpenStackOperations.robot
-Resource ../../../libraries/OVSDB.robot
-Resource ../../../libraries/SetupUtils.robot
-Resource ../../../libraries/Utils.robot
-Resource ../../../libraries/VpnOperations.robot
-Resource ../../../variables/netvirt/Variables.robot
-Resource ../../../variables/Variables.robot
-
-Suite Setup Suite Setup
-Suite Teardown Suite Teardown
-Test Setup VpnOperations.VNI Test Setup
-Test Teardown VpnOperations.VNI Test Teardown
-
-
-*** Variables ***
-${EGRESS} Egress
-${INGRESS} Ingress
-${IP} ipv6
-${VNI6_SECURITY_GROUP} vni6_sg
-@{VNI6_NETWORKS} vni6_net_0 vni6_net_1 vni6_net_2 vni6_net_3
-@{VNI6_SUBNETS} vni6_sub_0 vni6_sub_1 vni6_sub_2 vni6_sub_3
-@{VNI6_SUBNET_CIDRS} 2001:db8:0:4::/64 2001:db8:0:5::/64 2001:db8:0:6::/64 2001:db8:0:7::/64
-@{VNI6_NET_0_PORTS} vni6_net_0_port_1 vni6_net_0_port_2
-@{VNI6_NET_1_PORTS} vni6_net_1_port_1 vni6_net_1_port_2
-@{VNI6_NET_2_PORTS} vni6_net_2_port_1 vni6_net_2_port_2
-@{VNI6_NET_3_PORTS} vni6_net_3_port_1 vni6_net_3_port_2
-@{VNI6_NET_0_VMS} vni6_net_0_vm_1
-@{VNI6_NET_1_VMS} vni6_net_1_vm_1
-@{VNI6_NET_2_VMS} vni6_net_2_vm_1
-@{VNI6_NET_3_VMS} vni6_net_3_vm_1
-@{VNI6_ROUTER} vni6_router1 vni6_router2 vni6_router3
-@{VNI6_RDS} ["2600:2"] ["2700:2"] ["2800:2"]
-@{VNI6_VPN_NAMES} VNI6_vpn_1 VNI6_vpn_2 VNI6_vpn_3
-@{VNI6_VPN_INSTANCE_IDS}
-... 4ae8cd92-48ca-49b5-94e1-b2921a261551
-... 4ae8cd92-48ca-49b5-94e1-b2921a261552
-... 4ae8cd92-48ca-49b5-94e1-b2921a261553
-${NET0_ADDITIONAL_ARGS}
-... --ip-version=6 --ipv6-address-mode=slaac --ipv6-ra-mode=slaac --allocation-pool start=2001:db8:0:4::2,end=2001:db8:0:4:ffff:ffff:ffff:fffe
-${NET1_ADDITIONAL_ARGS}
-... --ip-version=6 --ipv6-address-mode=slaac --ipv6-ra-mode=slaac --allocation-pool start=2001:db8:0:5::2,end=2001:db8:0:5:ffff:ffff:ffff:fffe
-${NET2_ADDITIONAL_ARGS}
-... --ip-version=6 --ipv6-address-mode=slaac --ipv6-ra-mode=slaac --allocation-pool start=2001:db8:0:6::2,end=2001:db8:0:6:ffff:ffff:ffff:fffe
-${NET3_ADDITIONAL_ARGS}
-... --ip-version=6 --ipv6-address-mode=slaac --ipv6-ra-mode=slaac --allocation-pool start=2001:db8:0:7::2,end=2001:db8:0:7:ffff:ffff:ffff:fffe
-
-
-*** Test Cases ***
-VNI Based IPv6 Forwarding
- [Documentation] verify VNI id for IPv6 Unicast frames exchanged over OVS datapaths that are on different hypervisors
- BuiltIn.Pass Execution If "${OPENSTACK_TOPO}" == "1cmb-0ctl-0cmp" "Test is not supported for combo node"
- BuiltIn.Wait Until Keyword Succeeds
- ... 60s
- ... 5s
- ... OVSDB.Verify Vni Segmentation Id and Tunnel Id
- ... ${VNI6_NET_0_PORTS}[0]
- ... ${VNI6_NET_1_PORTS}[0]
- ... ${VNI6_NETWORKS}[0]
- ... ${VNI6_NETWORKS}[1]
- ... ${VM_IP_NET0}[0]
- ... ${VM_IP_NET1}[0]
- ... ${IP}
-
-VNI Based IPv6 Forwarding With BGPVPN Router Association
- [Documentation] verify VNI id for IPv6 Unicast frames exchanged over OVS datapaths that are on different hypervisors
- ... With Router associated to a BGPVPN.
- BuiltIn.Pass Execution If "${OPENSTACK_TOPO}" == "1cmb-0ctl-0cmp" "Test is not supported for combo node"
- ${net_id} = OpenStackOperations.Get Net Id ${VNI6_NETWORKS}[0]
- ${tenant_id} = OpenStackOperations.Get Tenant ID From Network ${net_id}
- VpnOperations.VPN Create L3VPN
- ... vpnid=${VNI6_VPN_INSTANCE_IDS}[0]
- ... name=${VNI6_VPN_NAMES}[0]
- ... rd=${VNI6_RDS}[0]
- ... exportrt=${VNI6_RDS}[0]
- ... importrt=${VNI6_RDS}[0]
- ... tenantid=${tenant_id}
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VNI6_VPN_INSTANCE_IDS}[0]
- BuiltIn.Should Contain ${resp} ${VNI6_VPN_INSTANCE_IDS}[0]
- ${router_id} = OpenStackOperations.Get Router Id ${VNI6_ROUTER}[0]
- VpnOperations.Associate VPN to Router routerid=${router_id} vpnid=${VNI6_VPN_INSTANCE_IDS}[0]
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VNI6_VPN_INSTANCE_IDS}[0]
- BuiltIn.Should Contain ${resp} ${router_id}
- BuiltIn.Wait Until Keyword Succeeds
- ... 60s
- ... 5s
- ... OVSDB.Verify Vni Segmentation Id and Tunnel Id
- ... ${VNI6_NET_0_PORTS}[0]
- ... ${VNI6_NET_1_PORTS}[0]
- ... ${VNI6_NETWORKS}[0]
- ... ${VNI6_NETWORKS}[1]
- ... ${VM_IP_NET0}[0]
- ... ${VM_IP_NET1}[0]
- ... ${IP}
-
-VNI Based IPv6 Forwarding With Two Routers And BGPVPN With Irt Ert
- [Documentation] verify VNI id for IPv6 Unicast frames exchanged over OVS datapaths that are on different hypervisors
- ... With Two Routers each associated to a BGPVPN and The Two BGPVPN is connected with irt and ert.
- BuiltIn.Pass Execution If "${OPENSTACK_TOPO}" == "1cmb-0ctl-0cmp" "Test is not supported for combo node"
- OpenStackOperations.Create Network ${VNI6_NETWORKS}[2]
- OpenStackOperations.Create Network ${VNI6_NETWORKS}[3]
- OpenStackOperations.Create SubNet
- ... ${VNI6_NETWORKS}[2]
- ... ${VNI6_SUBNETS}[2]
- ... ${VNI6_SUBNET_CIDRS}[2]
- ... ${NET2_ADDITIONAL_ARGS}
- OpenStackOperations.Create SubNet
- ... ${VNI6_NETWORKS}[3]
- ... ${VNI6_SUBNETS}[3]
- ... ${VNI6_SUBNET_CIDRS}[3]
- ... ${NET3_ADDITIONAL_ARGS}
- OpenStackOperations.Create Port ${VNI6_NETWORKS}[2] ${VNI6_NET_2_PORTS}[0] sg=${VNI6_SECURITY_GROUP}
- OpenStackOperations.Create Port ${VNI6_NETWORKS}[3] ${VNI6_NET_3_PORTS}[0] sg=${VNI6_SECURITY_GROUP}
- OpenStackOperations.Create Router ${VNI6_ROUTER}[1]
- OpenStackOperations.Add Router Interface ${VNI6_ROUTER}[1] ${VNI6_SUBNETS}[2]
- OpenStackOperations.Create Router ${VNI6_ROUTER}[2]
- OpenStackOperations.Add Router Interface ${VNI6_ROUTER}[2] ${VNI6_SUBNETS}[3]
- ${net_id} = OpenStackOperations.Get Net Id ${VNI6_NETWORKS}[2]
- ${tenant_id} = OpenStackOperations.Get Tenant ID From Network ${net_id}
- VpnOperations.VPN Create L3VPN
- ... vpnid=${VNI6_VPN_INSTANCE_IDS}[1]
- ... name=${VNI6_VPN_NAMES}[1]
- ... rd=${VNI6_RDS}[1]
- ... exportrt=${VNI6_RDS}[1]
- ... importrt=${VNI6_RDS}[2]
- ... tenantid=${tenant_id}
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VNI6_VPN_INSTANCE_IDS}[1]
- BuiltIn.Should Contain ${resp} ${VNI6_VPN_INSTANCE_IDS}[1]
- ${router_id} = OpenStackOperations.Get Router Id ${VNI6_ROUTER}[1]
- VpnOperations.Associate VPN to Router routerid=${router_id} vpnid=${VNI6_VPN_INSTANCE_IDS}[1]
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VNI6_VPN_INSTANCE_IDS}[1]
- BuiltIn.Should Contain ${resp} ${router_id}
- VpnOperations.VPN Create L3VPN
- ... vpnid=${VNI6_VPN_INSTANCE_IDS}[2]
- ... name=${VNI6_VPN_NAMES}[2]
- ... rd=${VNI6_RDS}[2]
- ... exportrt=${VNI6_RDS}[2]
- ... importrt=${VNI6_RDS}[1]
- ... tenantid=${tenant_id}
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VNI6_VPN_INSTANCE_IDS}[2]
- BuiltIn.Should Contain ${resp} ${VNI6_VPN_INSTANCE_IDS}[2]
- ${router_id} = OpenStackOperations.Get Router Id ${VNI6_ROUTER}[2]
- VpnOperations.Associate VPN to Router routerid=${router_id} vpnid=${VNI6_VPN_INSTANCE_IDS}[2]
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VNI6_VPN_INSTANCE_IDS}[2]
- BuiltIn.Should Contain ${resp} ${router_id}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${VNI6_NET_2_PORTS}[0]
- ... ${VNI6_NET_2_VMS}[0]
- ... ${OS_CMP1_HOSTNAME}
- ... sg=${VNI6_SECURITY_GROUP}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${VNI6_NET_3_PORTS}[0]
- ... ${VNI6_NET_3_VMS}[0]
- ... ${OS_CMP2_HOSTNAME}
- ... sg=${VNI6_SECURITY_GROUP}
- OpenStackOperations.Poll VM Is ACTIVE ${VNI6_NET_2_VMS}[0]
- OpenStackOperations.Poll VM Is ACTIVE ${VNI6_NET_3_VMS}[0]
- ${networks} = BuiltIn.Create List ${VNI6_NETWORKS}[2] ${VNI6_NETWORKS}[3]
- ${subnet_cidrs} = BuiltIn.Create List ${VNI6_SUBNET_CIDRS}[2] ${VNI6_SUBNET_CIDRS}[3]
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 10s
- ... OpenStackOperations.Wait For Routes To Propogate
- ... ${networks}
- ... ${subnet_cidrs}
- ${prefix_net2} = String.Replace String ${VNI6_SUBNET_CIDRS}[2] ::/64 (:[a-f0-9]{,4}){,4}
- ${status} ${message} = Run Keyword And Ignore Error
- ... BuiltIn.Wait Until Keyword Succeeds
- ... 3x
- ... 60s
- ... OpenStackOperations.Collect VM IPv6 SLAAC Addresses
- ... fail_on_none=true
- ... vm_list=${VNI6_NET_2_VMS}
- ... network=${VNI6_NETWORKS}[2]
- ... subnet=${prefix_net2}
- ${prefix_net3} = String.Replace String ${VNI6_SUBNET_CIDRS}[3] ::/64 (:[a-f0-9]{,4}){,4}
- ${status} ${message} = Run Keyword And Ignore Error
- ... BuiltIn.Wait Until Keyword Succeeds
- ... 3x
- ... 60s
- ... OpenStackOperations.Collect VM IPv6 SLAAC Addresses
- ... fail_on_none=true
- ... vm_list=${VNI6_NET_3_VMS}
- ... network=${VNI6_NETWORKS}[3]
- ... subnet=${prefix_net3}
- ${VM_IP_NET2} = OpenStackOperations.Collect VM IPv6 SLAAC Addresses
- ... fail_on_none=false
- ... vm_list=${VNI6_NET_2_VMS}
- ... network=${VNI6_NETWORKS}[2]
- ... subnet=${prefix_net2}
- ${VM_IP_NET3} = OpenStackOperations.Collect VM IPv6 SLAAC Addresses
- ... fail_on_none=false
- ... vm_list=${VNI6_NET_3_VMS}
- ... network=${VNI6_NETWORKS}[3]
- ... subnet=${prefix_net3}
- ${status} ${message} = Run Keyword And Ignore Error BuiltIn.Should Not Contain ${VM_IP_NET2} None
- IF '${status}' == 'FAIL'
- OpenStack CLI openstack console log show ${VNI6_NET_2_VMS}[0] 30s
- END
- ${status} ${message} = Run Keyword And Ignore Error BuiltIn.Should Not Contain ${VM_IP_NET3} None
- IF '${status}' == 'FAIL'
- OpenStack CLI openstack console log show ${VNI6_NET_3_VMS}[0] 30s
- END
- OpenStackOperations.Copy DHCP Files From Control Node
- BuiltIn.Should Not Contain ${VM_IP_NET2} None
- BuiltIn.Should Not Contain ${VM_IP_NET3} None
- BuiltIn.Wait Until Keyword Succeeds
- ... 60s
- ... 5s
- ... OVSDB.Verify Vni Segmentation Id and Tunnel Id
- ... ${VNI6_NET_2_PORTS}[0]
- ... ${VNI6_NET_3_PORTS}[0]
- ... ${VNI6_NETWORKS}[2]
- ... ${VNI6_NETWORKS}[3]
- ... ${VM_IP_NET2}[0]
- ... ${VM_IP_NET3}[0]
- ... ${IP}
-
-
-*** Keywords ***
-Suite Setup
- [Documentation] Create Basic setup for the feature. Creates single network, subnet, two ports and two VMs.
- ... Create Two VMs for TC1 : (VM1, N1, Compute1) and (VM2, N2, Compute2) and R1
- IF "${OPENSTACK_TOPO}" == "1cmb-0ctl-0cmp" RETURN
- VpnOperations.Basic Suite Setup
- OpenStackOperations.Create Allow All SecurityGroup ${VNI6_SECURITY_GROUP} IPv6
- OpenStackOperations.Create Network ${VNI6_NETWORKS}[0]
- OpenStackOperations.Create Network ${VNI6_NETWORKS}[1]
- OpenStackOperations.Create SubNet
- ... ${VNI6_NETWORKS}[0]
- ... ${VNI6_SUBNETS}[0]
- ... ${VNI6_SUBNET_CIDRS}[0]
- ... ${NET0_ADDITIONAL_ARGS}
- OpenStackOperations.Create SubNet
- ... ${VNI6_NETWORKS}[1]
- ... ${VNI6_SUBNETS}[1]
- ... ${VNI6_SUBNET_CIDRS}[1]
- ... ${NET1_ADDITIONAL_ARGS}
- OpenStackOperations.Create Port ${VNI6_NETWORKS}[0] ${VNI6_NET_0_PORTS}[0] sg=${VNI6_SECURITY_GROUP}
- OpenStackOperations.Create Port ${VNI6_NETWORKS}[1] ${VNI6_NET_1_PORTS}[0] sg=${VNI6_SECURITY_GROUP}
- OpenStackOperations.Create Router ${VNI6_ROUTER}[0]
- OpenStackOperations.Add Router Interface ${VNI6_ROUTER}[0] ${VNI6_SUBNETS}[0]
- OpenStackOperations.Add Router Interface ${VNI6_ROUTER}[0] ${VNI6_SUBNETS}[1]
- ${interface_output} = OpenStackOperations.Show Router Interface ${VNI6_ROUTER}[0]
- ${GWMAC_ADDRS} ${GWIP_ADDRS} = VpnOperations.Get Gateway MAC And IP Address ${VNI6_ROUTER}[0]
- BuiltIn.Set Suite Variable ${GWMAC_ADDRS}
- BuiltIn.Set Suite Variable ${GWIP_ADDRS}
- ${router_list} = BuiltIn.Create List ${VNI6_ROUTER}[0]
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${VNI6_NET_0_PORTS}[0]
- ... ${VNI6_NET_0_VMS}[0]
- ... ${OS_CMP1_HOSTNAME}
- ... sg=${VNI6_SECURITY_GROUP}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${VNI6_NET_1_PORTS}[0]
- ... ${VNI6_NET_1_VMS}[0]
- ... ${OS_CMP2_HOSTNAME}
- ... sg=${VNI6_SECURITY_GROUP}
- OpenStackOperations.Poll VM Is ACTIVE ${VNI6_NET_0_VMS}[0]
- OpenStackOperations.Poll VM Is ACTIVE ${VNI6_NET_1_VMS}[0]
- ${networks} = BuiltIn.Create List ${VNI6_NETWORKS}[0] ${VNI6_NETWORKS}[1]
- ${subnet_cidrs} = BuiltIn.Create List ${VNI6_SUBNET_CIDRS}[0] ${VNI6_SUBNET_CIDRS}[1]
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 10s
- ... OpenStackOperations.Wait For Routes To Propogate
- ... ${networks}
- ... ${subnet_cidrs}
- ${prefix_net0} = Replace String ${VNI6_SUBNET_CIDRS}[0] ::/64 (:[a-f0-9]{,4}){,4}
- ${status} ${message} = Run Keyword And Ignore Error
- ... BuiltIn.Wait Until Keyword Succeeds
- ... 3x
- ... 60s
- ... OpenStackOperations.Collect VM IPv6 SLAAC Addresses
- ... fail_on_none=true
- ... vm_list=${VNI6_NET_0_VMS}
- ... network=${VNI6_NETWORKS}[0]
- ... subnet=${prefix_net0}
- ${prefix_net1} = Replace String ${VNI6_SUBNET_CIDRS}[1] ::/64 (:[a-f0-9]{,4}){,4}
- ${status} ${message} = Run Keyword And Ignore Error
- ... BuiltIn.Wait Until Keyword Succeeds
- ... 3x
- ... 60s
- ... OpenStackOperations.Collect VM IPv6 SLAAC Addresses
- ... fail_on_none=true
- ... vm_list=${VNI6_NET_1_VMS}
- ... network=${VNI6_NETWORKS}[1]
- ... subnet=${prefix_net1}
- ${VM_IP_NET0} = OpenStackOperations.Collect VM IPv6 SLAAC Addresses
- ... fail_on_none=false
- ... vm_list=${VNI6_NET_0_VMS}
- ... network=${VNI6_NETWORKS}[0]
- ... subnet=${prefix_net0}
- ${VM_IP_NET1} = OpenStackOperations.Collect VM IPv6 SLAAC Addresses
- ... fail_on_none=false
- ... vm_list=${VNI6_NET_1_VMS}
- ... network=${VNI6_NETWORKS}[1]
- ... subnet=${prefix_net1}
- ${status} ${message} = Run Keyword And Ignore Error BuiltIn.Should Not Contain ${VM_IP_NET0} None
- IF '${status}' == 'FAIL'
- OpenStack CLI openstack console log show ${VNI6_NET_0_VMS}[0] 30s
- END
- ${status} ${message} = Run Keyword And Ignore Error BuiltIn.Should Not Contain ${VM_IP_NET1} None
- IF '${status}' == 'FAIL'
- OpenStack CLI openstack console log show ${VNI6_NET_1_VMS}[0] 30s
- END
- OpenStackOperations.Copy DHCP Files From Control Node
- BuiltIn.Set Suite Variable ${VM_IP_NET0}
- BuiltIn.Set Suite Variable ${VM_IP_NET1}
- BuiltIn.Should Not Contain ${VM_IP_NET0} None
- BuiltIn.Should Not Contain ${VM_IP_NET1} None
- OpenStackOperations.Show Debugs @{VNI6_NET_0_VMS} @{VNI6_NET_1_VMS}
- OpenStackOperations.Get Suite Debugs
-
-Suite Teardown
- IF "${OPENSTACK_TOPO}" == "1cmb-0ctl-0cmp" RETURN
- OpenStackOperations.OpenStack Suite Teardown
+++ /dev/null
-*** Settings ***
-Documentation Test Suite for vni-based-l2-l3-nat:
-... This feature attempts to realize the use of VxLAN VNI
-... (Virtual Network Identifier) for VxLAN tenant traffic
-... flowing on the cloud data-network. This is applicable
-... to L2 switching, L3 forwarding and NATing for all VxLAN
-... based provider networks. In doing so, it eliminates the
-... presence of LPort tags, ELAN tags and MPLS labels on the
-... wire and instead, replaces them with VNIs supplied by the
-... tenant’s OpenStack.
-
-Library OperatingSystem
-Library RequestsLibrary
-Library String
-Resource ../../../libraries/DevstackUtils.robot
-Resource ../../../libraries/KarafKeywords.robot
-Resource ../../../variables/netvirt/Variables.robot
-Resource ../../../libraries/OpenStackOperations.robot
-Resource ../../../libraries/OVSDB.robot
-Resource ../../../libraries/SetupUtils.robot
-Resource ../../../libraries/Utils.robot
-Resource ../../../libraries/VpnOperations.robot
-Resource ../../../variables/netvirt/Variables.robot
-Resource ../../../variables/Variables.robot
-
-Suite Setup Suite Setup
-Suite Teardown Suite Teardown
-Test Setup VpnOperations.VNI Test Setup
-Test Teardown VpnOperations.VNI Test Teardown
-
-
-*** Variables ***
-${VNI_SECURITY_GROUP} vni_l2_sg
-@{VNI_NETWORKS} vni_l2_net_1
-@{VNI_SUBNETS} vni_l2_sub_1 vni_l2_sub_2 vni_l2_sub_3
-@{VNI_SUBNET_CIDRS} 71.1.1.0/24 72.1.1.0/24 73.1.1.0/24
-@{VNI_NET_1_PORTS} vni_l2_net_1_port_1 vni_l2_net_1_port_2
-@{VNI_NET_1_VMS} vni_l2_net_1_vm_1 vni_l2_net_1_vm_2
-
-
-*** Test Cases ***
-VNI Based L2 Switching
- [Documentation] verify VNI id for L2 Unicast frames exchanged over OVS datapaths that are on different hypervisors
- BuiltIn.Pass Execution If "${OPENSTACK_TOPO}" == "1cmb-0ctl-0cmp" "Test is not supported for combo node"
- ${port_mac1} = OpenStackOperations.Get Port Mac ${VNI_NET_1_PORTS}[0]
- ${port_mac2} = OpenStackOperations.Get Port Mac ${VNI_NET_1_PORTS}[1]
- ${segmentation_id} = OpenStackOperations.Get Network Segmentation Id ${VNI_NETWORKS}[0]
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${VNI_NETWORKS}[0]
- ... ${VNI_NET_1_VM_IPS}[0]
- ... ping -c ${DEFAULT_PING_COUNT} ${VNI_NET_1_VM_IPS}[1]
- ${egress_tun_id} ${before_count_egress_port1} = OVSDB.Get Tunnel Id And Packet Count
- ... ${OS_CMP1_CONN_ID}
- ... ${ELAN_DMACTABLE}
- ... tun_id=${segmentation_id}
- ... mac=${port_mac2}
- BuiltIn.Should Be Equal As Numbers ${segmentation_id} ${egress_tun_id}
- ${egress_tun_id} ${before_count_egress_port2} = OVSDB.Get Tunnel Id And Packet Count
- ... ${OS_CMP2_CONN_ID}
- ... ${ELAN_DMACTABLE}
- ... tun_id=${segmentation_id}
- ... mac=${port_mac1}
- BuiltIn.Should Be Equal As Numbers ${segmentation_id} ${egress_tun_id}
- ${ingress_tun_id} ${before_count_ingress_port1} = OVSDB.Get Tunnel Id And Packet Count
- ... ${OS_CMP1_CONN_ID}
- ... ${INTERNAL_TUNNEL_TABLE}
- ... tun_id=${segmentation_id}
- ... mac=""
- BuiltIn.Should Be Equal As Numbers ${segmentation_id} ${ingress_tun_id}
- ${ingress_tun_id} ${before_count_ingress_port2} = OVSDB.Get Tunnel Id And Packet Count
- ... ${OS_CMP2_CONN_ID}
- ... ${INTERNAL_TUNNEL_TABLE}
- ... tun_id=${segmentation_id}
- ... mac=""
- BuiltIn.Should Be Equal As Numbers ${segmentation_id} ${ingress_tun_id}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${VNI_NETWORKS}[0]
- ... ${VNI_NET_1_VM_IPS}[0]
- ... ping -c ${DEFAULT_PING_COUNT} ${VNI_NET_1_VM_IPS}[1]
- BuiltIn.Should Contain ${output} 64 bytes
- ${tun_id} ${after_count_egress_port1} = OVSDB.Get Tunnel Id And Packet Count
- ... ${OS_CMP1_CONN_ID}
- ... ${ELAN_DMACTABLE}
- ... tun_id=${segmentation_id}
- ... mac=${port_mac2}
- ${tun_id} ${after_count_ingress_port1} = OVSDB.Get Tunnel Id And Packet Count
- ... ${OS_CMP1_CONN_ID}
- ... ${INTERNAL_TUNNEL_TABLE}
- ... tun_id=${segmentation_id}
- ... mac=""
- ${tun_id} ${after_count_egress_port2} = OVSDB.Get Tunnel Id And Packet Count
- ... ${OS_CMP2_CONN_ID}
- ... ${ELAN_DMACTABLE}
- ... tun_id=${segmentation_id}
- ... mac=${port_mac1}
- ${tun_id} ${after_count_ingress_port2} = OVSDB.Get Tunnel Id And Packet Count
- ... ${OS_CMP2_CONN_ID}
- ... ${INTERNAL_TUNNEL_TABLE}
- ... tun_id=${segmentation_id}
- ... mac=""
- ${diff_count_egress_port1} = BuiltIn.Evaluate ${after_count_egress_port1} - ${before_count_egress_port1}
- ${diff_count_ingress_port1} = BuiltIn.Evaluate ${after_count_ingress_port1} - ${before_count_ingress_port1}
- ${diff_count_egress_port2} = BuiltIn.Evaluate ${after_count_egress_port2} - ${before_count_egress_port2}
- ${diff_count_ingress_port2} = BuiltIn.Evaluate ${after_count_ingress_port2} - ${before_count_ingress_port2}
- BuiltIn.Should Be True ${diff_count_egress_port1} >= ${DEFAULT_PING_COUNT}
- BuiltIn.Should Be True ${diff_count_ingress_port1} >= ${DEFAULT_PING_COUNT}
- BuiltIn.Should Be True ${diff_count_egress_port2} >= ${DEFAULT_PING_COUNT}
- BuiltIn.Should Be True ${diff_count_ingress_port2} >= ${DEFAULT_PING_COUNT}
-
-
-*** Keywords ***
-Suite Setup
- [Documentation] Create Basic setup for the feature. Creates single network, subnet, two ports and two VMs.
- IF "${OPENSTACK_TOPO}" == "1cmb-0ctl-0cmp" RETURN
- VpnOperations.Basic Suite Setup
- OpenStackOperations.Create Allow All SecurityGroup ${VNI_SECURITY_GROUP}
- OpenStackOperations.Create Network ${VNI_NETWORKS}[0]
- OpenStackOperations.Create SubNet ${VNI_NETWORKS}[0] ${VNI_SUBNETS}[0] ${VNI_SUBNET_CIDRS}[0]
- OpenStackOperations.Create Port ${VNI_NETWORKS}[0] ${VNI_NET_1_PORTS}[0] sg=${VNI_SECURITY_GROUP}
- OpenStackOperations.Create Port ${VNI_NETWORKS}[0] ${VNI_NET_1_PORTS}[1] sg=${VNI_SECURITY_GROUP}
- BuiltIn.Wait Until Keyword Succeeds
- ... 3s
- ... 1s
- ... Utils.Check For Elements At URI
- ... ${PORT_URL}
- ... ${VNI_NET_1_PORTS}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${VNI_NET_1_PORTS}[0]
- ... ${VNI_NET_1_VMS}[0]
- ... ${OS_CMP1_HOSTNAME}
- ... sg=${VNI_SECURITY_GROUP}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${VNI_NET_1_PORTS}[1]
- ... ${VNI_NET_1_VMS}[1]
- ... ${OS_CMP2_HOSTNAME}
- ... sg=${VNI_SECURITY_GROUP}
- @{VNI_NET_1_VM_IPS} ${vni_net_1_dhcp_ip} = OpenStackOperations.Get VM IPs @{VNI_NET_1_VMS}
- BuiltIn.Set Suite Variable @{VNI_NET_1_VM_IPS}
- BuiltIn.Should Not Contain ${VNI_NET_1_VM_IPS} None
- BuiltIn.Should Not Contain ${vni_net_1_dhcp_ip} None
- OpenStackOperations.Show Debugs @{VNI_NET_1_VMS}
- OpenStackOperations.Get Suite Debugs
-
-Suite Teardown
- IF "${OPENSTACK_TOPO}" == "1cmb-0ctl-0cmp" RETURN
- OpenStackOperations.OpenStack Suite Teardown
+++ /dev/null
-*** Settings ***
-Documentation Test Suite for vni-based-l2-l3-nat:
-... This feature attempts to realize the use of VxLAN VNI
-... (Virtual Network Identifier) for VxLAN tenant traffic
-... flowing on the cloud data-network. This is applicable
-... to L2 switching, L3 forwarding and NATing for all VxLAN
-... based provider networks. In doing so, it eliminates the
-... presence of LPort tags, ELAN tags and MPLS labels on the
-... wire and instead, replaces them with VNIs supplied by the
-... tenant’s OpenStack.
-
-Library OperatingSystem
-Library RequestsLibrary
-Library String
-Resource ../../../libraries/DevstackUtils.robot
-Resource ../../../libraries/KarafKeywords.robot
-Resource ../../../variables/netvirt/Variables.robot
-Resource ../../../libraries/OpenStackOperations.robot
-Resource ../../../libraries/OVSDB.robot
-Resource ../../../libraries/SetupUtils.robot
-Resource ../../../libraries/Utils.robot
-Resource ../../../libraries/VpnOperations.robot
-Resource ../../../variables/netvirt/Variables.robot
-Resource ../../../variables/Variables.robot
-
-Suite Setup Suite Setup
-Suite Teardown Suite Teardown
-Test Setup VpnOperations.VNI Test Setup
-Test Teardown VpnOperations.VNI Test Teardown
-
-
-*** Variables ***
-${EGRESS} Egress
-${INGRESS} Ingress
-${IP} ipv4
-${VNI_SECURITY_GROUP} vni_sg
-@{VNI_NETWORKS}
-... vni_l3_net_0
-... vni_l3_net_1
-... vni_l3_net_2
-... vni_l3_net_3
-... vni_l3_net_4
-... vni_l3_net_5
-@{VNI_SUBNETS}
-... vni_l3_sub_0
-... vni_l3_sub_1
-... vni_l3_sub_2
-... vni_l3_sub_3
-... vni_l3_sub_4
-... vni_l3_sub_5
-@{VNI_SUBNET_CIDRS} 61.1.1.0/24 62.1.1.0/24 63.1.1.0/24 64.1.1.0/24 65.1.1.0/24 66.1.1.0/24
-@{VNI_NET_0_PORTS} vni_l3_net_0_port_1 vni_l3_net_0_port_2
-@{VNI_NET_1_PORTS} vni_l3_net_1_port_1 vni_l3_net_1_port_2
-@{VNI_NET_2_PORTS} vni_l3_net_2_port_1 vni_l3_net_2_port_2
-@{VNI_NET_3_PORTS} vni_l3_net_3_port_1 vni_l3_net_3_port_2
-@{VNI_NET_4_PORTS} vni_l3_net_4_port_1 vni_l3_net_4_port_2
-@{VNI_NET_5_PORTS} vni_l3_net_5_port_1 vni_l3_net_5_port_2
-@{VNI_NET_0_VMS} vni_l3_net_0_vm
-@{VNI_NET_1_VMS} vni_l3_net_1_vm
-@{VNI_NET_2_VMS} vni_l3_net_2_vm
-@{VNI_NET_3_VMS} vni_l3_net_3_vm
-@{VNI_NET_4_VMS} vni_l3_net_4_vm
-@{VNI_NET_5_VMS} vni_l3_net_5_vm
-@{VNI_ROUTER} vni_l3_router1 vni_l3_router2
-@{VNI_BGPVPN} vni_l3_bgpvpn
-@{VNI_RDS} ["2200:2"] ["2300:2"] ["2400:2"] ["2500:2"]
-@{VNI_VPN_NAMES} vni_l3_vpn_1 vni_l3_vpn_2 vni_l3_vpn_3 vni_l3_vpn_4
-@{VNI_VPN_INSTANCE_IDS}
-... 4ae8cd92-48ca-49b5-94e1-b2921a261441
-... 4ae8cd92-48ca-49b5-94e1-b2921a261442
-... 4ae8cd92-48ca-49b5-94e1-b2921a261443
-... 4ae8cd92-48ca-49b5-94e1-b2921a261444
-
-
-*** Test Cases ***
-VNI Based L3 Forwarding
- [Documentation] verify VNI id for L3 Unicast frames exchanged over OVS datapaths that are on different hypervisors
- BuiltIn.Pass Execution If "${OPENSTACK_TOPO}" == "1cmb-0ctl-0cmp" "Test is not supported for combo node"
- Wait Until Keyword Succeeds
- ... 60s
- ... 5s
- ... OVSDB.Verify Vni Segmentation Id and Tunnel Id
- ... ${VNI_NET_0_PORTS}[0]
- ... ${VNI_NET_1_PORTS}[0]
- ... ${VNI_NETWORKS}[0]
- ... ${VNI_NETWORKS}[1]
- ... ${NET_0_VM_IPS}[0]
- ... ${NET_1_VM_IPS}[0]
- ... ${IP}
-
-VNI Based L3 Forwarding With BGPVPN Router Association
- [Documentation] verify VNI id for L3 Unicast frames exchanged over OVS datapaths that are on different hypervisors
- ... With Router associated to a BGPVPN.
- BuiltIn.Pass Execution If "${OPENSTACK_TOPO}" == "1cmb-0ctl-0cmp" "Test is not supported for combo node"
- ${net_id} = OpenStackOperations.Get Net Id ${VNI_NETWORKS}[0]
- ${tenant_id} = OpenStackOperations.Get Tenant ID From Network ${net_id}
- VpnOperations.VPN Create L3VPN
- ... vpnid=${VNI_VPN_INSTANCE_IDS}[0]
- ... name=${VNI_VPN_NAMES}[0]
- ... rd=${VNI_RDS}[0]
- ... exportrt=${VNI_RDS}[0]
- ... importrt=${VNI_RDS}[0]
- ... tenantid=${tenant_id}
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VNI_VPN_INSTANCE_IDS}[0]
- BuiltIn.Should Contain ${resp} ${VNI_VPN_INSTANCE_IDS}[0]
- ${router_id} = OpenStackOperations.Get Router Id ${VNI_ROUTER}[0]
- VpnOperations.Associate VPN to Router routerid=${router_id} vpnid=${VNI_VPN_INSTANCE_IDS}[0]
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VNI_VPN_INSTANCE_IDS}[0]
- BuiltIn.Should Contain ${resp} ${router_id}
- BuiltIn.Wait Until Keyword Succeeds
- ... 60s
- ... 5s
- ... OVSDB.Verify Vni Segmentation Id and Tunnel Id
- ... ${VNI_NET_0_PORTS}[0]
- ... ${VNI_NET_1_PORTS}[0]
- ... ${VNI_NETWORKS}[0]
- ... ${VNI_NETWORKS}[1]
- ... ${NET_0_VM_IPS}[0]
- ... ${NET_1_VM_IPS}[0]
- ... ${IP}
-
-VNI Based L3 Forwarding With BGPVPN Network Association
- [Documentation] verify VNI id for L3 Unicast frames exchanged over OVS datapaths that are on different hypervisors
- ... With Networks associated to a BGPVPN.
- BuiltIn.Pass Execution If "${OPENSTACK_TOPO}" == "1cmb-0ctl-0cmp" "Test is not supported for combo node"
- OpenStackOperations.Create Network ${VNI_NETWORKS}[2]
- OpenStackOperations.Create Network ${VNI_NETWORKS}[3]
- OpenStackOperations.Create SubNet ${VNI_NETWORKS}[2] ${VNI_SUBNETS}[2] ${VNI_SUBNET_CIDRS}[2]
- OpenStackOperations.Create SubNet ${VNI_NETWORKS}[3] ${VNI_SUBNETS}[3] ${VNI_SUBNET_CIDRS}[3]
- OpenStackOperations.Create Port ${VNI_NETWORKS}[2] ${VNI_NET_2_PORTS}[0] sg=${VNI_SECURITY_GROUP}
- OpenStackOperations.Create Port ${VNI_NETWORKS}[3] ${VNI_NET_3_PORTS}[0] sg=${VNI_SECURITY_GROUP}
- ${net_id} = OpenStackOperations.Get Net Id ${VNI_NETWORKS}[2]
- ${tenant_id} = OpenStackOperations.Get Tenant ID From Network ${net_id}
- BuiltIn.Log ${VNI_RDS}[1]
- VpnOperations.VPN Create L3VPN
- ... vpnid=${VNI_VPN_INSTANCE_IDS}[1]
- ... name=${VNI_VPN_NAMES}[1]
- ... rd=${VNI_RDS}[1]
- ... exportrt=${VNI_RDS}[1]
- ... importrt=${VNI_RDS}[1]
- ... tenantid=${tenant_id}
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VNI_VPN_INSTANCE_IDS}[1]
- BuiltIn.Should Contain ${resp} ${VNI_VPN_INSTANCE_IDS}[1]
- ${network2_id} = OpenStackOperations.Get Net Id ${VNI_NETWORKS}[2]
- ${network3_id} = OpenStackOperations.Get Net Id ${VNI_NETWORKS}[3]
- VpnOperations.Associate L3VPN To Network networkid=${network2_id} vpnid=${VNI_VPN_INSTANCE_IDS}[1]
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VNI_VPN_INSTANCE_IDS}[1]
- BuiltIn.Should Contain ${resp} ${network2_id}
- VpnOperations.Associate L3VPN To Network networkid=${network3_id} vpnid=${VNI_VPN_INSTANCE_IDS}[1]
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VNI_VPN_INSTANCE_IDS}[1]
- BuiltIn.Should Contain ${resp} ${network3_id}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${VNI_NET_2_PORTS}[0]
- ... ${VNI_NET_2_VMS}[0]
- ... ${OS_CMP1_HOSTNAME}
- ... sg=${VNI_SECURITY_GROUP}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${VNI_NET_3_PORTS}[0]
- ... ${VNI_NET_3_VMS}[0]
- ... ${OS_CMP2_HOSTNAME}
- ... sg=${VNI_SECURITY_GROUP}
- @{NET_2_VM_IPS} ${NET_2_DHCP_IP} = OpenStackOperations.Get VM IPs @{VNI_NET_2_VMS}
- @{NET_3_VM_IPS} ${NET_3_DHCP_IP} = OpenStackOperations.Get VM IPs @{VNI_NET_3_VMS}
- BuiltIn.Set Suite Variable @{NET_2_VM_IPS}
- BuiltIn.Set Suite Variable @{NET_3_VM_IPS}
- BuiltIn.Should Not Contain ${NET_2_VM_IPS} None
- BuiltIn.Should Not Contain ${NET_3_VM_IPS} None
- BuiltIn.Should Not Contain ${NET_2_DHCP_IP} None
- BuiltIn.Should Not Contain ${NET_3_DHCP_IP} None
- BuiltIn.Wait Until Keyword Succeeds
- ... 60s
- ... 5s
- ... OVSDB.Verify Vni Segmentation Id and Tunnel Id
- ... ${VNI_NET_2_PORTS}[0]
- ... ${VNI_NET_3_PORTS}[0]
- ... ${VNI_NETWORKS}[2]
- ... ${VNI_NETWORKS}[3]
- ... ${NET_2_VM_IPS}[0]
- ... ${NET_3_VM_IPS}[0]
- ... ${IP}
-
-VNI Based L3 Forwarding With BGPVPN With Irt Ert
- [Documentation] verify VNI id for L3 Unicast frames exchanged over OVS datapaths that are on different hypervisors
- ... With two Networks associated to two BGPVPN.
- BuiltIn.Pass Execution If "${OPENSTACK_TOPO}" == "1cmb-0ctl-0cmp" "Test is not supported for combo node"
- OpenStackOperations.Create Network ${VNI_NETWORKS}[4]
- OpenStackOperations.Create Network ${VNI_NETWORKS}[5]
- OpenStackOperations.Create SubNet ${VNI_NETWORKS}[4] ${VNI_SUBNETS}[4] ${VNI_SUBNET_CIDRS}[4]
- OpenStackOperations.Create SubNet ${VNI_NETWORKS}[5] ${VNI_SUBNETS}[5] ${VNI_SUBNET_CIDRS}[5]
- OpenStackOperations.Create Port ${VNI_NETWORKS}[4] ${VNI_NET_4_PORTS}[0] sg=${VNI_SECURITY_GROUP}
- OpenStackOperations.Create Port ${VNI_NETWORKS}[5] ${VNI_NET_5_PORTS}[0] sg=${VNI_SECURITY_GROUP}
- ${net_id} = OpenStackOperations.Get Net Id ${VNI_NETWORKS}[4]
- ${tenant_id} = OpenStackOperations.Get Tenant ID From Network ${net_id}
- BuiltIn.Log ${VNI_RDS}[2]
- VpnOperations.VPN Create L3VPN
- ... vpnid=${VNI_VPN_INSTANCE_IDS}[2]
- ... name=${VNI_VPN_NAMES}[2]
- ... rd=${VNI_RDS}[2]
- ... exportrt=${VNI_RDS}[2]
- ... importrt=${VNI_RDS}[3]
- ... tenantid=${tenant_id}
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VNI_VPN_INSTANCE_IDS}[2]
- BuiltIn.Should Contain ${resp} ${VNI_VPN_INSTANCE_IDS}[2]
- ${network4_id} = OpenStackOperations.Get Net Id ${VNI_NETWORKS}[4]
- VpnOperations.Associate L3VPN To Network networkid=${network4_id} vpnid=${VNI_VPN_INSTANCE_IDS}[2]
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VNI_VPN_INSTANCE_IDS}[2]
- BuiltIn.Should Contain ${resp} ${network4_id}
- BuiltIn.Log ${VNI_RDS}[3]
- VpnOperations.VPN Create L3VPN
- ... vpnid=${VNI_VPN_INSTANCE_IDS}[3]
- ... name=${VNI_VPN_NAMES}[3]
- ... rd=${VNI_RDS}[3]
- ... exportrt=${VNI_RDS}[3]
- ... importrt=${VNI_RDS}[2]
- ... tenantid=${tenant_id}
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VNI_VPN_INSTANCE_IDS}[3]
- BuiltIn.Should Contain ${resp} ${VNI_VPN_INSTANCE_IDS}[3]
- ${network5_id} = OpenStackOperations.Get Net Id ${VNI_NETWORKS}[5]
- VpnOperations.Associate L3VPN To Network networkid=${network5_id} vpnid=${VNI_VPN_INSTANCE_IDS}[3]
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VNI_VPN_INSTANCE_IDS}[3]
- BuiltIn.Should Contain ${resp} ${network5_id}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${VNI_NET_4_PORTS}[0]
- ... ${VNI_NET_4_VMS}[0]
- ... ${OS_CMP1_HOSTNAME}
- ... sg=${VNI_SECURITY_GROUP}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${VNI_NET_5_PORTS}[0]
- ... ${VNI_NET_5_VMS}[0]
- ... ${OS_CMP2_HOSTNAME}
- ... sg=${VNI_SECURITY_GROUP}
- @{NET_4_VM_IPS} ${NET_4_DHCP_IP} = OpenStackOperations.Get VM IPs @{VNI_NET_4_VMS}
- @{NET_5_VM_IPS} ${NET_5_DHCP_IP} = OpenStackOperations.Get VM IPs @{VNI_NET_5_VMS}
- BuiltIn.Set Suite Variable @{NET_4_VM_IPS}
- BuiltIn.Set Suite Variable @{NET_5_VM_IPS}
- BuiltIn.Should Not Contain ${NET_4_VM_IPS} None
- BuiltIn.Should Not Contain ${NET_5_VM_IPS} None
- BuiltIn.Should Not Contain ${NET_4_DHCP_IP} None
- BuiltIn.Should Not Contain ${NET_5_DHCP_IP} None
- BuiltIn.Wait Until Keyword Succeeds
- ... 60s
- ... 5s
- ... OVSDB.Verify Vni Segmentation Id and Tunnel Id
- ... ${VNI_NET_4_PORTS}[0]
- ... ${VNI_NET_5_PORTS}[0]
- ... ${VNI_NETWORKS}[4]
- ... ${VNI_NETWORKS}[5]
- ... ${NET_4_VM_IPS}[0]
- ... ${NET_5_VM_IPS}[0]
- ... ${IP}
-
-
-*** Keywords ***
-Suite Setup
- [Documentation] Create Basic setup for the feature. Creates single network, subnet, two ports and two VMs.
- ... Create Two VMs for TC1 : (VM1, N1, Compute1) and (VM2, N2, Compute2) and R1
- IF "${OPENSTACK_TOPO}" == "1cmb-0ctl-0cmp" RETURN
- VpnOperations.Basic Suite Setup
- OpenStackOperations.Create Allow All SecurityGroup ${VNI_SECURITY_GROUP}
- OpenStackOperations.Create Network ${VNI_NETWORKS}[0]
- OpenStackOperations.Create Network ${VNI_NETWORKS}[1]
- OpenStackOperations.Create SubNet ${VNI_NETWORKS}[0] ${VNI_SUBNETS}[0] ${VNI_SUBNET_CIDRS}[0]
- OpenStackOperations.Create SubNet ${VNI_NETWORKS}[1] ${VNI_SUBNETS}[1] ${VNI_SUBNET_CIDRS}[1]
- OpenStackOperations.Create Port ${VNI_NETWORKS}[0] ${VNI_NET_0_PORTS}[0] sg=${VNI_SECURITY_GROUP}
- OpenStackOperations.Create Port ${VNI_NETWORKS}[1] ${VNI_NET_1_PORTS}[0] sg=${VNI_SECURITY_GROUP}
- OpenStackOperations.Create Router ${VNI_ROUTER}[0]
- OpenStackOperations.Add Router Interface ${VNI_ROUTER}[0] ${VNI_SUBNETS}[0]
- OpenStackOperations.Add Router Interface ${VNI_ROUTER}[0] ${VNI_SUBNETS}[1]
- ${interface_output} = OpenStackOperations.Show Router Interface ${VNI_ROUTER}[0]
- ${GWMAC_ADDRS} ${GWIP_ADDRS} = VpnOperations.Get Gateway MAC And IP Address ${VNI_ROUTER}[0]
- BuiltIn.Set Suite Variable ${GWMAC_ADDRS}
- BuiltIn.Set Suite Variable ${GWIP_ADDRS}
- ${router_list} = BuiltIn.Create List ${VNI_ROUTER}[0]
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${VNI_NET_0_PORTS}[0]
- ... ${VNI_NET_0_VMS}[0]
- ... ${OS_CMP1_HOSTNAME}
- ... sg=${VNI_SECURITY_GROUP}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${VNI_NET_1_PORTS}[0]
- ... ${VNI_NET_1_VMS}[0]
- ... ${OS_CMP2_HOSTNAME}
- ... sg=${VNI_SECURITY_GROUP}
- @{NET_0_VM_IPS} ${NET_0_DHCP_IP} = OpenStackOperations.Get VM IPs @{VNI_NET_0_VMS}
- @{NET_1_VM_IPS} ${NET_1_DHCP_IP} = OpenStackOperations.Get VM IPs @{VNI_NET_1_VMS}
- BuiltIn.Set Suite Variable @{NET_0_VM_IPS}
- BuiltIn.Set Suite Variable @{NET_1_VM_IPS}
- BuiltIn.Should Not Contain ${NET_0_VM_IPS} None
- BuiltIn.Should Not Contain ${NET_1_VM_IPS} None
- BuiltIn.Should Not Contain ${NET_0_DHCP_IP} None
- BuiltIn.Should Not Contain ${NET_1_DHCP_IP} None
- OpenStackOperations.Show Debugs @{VNI_NET_0_VMS} @{VNI_NET_1_VMS}
- OpenStackOperations.Get Suite Debugs
-
-Suite Teardown
- IF "${OPENSTACK_TOPO}" == "1cmb-0ctl-0cmp" RETURN
- OpenStackOperations.OpenStack Suite Teardown
+++ /dev/null
-*** Settings ***
-Documentation Test suite for ARP Request. More test cases to be added in subsequent patches.
-
-Library RequestsLibrary
-Library SSHLibrary
-Resource ../../../libraries/DevstackUtils.robot
-Resource ../../../libraries/OpenStackOperations.robot
-Resource ../../../libraries/SetupUtils.robot
-Resource ../../../libraries/VpnOperations.robot
-Resource ../../../variables/netvirt/Variables.robot
-Resource ../../../variables/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} vpna_sg
-@{NETWORKS} vpna_net_1 vpna_net_2 vpna_net_3
-@{SUBNETS} vpna_sub_1 vpna_sub_2 vpna_sub_3
-@{SUBNET_CIDRS} 10.10.10.0/24 10.20.20.0/24 10.30.30.0/24
-@{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
-@{NET_1_VMS} vpna_net_1_vm_1 vpna_net_1_vm_2
-@{NET_2_VMS} vpna_net_2_vm_1 vpna_net_2_vm_2
-@{NET_3_VMS} vpna_net_3_vm_1 vpna_net_3_vm_2
-${ROUTER} vpna_router
-@{VPN_INSTANCE_IDS} 4ae8cd92-48ca-49b5-94e1-b2921a261111
-@{VPN_NAMES} vpna_1
-${RD1} ["2200:2"]
-${RD2} ["2200:3"]
-${EXPORT_RT} ["2200:2","2200:3"]
-${IMPORT_RT} ["2200:2","2200:3"]
-${SUB_IF} eth0:1
-@{EXTRA_NW_IP} 192.168.10.110 192.168.20.110
-${FIB_ENTRY_2} 192.168.10.110
-${RPING_MIP_IP} sudo arping -I eth0:1 -c 5 -b -s 192.168.10.110 192.168.10.110
-${RPING_MIP_IP_2} sudo arping -I eth0:1 -c 5 -b -s 192.168.20.110 192.168.20.110
-${RPING_EXP_STR} broadcast
-
-
-*** Test Cases ***
-Verify Setup
- [Documentation] Verify that VMs received ip and ping is happening between different VMs.
- ... For this, we ssh to the VM using the dhcp-namespace on the controller node and verify ping
- ... reachability to the second VM on the same network and VMs on other network (i.e., east-west routing)
- ${vms} = BuiltIn.Create List @{NET_1_VM_IPS} @{NET_2_VM_IPS} @{NET_3_VM_IPS}
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 10s
- ... Utils.Check For Elements At URI
- ... ${FIB_ENTRIES_URL}
- ... ${vms}
- Verify Ping On Same Networks
- Verify Ping On Different Networks
-
-Verify GARP Requests
- [Documentation] Verify that GARP request is sent to controller and controller learns this info.
- ... In this test-case, before we validate the GARPs, we ensure that the necessary pipeline
- ... flows for the VMs spawned on the networks are as expected (along with the FIB Entries
- ... in the ODL Datastore). For triggering GARPs, we create an alias interface (eth0:1) on
- ... VM1_net0, configure it with an extra_route_ip, trigger 5 GARPs from the VM for the
- ... extra_route_ip and ensure that ODL learns (by looking at odl-fib:fibEntries) the
- ... extra_route_ip info with the nexthop pointing to Compute-1 (where VM1_net0 is spawned)
- ... hostIP. Finally, we verify ping reachability to the extra_route_ip from other VMs on
- ... the network.
- BuiltIn.Pass Execution If "${OPENSTACK_TOPO}" == "1cmb-0ctl-0cmp" "Test is not supported for combo node"
- BuiltIn.Set Test Variable ${fib_entry_1} ${NET_1_VM_IPS}[0]
- BuiltIn.Set Test Variable ${fib_entry_3} ${NET_1_VM_IPS}[1]
- Verify Flows Are Present On All Compute Nodes
- ${output} = VpnOperations.Get Fib Entries session
- ${resp} = BuiltIn.Should Match Regexp ${output} destPrefix\\":\\"${fib_entry_3}\/32".*"${OS_CMP2_IP}\\"
- ${resp} = BuiltIn.Should Match Regexp ${output} destPrefix\\":\\"${fib_entry_1}\/32".*"${OS_CMP1_IP}\\"
- ${rx_packet1_before} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[1]
- ... ifconfig eth0
- ${rx_packet0_before} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[0]
- ... ifconfig eth0
- ${config_extra_route_ip1} = BuiltIn.Catenate
- ... sudo ifconfig ${SUB_IF} ${EXTRA_NW_IP}[0] netmask 255.255.255.0 up
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[1]
- ... ${config_extra_route_ip1}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[1]
- ... ifconfig
- BuiltIn.Should Contain ${output} ${SUB_IF}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[1]
- ... ${RPING_MIP_IP}
- BuiltIn.Should Contain ${output} broadcast
- BuiltIn.Should Contain ${output} Received 0 reply
- ${rx_packet1_after} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[1]
- ... ifconfig eth0
- ${rx_packet0_after} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[0]
- ... ifconfig eth0
- BuiltIn.Should Not Be Equal ${rx_packet0_before} ${rx_packet0_after}
- BuiltIn.Should Not Be Equal ${rx_packet1_before} ${rx_packet1_after}
- Verify Flows Are Present On All Compute Nodes
- BuiltIn.Wait Until Keyword Succeeds 5s 1s Verify Learnt IP ${FIB_ENTRY_2} session
- ${output} = VpnOperations.Get Fib Entries session
- ${resp} = BuiltIn.Should Match Regexp ${output} destPrefix\\":\\"${fib_entry_3}\\/32".*"${OS_CMP2_IP}\\"
- ${resp} = BuiltIn.Should Match Regexp ${output} destPrefix\\":\\"${fib_entry_1}\\/32".*"${OS_CMP1_IP}\\"
- ${resp} = BuiltIn.Should Match Regexp ${output} destPrefix\\":\\"${FIB_ENTRY_2}\\/32".*"${OS_CMP2_IP}\\"
- Verify Ping To Sub Interface ${FIB_ENTRY_2}
-
-Verify MIP Migration
- [Documentation] Verify that after migration of movable ip across compute nodes, the controller updates the routes.
- ... Unconfigure the extra_route_ip on VM1_net0 and configure it on vm0_net0 (on Compute-0 host).
- ... Trigger 5 GARPs from the VM for the extra_route_ip and ensure that ODL learns/updates
- ... the extra_route_ip info with nexthop in the FIB entry pointing to Compute-0 hostip.
- BuiltIn.Pass Execution If "${OPENSTACK_TOPO}" == "1cmb-0ctl-0cmp" "Test is not supported for combo node"
- ${unconfig_extra_route_ip1} = BuiltIn.Catenate sudo ifconfig ${SUB_IF} down
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[1]
- ... ${unconfig_extra_route_ip1}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[1]
- ... ifconfig
- BuiltIn.Should Not Contain ${output} ${SUB_IF}
- ${config_extra_route_ip1} = BuiltIn.Catenate
- ... sudo ifconfig ${SUB_IF} ${EXTRA_NW_IP}[0] netmask 255.255.255.0 up
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[0]
- ... ${config_extra_route_ip1}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[0]
- ... ifconfig
- BuiltIn.Should Contain ${output} ${SUB_IF}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[0]
- ... ifconfig ${SUB_IF}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[0]
- ... ${RPING_MIP_IP}
- BuiltIn.Should Contain ${output} Received 0 reply
- BuiltIn.Should Contain ${output} broadcast
- BuiltIn.Wait Until Keyword Succeeds 5s 1s Verify Learnt IP ${FIB_ENTRY_2} session
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[0]
- ... ${RPING_MIP_IP}
- ${output} = VpnOperations.Get Fib Entries session
- ${resp} = BuiltIn.Should Match Regexp ${output} destPrefix\\":\\"${FIB_ENTRY_2}\\/32".*"${OS_CMP1_IP}\\"
- Verify Ping To Sub Interface ${FIB_ENTRY_2}
- ${unconfig_extra_route_ip1} = BuiltIn.Catenate sudo ifconfig ${SUB_IF} down
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[0]
- ... ${unconfig_extra_route_ip1}
-
-Verify ping to subnet gateway
- [Documentation] Verify ping happens to subnet gateway. To be submitted in next patch
- [Tags] not-implemented exclude
- TODO
-
-If anything other than subnet ip then no reply
- [Documentation] If anything other than subnet ip then no reply. To be submitted in next patch
- [Tags] not-implemented exclude
- TODO
-
-Validate multiple mip migration
- [Documentation] Validate multiple mip migration. To be submitted in next patch
- [Tags] not-implemented exclude
- TODO
-
-Same DPN MIP Migration
- [Documentation] Same DPN MIP Migration. To be submitted in next patch
- [Tags] not-implemented exclude
- TODO
-
-
-*** Keywords ***
-Suite Setup
- [Documentation] Suite Setup to create the necessary resources.
- ... Create three tenant networks with a subnet in each network and an allow-all Security Group.
- ... In each of the networks, create two ports (i.e., total of 6 ports, two in each network)
- ... Create two VMs in each network (so total of 6 VMs). VM0_net0 on Compute-0 and VM1_net0 on Compute-1.
- ... Create a Neutron Router and associate subnet1 and subnet2.
- ... Create an L3VPN instance and associate the L3VPN instance to the neutron router.
- VpnOperations.Basic Suite Setup
- FOR ${network} IN @{NETWORKS}
- OpenStackOperations.Create Network ${network}
- END
- ${neutron_networks} = OpenStackOperations.List Networks
- FOR ${network} IN @{NETWORKS}
- BuiltIn.Should Contain ${neutron_networks} ${network}
- END
- ${NET_ID} = OpenStackOperations.Get Net Id ${NETWORKS}[0]
- BuiltIn.Set Suite Variable ${NET_ID}
- FOR ${i} IN RANGE 0 3
- OpenStackOperations.Create SubNet ${NETWORKS}[${i}] ${SUBNETS}[${i}] ${SUBNET_CIDRS}[${i}]
- END
- ${neutron_subnets} = OpenStackOperations.List Subnets
- FOR ${subnet} IN @{SUBNETS}
- BuiltIn.Should Contain ${neutron_subnets} ${subnet}
- END
- OpenStackOperations.Create Allow All SecurityGroup ${SECURITY_GROUP}
- OpenStackOperations.Create Port
- ... ${NETWORKS}[0]
- ... ${PORTS}[0]
- ... sg=${SECURITY_GROUP}
- ... allowed_address_pairs=@{EXTRA_NW_IP}
- OpenStackOperations.Create Port
- ... ${NETWORKS}[0]
- ... ${PORTS}[1]
- ... sg=${SECURITY_GROUP}
- ... allowed_address_pairs=@{EXTRA_NW_IP}
- OpenStackOperations.Create Port
- ... ${NETWORKS}[1]
- ... ${PORTS}[2]
- ... sg=${SECURITY_GROUP}
- ... allowed_address_pairs=@{EXTRA_NW_IP}
- OpenStackOperations.Create Port
- ... ${NETWORKS}[1]
- ... ${PORTS}[3]
- ... sg=${SECURITY_GROUP}
- ... allowed_address_pairs=@{EXTRA_NW_IP}
- OpenStackOperations.Create Port
- ... ${NETWORKS}[2]
- ... ${PORTS}[4]
- ... sg=${SECURITY_GROUP}
- ... allowed_address_pairs=@{EXTRA_NW_IP}
- OpenStackOperations.Create Port
- ... ${NETWORKS}[2]
- ... ${PORTS}[5]
- ... sg=${SECURITY_GROUP}
- ... allowed_address_pairs=@{EXTRA_NW_IP}
- Wait Until Keyword Succeeds
- ... 3s
- ... 1s
- ... Check For Elements At URI
- ... ${CONFIG_API}/neutron:neutron/ports/
- ... ${PORTS}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${PORTS}[0]
- ... ${NET_1_VMS}[0]
- ... ${OS_CMP1_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${PORTS}[1]
- ... ${NET_1_VMS}[1]
- ... ${OS_CMP2_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${PORTS}[2]
- ... ${NET_2_VMS}[0]
- ... ${OS_CMP1_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${PORTS}[3]
- ... ${NET_2_VMS}[1]
- ... ${OS_CMP2_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${PORTS}[4]
- ... ${NET_3_VMS}[0]
- ... ${OS_CMP1_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${PORTS}[5]
- ... ${NET_3_VMS}[1]
- ... ${OS_CMP2_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- @{NET_1_VM_IPS} ${NET_1_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_1_VMS}
- @{NET_2_VM_IPS} ${NET_2_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_2_VMS}
- @{NET_3_VM_IPS} ${NET_3_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_3_VMS}
- BuiltIn.Set Suite Variable @{NET_1_VM_IPS}
- BuiltIn.Set Suite Variable @{NET_2_VM_IPS}
- BuiltIn.Set Suite Variable @{NET_3_VM_IPS}
- BuiltIn.Should Not Contain ${NET_1_VM_IPS} None
- BuiltIn.Should Not Contain ${NET_2_VM_IPS} None
- BuiltIn.Should Not Contain ${NET_3_VM_IPS} None
- BuiltIn.Should Not Contain ${NET_1_DHCP_IP} None
- BuiltIn.Should Not Contain ${NET_2_DHCP_IP} None
- BuiltIn.Should Not Contain ${NET_3_DHCP_IP} None
- OpenStackOperations.Create Router ${ROUTER}
- OpenStackOperations.Add Router Interface ${ROUTER} ${SUBNETS}[1]
- OpenStackOperations.Add Router Interface ${ROUTER} ${SUBNETS}[2]
- ${tenant_id} = OpenStackOperations.Get Tenant ID From Network ${NET_ID}
- VpnOperations.VPN Create L3VPN
- ... vpnid=${VPN_INSTANCE_IDS}[0]
- ... name=${VPN_NAMES[0]}
- ... rd=${RD1}
- ... exportrt=${EXPORT_RT}
- ... importrt=${IMPORT_RT}
- ... tenantid=${tenant_id}
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_IDS}[0]
- BuiltIn.Should Contain ${resp} ${VPN_INSTANCE_IDS}[0]
- Associate L3VPN To ROUTER
- OpenStackOperations.Show Debugs @{NET_1_VMS} @{NET_2_VMS} @{NET_3_VMS}
- OpenStackOperations.Get Suite Debugs
-
-Suite Teardown
- [Documentation] Delete the setup
- BuiltIn.Run Keyword And Ignore Error
- ... VpnOperations.Dissociate L3VPN From Networks
- ... networkid=${NET_ID}
- ... vpnid=${VPN_INSTANCE_IDS}[0]
- BuiltIn.Run Keyword And Ignore Error
- ... VpnOperations.Dissociate VPN to Router
- ... routerid=${ROUTER_ID}
- ... vpnid=${VPN_INSTANCE_IDS}[0]
- BuiltIn.Run Keyword And Ignore Error VpnOperations.VPN Delete L3VPN vpnid=${VPN_INSTANCE_IDS}[0]
- OpenStackOperations.OpenStack Suite Teardown
-
-Associate L3VPN To ROUTER
- VpnOperations.Associate L3VPN To Network networkid=${NET_ID} vpnid=${VPN_INSTANCE_IDS}[0]
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_IDS}[0]
- BuiltIn.Should Contain ${resp} ${NET_ID}
- ${ROUTER_ID} = OpenStackOperations.Get Router Id ${ROUTER}
- BuiltIn.Set Suite Variable ${ROUTER_ID}
- VpnOperations.Associate VPN to Router routerid=${ROUTER_ID} vpnid=${VPN_INSTANCE_IDS}[0]
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_IDS}[0]
- BuiltIn.Should Contain ${resp} ${ROUTER_ID}
-
-Verify Ping On Same Networks
- [Documentation] Verify ping among VM of same network
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[0]
- ... ping -c 3 ${NET_1_VM_IPS}[1]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[1]
- ... ${NET_2_VM_IPS}[0]
- ... ping -c 3 ${NET_2_VM_IPS}[1]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[1]
- ... ping -c 3 ${NET_1_VM_IPS}[0]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[1]
- ... ${NET_2_VM_IPS}[1]
- ... ping -c 3 ${NET_2_VM_IPS}[0]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[2]
- ... ${NET_3_VM_IPS}[0]
- ... ping -c 3 ${NET_3_VM_IPS}[1]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
-
-Verify Ping On Different Networks
- [Documentation] Verify ping among VMs of different network
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[0]
- ... ping -c 3 ${NET_2_VM_IPS}[0]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[1]
- ... ${NET_2_VM_IPS}[0]
- ... ping -c 3 ${NET_3_VM_IPS}[0]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[1]
- ... ping -c 3 ${NET_2_VM_IPS}[1]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[1]
- ... ${NET_2_VM_IPS}[1]
- ... ping -c 3 ${NET_3_VM_IPS}[1]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[2]
- ... ${NET_3_VM_IPS}[0]
- ... ping -c 3 ${NET_1_VM_IPS}[1]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
-
-Verify Flows Are Present
- [Documentation] Verify Flows Are Present
- ... Verify that Flows to support L3 Connectivity (like ELAN_SMAC_TABLE, FIB_TABLE)
- ... and a FIB entry to reach all the VMs in the network exist in the OVS pipeline.
- [Arguments] ${ip}
- ${flow_output} = Utils.Run Command On Remote System
- ... ${ip}
- ... sudo ovs-ofctl -O OpenFlow13 dump-flows ${INTEGRATION_BRIDGE}
- BuiltIn.Log ${flow_output}
- ${resp} = BuiltIn.Should Contain ${flow_output} table=50
- ${resp} = BuiltIn.Should Contain ${flow_output} table=21,
- @{vm_ips} = BuiltIn.Create List @{NET_1_VM_IPS} @{NET_2_VM_IPS} @{NET_3_VM_IPS}
- ${resp} = Should Match regexp ${flow_output} table=0.*goto_table:36
- ${resp} = Should Match regexp ${flow_output} table=0.*goto_table:17
- FOR ${ip} IN @{vm_ips}
- ${resp} = Should Match regexp ${flow_output} table=21.*nw_dst=${ip}
- END
-
-Verify Flows Are Present On All Compute Nodes
- [Documentation] Verify Flows Are Present On All Compute Nodes
- FOR ${ip} IN @{OS_CMP_IPS}
- BuiltIn.Wait Until Keyword Succeeds 10s 2s Verify Flows Are Present ${ip}
- END
-
-Verify Ping To Sub Interface
- [Documentation] Verify ping to the sub-interface
- [Arguments] ${sub_interface_ip}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[0]
- ... ping -c 3 ${sub_interface_ip}
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[1]
- ... ${NET_2_VM_IPS}[0]
- ... ping -c 3 ${sub_interface_ip}
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[2]
- ... ${NET_3_VM_IPS}[0]
- ... ping -c 3 ${sub_interface_ip}
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
-
-Verify Learnt IP
- [Documentation] Check that sub interface ip has been learnt after ARP request
- [Arguments] ${ip} ${session}
- ${resp} = RequestsLibrary.Get Request
- ... ${session}
- ... /restconf/operational/odl-l3vpn:learnt-vpn-vip-to-port-data/
- BuiltIn.Log ${resp.text}
- BuiltIn.Should Contain ${resp.text} ${ip}
-
-TODO
- Fail "Not implemented"
+++ /dev/null
-*** Settings ***
-Documentation Test suite to validate 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 OperatingSystem
-Library RequestsLibrary
-Resource ../../../libraries/CompareStream.robot
-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
-@{NETWORKS} vpn_net_1 vpn_net_2
-@{SUBNETS} vpn_sub_1 vpn_sub_2
-@{SUBNET_CIDRS} 10.1.1.0/24 20.1.1.0/24
-@{PORTS} vpn_net_1_port_1 vpn_net_1_port_2 vpn_net_2_port_1 vpn_net_2_port_2
-@{NET_1_VMS} vpn_net_1_vm_1 vpn_net_1_vm_2
-@{NET_2_VMS} vpn_net_2_vm_1 vpn_net_2_vm_2
-${ROUTER} vpn_router
-@{EXTRA_NW_IP} 71.1.1.2 72.1.1.2
-@{EXTRA_NW_SUBNET} 71.1.1.0/24 72.1.1.0/24
-${UPDATE_NETWORK} UpdateNetwork
-${UPDATE_SUBNET} UpdateSubnet
-${UPDATE_PORT} UpdatePort
-@{VPN_INSTANCE_IDS}
-... 4ae8cd92-48ca-49b5-94e1-b2921a261441
-... 4ae8cd92-48ca-49b5-94e1-b2921a261442
-... 4ae8cd92-48ca-49b5-94e1-b2921a261443
-@{VPN_NAMES} vpn_1 vpn_2 vpn_3
-@{RDS} ["2200:2"] ["2300:2"] ["2400:2"]
-${PORT_NEW} vpn_net_1_port_new
-${VM_NAME_NEW} vpn_net_1_vm_new
-${INVALID_VPN_INSTANCE_ID} AAAAAAAAAA-4848-4949-9494-666666666666
-
-
-*** 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_IPS}[0]
- ... ping -c 3 ${NET_1_VM_IPS}[1]
- BuiltIn.Should Contain ${output} 64 bytes
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[1]
- ... ${NET_2_VM_IPS}[0]
- ... ping -c 3 ${NET_2_VM_IPS}[1]
- BuiltIn.Should Contain ${output} 64 bytes
-
-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}
-
-Add Interfaces To Router
- FOR ${interface} IN @{SUBNETS}
- OpenStackOperations.Add Router Interface ${ROUTER} ${interface}
- END
- ${interface_output} = OpenStackOperations.Show Router Interface ${ROUTER}
- ${GWMAC_ADDRS} ${GWIP_ADDRS} = VpnOperations.Get Gateway MAC And IP Address ${ROUTER}
- BuiltIn.Set Suite Variable ${GWMAC_ADDRS}
- BuiltIn.Set Suite Variable ${GWIP_ADDRS}
-
-Check L3_Datapath Traffic Across Networks With Router
- @{tcpdump_conn_ids} = OpenStackOperations.Start Packet Capture On Nodes
- ... tcpdump_vpn
- ... ${EMPTY}
- ... @{OS_ALL_IPS}
- ${vm_ips} = BuiltIn.Create List @{NET_1_VM_IPS} @{NET_2_VM_IPS}
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 10s
- ... Utils.Check For Elements At URI
- ... ${FIB_ENTRY_URL}
- ... ${vm_ips}
- Verify Flows Are Present For L3VPN On All Compute Nodes ${vm_ips}
- BuiltIn.Wait Until Keyword Succeeds 30s 10s VpnOperations.Verify GWMAC Entry On ODL ${GWMAC_ADDRS}
- Verify GWMAC Flow Entry On Flow Table On All Compute Nodes
- ${dst_ip_list} = BuiltIn.Create List ${NET_1_VM_IPS}[1] @{NET_2_VM_IPS}
- OpenStackOperations.Test Operations From Vm Instance ${NETWORKS}[0] ${NET_1_VM_IPS}[0] ${dst_ip_list}
- ${dst_ip_list} = BuiltIn.Create List ${NET_2_VM_IPS}[1] @{NET_1_VM_IPS}
- OpenStackOperations.Test Operations From Vm Instance ${NETWORKS}[1] ${NET_2_VM_IPS}[0] ${dst_ip_list}
- [Teardown] VpnOperations.Test Teardown With Tcpdump Stop ${tcpdump_conn_ids}
-
-Add Multiple Extra Routes And Check Datapath Before L3VPN Creation
- ${CONFIG_EXTRA_ROUTE_IP1} = BuiltIn.Catenate sudo ifconfig eth0:1 ${EXTRA_NW_IP}[0] netmask 255.255.255.0 up
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[0]
- ... ${CONFIG_EXTRA_ROUTE_IP1}
- ${CONFIG_EXTRA_ROUTE_IP2} = BuiltIn.Catenate sudo ifconfig eth0:2 ${EXTRA_NW_IP}[1] netmask 255.255.255.0 up
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[0]
- ... ${CONFIG_EXTRA_ROUTE_IP2}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[0]
- ... ifconfig
- ${ext_rt1} = BuiltIn.Set Variable destination=${EXTRA_NW_SUBNET}[0],gateway=${NET_1_VM_IPS}[0]
- ${ext_rt2} = BuiltIn.Set Variable destination=${EXTRA_NW_SUBNET}[1],gateway=${NET_1_VM_IPS}[0]
- ${cmd} = BuiltIn.Catenate ${RT_OPTIONS} ${ext_rt1} ${RT_OPTIONS} ${ext_rt2}
- OpenStackOperations.Update Router ${ROUTER} ${cmd}
- OpenStackOperations.Show Router ${ROUTER}
- ${vm_ips} = BuiltIn.Create List @{EXTRA_NW_SUBNET}
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 10s
- ... Utils.Check For Elements At URI
- ... ${FIB_ENTRY_URL}
- ... ${vm_ips}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[1]
- ... ping -c 3 ${EXTRA_NW_IP}[1]
- BuiltIn.Should Contain ${output} 64 bytes
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[1]
- ... ${NET_2_VM_IPS}[1]
- ... ping -c 3 ${EXTRA_NW_IP}[1]
- BuiltIn.Should Contain ${output} 64 bytes
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[1]
- ... ping -c 3 ${EXTRA_NW_IP}[0]
- BuiltIn.Should Contain ${output} 64 bytes
-
-Delete Extra Route
- OpenStackOperations.Update Router ${ROUTER} ${RT_CLEAR}
- OpenStackOperations.Show Router ${ROUTER}
-
-Delete And Recreate Extra Route
- [Documentation] Recreate multiple extra route and check data path before L3VPN creation
- ${CONFIG_EXTRA_ROUTE_IP1} = BuiltIn.Catenate sudo ifconfig eth0:1 ${EXTRA_NW_IP}[0] netmask 255.255.255.0 up
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[0]
- ... ${CONFIG_EXTRA_ROUTE_IP1}
- ${ext_rt1} = BuiltIn.Set Variable destination=${EXTRA_NW_SUBNET}[0],gateway=${NET_1_VM_IPS}[0]
- ${cmd} = BuiltIn.Catenate ${RT_OPTIONS} ${ext_rt1}
- OpenStackOperations.Update Router ${ROUTER} ${cmd}
- OpenStackOperations.Show Router ${ROUTER}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[1]
- ... ping -c 3 ${EXTRA_NW_IP}[0]
- BuiltIn.Should Contain ${output} 64 bytes
- # clear off extra-routes before the next set of tests
- [Teardown] BuiltIn.Run Keywords OpenStackOperations.Update Router ${ROUTER} ${RT_CLEAR}
- ... AND OpenStackOperations.Show Router ${ROUTER}
- ... AND OpenStackOperations.Get Test Teardown Debugs
-
-Create L3VPN
- ${net_id} = OpenStackOperations.Get Net Id ${NETWORKS}[0]
- ${tenant_id} = OpenStackOperations.Get Tenant ID From Network ${net_id}
- BuiltIn.Log ${RDS}[0]
- VpnOperations.VPN Create L3VPN
- ... vpnid=${VPN_INSTANCE_IDS}[0]
- ... name=${VPN_NAMES}[0]
- ... rd=${RDS}[0]
- ... exportrt=${RDS}[0]
- ... importrt=${RDS}[0]
- ... tenantid=${tenant_id}
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_IDS}[0]
- BuiltIn.Should Contain ${resp} ${VPN_INSTANCE_IDS}[0]
-
-Associate L3VPN To Routers
- ${router_id} = OpenStackOperations.Get Router Id ${ROUTER}
- VpnOperations.Associate VPN to Router routerid=${router_id} vpnid=${VPN_INSTANCE_IDS}[0]
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_IDS}[0]
- BuiltIn.Should Contain ${resp} ${router_id}
-
-Verify L3VPN Datapath With Router Association
- ${vm_ips} = BuiltIn.Create List @{NET_1_VM_IPS} @{NET_2_VM_IPS}
- CompareStream.Run_Keyword_If_Less_Than_Magnesium
- ... BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 10s
- ... Utils.Check For Elements At URI
- ... ${VPN_IFACES_URL}
- ... ${vm_ips}
- CompareStream.Run_Keyword_If_At_Least_Magnesium
- ... BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 10s
- ... Utils.Check For Elements At URI
- ... ${VPN_INST_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}
- Verify Flows Are Present For L3VPN On All Compute Nodes ${vm_ips}
- BuiltIn.Wait Until Keyword Succeeds 30s 15s VpnOperations.Verify GWMAC Entry On ODL ${GWMAC_ADDRS}
- Verify GWMAC Flow Entry On Flow Table On All Compute Nodes
- BuiltIn.Log Check datapath from network1 to network2
- ${dst_ip_list} = BuiltIn.Create List ${NET_1_VM_IPS}[1] @{NET_2_VM_IPS}
- OpenStackOperations.Test Operations From Vm Instance ${NETWORKS}[0] ${NET_1_VM_IPS}[0] ${dst_ip_list}
- BuiltIn.Log Check datapath from network2 to network1
- ${dst_ip_list} = BuiltIn.Create List ${NET_2_VM_IPS}[1] @{NET_1_VM_IPS}
- OpenStackOperations.Test Operations From Vm Instance ${NETWORKS}[1] ${NET_2_VM_IPS}[0] ${dst_ip_list}
-
-Delete Router Failure When Associated With L3VPN
- ${router_id} = OpenStackOperations.Get Router Id ${ROUTER}
- ${rc} ${output} = Run And Return Rc And Output openstack router delete ${ROUTER}
- BuiltIn.Should Match Regexp ${output} Failed to delete router.*${ROUTER}
- BuiltIn.Should Be True '${rc}' == '1'
- ${router_output} = OpenStackOperations.List Routers
- BuiltIn.Should Contain ${router_output} ${ROUTER}
- @{router_list} = BuiltIn.Create List ${ROUTER}
- BuiltIn.Wait Until Keyword Succeeds
- ... 3s
- ... 1s
- ... Utils.Check For Elements At URI
- ... ${ROUTER_URL}
- ... ${router_list}
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_IDS}[0]
- BuiltIn.Should Contain ${resp} ${router_id}
- Verify GWMAC Flow Entry On Flow Table On All Compute Nodes
-
-Verify Remove Interface From Router When Associated With L3VPN
- OpenStackOperations.Remove Interface ${ROUTER} ${SUBNETS}[0]
- OpenStackOperations.Test Operations From Vm Instance ${NETWORKS}[0] ${NET_1_VM_IPS}[0] ${NET_1_VM_IPS}
- OpenStackOperations.Test Operations From Vm Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[0]
- ... ${NET_2_VM_IPS}
- ... ping_should_succeed=False
-
-Verify L3VPN Datapath With Router Dissociation When Interfaces are Added To Router
- OpenStackOperations.Add Router Interface ${ROUTER} ${SUBNETS}[0]
- ${vm_ips} = BuiltIn.Create List @{NET_1_VM_IPS} @{NET_2_VM_IPS}
- ${router_id} = OpenStackOperations.Get Router Id ${ROUTER}
- VpnOperations.Dissociate VPN to Router routerid=${router_id} vpnid=${VPN_INSTANCE_IDS}[0]
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_IDS}[0]
- BuiltIn.Should Not Contain ${resp} ${router_id}
- Verify Flows Are Present For L3VPN On All Compute Nodes ${vm_ips}
- ${dst_ip_list} = BuiltIn.Create List ${NET_1_VM_IPS}[1] @{NET_2_VM_IPS}
- OpenStackOperations.Test Operations From Vm Instance ${NETWORKS}[0] ${NET_1_VM_IPS}[0] ${dst_ip_list}
- BuiltIn.Log Check datapath from network2 to network1
- ${dst_ip_list} = BuiltIn.Create List ${NET_2_VM_IPS}[1] @{NET_1_VM_IPS}
- BuiltIn.Wait Until Keyword Succeeds
- ... 60s
- ... 10s
- ... OpenStackOperations.Test Operations From Vm Instance
- ... ${NETWORKS}[1]
- ... ${NET_2_VM_IPS}[0]
- ... ${dst_ip_list}
-
-Remove Router Interfaces And Check L3_Datapath Traffic Across Networks
- ${router_id} = OpenStackOperations.Get Router Id ${ROUTER}
- FOR ${INTERFACE} IN @{SUBNETS}
- OpenStackOperations.Remove Interface ${ROUTER} ${INTERFACE}
- OpenStackOperations.Test Operations From Vm Instance ${NETWORKS}[0] ${NET_1_VM_IPS}[0] ${NET_1_VM_IPS}
- OpenStackOperations.Test Operations From Vm Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[0]
- ... ${NET_2_VM_IPS}
- ... ping_should_succeed=False
- END
- ${interface_output} = OpenStackOperations.Show Router Interface ${ROUTER}
- FOR ${INTERFACE} IN @{SUBNETS}
- ${subnet_id} = OpenStackOperations.Get Subnet Id ${INTERFACE}
- BuiltIn.Should Not Contain ${interface_output} ${subnet_id}
- END
-
-Delete Router
- Delete Router ${ROUTER}
- ${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
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_IDS}[0]
- BuiltIn.Should Not Contain ${resp} ${ROUTER}
- Verify GWMAC Flow Entry Removed From Flow Table On All Compute Nodes
-
-Delete Router With NonExistentRouter Name
- [Documentation] Delete router with nonExistentRouter name
- ${result} = Process.Run Process openstack router delete nonExistentRouter shell=True
- BuiltIn.Log ${result.stdout}
- BuiltIn.Log ${result.stderr}
- BuiltIn.Should Be True '${result.rc}' == '1'
- BuiltIn.Should Match Regexp
- ... ${result.stderr}
- ... Failed to delete router with name or ID 'nonExistentRouter': No Router found for nonExistentRouter
-
-Associate Networks To L3VPN
- [Documentation] Associates L3VPN to networks and verify
- ${network1_id} = OpenStackOperations.Get Net Id ${NETWORKS}[0]
- ${network2_id} = OpenStackOperations.Get Net Id ${NETWORKS}[1]
- VpnOperations.Associate L3VPN To Network networkid=${network1_id} vpnid=${VPN_INSTANCE_IDS}[0]
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_IDS}[0]
- BuiltIn.Should Contain ${resp} ${network1_id}
- VpnOperations.Associate L3VPN To Network networkid=${network2_id} vpnid=${VPN_INSTANCE_IDS}[0]
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_IDS}[0]
- BuiltIn.Should Contain ${resp} ${network2_id}
-
-Check Datapath Traffic Across Networks With L3VPN
- [Documentation] Datapath Test Across the networks with VPN.
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[0]
- ... ping -c 20 ${NET_1_VM_IPS}[1]
- BuiltIn.Should Contain ${output} 64 bytes
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[0]
- ... ping -c 20 ${NET_2_VM_IPS}[1]
- BuiltIn.Should Contain ${output} 64 bytes
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[0]
- ... ping -c 20 ${NET_2_VM_IPS}[0]
- BuiltIn.Should Contain ${output} 64 bytes
-
-Verification of route update after VM port removed and re added to VPN
- [Documentation] Verify route update after VM port removed and re added to VPN
- OpenStackOperations.Delete Port ${PORTS}[0]
- ${net_list} = BuiltIn.Create List ${NET_1_VM_IPS[0]}
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 10s
- ... Utils.Check For Elements Not At URI
- ... ${FIB_ENTRY_URL}
- ... ${net_list}
- OpenStackOperations.Delete Vm Instance ${NET_1_VMS}[0]
- OpenStackOperations.Create Port ${NETWORKS}[0] ${PORTS}[0] sg=${SECURITY_GROUP}
- BuiltIn.Wait Until Keyword Succeeds 3s 1s Utils.Check For Elements At URI ${PORT_URL} ${PORTS}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${PORTS}[0]
- ... ${NET_1_VMS}[0]
- ... ${OS_CMP1_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- OpenStackOperations.Poll VM Is ACTIVE ${NET_1_VMS}[0]
- ${status} ${ips_and_console_log} = BuiltIn.Run Keyword And Ignore Error
- ... BuiltIn.Wait Until Keyword Succeeds
- ... 360s
- ... 15s
- ... OpenStackOperations.Get VM IP
- ... true
- ... ${NET_1_VMS}[0]
- @{NET_1_VM_IPS} ${NET_1_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_1_VMS}
- BuiltIn.Set Suite Variable @{NET_1_VM_IPS}
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 10s
- ... Utils.Check For Elements At URI
- ... ${FIB_ENTRY_URL}
- ... ${NET_1_VM_IPS}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[0]
- ... ping -c 10 ${NET_1_VM_IPS}[1]
- BuiltIn.Should Contain ${output} 64 bytes
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${NET_1_VM_IPS}[0]
- ... ping -c 10 ${NET_2_VM_IPS}[0]
- BuiltIn.Should Contain ${output} 64 bytes
-
-Verification of route update after reconfiguring vpn by adding new ports
- [Documentation] Verify route update after reconfiguring vpn by creating new VM with new port on openvswitch1
- OpenStackOperations.Create Port ${NETWORKS}[0] ${PORT_NEW} sg=${SECURITY_GROUP}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${PORT_NEW}
- ... ${VM_NAME_NEW}
- ... ${OS_CMP1_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- OpenStackOperations.Poll VM Is ACTIVE ${VM_NAME_NEW}
- ${status} ${ips_and_console_log} = BuiltIn.Run Keyword And Ignore Error
- ... BuiltIn.Wait Until Keyword Succeeds
- ... 360s
- ... 15s
- ... OpenStackOperations.Get VM IP
- ... true
- ... ${VM_NAME_NEW}
- ${output} = VpnOperations.Get Fib Entries session
- BuiltIn.Should Contain ${output} ${ips_and_console_log[0]}
- OpenStackOperations.Delete Vm Instance ${VM_NAME_NEW}
- OpenStackOperations.Delete Port ${PORT_NEW}
-
-Dissociate L3VPN From Networks
- [Documentation] Dissociate L3VPN from networks
- ${network1_id} = OpenStackOperations.Get Net Id ${NETWORKS}[0]
- ${network2_id} = OpenStackOperations.Get Net Id ${NETWORKS}[1]
- VpnOperations.Dissociate L3VPN From Networks networkid=${network1_id} vpnid=${VPN_INSTANCE_IDS}[0]
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_IDS}[0]
- BuiltIn.Should Not Contain ${resp} ${network1_id}
- VpnOperations.Dissociate L3VPN From Networks networkid=${network2_id} vpnid=${VPN_INSTANCE_IDS}[0]
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_IDS}[0]
- BuiltIn.Should Not Contain ${resp} ${network2_id}
-
-Delete Unknown L3VPN
- [Documentation] Verification of a failure response with deletion of an unknown L3VPN
- ${status} ${message} = BuiltIn.Run Keyword And Ignore Error
- ... VpnOperations.VPN Delete L3VPN
- ... vpnid=${INVALID_VPN_INSTANCE_ID}
- BuiltIn.Should Contain ${status} FAIL
-
-Delete L3VPN
- [Documentation] Delete L3VPN
- VpnOperations.VPN Delete L3VPN vpnid=${VPN_INSTANCE_IDS}[0]
-
-Create Multiple L3VPN
- [Documentation] Creates three L3VPNs and then verify 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_IDS}[0]
- ... name=${VPN_NAMES}[0]
- ... rd=${RDS}[0]
- ... exportrt=${RDS}[0]
- ... importrt=${RDS}[0]
- ... tenantid=${tenant_id}
- VpnOperations.VPN Create L3VPN
- ... vpnid=${VPN_INSTANCE_IDS}[1]
- ... name=${VPN_NAMES}[1]
- ... rd=${RDS}[1]
- ... exportrt=${RDS}[1]
- ... importrt=${RDS}[1]
- ... tenantid=${tenant_id}
- VpnOperations.VPN Create L3VPN
- ... vpnid=${VPN_INSTANCE_IDS}[2]
- ... name=${VPN_NAMES}[2]
- ... rd=${RDS}[2]
- ... exportrt=${RDS}[2]
- ... importrt=${RDS}[2]
- ... tenantid=${tenant_id}
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_IDS}[0]
- BuiltIn.Should Contain ${resp} ${VPN_INSTANCE_IDS}[0]
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_IDS}[1]
- BuiltIn.Should Contain ${resp} ${VPN_INSTANCE_IDS}[1]
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_IDS}[2]
- BuiltIn.Should Contain ${resp} ${VPN_INSTANCE_IDS}[2]
-
-
-*** Keywords ***
-Suite Setup
- VpnOperations.Basic Suite Setup
- OpenStackOperations.Create Network ${NETWORKS}[0]
- OpenStackOperations.Create Network ${NETWORKS}[1]
- BuiltIn.Wait Until Keyword Succeeds 3s 1s Utils.Check For Elements At URI ${NETWORK_URL} ${NETWORKS}
- OpenStackOperations.Update Network ${NETWORKS}[0] additional_args=--description ${UPDATE_NETWORK}
- ${output} = OpenStackOperations.Show Network ${NETWORKS}[0]
- BuiltIn.Should Contain ${output} ${UPDATE_NETWORK}
- OpenStackOperations.Create SubNet ${NETWORKS}[0] ${SUBNETS}[0] ${SUBNET_CIDRS}[0]
- OpenStackOperations.Create SubNet ${NETWORKS}[1] ${SUBNETS}[1] ${SUBNET_CIDRS}[1]
- BuiltIn.Wait Until Keyword Succeeds
- ... 3s
- ... 1s
- ... Utils.Check For Elements At URI
- ... ${SUBNETWORK_URL}
- ... ${SUBNETS}
- OpenStackOperations.Update SubNet ${SUBNETS}[0] additional_args=--description ${UPDATE_SUBNET}
- ${output} = OpenStackOperations.Show SubNet ${SUBNETS}[0]
- BuiltIn.Should Contain ${output} ${UPDATE_SUBNET}
- OpenStackOperations.Create Allow All SecurityGroup ${SECURITY_GROUP}
- ${allowed_address_pairs_args} = BuiltIn.Set Variable
- ... --allowed-address ip-address=${EXTRA_NW_SUBNET}[0] --allowed-address ip-address=${EXTRA_NW_SUBNET}[1]
- Create Port
- ... ${NETWORKS}[0]
- ... ${PORTS}[0]
- ... sg=${SECURITY_GROUP}
- ... additional_args=${allowed_address_pairs_args}
- Create Port
- ... ${NETWORKS}[0]
- ... ${PORTS}[1]
- ... sg=${SECURITY_GROUP}
- ... additional_args=${allowed_address_pairs_args}
- Create Port
- ... ${NETWORKS}[1]
- ... ${PORTS}[2]
- ... sg=${SECURITY_GROUP}
- ... additional_args=${allowed_address_pairs_args}
- Create Port
- ... ${NETWORKS}[1]
- ... ${PORTS}[3]
- ... sg=${SECURITY_GROUP}
- ... additional_args=${allowed_address_pairs_args}
- Wait Until Keyword Succeeds 3s 1s Check For Elements At URI ${PORT_URL} ${PORTS}
- ${PORTS_MACADDR} = Get Ports MacAddr ${PORTS}
- Set Suite Variable ${PORTS_MACADDR}
- Update Port ${PORTS}[0] additional_args=--description ${UPDATE_PORT}
- ${output} = Show Port ${PORTS}[0]
- Should Contain ${output} ${UPDATE_PORT}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${PORTS}[0]
- ... ${NET_1_VMS}[0]
- ... ${OS_CMP1_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${PORTS}[1]
- ... ${NET_1_VMS}[1]
- ... ${OS_CMP2_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${PORTS}[2]
- ... ${NET_2_VMS}[0]
- ... ${OS_CMP1_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${PORTS}[3]
- ... ${NET_2_VMS}[1]
- ... ${OS_CMP2_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- @{NET_1_VM_IPS} ${NET_1_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_1_VMS}
- @{NET_2_VM_IPS} ${NET_2_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_2_VMS}
- BuiltIn.Set Suite Variable @{NET_1_VM_IPS}
- BuiltIn.Set Suite Variable @{NET_2_VM_IPS}
- BuiltIn.Should Not Contain ${NET_1_VM_IPS} None
- BuiltIn.Should Not Contain ${NET_2_VM_IPS} None
- BuiltIn.Should Not Contain ${NET_1_DHCP_IP} None
- BuiltIn.Should Not Contain ${NET_2_DHCP_IP} None
- BuiltIn.Wait Until Keyword Succeeds 30s 10s Wait For Routes To Propogate ${NETWORKS} ${SUBNET_CIDRS}
- OpenStackOperations.Show Debugs @{NET_1_VMS} @{NET_2_VMS}
- OpenStackOperations.Get Suite Debugs
-
-Suite Teardown
- [Documentation] Delete the setup
- BuiltIn.Run Keyword And Ignore Error VpnOperations.VPN Delete L3VPN vpnid=${VPN_INSTANCE_IDS}[0]
- BuiltIn.Run Keyword And Ignore Error VpnOperations.VPN Delete L3VPN vpnid=${VPN_INSTANCE_IDS}[1]
- BuiltIn.Run Keyword And Ignore Error VpnOperations.VPN Delete L3VPN vpnid=${VPN_INSTANCE_IDS}[2]
- OpenStackOperations.OpenStack Suite Teardown
+++ /dev/null
-*** 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.
-
-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"]
-
-
-*** 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]}
- 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]}
- 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]}
- 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]}
- 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}
-
-Add Router Ports
- [Documentation] Add created subnets to router.
- FOR ${PORT} IN @{SUBNETS4}
- OpenStackOperations.Add Router Interface ${ROUTER} ${PORT}
- END
- ${interface_output} = OpenStackOperations.Show Router Interface ${ROUTER}
- ${GW1_MAC_ADDRS} ${GW_IPV4_ADDRS} = VpnOperations.Get Gateway MAC And IP Address ${ROUTER}
- FOR ${PORT} IN @{SUBNETS6}
- OpenStackOperations.Add Router Interface ${ROUTER} ${PORT}
- END
- ${interface_output} = OpenStackOperations.Show Router Interface ${ROUTER}
- ${GW2_MAC_ADDRS} ${GW_IPV6_ADDRS} = VpnOperations.Get Gateway MAC And IP Address ${ROUTER} ${IP6_REGEX}
- ${GW_MAC_ADDRS} = BuiltIn.Create List @{GW1_MAC_ADDRS} @{GW2_MAC_ADDRS}
- BuiltIn.Set Suite Variable ${GW1_MAC_ADDRS}
- BuiltIn.Set Suite Variable ${GW2_MAC_ADDRS}
- BuiltIn.Set Suite Variable ${GW_MAC_ADDRS}
- BuiltIn.Set Suite Variable ${GW_IPV4_ADDRS}
- BuiltIn.Set Suite Variable ${GW_IPV6_ADDRS}
-
-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}
- FOR ${VM} IN ${vm_instances}
- 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
- BuiltIn.Log L3 Datapath test across the networks using router
- ${dst_ipv4_list1} = BuiltIn.Create List ${NET_1_VM_IPV4[1]} @{NET_2_VM_IPV4}
- Test Operations From Vm Instance ${NETWORKS}[0] ${NET_1_VM_IPV4[0]} ${dst_ipv4_list1}
- ${dst_ipv4_list2} = BuiltIn.Create List ${NET_2_VM_IPV4[1]} @{NET_1_VM_IPV4}
- Test Operations From Vm Instance ${NETWORKS}[1] ${NET_2_VM_IPV4[0]} ${dst_ipv4_list2}
- ${dst_ipv6_list1} = BuiltIn.Create List ${NET_1_VM_IPV6[1]} @{NET_2_VM_IPV6}
- Test Operations From Vm Instance ${NETWORKS}[0] ${NET_1_VM_IPV6[0]} ${dst_ipv6_list1}
- ${dst_ipv6_list2} = BuiltIn.Create List ${NET_2_VM_IPV6[1]} @{NET_1_VM_IPV6}
- Test Operations From Vm Instance ${NETWORKS}[1] ${NET_2_VM_IPV6[0]} ${dst_ipv6_list2}
- [Teardown] VpnOperations.Test Teardown With Tcpdump Stop ${tcpdump_conn_ids}
-
-Add Multiple Extra Routes And Check Datapath Before L3VPN Creation
- [Documentation] Add multiple extra routes and check data path before L3VPN creation.
- BuiltIn.Log Add extraroutes to VM
- 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
- 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]
- ${ext_rt2} = BuiltIn.Set Variable destination=${EXTRA_NW_SUBNET_IPV4}[1],gateway=${NET_1_VM_IPV4}[0]
- ${cmd} = BuiltIn.Catenate ${RT_OPTIONS} ${ext_rt1} ${RT_OPTIONS} ${ext_rt2}
- OpenStackOperations.Update Router ${ROUTER} ${cmd}
- OpenStackOperations.Show Router ${ROUTER}
- 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
- 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]
- ${ext_rt4} = BuiltIn.Set Variable destination=${EXTRA_NW_SUBNET_IPV6}[1],gateway=${NET_1_VM_IPV6}[0]
- ${cmd} = BuiltIn.Catenate ${RT_OPTIONS} ${ext_rt3} ${RT_OPTIONS} ${ext_rt4}
- OpenStackOperations.Update Router ${ROUTER} ${cmd}
- 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}
- 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}
- 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}
- 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}
- 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}
- 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}
- 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}
- BuiltIn.Should Contain ${output} 64 bytes
- END
-
-Delete And Recreate Extra Route
- [Documentation] Delete IPv4 and IPv6 extra routes and recreate it.
- ... Then check data path before L3VPN creation.
- 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
- 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]
- 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]
- 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}
- ${ext_rt2} = BuiltIn.Set Variable destination=${EXTRA_NW_SUBNET_IPV6}[0],gateway=${NET_1_VM_IPV6}[0]
- ${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]
- 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]
- BuiltIn.Should Contain ${output} 64 bytes
- # clear off extra-routes before the next set of tests
- OpenStackOperations.Update Router ${ROUTER} ${RT_CLEAR}
- [Teardown] BuiltIn.Run Keywords OpenStackOperations.Update Router ${ROUTER} ${RT_CLEAR}
- ... AND OpenStackOperations.Show Router ${ROUTER}
- ... AND OpenStackOperations.Get Test Teardown Debugs
-
-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}
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_ID[0]}
- BuiltIn.Should Contain ${resp} ${VPN_INSTANCE_ID[0]}
-
-Associate L3VPN To Routers
- [Documentation] Associating router to L3VPN.
- ${router_id} = OpenStackOperations.Get Router Id ${ROUTER}
- VpnOperations.Associate VPN to Router routerid=${router_id} vpnid=${VPN_INSTANCE_ID[0]}
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_ID[0]}
- BuiltIn.Should Contain ${resp} ${router_id}
-
-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}
- ${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}
- 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
- BuiltIn.Log L3 Datapath test across the networks using L3VPN
- ${dst_ipv4_list1} = BuiltIn.Create List ${NET_1_VM_IPV4[1]} @{NET_2_VM_IPV4}
- Test Operations From Vm Instance ${NETWORKS}[0] ${NET_1_VM_IPV4[0]} ${dst_ipv4_list1}
- ${dst_ipv4_list2} = BuiltIn.Create List ${NET_2_VM_IPV4[1]} @{NET_1_VM_IPV4}
- Test Operations From Vm Instance ${NETWORKS}[1] ${NET_2_VM_IPV4[0]} ${dst_ipv4_list2}
- ${dst_ipv6_list1} = BuiltIn.Create List ${NET_1_VM_IPV6[1]} @{NET_2_VM_IPV6}
- Test Operations From Vm Instance ${NETWORKS}[0] ${NET_1_VM_IPV6[0]} ${dst_ipv6_list1}
- ${dst_ipv6_list2} = BuiltIn.Create List ${NET_2_VM_IPV6[1]} @{NET_1_VM_IPV6}
- Test Operations From Vm Instance ${NETWORKS}[1] ${NET_2_VM_IPV6[0]} ${dst_ipv6_list2}
-
-Delete IPv6 Subnet And Check IPv4 datapath
- [Documentation] Delete IPv6 subnet from router and check IPv4 datapath before L3VPN creation.
- ... Then recreate IPv6 subnet.
- BuiltIn.Log Delete extra routes
- OpenStackOperations.Update Router ${ROUTER} ${RT_CLEAR}
- OpenStackOperations.Show Router ${ROUTER}
- BuiltIn.Log Delete IPv6 subnet
- FOR ${PORT} IN @{SUBNETS6}
- 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]}
- 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]}
- 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}
- Test Operations From Vm Instance ${NETWORKS}[0] ${NET_1_VM_IPV4[0]} ${dst_ipv4_list1}
- ${dst_ipv4_list2} = BuiltIn.Create List ${NET_2_VM_IPV4[1]} @{NET_1_VM_IPV4}
- Test Operations From Vm Instance ${NETWORKS}[1] ${NET_2_VM_IPV4[0]} ${dst_ipv4_list2}
-
-Dissociate L3VPN From Routers
- [Documentation] Dissociating router from L3VPN.
- ${router_id} = OpenStackOperations.Get Router Id ${ROUTER}
- VpnOperations.Dissociate VPN to Router routerid=${router_id} vpnid=${VPN_INSTANCE_ID[0]}
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_ID[0]}
- BuiltIn.Should Not Contain ${resp} ${router_id}
-
-Delete Router And Router Interfaces With L3VPN
- [Documentation] Delete associate with L3VPN Router and its Ports.
- # Asscoiate router with L3VPN
- ${router_id} = OpenStackOperations.Get Router Id ${ROUTER}
- VpnOperations.Associate VPN to Router routerid=${router_id} vpnid=${VPN_INSTANCE_ID[0]}
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_ID[0]}
- BuiltIn.Should Contain ${resp} ${router_id}
- # Delete Interface
- FOR ${iface} IN @{SUBNETS4}
- Remove Interface ${ROUTER} ${iface}
- ${subnet_id} = Get Subnet Id ${iface}
- ${rt_port_list} = OpenStackOperations.Show Router Interface ${ROUTER}
- BuiltIn.Should Not Contain ${rt_port_list} ${subnet_id}
- # Delete Router and Interface to the subnets.
- END
- Delete Router ${ROUTER}
- ${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
- # Verify Router Entry removed from L3VPN
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_ID[0]}
- BuiltIn.Should Not Contain ${resp} ${router_id}
- Verify GWMAC Flow Entry Removed From Flow Table On All Compute Nodes
-
-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'
-
-Associate L3VPN To Networks
- [Documentation] Associates L3VPN to networks.
- ${network1_id} = OpenStackOperations.Get Net Id ${NETWORKS}[0]
- ${network2_id} = OpenStackOperations.Get Net Id ${NETWORKS}[1]
- VpnOperations.Associate L3VPN To Network networkid=${network1_id} vpnid=${VPN_INSTANCE_ID[0]}
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_ID[0]}
- BuiltIn.Should Contain ${resp} ${network1_id}
- VpnOperations.Associate L3VPN To Network networkid=${network2_id} vpnid=${VPN_INSTANCE_ID[0]}
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_ID[0]}
- BuiltIn.Should Contain ${resp} ${network2_id}
-
-Dissociate L3VPN From Networks
- [Documentation] Dissociate L3VPN from networks.
- ${network1_id} = OpenStackOperations.Get Net Id ${NETWORKS}[0]
- ${network2_id} = OpenStackOperations.Get Net Id ${NETWORKS}[1]
- VpnOperations.Dissociate L3VPN From Networks networkid=${network1_id} vpnid=${VPN_INSTANCE_ID[0]}
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_ID[0]}
- BuiltIn.Should Not Contain ${resp} ${network1_id}
- VpnOperations.Dissociate L3VPN From Networks networkid=${network2_id} vpnid=${VPN_INSTANCE_ID[0]}
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_ID[0]}
- BuiltIn.Should Not Contain ${resp} ${network2_id}
-
-Delete L3VPN
- [Documentation] Delete L3VPN.
- VpnOperations.VPN Delete L3VPN vpnid=${VPN_INSTANCE_ID[0]}
-
-Create Multiple L3VPN
- [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}
- ${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]}
- BuiltIn.Should Contain ${resp} ${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
- OpenStackOperations.Create Network ${NETWORKS}[0]
- OpenStackOperations.Create Network ${NETWORKS}[1]
- ${NET_LIST} = OpenStackOperations.List Networks
- BuiltIn.Wait Until Keyword Succeeds 3s 1s Utils.Check For Elements At URI ${NETWORK_URL} ${NETWORKS}
- OpenStackOperations.Update Network ${NETWORKS}[0] additional_args=--description ${UPDATE_NETWORK}
- ${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}[1] ${SUBNETS4}[1] ${SUBNETS4_CIDR}[1]
- 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}
- 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}
- 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}
- OpenStackOperations.Update Port ${PORTS}[0] additional_args=--name ${UPDATE_PORT}
- ${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}
- ${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}
- @{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_2_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}
- FOR ${index} IN RANGE 0 ${LOOP_COUNT}
- ${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}
- BuiltIn.Set Suite Variable ${NET_1_VM_IPV6}
- BuiltIn.Set Suite Variable ${NET_2_VM_IPV6}
- ${VM_IPS} = BuiltIn.Create List @{NET_1_VM_IPV4} @{NET_2_VM_IPV4} @{NET_1_VM_IPV6} @{NET_2_VM_IPV6}
- BuiltIn.Set Suite Variable ${VM_IPS}
- OpenStackOperations.Show Debugs @{NET_1_VM_INSTANCES} @{NET_2_VM_INSTANCES}
- OpenStackOperations.Get Suite Debugs
-
-Suite Teardown
- [Documentation] Delete the setup
- BuiltIn.Run Keyword And Ignore Error VpnOperations.VPN Delete L3VPN vpnid=${VPN_INSTANCE_ID}[0]
- BuiltIn.Run Keyword And Ignore Error VpnOperations.VPN Delete L3VPN vpnid=${VPN_INSTANCE_ID}[1]
- BuiltIn.Run Keyword And Ignore Error VpnOperations.VPN Delete L3VPN vpnid=${VPN_INSTANCE_ID}[2]
- OpenStackOperations.OpenStack Suite Teardown
-
-Verify GWMAC Flow Entry On Flow Table
- [Documentation] Verify GWMAC Table, ARP Response table and Dispatcher table.
- [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}
- BuiltIn.Should Not Contain ${dispatcher_table} goto_table:${ARP_RESPONSE_TABLE}
- BuiltIn.Should Contain ${flow_output} table=${GWMAC_TABLE}
- ${gwmac_table} = Get Lines Containing String ${flow_output} table=${GWMAC_TABLE}
- # Verify GWMAC address present in table ${L3_TABLE}
- FOR ${macAdd} IN @{GW_MAC_ADDRS}
- BuiltIn.Should Contain ${gwmac_table} dl_dst=${macAdd} actions=goto_table:${L3_TABLE}
- # Verify Miss entry
- END
- BuiltIn.Should Contain ${gwmac_table} actions=resubmit(,17)
- # Verify ARP_CHECK_TABLE - ${ARP_CHECK_TABLE}
- ${arpchk_table} = Get Lines Containing String ${flow_output} table=${ARP_CHECK_TABLE}
- BuiltIn.Should Match Regexp ${arpchk_table} ${ARP_RESPONSE_REGEX}
- ${match} = BuiltIn.Should Match Regexp ${arpchk_table} ${ARP_REQUEST_REGEX}
- ${groupID} = Split String ${match} separator=:
- BuiltIn.Should Contain ${flow_output} table=${IPV6_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
- BuiltIn.Should Match Regexp ${icmp_ipv6_flows} ${rule}
- END
- VpnOperations.Verify ARP REQUEST in groupTable ${group_output} ${groupID[1]}
- # Verify ARP_RESPONSE_TABLE - ${ARP_RESPONSE_TABLE}
- BuiltIn.Should Contain ${flow_output} table=${ARP_RESPONSE_TABLE}
- ${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
- BuiltIn.Should Match Regexp ${arpResponder_table} ${ARP_RESPONSE_IP_MAC_REGEX}
- END
+++ /dev/null
-*** Settings ***
-Documentation Test suite to validate subnet routing functionality for hidden IPv4/IPv6 address 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/DevstackUtils.robot
-Resource ../../../libraries/OpenStackOperations.robot
-Resource ../../../libraries/OVSDB.robot
-Resource ../../../libraries/SetupUtils.robot
-Resource ../../../libraries/Tcpdump.robot
-Resource ../../../libraries/Utils.robot
-Resource ../../../variables/Variables.robot
-Resource ../../../variables/netvirt/Variables.robot
-Resource ../../../libraries/VpnOperations.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} vpndssr_sg
-@{NETWORKS} vpndssr_net_1 vpndssr_net_2
-@{SUBNETS4} vpndssr_ipv4_sub_1 vpndssr_ipv4_sub_2
-@{SUBNETS6} vpndssr_ipv6_sub_1 vpndssr_ipv6_sub_2
-@{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} vpndssr_port_1 vpndssr_port_2 vpndssr_port_3 vpndssr_port_4
-@{NET_1_VMS} vpndssr_net_1_vm_1 vpndssr_net_1_vm_2
-@{NET_2_VMS} vpndssr_net_2_vm_1 vpndssr_net_2_vm_2
-@{EXTRA_NW_IPV4} 30.1.1.209 30.1.1.210 40.1.1.209 40.1.1.210 40.1.1.211 30.1.1.211
-@{EXTRA_NW_IPV6}
-... 2001:db5:0:2::10
-... 2001:db5:0:2::20
-... 2001:db5:0:3::10
-... 2001:db5:0:3::20
-... 2001:db5:0:3::30
-... 2001:db5:0:2::30
-@{EXTRA_NW_SUBNET_IPv4} 30.1.1.0/24 40.1.1.0/24
-@{EXTRA_NW_SUBNET_IPv6} 2001:db5:0:2::/64 2001:db5:0:3::/64
-${ROUTER} vpn_router_dualstack_subnet
-${UPDATE_NETWORK} update_network_dualstack_subnet
-${UPDATE_SUBNET} update_subnet_dualstack_subnet
-${UPDATE_PORT} update_port_dualstack_subnet
-@{VPN_INSTANCE_ID}
-... 1bc8cd92-48ca-49b5-94e1-b2921a261661
-... 1bc8cd92-48ca-49b5-94e1-b2921a261662
-... 1bc8cd92-48ca-49b5-94e1-b2921a261663
-@{VPN_NAME} vpn1_dualstack_subnet vpn2_dualstack_subnet vpn3_dualstack_subnet
-@{RDS} ["2506:2"] ["2606:2"] ["2706:2"]
-${LOOP_COUNT} 4
-@{TABLE_NO_21} 21
-${DUMP_FLOWS} sudo ovs-ofctl dump-flows br-int -O Openflow13
-
-
-*** 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]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
- ${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} ${PING_REGEXP}
- ${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} ${PING_REGEXP}
- ${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} ${PING_REGEXP}
-
-Create L3VPN
- [Documentation] 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}
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_ID}[0]
- BuiltIn.Should Contain ${resp} ${VPN_INSTANCE_ID}[0]
-
-Associate L3VPN To Routers
- [Documentation] Associating router to L3VPN.
- ${router_id} = OpenStackOperations.Get Router Id ${ROUTER}
- VpnOperations.Associate VPN to Router routerid=${router_id} vpnid=${VPN_INSTANCE_ID}[0]
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_ID}[0]
- BuiltIn.Should Contain ${resp} ${router_id}
-
-Configure Extra IPv4/IPv6 Addresss On Interface For Subnet Routing
- [Documentation] Extra IPv4/IPv6 Address configuration on Interfaces
- ${VM_IPV6} = BuiltIn.Create List
- ... ${net_1_vm_ipv6}[0]
- ... ${net_1_vm_ipv6}[1]
- ... ${net_2_vm_ipv6}[0]
- ... ${net_2_vm_ipv6}[1]
- ${VM_IPV4} = BuiltIn.Create List
- ... ${net_1_vm_ipv4}[0]
- ... ${net_1_vm_ipv4}[1]
- ... ${net_2_vm_ipv4}[0]
- ... ${net_2_vm_ipv4}[1]
- FOR ${index} IN RANGE 0 ${LOOP_COUNT}
- OpenStackOperations.Execute Command on VM Instance
- ... ${network_list}[${index}]
- ... ${VM_IPV6}[${index}]
- ... sudo ip -6 addr add ${EXTRA_NW_IPV6}[${index}]/64 dev eth0; sudo ifconfig eth0 allmulti; ip -6 a
- END
- FOR ${index} IN RANGE 0 ${LOOP_COUNT}
- OpenStackOperations.Execute Command on VM Instance
- ... ${network_list}[${index}]
- ... ${VM_IPV4}[${index}]
- ... sudo ifconfig eth0:1 ${EXTRA_NW_IPV4}[${index}] netmask 255.255.255.0 up; ip a
- END
- BuiltIn.Set Suite Variable ${VM_IPV6}
- BuiltIn.Set Suite Variable ${VM_IPV4}
- BuiltIn.Should Not Contain ${VM_IPV6} None
- BuiltIn.Should Not Contain ${VM_IPV4} None
-
-Verify Data Traffic On Configured Subnet Ipv4/IPv6 Address
- [Documentation] Check Dual Stack data path verifcation within and across network.
- BuiltIn.Wait Until Keyword Succeeds 10x 30s Verify Ipv4 Data Traffic
- BuiltIn.Wait Until Keyword Succeeds 10x 30s Verify Ipv6 Data Traffic
-
-Dissociate L3VPN From Routers and verify traffic
- [Documentation] Dissociating router from L3VPN and check data path verification
- ${router_id} = OpenStackOperations.Get Router Id ${ROUTER}
- VpnOperations.Dissociate VPN to Router routerid=${router_id} vpnid=${VPN_INSTANCE_ID}[0]
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_ID}[0]
- BuiltIn.Should Not Contain ${resp} ${router_id}
- BuiltIn.Wait Until Keyword Succeeds 10x 30s Verify Ipv4 Data No Traffic
- BuiltIn.Wait Until Keyword Succeeds 10x 30s Verify Ipv6 Data No Traffic
-
-Associate L3VPN Again To Routers and verify traffic
- [Documentation] Associating router to L3VPN and check data path verification
- ${router_id} = OpenStackOperations.Get Router Id ${ROUTER}
- VpnOperations.Associate VPN to Router routerid=${router_id} vpnid=${VPN_INSTANCE_ID}[0]
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_ID}[0]
- BuiltIn.Should Contain ${resp} ${router_id}
- BuiltIn.Wait Until Keyword Succeeds 10x 30s Verify Ipv4 Data Traffic
- BuiltIn.Wait Until Keyword Succeeds 10x 30s Verify Ipv6 Data Traffic
-
-Delete the configured extra IPv4/IPv6 Addresss and verify traffic
- [Documentation] Delete IPv4/IPv6 Address configuration on Interfaces and verify traffic
- FOR ${index} IN RANGE 0 ${LOOP_COUNT}
- OpenStackOperations.Execute Command on VM Instance
- ... ${network_list}[${index}]
- ... ${VM_IPV6}[${index}]
- ... sudo ip -6 addr del ${EXTRA_NW_IPV6}[${index}]/64 dev eth0
- END
- FOR ${index} IN RANGE 0 ${LOOP_COUNT}
- OpenStackOperations.Execute Command on VM Instance
- ... ${network_list}[${index}]
- ... ${VM_IPV4}[${index}]
- ... sudo ifconfig eth0:1 down
- END
- BuiltIn.Wait Until Keyword Succeeds 10x 30s Verify Ipv4 Data No Traffic
- BuiltIn.Wait Until Keyword Succeeds 10x 30s Verify Ipv6 Data No Traffic
- BuiltIn.Wait Until Keyword Succeeds 10x 40s Verify Table 21 for No VPN Routes
-
-Configure Again Extra IPv4/IPv6 Addresss On Interface For Subnet Routing
- [Documentation] Extra IPv4/IPv6 Address configuration on Interfaces
- FOR ${index} IN RANGE 0 ${LOOP_COUNT}
- OpenStackOperations.Execute Command on VM Instance
- ... ${network_list}[${index}]
- ... ${VM_IPV6}[${index}]
- ... sudo ip -6 addr add ${EXTRA_NW_IPV6}[${index}]/64 dev eth0; sudo ifconfig eth0 allmulti; ip -6 a
- END
- FOR ${index} IN RANGE 0 ${LOOP_COUNT}
- OpenStackOperations.Execute Command on VM Instance
- ... ${network_list}[${index}]
- ... ${VM_IPV4}[${index}]
- ... sudo ifconfig eth0:1 ${EXTRA_NW_IPV4}[${index}] netmask 255.255.255.0 up; ip a
- END
- BuiltIn.Wait Until Keyword Succeeds 10x 30s Verify Ipv4 Data Traffic
- BuiltIn.Wait Until Keyword Succeeds 10x 30s Verify Ipv6 Data Traffic
-
-Remove Interface From Router And Verify Traffic
- [Documentation] Remove subnet from router and check data path verification
- ${router_id} = OpenStackOperations.Get Router Id ${ROUTER}
- FOR ${interface} IN @{SUBNETS4}
- OpenStackOperations.Remove Interface ${ROUTER} ${INTERFACE}
- END
- ${interface_output} = OpenStackOperations.Show Router Interface ${ROUTER}
- FOR ${interface} IN @{SUBNETS6}
- OpenStackOperations.Remove Interface ${ROUTER} ${INTERFACE}
- END
- ${interface_output} = OpenStackOperations.Show Router Interface ${ROUTER}
- FOR ${interface} IN @{SUBNETS4}
- ${subnet_id} = OpenStackOperations.Get Subnet Id ${INTERFACE}
- BuiltIn.Should Not Contain ${interface_output} ${subnet_id}
- END
- FOR ${interface} IN @{SUBNETS6}
- ${subnet_id} = OpenStackOperations.Get Subnet Id ${INTERFACE}
- BuiltIn.Should Not Contain ${interface_output} ${subnet_id}
- END
- BuiltIn.Wait Until Keyword Succeeds 10x 30s Verify Ipv4 Data No Traffic
-
-Add Interface To Router And Verify Traffic
- [Documentation] Add interface router to again and check data path verification
- FOR ${interface} IN @{SUBNETS4}
- OpenStackOperations.Add Router Interface ${ROUTER} ${interface}
- END
- FOR ${interface} IN @{SUBNETS6}
- OpenStackOperations.Add Router Interface ${ROUTER} ${interface}
- END
- BuiltIn.Wait Until Keyword Succeeds 10x 60s Verify Ipv4 Data Traffic
- BuiltIn.Wait Until Keyword Succeeds 10x 60s Verify Ipv6 Data Traffic
-
-Delete L3VPN
- [Documentation] Delete L3VPN.
- VpnOperations.VPN Delete L3VPN vpnid=${VPN_INSTANCE_ID}[0]
- BuiltIn.Wait Until Keyword Succeeds 10x 30s Verify Ipv4 Data No Traffic
- BuiltIn.Wait Until Keyword Succeeds 10x 30s Verify Ipv6 Data No Traffic
-
-ReCreate L3VPN and associate L3VPN To Routers and verify traffic
- [Documentation] Recreate L3VPN and associate L3VPN To Routers and verify ipv4/ipv6 traffic
- ${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}
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_ID}[0]
- BuiltIn.Should Contain ${resp} ${VPN_INSTANCE_ID}[0]
- ${router_id} = OpenStackOperations.Get Router Id ${ROUTER}
- VpnOperations.Associate VPN to Router routerid=${router_id} vpnid=${VPN_INSTANCE_ID}[0]
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_ID}[0]
- BuiltIn.Should Contain ${resp} ${router_id}
- BuiltIn.Wait Until Keyword Succeeds 10x 30s Verify Ipv4 Data Traffic
- BuiltIn.Wait Until Keyword Succeeds 10x 30s Verify Ipv6 Data Traffic
-
-
-*** Keywords ***
-Suite Setup
- [Documentation] Create basic setup for feature.Create two network,subnet,four ports and four VMs
- VpnOperations.Basic Suite Setup
- OpenStackOperations.Create Network ${NETWORKS}[0]
- OpenStackOperations.Create Network ${NETWORKS}[1]
- BuiltIn.Wait Until Keyword Succeeds 3s 1s Utils.Check For Elements At URI ${NETWORK_URL} ${NETWORKS}
- OpenStackOperations.Update Network ${NETWORKS}[0] additional_args=--description ${UPDATE_NETWORK}
- ${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}[1] ${SUBNETS4}[1] ${SUBNETS4_CIDR}[1]
- OpenStackOperations.Create SubNet
- ... ${NETWORKS}[1]
- ... ${SUBNETS6}[1]
- ... ${SUBNETS6_CIDR}[1]
- ... ${SUBNET_ADDITIONAL_ARGS}
- 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 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}
- FOR ${port} IN @{SUBNETS4}
- OpenStackOperations.Add Router Interface ${ROUTER} ${port}
- END
- ${interface_output} = OpenStackOperations.Show Router Interface ${ROUTER}
- FOR ${port} IN @{SUBNETS6}
- OpenStackOperations.Add Router Interface ${ROUTER} ${port}
- END
- ${interface_output} = OpenStackOperations.Show Router Interface ${ROUTER}
- Create Allow All SecurityGroup ${SECURITY_GROUP} IPv4 True
- ${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]
- ${network_list} = BuiltIn.Create List ${NETWORKS}[0] ${NETWORKS}[0] ${NETWORKS}[1] ${NETWORKS}[1]
- BuiltIn.Set Suite Variable ${network_list}
- FOR ${index} IN RANGE 0 ${LOOP_COUNT}
- OpenStackOperations.Create Port
- ... ${network_list}[${index}]
- ... ${PORTS}[${index}]
- ... sg=${SECURITY_GROUP}
- ... additional_args=${allowed_address_pairs_args}
- END
- BuiltIn.Wait Until Keyword Succeeds 3s 1s Utils.Check For Elements At URI ${PORT_URL} ${PORTS}
- OpenStackOperations.Update Port ${PORTS}[0] additional_args=--name ${UPDATE_PORT}
- ${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_VMS}[0]
- ... ${OS_CMP1_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${PORTS}[1]
- ... ${NET_1_VMS}[1]
- ... ${OS_CMP2_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${PORTS}[2]
- ... ${NET_2_VMS}[0]
- ... ${OS_CMP1_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${PORTS}[3]
- ... ${NET_2_VMS}[1]
- ... ${OS_CMP2_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- 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_VMS}
- @{net_2_vm_ipv4} ${net_2_dhcp_ipv4} = OpenStackOperations.Get VM IPs @{NET_2_VMS}
- BuiltIn.Should Not Contain ${net_1_vm_ipv4} None
- BuiltIn.Should Not Contain ${net_2_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_VMS}
- ... ${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_VMS}
- ... ${NETWORKS}[1]
- ... ${prefix_net20}
- ${net_1_vm_ipv6} = OpenStackOperations.Collect VM IPv6 SLAAC Addresses
- ... false
- ... ${NET_1_VMS}
- ... ${NETWORKS}[0]
- ... ${prefix_net10}
- ${net_2_vm_ipv6} = OpenStackOperations.Collect VM IPv6 SLAAC Addresses
- ... false
- ... ${NET_2_VMS}
- ... ${NETWORKS}[1]
- ... ${prefix_net20}
- ${loop_count} = Get Length ${NET_1_VMS}
- FOR ${index} IN RANGE 0 ${loop_count}
- ${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_VMS}[${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_VMS}[${index}] 30s
- END
- END
- BuiltIn.Set Suite Variable ${net_1_vm_ipv4}
- BuiltIn.Set Suite Variable ${net_2_vm_ipv4}
- BuiltIn.Set Suite Variable ${net_1_vm_ipv6}
- BuiltIn.Set Suite Variable ${net_2_vm_ipv6}
- OpenStackOperations.Show Debugs @{NET_1_VMS} @{NET_2_VMS}
- OpenStackOperations.Get Suite Debugs
-
-Verify Ipv4 Data Traffic
- [Documentation] Check Ipv4 data path verification within and across network
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${net_1_vm_ipv4}[0]
- ... ping -c 3 ${EXTRA_NW_IPV4}[1]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${net_1_vm_ipv4}[0]
- ... ping -c 3 ${EXTRA_NW_IPV4}[3]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${net_1_vm_ipv4}[0]
- ... ping -c 3 ${EXTRA_NW_IPV4}[2]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
- ${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} ${PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${net_1_vm_ipv4}[1]
- ... ping -c 3 ${EXTRA_NW_IPV4}[3]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${net_1_vm_ipv4}[1]
- ... ping -c 3 ${EXTRA_NW_IPV4}[2]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
- ${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} ${PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[1]
- ... ${net_2_vm_ipv4}[0]
- ... ping -c 3 ${EXTRA_NW_IPV4}[1]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[1]
- ... ${net_2_vm_ipv4}[0]
- ... ping -c 3 ${EXTRA_NW_IPV4}[2]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[1]
- ... ${net_2_vm_ipv4}[1]
- ... ping -c 3 ${EXTRA_NW_IPV4}[0]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[1]
- ... ${net_2_vm_ipv4}[1]
- ... ping -c 3 ${EXTRA_NW_IPV4}[1]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[1]
- ... ${net_2_vm_ipv4}[1]
- ... ping -c 3 ${EXTRA_NW_IPV4}[3]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
-
-Verify Ipv4 Data No Traffic
- [Documentation] Check Ipv4 data path verification within and across network
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${net_1_vm_ipv4}[0]
- ... ping -c 3 ${EXTRA_NW_IPV4}[3]
- BuiltIn.Should Contain ${output} ${NO_PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${net_1_vm_ipv4}[0]
- ... ping -c 3 ${EXTRA_NW_IPV4}[2]
- BuiltIn.Should Contain ${output} ${NO_PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${net_1_vm_ipv4}[1]
- ... ping -c 3 ${EXTRA_NW_IPV4}[3]
- BuiltIn.Should Contain ${output} ${NO_PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${net_1_vm_ipv4}[1]
- ... ping -c 3 ${EXTRA_NW_IPV4}[2]
- BuiltIn.Should Contain ${output} ${NO_PING_REGEXP}
- ${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} ${NO_PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[1]
- ... ${net_2_vm_ipv4}[0]
- ... ping -c 3 ${EXTRA_NW_IPV4}[1]
- BuiltIn.Should Contain ${output} ${NO_PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[1]
- ... ${net_2_vm_ipv4}[1]
- ... ping -c 3 ${EXTRA_NW_IPV4}[0]
- BuiltIn.Should Contain ${output} ${NO_PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[1]
- ... ${net_2_vm_ipv4}[1]
- ... ping -c 3 ${EXTRA_NW_IPV4}[1]
- BuiltIn.Should Contain ${output} ${NO_PING_REGEXP}
-
-Verify Ipv6 Data Traffic
- [Documentation] Check Ipv6 data path verification within and across network
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${net_1_vm_ipv6}[0]
- ... ping6 -c 3 ${EXTRA_NW_IPV6}[1]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${net_1_vm_ipv6}[0]
- ... ping6 -c 3 ${EXTRA_NW_IPV6}[3]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${net_1_vm_ipv6}[0]
- ... ping6 -c 3 ${EXTRA_NW_IPV6}[2]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
- ${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} ${PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${net_1_vm_ipv6}[1]
- ... ping6 -c 3 ${EXTRA_NW_IPV6}[3]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${net_1_vm_ipv6}[1]
- ... ping6 -c 3 ${EXTRA_NW_IPV6}[2]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
- ${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} ${PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[1]
- ... ${net_2_vm_ipv6}[0]
- ... ping6 -c 3 ${EXTRA_NW_IPV6}[1]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[1]
- ... ${net_2_vm_ipv6}[0]
- ... ping6 -c 3 ${EXTRA_NW_IPV6}[2]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[1]
- ... ${net_2_vm_ipv6}[1]
- ... ping6 -c 3 ${EXTRA_NW_IPV6}[0]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[1]
- ... ${net_2_vm_ipv6}[1]
- ... ping6 -c 3 ${EXTRA_NW_IPV6}[1]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[1]
- ... ${net_2_vm_ipv6}[1]
- ... ping6 -c 3 ${EXTRA_NW_IPV6}[3]
- BuiltIn.Should Contain ${output} ${PING_REGEXP}
-
-Verify Ipv6 Data No Traffic
- [Documentation] Check Ipv6 data path verification within and across network
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${net_1_vm_ipv6}[0]
- ... ping6 -c 3 ${EXTRA_NW_IPV6}[3]
- BuiltIn.Should Contain ${output} ${NO_PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${net_1_vm_ipv6}[0]
- ... ping6 -c 3 ${EXTRA_NW_IPV6}[2]
- BuiltIn.Should Contain ${output} ${NO_PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${net_1_vm_ipv6}[1]
- ... ping6 -c 3 ${EXTRA_NW_IPV6}[3]
- BuiltIn.Should Contain ${output} ${NO_PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${net_1_vm_ipv6}[1]
- ... ping6 -c 3 ${EXTRA_NW_IPV6}[2]
- BuiltIn.Should Contain ${output} ${NO_PING_REGEXP}
- ${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} ${NO_PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[1]
- ... ${net_2_vm_ipv6}[0]
- ... ping6 -c 3 ${EXTRA_NW_IPV6}[1]
- BuiltIn.Should Contain ${output} ${NO_PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[1]
- ... ${net_2_vm_ipv6}[1]
- ... ping6 -c 3 ${EXTRA_NW_IPV6}[0]
- BuiltIn.Should Contain ${output} ${NO_PING_REGEXP}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[1]
- ... ${net_2_vm_ipv6}[1]
- ... ping6 -c 3 ${EXTRA_NW_IPV6}[1]
- BuiltIn.Should Contain ${output} ${NO_PING_REGEXP}
-
-Verify Table 21 for VPN Routes
- FOR ${index} IN RANGE 0 ${LOOP_COUNT}
- OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${TABLE_NO_21}
- ... True
- ... ${EMPTY}
- ... ipv6_dst=${EXTRA_NW_IPV6}[${index}]
- END
- FOR ${index} IN RANGE 0 ${LOOP_COUNT}
- OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${TABLE_NO_21}
- ... True
- ... ${EMPTY}
- ... ipv6_dst=${EXTRA_NW_IPV4}[${index}]
- END
-
-Verify Table 21 for No VPN Routes
- FOR ${index} IN RANGE 0 ${LOOP_COUNT}
- OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${TABLE_NO_21}
- ... False
- ... ${EMPTY}
- ... ipv6_dst=${EXTRA_NW_IPV6}[${index}]
- END
- FOR ${index} IN RANGE 0 ${LOOP_COUNT}
- OVSDB.Verify Dump Flows For Specific Table
- ... ${OS_CMP1_IP}
- ... ${TABLE_NO_21}
- ... False
- ... ${EMPTY}
- ... ipv6_dst=${EXTRA_NW_IPV4}[${index}]
- END
-
-Suite Teardown
- [Documentation] Delete the setup
- BuiltIn.Run Keyword And Ignore Error VpnOperations.VPN Delete L3VPN vpnid=${VPN_INSTANCE_ID}[0]
- BuiltIn.Run Keyword And Ignore Error VpnOperations.VPN Delete L3VPN vpnid=${VPN_INSTANCE_ID}[1]
- BuiltIn.Run Keyword And Ignore Error VpnOperations.VPN Delete L3VPN vpnid=${VPN_INSTANCE_ID}[2]
- OpenStackOperations.OpenStack Suite Teardown
+++ /dev/null
-*** Settings ***
-Documentation Test suite to validate 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 OperatingSystem
-Library RequestsLibrary
-Resource ../../../libraries/CompareStream.robot
-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} vpn6_sg
-@{NETWORKS} vpn6_net_1 vpn6_net_2
-@{SUBNETS} vpn6_sub_1 vpn6_sub_2
-@{SUBNET_CIDRS} 2001:db8:0:2::/64 2001:db8:0:3::/64
-@{PORTS} vpn6_net_1_port_1 vpn6_net_1_port_2 vpn6_net_2_port_1 vpn6_net_2_port_2
-@{NET_1_VMS} vpn6_net_1_vm_1 vpn6_net_1_vm_2
-@{NET_2_VMS} vpn6_net_2_vm_1 vpn6_net_2_vm_2
-${ROUTER} vpn6_router
-@{EXTRA_NW_IP} 2001:db9:cafe:d::10 2001:db9:abcd:d::20
-@{EXTRA_NW_SUBNET} 2001:db9:cafe:d::/64 2001:db9:abcd:d::/64
-${UPDATE_NETWORK} UpdateNetworkV6
-${UPDATE_SUBNET} UpdateSubnetV6
-${UPDATE_PORT} UpdatePortV6
-@{VPN_INSTANCE_IDS}
-... 4ae8cd92-48ca-49b5-94e1-b2921a261661
-... 4ae8cd92-48ca-49b5-94e1-b2921a261662
-... 4ae8cd92-48ca-49b5-94e1-b2921a261663
-@{VPN_NAMES} vpn6_1 vpn6_2 vpn6_3
-@{RDS} ["2206:2"] ["2306:2"] ["2406:2"]
-
-
-*** Test Cases ***
-Check ELAN Datapath Traffic Within The Networks
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${VM_IP_NET10}[0]
- ... ping6 -c 3 ${VM_IP_NET10}[1]
- BuiltIn.Should Contain ${output} 64 bytes
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[1]
- ... ${VM_IP_NET20}[0]
- ... ping6 -c 3 ${VM_IP_NET20}[1]
- BuiltIn.Should Contain ${output} 64 bytes
-
-Check L3_Datapath Traffic Across Networks With Router
- BuiltIn.Log Verification of FIB Entries and Flow
- @{tcpdump_conn_ids} = OpenStackOperations.Start Packet Capture On Nodes
- ... tcpdump_vpn6
- ... ${EMPTY}
- ... @{OS_ALL_IPS}
- ${vm_ips} = BuiltIn.Create List @{VM_IP_NET10} @{VM_IP_NET20}
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 10s
- ... Utils.Check For Elements At URI
- ... ${FIB_ENTRY_URL}
- ... ${vm_ips}
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 10s
- ... VpnOperations.Verify Flows Are Present For L3VPN
- ... ${OS_CMP1_IP}
- ... ${VM_IP_NET10}
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 10s
- ... VpnOperations.Verify Flows Are Present For L3VPN
- ... ${OS_CMP1_IP}
- ... ${VM_IP_NET20}
- BuiltIn.Wait Until Keyword Succeeds 30s 10s VpnOperations.Verify GWMAC Entry On ODL ${GWMAC_ADDRS}
- Verify GWMAC Flow Entry On Flow Table On All Compute Nodes ipv6
- ${dst_ip_list} = BuiltIn.Create List ${VM_IP_NET10}[1] @{VM_IP_NET20}
- OpenStackOperations.Test Operations From Vm Instance ${NETWORKS}[0] ${VM_IP_NET10}[0] ${dst_ip_list}
- ${dst_ip_list} = BuiltIn.Create List ${VM_IP_NET20}[1] @{VM_IP_NET10}
- OpenStackOperations.Test Operations From Vm Instance ${NETWORKS}[1] ${VM_IP_NET20}[0] ${dst_ip_list}
- [Teardown] VpnOperations.Test Teardown With Tcpdump Stop ${tcpdump_conn_ids}
-
-Add Multiple Extra Routes And Check Datapath Before L3VPN Creation
- ${CONFIG_EXTRA_ROUTE_IP1} = BuiltIn.Catenate sudo ip -6 addr add ${EXTRA_NW_IP}[0]/64 dev eth0
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${VM_IP_NET10}[0]
- ... ${CONFIG_EXTRA_ROUTE_IP1}
- ${output} = OpenStackOperations.Execute Command on VM Instance ${NETWORKS}[0] ${VM_IP_NET10}[0] ip -6 a
- ${CONFIG_EXTRA_ROUTE_IP2} = BuiltIn.Catenate sudo ip -6 addr add ${EXTRA_NW_IP}[1]/64 dev eth0
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${VM_IP_NET10}[0]
- ... ${CONFIG_EXTRA_ROUTE_IP2}
- ${output} = OpenStackOperations.Execute Command on VM Instance ${NETWORKS}[0] ${VM_IP_NET10}[0] ip -6 a
- ${EXT_RT1} = Set Variable destination=${EXTRA_NW_SUBNET}[0],gateway=${VM_IP_NET10}[0]
- ${EXT_RT2} = Set Variable destination=${EXTRA_NW_SUBNET}[1],gateway=${VM_IP_NET10}[0]
- ${cmd} = BuiltIn.Catenate ${RT_OPTIONS} ${EXT_RT1} ${RT_OPTIONS} ${EXT_RT2}
- OpenStackOperations.Update Router ${ROUTER} ${cmd}
- OpenStackOperations.Show Router ${ROUTER}
- ${vm_ips} = BuiltIn.Create List @{EXTRA_NW_SUBNET}
- BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 10s
- ... Utils.Check For Elements At URI
- ... ${FIB_ENTRY_URL}
- ... ${vm_ips}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${VM_IP_NET10}[1]
- ... ping6 -c 3 ${EXTRA_NW_IP}[1]
- BuiltIn.Should Contain ${output} 64 bytes
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[1]
- ... ${VM_IP_NET20}[1]
- ... ping6 -c 3 ${EXTRA_NW_IP}[1]
- BuiltIn.Should Contain ${output} 64 bytes
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${VM_IP_NET10}[1]
- ... ping6 -c 3 ${EXTRA_NW_IP}[0]
- BuiltIn.Should Contain ${output} 64 bytes
-
-Delete Extra Route
- OpenStackOperations.Update Router ${ROUTER} ${RT_CLEAR}
- OpenStackOperations.Show Router ${ROUTER}
-
-Delete And Recreate Extra Route
- [Documentation] Recreate multiple extra route and check data path before L3VPN creation
- ${CONFIG_EXTRA_ROUTE_IP1} = BuiltIn.Catenate sudo ip -6 addr add ${EXTRA_NW_IP}[1]/64 dev eth0
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${VM_IP_NET10}[0]
- ... ${CONFIG_EXTRA_ROUTE_IP1}
- ${EXT_RT1} = Set Variable destination=${EXTRA_NW_SUBNET}[0],gateway=${VM_IP_NET10}[0]
- ${cmd} = BuiltIn.Catenate ${RT_OPTIONS} ${EXT_RT1}
- OpenStackOperations.Update Router ${ROUTER} ${cmd}
- OpenStackOperations.Show Router ${ROUTER}
- ${output} = OpenStackOperations.Execute Command on VM Instance
- ... ${NETWORKS}[0]
- ... ${VM_IP_NET10}[1]
- ... ping6 -c 3 ${EXTRA_NW_IP}[0]
- BuiltIn.Should Contain ${output} 64 bytes
- # clear off extra-routes before the next set of tests
- [Teardown] BuiltIn.Run Keywords OpenStackOperations.Update Router ${ROUTER} ${RT_CLEAR}
- ... AND OpenStackOperations.Show Router ${ROUTER}
- ... AND OpenStackOperations.Get Test Teardown Debugs
-
-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_IDS}[0]
- ... name=${VPN_NAMES}[0]
- ... rd=${RDS}[0]
- ... exportrt=${RDS}[0]
- ... importrt=${RDS}[0]
- ... tenantid=${tenant_id}
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_IDS}[0]
- BuiltIn.Should Contain ${resp} ${VPN_INSTANCE_IDS}[0]
-
-Associate L3VPN To Routers
- ${router_id} = OpenStackOperations.Get Router Id ${ROUTER}
- VpnOperations.Associate VPN to Router routerid=${router_id} vpnid=${VPN_INSTANCE_IDS}[0]
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_IDS}[0]
- BuiltIn.Should Contain ${resp} ${router_id}
-
-Verify L3VPN Datapath With Router Association
- BuiltIn.Log Verify VPN interfaces, FIB entries and Flow table
- ${vm_ips} = BuiltIn.Create List @{VM_IP_NET10} @{VM_IP_NET20}
- CompareStream.Run_Keyword_If_Less_Than_Magnesium
- ... BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 10s
- ... Utils.Check For Elements At URI
- ... ${VPN_IFACES_URL}
- ... ${vm_ips}
- CompareStream.Run_Keyword_If_At_Least_Magnesium
- ... BuiltIn.Wait Until Keyword Succeeds
- ... 30s
- ... 10s
- ... Utils.Check For Elements At URI
- ... ${VPN_INST_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}
- Verify Flows Are Present For L3VPN On All Compute Nodes ${vm_ips}
- BuiltIn.Wait Until Keyword Succeeds 30s 10s VpnOperations.Verify GWMAC Entry On ODL ${GWMAC_ADDRS}
- Verify GWMAC Flow Entry On Flow Table On All Compute Nodes ipv6
- BuiltIn.Log Check datapath from network1 to network2
- ${dst_ip_list} = BuiltIn.Create List ${VM_IP_NET10}[1] @{VM_IP_NET20}
- OpenStackOperations.Test Operations From Vm Instance ${NETWORKS}[0] ${VM_IP_NET10}[0] ${dst_ip_list}
- BuiltIn.Log Check datapath from network2 to network1
- ${dst_ip_list} = BuiltIn.Create List ${VM_IP_NET20}[1] @{VM_IP_NET10}
- OpenStackOperations.Test Operations From Vm Instance ${NETWORKS}[1] ${VM_IP_NET20}[0] ${dst_ip_list}
-
-Dissociate L3VPN From Routers
- ${router_id} = OpenStackOperations.Get Router Id ${ROUTER}
- VpnOperations.Dissociate VPN to Router routerid=${router_id} vpnid=${VPN_INSTANCE_IDS}[0]
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_IDS}[0]
- BuiltIn.Should Not Contain ${resp} ${router_id}
-
-Delete Router And Router Interfaces With L3VPN
- ${router_id} = OpenStackOperations.Get Router Id ${ROUTER}
- VpnOperations.Associate VPN to Router routerid=${router_id} vpnid=${VPN_INSTANCE_IDS}[0]
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_IDS}[0]
- BuiltIn.Should Contain ${resp} ${router_id}
- FOR ${INTERFACE} IN @{SUBNETS}
- OpenStackOperations.Remove Interface ${ROUTER} ${INTERFACE}
- END
- ${interface_output} = OpenStackOperations.Show Router Interface ${ROUTER}
- FOR ${INTERFACE} IN @{SUBNETS}
- ${subnet_id} = OpenStackOperations.Get Subnet Id ${INTERFACE}
- BuiltIn.Should Not Contain ${interface_output} ${subnet_id}
- END
- OpenStackOperations.Delete Router ${ROUTER}
- ${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
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_IDS}[0]
- BuiltIn.Should Not Contain ${resp} ${router_id}
- Verify GWMAC Flow Entry Removed From Flow Table On All Compute Nodes
-
-Delete Router With NonExistentRouter Name
- ${result} = Process.Run Process openstack router delete nonExistentRouter shell=True
- BuiltIn.Log ${result.stdout}
- BuiltIn.Log ${result.stderr}
- BuiltIn.Should Be True '${result.rc}' == '1'
- BuiltIn.Should Match Regexp
- ... ${result.stderr}
- ... Failed to delete router with name or ID 'nonExistentRouter': No Router found for nonExistentRouter
-
-Delete L3VPN
- VpnOperations.VPN Delete L3VPN vpnid=${VPN_INSTANCE_IDS}[0]
-
-Create Multiple L3VPN
- ${net_id} = Get Net Id ${NETWORKS}[0]
- ${tenant_id} = Get Tenant ID From Network ${net_id}
- VpnOperations.VPN Create L3VPN
- ... vpnid=${VPN_INSTANCE_IDS}[0]
- ... name=${VPN_NAMES}[0]
- ... rd=${RDS}[0]
- ... exportrt=${RDS}[0]
- ... importrt=${RDS}[0]
- ... tenantid=${tenant_id}
- VpnOperations.VPN Create L3VPN
- ... vpnid=${VPN_INSTANCE_IDS}[1]
- ... name=${VPN_NAMES}[1]
- ... rd=${RDS}[1]
- ... exportrt=${RDS}[1]
- ... importrt=${RDS}[1]
- ... tenantid=${tenant_id}
- VpnOperations.VPN Create L3VPN
- ... vpnid=${VPN_INSTANCE_IDS}[2]
- ... name=${VPN_NAMES}[2]
- ... rd=${RDS}[2]
- ... exportrt=${RDS}[2]
- ... importrt=${RDS}[2]
- ... tenantid=${tenant_id}
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_IDS}[0]
- BuiltIn.Should Contain ${resp} ${VPN_INSTANCE_IDS}[0]
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_IDS}[1]
- BuiltIn.Should Contain ${resp} ${VPN_INSTANCE_IDS}[1]
- ${resp} = VpnOperations.VPN Get L3VPN vpnid=${VPN_INSTANCE_IDS}[2]
- BuiltIn.Should Contain ${resp} ${VPN_INSTANCE_IDS}[2]
-
-
-*** Keywords ***
-Suite Setup
- VpnOperations.Basic Suite Setup
- OpenStackOperations.Create Network ${NETWORKS}[0]
- OpenStackOperations.Create Network ${NETWORKS}[1]
- BuiltIn.Wait Until Keyword Succeeds 3s 1s Utils.Check For Elements At URI ${NETWORK_URL} ${NETWORKS}
- OpenStackOperations.Update Network ${NETWORKS}[0] additional_args=--description ${UPDATE_NETWORK}
- ${output} = OpenStackOperations.Show Network ${NETWORKS}[0]
- BuiltIn.Should Contain ${output} ${UPDATE_NETWORK}
- ${net1_additional_args} = BuiltIn.Catenate
- ... --ip-version=6 --ipv6-address-mode=slaac --ipv6-ra-mode=slaac ${NET1_IPV6_ADDR_POOL}
- ${net2_additional_args} = BuiltIn.Catenate
- ... --ip-version=6 --ipv6-address-mode=slaac --ipv6-ra-mode=slaac ${NET2_IPV6_ADDR_POOL}
- OpenStackOperations.Create SubNet
- ... ${NETWORKS}[0]
- ... ${SUBNETS}[0]
- ... ${SUBNET_CIDRS}[0]
- ... ${net1_additional_args}
- OpenStackOperations.Create SubNet
- ... ${NETWORKS}[1]
- ... ${SUBNETS}[1]
- ... ${SUBNET_CIDRS}[1]
- ... ${net2_additional_args}
- BuiltIn.Wait Until Keyword Succeeds
- ... 3s
- ... 1s
- ... Utils.Check For Elements At URI
- ... ${SUBNETWORK_URL}
- ... ${SUBNETS}
- OpenStackOperations.Update SubNet ${SUBNETS}[0] additional_args=--description ${UPDATE_SUBNET}
- ${output} = OpenStackOperations.Show SubNet ${SUBNETS}[0]
- BuiltIn.Should Contain ${output} ${UPDATE_SUBNET}
- 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}
- FOR ${interface} IN @{SUBNETS}
- OpenStackOperations.Add Router Interface ${ROUTER} ${interface}
- END
- ${interface_output} = OpenStackOperations.Show Router Interface ${ROUTER}
- FOR ${interface} IN @{SUBNETS}
- ${subnet_id} = OpenStackOperations.Get Subnet Id ${interface}
- BuiltIn.Should Contain ${interface_output} ${subnet_id}
- END
- ${GWMAC_ADDRS} ${GWIP_ADDRS} = VpnOperations.Get Gateway MAC And IP Address ${ROUTER} ${IP6_REGEX}
- BuiltIn.Set Suite Variable ${GWMAC_ADDRS}
- BuiltIn.Set Suite Variable ${GWIP_ADDRS}
- OpenStackOperations.Create Allow All SecurityGroup ${SECURITY_GROUP} IPv6
- ${allowed_address_pairs_args} = BuiltIn.Set Variable
- ... --allowed-address ip-address=${EXTRA_NW_SUBNET}[0] --allowed-address ip-address=${EXTRA_NW_SUBNET}[1]
- Create Port
- ... ${NETWORKS}[0]
- ... ${PORTS}[0]
- ... sg=${SECURITY_GROUP}
- ... additional_args=${allowed_address_pairs_args}
- Create Port
- ... ${NETWORKS}[0]
- ... ${PORTS}[1]
- ... sg=${SECURITY_GROUP}
- ... additional_args=${allowed_address_pairs_args}
- Create Port
- ... ${NETWORKS}[1]
- ... ${PORTS}[2]
- ... sg=${SECURITY_GROUP}
- ... additional_args=${allowed_address_pairs_args}
- Create Port
- ... ${NETWORKS}[1]
- ... ${PORTS}[3]
- ... sg=${SECURITY_GROUP}
- ... additional_args=${allowed_address_pairs_args}
- BuiltIn.Wait Until Keyword Succeeds 3s 1s Check For Elements At URI ${PORT_URL} ${PORTS}
- OpenStackOperations.Update Port ${PORTS}[0] additional_args=--name ${UPDATE_PORT}
- ${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_VMS}[0]
- ... ${OS_CMP1_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${PORTS}[1]
- ... ${NET_1_VMS}[1]
- ... ${OS_CMP2_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${PORTS}[2]
- ... ${NET_2_VMS}[0]
- ... ${OS_CMP1_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- OpenStackOperations.Create Vm Instance With Port On Compute Node
- ... ${PORTS}[3]
- ... ${NET_2_VMS}[1]
- ... ${OS_CMP2_HOSTNAME}
- ... sg=${SECURITY_GROUP}
- ${vms} = BuiltIn.Create List @{NET_1_VMS} @{NET_2_VMS}
- FOR ${vm} IN @{vms}
- OpenStackOperations.Poll VM Is ACTIVE ${vm}
- END
- BuiltIn.Wait Until Keyword Succeeds 30s 10s Wait For Routes To Propogate ${NETWORKS} ${SUBNET_CIDRS}
- ${prefix_net10} = Replace String ${SUBNET_CIDRS}[0] ::/64 (:[a-f0-9]{,4}){,4}
- ${status} ${message} = Run Keyword And Ignore Error
- ... BuiltIn.Wait Until Keyword Succeeds
- ... 3x
- ... 60s
- ... OpenStackOperations.Collect VM IPv6 SLAAC Addresses
- ... fail_on_none=true
- ... vm_list=${NET_1_VMS}
- ... network=${NETWORKS}[0]
- ... subnet=${prefix_net10}
- ${prefix_net20} = Replace String ${SUBNET_CIDRS}[1] ::/64 (:[a-f0-9]{,4}){,4}
- ${status} ${message} = Run Keyword And Ignore Error
- ... BuiltIn.Wait Until Keyword Succeeds
- ... 3x
- ... 60s
- ... OpenStackOperations.Collect VM IPv6 SLAAC Addresses
- ... fail_on_none=true
- ... vm_list=${NET_2_VMS}
- ... network=${NETWORKS}[1]
- ... subnet=${prefix_net20}
- ${VM_IP_NET10} = OpenStackOperations.Collect VM IPv6 SLAAC Addresses
- ... fail_on_none=false
- ... vm_list=${NET_1_VMS}
- ... network=${NETWORKS}[0]
- ... subnet=${prefix_net10}
- ${VM_IP_NET20} = OpenStackOperations.Collect VM IPv6 SLAAC Addresses
- ... fail_on_none=false
- ... vm_list=${NET_2_VMS}
- ... network=${NETWORKS}[1]
- ... subnet=${prefix_net20}
- ${VM_INSTANCES} = Collections.Combine Lists ${NET_1_VMS} ${NET_2_VMS}
- ${VM_IPS} = Collections.Combine Lists ${VM_IP_NET10} ${VM_IP_NET20}
- ${LOOP_COUNT} = BuiltIn.Get Length ${NET_1_VMS}
- FOR ${index} IN RANGE 0 ${LOOP_COUNT}
- ${status} ${message} = Run Keyword And Ignore Error
- ... BuiltIn.Should Not Contain
- ... ${VM_IPS}[${index}]
- ... None
- IF '${status}' == 'FAIL'
- OpenStack CLI openstack console log show ${VM_INSTANCES}[${index}] 30s
- END
- END
- OpenStackOperations.Copy DHCP Files From Control Node
- BuiltIn.Set Suite Variable ${VM_IP_NET10}
- BuiltIn.Set Suite Variable ${VM_IP_NET20}
- BuiltIn.Should Not Contain ${VM_IP_NET10} None
- BuiltIn.Should Not Contain ${VM_IP_NET20} None
- OpenStackOperations.Show Debugs @{NET_1_VMS} @{NET_2_VMS}
- OpenStackOperations.Get Suite Debugs
-
-Suite Teardown
- [Documentation] Delete the setup
- BuiltIn.Run Keyword And Ignore Error VpnOperations.VPN Delete L3VPN vpnid=${VPN_INSTANCE_IDS}[0]
- BuiltIn.Run Keyword And Ignore Error VpnOperations.VPN Delete L3VPN vpnid=${VPN_INSTANCE_IDS}[1]
- BuiltIn.Run Keyword And Ignore Error VpnOperations.VPN Delete L3VPN vpnid=${VPN_INSTANCE_IDS}[2]
- OpenStackOperations.OpenStack Suite Teardown