--- /dev/null
+*** Settings ***
+Documentation Test suite to verify packet flows between vm instances.
+Suite Setup BuiltIn.Run Keywords SetupUtils.Setup_Utils_For_Setup_And_Teardown
+... AND DevstackUtils.Devstack Suite Setup
+Suite Teardown Close All Connections
+Test Setup SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
+Test Teardown Get Test Teardown Debugs
+Library SSHLibrary
+Library OperatingSystem
+Library RequestsLibrary
+Resource ../../../libraries/DevstackUtils.robot
+Resource ../../../libraries/DataModels.robot
+Resource ../../../libraries/OpenStackOperations.robot
+Resource ../../../libraries/SetupUtils.robot
+Resource ../../../libraries/Utils.robot
+Resource ../../../libraries/KarafKeywords.robot
+Resource ../../../variables/netvirt/Variables.robot
+
+*** Variables ***
+${SECURITY_GROUP} sg-connectivity
+@{NETWORKS_NAME} l2_network_1 l2_network_2
+@{SUBNETS_NAME} l2_subnet_1 l2_subnet_2
+@{NET_1_VM_GRP_NAME} NET1-VM
+@{NET_2_VM_GRP_NAME} NET2-VM
+@{NET_1_VM_INSTANCES} NET1-VM-1 NET1-VM-2 NET1-VM-3
+@{NET_2_VM_INSTANCES} NET2-VM-1 NET2-VM-2 NET2-VM-3
+@{SUBNETS_RANGE} 30.0.0.0/24 40.0.0.0/24
+${network1_vlan_id} 1235
+
+*** Test Cases ***
+Create VLAN Network (l2_network_1)
+ [Documentation] Create Network with neutron request.
+ # in the case that the controller under test is using legacy netvirt features, vlan segmentation is not supported,
+ # and we cannot create a vlan network. If those features are installed we will instead stick with vxlan.
+ : FOR ${feature_name} IN @{legacy_feature_list}
+ \ ${feature_check_status}= Run Keyword And Return Status Verify Feature Is Installed ${feature_name}
+ \ Exit For Loop If '${feature_check_status}' == 'True'
+ Run Keyword If '${feature_check_status}' == 'True' Create Network @{NETWORKS_NAME}[0]
+ ... ELSE Create Network @{NETWORKS_NAME}[0] --provider-network-type vlan --provider-physical-network ${PUBLIC_PHYSICAL_NETWORK} --provider-segment ${network1_vlan_id}
+
+Create VXLAN Network (l2_network_2)
+ [Documentation] Create Network with neutron request.
+ Create Network @{NETWORKS_NAME}[1]
+
+Create Subnets For l2_network_1
+ [Documentation] Create Sub Nets for the Networks with neutron request.
+ Create SubNet @{NETWORKS_NAME}[0] @{SUBNETS_NAME}[0] @{SUBNETS_RANGE}[0]
+
+Create Subnets For l2_network_2
+ [Documentation] Create Sub Nets for the Networks with neutron request.
+ Create SubNet @{NETWORKS_NAME}[1] @{SUBNETS_NAME}[1] @{SUBNETS_RANGE}[1]
+
+Add Ssh Allow Rule
+ [Documentation] Allow all TCP/UDP/ICMP packets for this suite
+ OpenStackOperations.Create Allow All SecurityGroup ${SECURITY_GROUP}
+
+Create Vm Instances For l2_network_1
+ [Documentation] Create Four Vm instances using flavor and image names for a network.
+ Create Vm Instances l2_network_1 ${NET_1_VM_GRP_NAME} sg=${SECURITY_GROUP} min=3 max=3
+
+Create Vm Instances For l2_network_2
+ [Documentation] Create Four Vm instances using flavor and image names for a network.
+ Create Vm Instances l2_network_2 ${NET_2_VM_GRP_NAME} sg=${SECURITY_GROUP} min=3 max=3
+
+Check Vm Instances Have Ip Address
+ @{NET1_VM_IPS} ${NET1_DHCP_IP} = Get VM IPs @{NET_1_VM_INSTANCES}
+ @{NET2_VM_IPS} ${NET2_DHCP_IP} = Get VM IPs @{NET_2_VM_INSTANCES}
+ Set Suite Variable @{NET1_VM_IPS}
+ Set Suite Variable @{NET2_VM_IPS}
+ Should Not Contain ${NET1_VM_IPS} None
+ Should Not Contain ${NET2_VM_IPS} None
+ Should Not Contain ${NET1_DHCP_IP} None
+ Should Not Contain ${NET2_DHCP_IP} None
+ [Teardown] Run Keywords Show Debugs @{NET_1_VM_INSTANCES} @{NET_2_VM_INSTANCES}
+ ... AND Get Test Teardown Debugs
+
+Ping Vm Instance1 In l2_network_1
+ [Documentation] Check reachability of vm instances by pinging to them.
+ Ping Vm From DHCP Namespace l2_network_1 @{NET1_VM_IPS}[0]
+
+Ping Vm Instance2 In l2_network_1
+ [Documentation] Check reachability of vm instances by pinging to them.
+ Ping Vm From DHCP Namespace l2_network_1 @{NET1_VM_IPS}[1]
+
+Ping Vm Instance3 In l2_network_1
+ [Documentation] Check reachability of vm instances by pinging to them.
+ Ping Vm From DHCP Namespace l2_network_1 @{NET1_VM_IPS}[2]
+
+Ping Vm Instance1 In l2_network_2
+ [Documentation] Check reachability of vm instances by pinging to them.
+ Ping Vm From DHCP Namespace l2_network_2 @{NET2_VM_IPS}[0]
+
+Ping Vm Instance2 In l2_network_2
+ [Documentation] Check reachability of vm instances by pinging to them.
+ Ping Vm From DHCP Namespace l2_network_2 @{NET2_VM_IPS}[1]
+
+Ping Vm Instance3 In l2_network_2
+ [Documentation] Check reachability of vm instances by pinging to them.
+ Ping Vm From DHCP Namespace l2_network_2 @{NET2_VM_IPS}[2]
+
+Connectivity Tests From Vm Instance1 In l2_network_1
+ [Documentation] Login to the vm instance and test some operations
+ Test Operations From Vm Instance l2_network_1 @{NET1_VM_IPS}[0] ${NET1_VM_IPS}
+
+Connectivity Tests From Vm Instance2 In l2_network_1
+ [Documentation] Login to the vm instance and test operations
+ Test Operations From Vm Instance l2_network_1 @{NET1_VM_IPS}[1] ${NET1_VM_IPS}
+
+Connectivity Tests From Vm Instance3 In l2_network_1
+ [Documentation] Login to the vm instance and test operations
+ Test Operations From Vm Instance l2_network_1 @{NET1_VM_IPS}[2] ${NET1_VM_IPS}
+
+Connectivity Tests From Vm Instance1 In l2_network_2
+ [Documentation] Login to the vm instance and test operations
+ Test Operations From Vm Instance l2_network_2 @{NET2_VM_IPS}[0] ${NET2_VM_IPS}
+
+Connectivity Tests From Vm Instance2 In l2_network_2
+ [Documentation] Logging to the vm instance using generated key pair.
+ Test Operations From Vm Instance l2_network_2 @{NET2_VM_IPS}[1] ${NET2_VM_IPS}
+
+Connectivity Tests From Vm Instance3 In l2_network_2
+ [Documentation] Login to the vm instance using generated key pair.
+ Test Operations From Vm Instance l2_network_2 @{NET2_VM_IPS}[2] ${NET2_VM_IPS}
+
+Delete A Vm Instance
+ [Documentation] Delete Vm instances using instance names.
+ Delete Vm Instance NET1-VM-1
+
+No Ping For Deleted Vm
+ [Documentation] Check non reachability of deleted vm instances by pinging to them.
+ ${output}= Ping From DHCP Should Not Succeed l2_network_1 @{NET_1_VM_IPS}[0]
+
+Delete Vm Instances In l2_network_1
+ [Documentation] Delete Vm instances using instance names in l2_network_1.
+ : FOR ${VmElement} IN @{NET_1_VM_INSTANCES}
+ \ Delete Vm Instance ${VmElement}
+
+Delete Vm Instances In l2_network_2
+ [Documentation] Delete Vm instances using instance names in l2_network_2.
+ : FOR ${VmElement} IN @{NET_2_VM_INSTANCES}
+ \ Delete Vm Instance ${VmElement}
+ [Teardown] Run Keywords Show Debugs @{NET_1_VM_INSTANCES} @{NET_2_VM_INSTANCES}
+ ... AND Get Test Teardown Debugs
+
+Delete Sub Networks In l2_network_1
+ [Documentation] Delete Sub Nets for the Networks with neutron request.
+ Delete SubNet l2_subnet_1
+
+Delete Sub Networks In l2_network_2
+ [Documentation] Delete Sub Nets for the Networks with neutron request.
+ Delete SubNet l2_subnet_2
+
+Delete Networks
+ [Documentation] Delete Networks with neutron request.
+ : FOR ${NetworkElement} IN @{NETWORKS_NAME}
+ \ Delete Network ${NetworkElement}
+
+Delete Security Group
+ [Documentation] Delete security groups with neutron request
+ Delete SecurityGroup ${SECURITY_GROUP}
+
+Verify Flows Cleanup
+ [Documentation] Verify that flows have been cleaned up properly after removing all neutron configurations
+ ${feature_check_status}= Run Keyword And Return Status Verify Feature Is Installed odl-vtn-manager-neutron
+ Run Keyword If '${feature_check_status}' != 'True' Verify Flows Are Cleaned Up On All OpenStack Nodes