Update Robot Framework format - step 13
[integration/test.git] / csit / suites / openstack / connectivity / security_group.robot
index 9bdbe44672a0f233344e6663b4009ecf9f4f43fb..1c908c2ab647075cbc225b32bc2252c25e8574fc 100644 (file)
 *** Settings ***
-Documentation     Test suite to verify security groups basic and advanced functionalities, including negative tests.
-...               These test cases are not so relevant for transparent mode, so each test case will be tagged with
-...               "skip_if_transparent" to allow any underlying keywords to return with a PASS without risking
-...               a false failure. The real value of this suite will be in stateful mode.
-Suite Setup       BuiltIn.Run Keywords    SetupUtils.Setup_Utils_For_Setup_And_Teardown
-...               AND    DevstackUtils.Devstack Suite Setup
-Suite Teardown    Suite Teardown
-Test Setup        SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
-Test Teardown     OpenStackOperations.Get Test Teardown Debugs
-Force Tags        skip_if_${SECURITY_GROUP_MODE}
-Library           OperatingSystem
-Library           RequestsLibrary
-Library           SSHLibrary
-Resource          ../../../libraries/DevstackUtils.robot
-Resource          ../../../libraries/KarafKeywords.robot
-Resource          ../../../libraries/OpenStackOperations.robot
-Resource          ../../../libraries/SetupUtils.robot
-Resource          ../../../libraries/Utils.robot
-Resource          ../../../variables/netvirt/Variables.robot
+Documentation       Test suite to verify security groups basic and advanced functionalities, including negative tests.
+...                 These test cases are not so relevant for transparent mode, so each test case will be tagged with
+...                 "skip_if_transparent" to allow any underlying keywords to return with a PASS without risking
+...                 a false failure. The real value of this suite will be in stateful mode.
+
+Library             OperatingSystem
+Library             RequestsLibrary
+Library             SSHLibrary
+Resource            ../../../libraries/DevstackUtils.robot
+Resource            ../../../libraries/KarafKeywords.robot
+Resource            ../../../libraries/OpenStackOperations.robot
+Resource            ../../../libraries/SetupUtils.robot
+Resource            ../../../libraries/Utils.robot
+Resource            ../../../libraries/RemoteBash.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
+
+Force Tags          skip_if_${security_group_mode}
 
-*** Variables ***
-${SECURITY_GROUP}    sg_sg
-@{NETWORKS}       sg_net_1    sg_net_2
-@{SUBNETS}        sg_sub_1    sg_sub_2
-${ROUTER}         sg_router
-@{NET_1_VMS}      sg_net_1_vm_1    sg_net_1_vm_2
-@{NET_2_VMS}      sg_net_2_vm_1
-@{SUBNET_CIDRS}    51.0.0.0/24    52.0.0.0/24
-
-*** Test Cases ***
-Neutron Setup
-    OpenStackOperations.Create Network    @{NETWORKS}[0]
-    OpenStackOperations.Create Network    @{NETWORKS}[1]
-    BuiltIn.Wait Until Keyword Succeeds    10s    2s    Utils.Check For Elements At URI    ${NETWORK_URL}    ${NETWORKS}
-    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    10s    2s    Utils.Check For Elements At URI    ${SUBNETWORK_URL}    ${SUBNETS}
-
-Add TCP Allow Rules
-    [Documentation]    Allow only TCP packets for this suite
-    OpenStackOperations.Security Group Create Without Default Security Rules    ${SECURITY_GROUP}
-    OpenStackOperations.Neutron Security Group Rule Create    ${SECURITY_GROUP}    direction=ingress    port_range_max=65535    port_range_min=1    protocol=tcp
-    OpenStackOperations.Neutron Security Group Rule Create    ${SECURITY_GROUP}    direction=egress    port_range_max=65535    port_range_min=1    protocol=tcp
-    OpenStackOperations.Neutron Security Group Show    ${SECURITY_GROUP}
-
-Create Vm Instances For net_1
-    [Documentation]    Create VM instances using flavor and image names for a network.
-    OpenStackOperations.Create Vm Instances    @{NETWORKS}[0]    ${NET_1_VMS}    sg=${SECURITY_GROUP}
 
-Create Vm Instances For net_2
-    [Documentation]    Create VM instances using flavor and image names for a network.
-    OpenStackOperations.Create Vm Instances    @{NETWORKS}[1]    ${NET_2_VMS}    sg=${SECURITY_GROUP}
+*** Variables ***
+${SECURITY_GROUP}       sg_sg
+@{NETWORKS}             sg_net_1    sg_net_2
+@{SUBNETS}              sg_sub_1    sg_sub_2
+${ROUTER}               sg_router
+@{NET_1_VMS}            sg_net_1_vm_1    sg_net_1_vm_2
+@{NET_2_VMS}            sg_net_2_vm_1
+@{SUBNET_CIDRS}         51.0.0.0/24    52.0.0.0/24
 
-Check Vm Instances Have Ip Address
-    @{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_1_DHCP_IP}
-    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
-    [Teardown]    BuiltIn.Run Keywords    OpenStackOperations.Show Debugs    @{NET_1_VMS}
-    ...    AND    OpenStackOperations.Get Test Teardown Debugs
 
+*** Test Cases ***
 No Ping From DHCP To Vm Instance1
     [Documentation]    Check non-reachability of vm instances by pinging to them.
-    OpenStackOperations.Ping From DHCP Should Not Succeed    @{NETWORKS}[0]    @{NET_1_VM_IPS}[1]
+    OpenStackOperations.Ping From DHCP Should Not Succeed    ${NETWORKS}[0]    ${NET_1_VM_IPS}[1]
 
 No Ping From Vm Instance1 To Vm Instance2
     [Documentation]    Login to the vm instance and test some operations
-    ${vm_ips} =    BuiltIn.Create List    @{NET_1_VM_IPS}[1]
-    OpenStackOperations.Test Operations From Vm Instance    @{NETWORKS}[0]    @{NET_1_VM_IPS}[0]    ${vm_ips}    ping_should_succeed=False
+    ${vm_ips} =    BuiltIn.Create List    ${NET_1_VM_IPS}[1]
+    OpenStackOperations.Test Operations From Vm Instance
+    ...    ${NETWORKS}[0]
+    ...    ${NET_1_VM_IPS}[0]
+    ...    ${vm_ips}
+    ...    ping_should_succeed=False
 
 No Ping From Vm Instance2 To Vm Instance1
     [Documentation]    Login to the vm instance and test operations
-    ${vm_ips} =    BuiltIn.Create List    @{NET_1_VM_IPS}[0]
-    OpenStackOperations.Test Operations From Vm Instance    @{NETWORKS}[0]    @{NET_1_VM_IPS}[1]    ${vm_ips}    ping_should_succeed=False
+    ${vm_ips} =    BuiltIn.Create List    ${NET_1_VM_IPS}[0]
+    OpenStackOperations.Test Operations From Vm Instance
+    ...    ${NETWORKS}[0]
+    ...    ${NET_1_VM_IPS}[1]
+    ...    ${vm_ips}
+    ...    ping_should_succeed=False
 
 Add Ping Allow Rules With Remote SG (only between VMs)
-    OpenStackOperations.Neutron Security Group Rule Create Legacy Cli    ${SECURITY_GROUP}    direction=ingress    protocol=icmp    remote_group_id=${SECURITY_GROUP}
-    OpenStackOperations.Neutron Security Group Rule Create Legacy Cli    ${SECURITY_GROUP}    direction=egress    protocol=icmp    remote_group_id=${SECURITY_GROUP}
+    OpenStackOperations.Neutron Security Group Rule Create
+    ...    ${SECURITY_GROUP}
+    ...    direction=ingress
+    ...    protocol=icmp
+    ...    remote_group_id=${SECURITY_GROUP}
+    OpenStackOperations.Neutron Security Group Rule Create
+    ...    ${SECURITY_GROUP}
+    ...    direction=egress
+    ...    protocol=icmp
+    ...    remote_group_id=${SECURITY_GROUP}
     OpenStackOperations.Neutron Security Group Show    ${SECURITY_GROUP}
 
 Verify No Ping From DHCP To Vm Instance1
     [Documentation]    Check non-reachability of vm instances by pinging to them.
-    OpenStackOperations.Ping From DHCP Should Not Succeed    @{NETWORKS}[0]    @{NET_1_VM_IPS}[0]
+    OpenStackOperations.Ping From DHCP Should Not Succeed    ${NETWORKS}[0]    ${NET_1_VM_IPS}[0]
 
 Verify No Ping From DHCP To Vm Instance2
     [Documentation]    Check non-reachability of vm instances by pinging to them.
-    OpenStackOperations.Ping From DHCP Should Not Succeed    @{NETWORKS}[0]    @{NET_1_VM_IPS}[1]
+    OpenStackOperations.Ping From DHCP Should Not Succeed    ${NETWORKS}[0]    ${NET_1_VM_IPS}[1]
 
 Ping From Vm Instance1 To Vm Instance2
     [Documentation]    Login to the vm instance and test some operations
-    ${vm_ips} =    BuiltIn.Create List    @{NET_1_VM_IPS}[1]
-    OpenStackOperations.Test Operations From Vm Instance    @{NETWORKS}[0]    @{NET_1_VM_IPS}[0]    ${vm_ips}
+    ${vm_ips} =    BuiltIn.Create List    ${NET_1_VM_IPS}[1]
+    OpenStackOperations.Test Operations From Vm Instance    ${NETWORKS}[0]    ${NET_1_VM_IPS}[0]    ${vm_ips}
 
 Ping From Vm Instance2 To Vm Instance1
     [Documentation]    Login to the vm instance and test operations
-    ${vm_ips} =    BuiltIn.Create List    @{NET_1_VM_IPS}[0]
-    OpenStackOperations.Test Operations From Vm Instance    @{NETWORKS}[0]    @{NET_1_VM_IPS}[1]    ${vm_ips}
+    ${vm_ips} =    BuiltIn.Create List    ${NET_1_VM_IPS}[0]
+    OpenStackOperations.Test Operations From Vm Instance    ${NETWORKS}[0]    ${NET_1_VM_IPS}[1]    ${vm_ips}
 
 Create Router
     [Documentation]    Create Router and Add Interface to the subnets.
     OpenStackOperations.Create Router    ${ROUTER}
 
 Add Interfaces To Router
-    : FOR    ${interface}    IN    @{SUBNETS}
-    \    OpenStackOperations.Add Router Interface    ${ROUTER}    ${interface}
+    FOR    ${interface}    IN    @{SUBNETS}
+        OpenStackOperations.Add Router Interface    ${ROUTER}    ${interface}
+    END
 
 Ping From Vm Instance1 To Vm Instance3
     [Documentation]    Login to the vm instance and test some operations
-    ${vm_ips} =    BuiltIn.Create List    @{NET_2_VM_IPS}[0]
-    OpenStackOperations.Test Operations From Vm Instance    @{NETWORKS}[0]    @{NET_1_VM_IPS}[0]    ${vm_ips}
+    ${vm_ips} =    BuiltIn.Create List    ${NET_2_VM_IPS}[0]
+    OpenStackOperations.Test Operations From Vm Instance    ${NETWORKS}[0]    ${NET_1_VM_IPS}[0]    ${vm_ips}
 
 Repeat Ping From Vm Instance1 To Vm Instance2 With a Router
     [Documentation]    Login to the vm instance and test some operations
-    ${vm_ips} =    BuiltIn.Create List    @{NET_1_VM_IPS}[1]
-    OpenStackOperations.Test Operations From Vm Instance    @{NETWORKS}[0]    @{NET_1_VM_IPS}[0]    ${vm_ips}
+    ${vm_ips} =    BuiltIn.Create List    ${NET_1_VM_IPS}[1]
+    OpenStackOperations.Test Operations From Vm Instance    ${NETWORKS}[0]    ${NET_1_VM_IPS}[0]    ${vm_ips}
 
 Repeat Ping From Vm Instance2 To Vm Instance1 With a Router
     [Documentation]    Login to the vm instance and test operations
-    ${vm_ips} =    BuiltIn.Create List    @{NET_1_VM_IPS}[0]
-    OpenStackOperations.Test Operations From Vm Instance    @{NETWORKS}[0]    @{NET_1_VM_IPS}[1]    ${vm_ips}
+    ${vm_ips} =    BuiltIn.Create List    ${NET_1_VM_IPS}[0]
+    OpenStackOperations.Test Operations From Vm Instance    ${NETWORKS}[0]    ${NET_1_VM_IPS}[1]    ${vm_ips}
 
 Add Additional Security Group To VMs
     [Documentation]    Add an additional security group to the VMs - this is done to test a different logic put in place for ports with multiple SGs
     OpenStackOperations.Security Group Create Without Default Security Rules    additional-sg
     #TODO Remove this after the Newton jobs are removed, Openstack CLI with Newton lacks support to configure rule with remote_ip_prefix
-    OpenStackOperations.Neutron Security Group Rule Create Legacy Cli    additional-sg    direction=ingress    protocol=icmp    remote_ip_prefix=${NET_1_DHCP_IP}/32
+    OpenStackOperations.Neutron Security Group Rule Create
+    ...    additional-sg
+    ...    direction=ingress
+    ...    protocol=icmp
+    ...    remote_ip_prefix=${NET_1_DHCP_IP}/32
     OpenStackOperations.Neutron Security Group Show    additional-sg
-    : FOR    ${vm}    IN    @{NET_1_VMS}
-    \    OpenStackOperations.Add Security Group To VM    ${vm}    additional-sg
+    FOR    ${vm}    IN    @{NET_1_VMS}
+        OpenStackOperations.Add Security Group To VM    ${vm}    additional-sg
+    END
 
 Ping From DHCP To Vm Instance1
     [Documentation]    Check reachability of vm instances by pinging to them from DHCP.
-    OpenStackOperations.Ping Vm From DHCP Namespace    @{NETWORKS}[0]    @{NET_1_VM_IPS}[0]
+    OpenStackOperations.Ping Vm From DHCP Namespace    ${NETWORKS}[0]    ${NET_1_VM_IPS}[0]
 
 Ping From DHCP To Vm Instance2
     [Documentation]    Check reachability of vm instances by pinging to them from DHCP.
-    OpenStackOperations.Ping Vm From DHCP Namespace    @{NETWORKS}[0]    @{NET_1_VM_IPS}[1]
+    OpenStackOperations.Ping Vm From DHCP Namespace    ${NETWORKS}[0]    ${NET_1_VM_IPS}[1]
 
 Repeat Ping From Vm Instance1 To Vm Instance2 With additional SG
     [Documentation]    Login to the vm instance and test some operations
-    ${vm_ips}    BuiltIn.Create List    @{NET_1_VM_IPS}[1]
-    OpenStackOperations.Test Operations From Vm Instance    @{NETWORKS}[0]    @{NET_1_VM_IPS}[0]    ${vm_ips}
+    ${vm_ips} =    BuiltIn.Create List    ${NET_1_VM_IPS}[1]
+    OpenStackOperations.Test Operations From Vm Instance    ${NETWORKS}[0]    ${NET_1_VM_IPS}[0]    ${vm_ips}
 
 Repeat Ping From Vm Instance2 To Vm Instance1 With additional SG
     [Documentation]    Login to the vm instance and test operations
-    ${vm_ips}    BuiltIn.Create List    @{NET_1_VM_IPS}[0]
-    OpenStackOperations.Test Operations From Vm Instance    @{NETWORKS}[0]    @{NET_1_VM_IPS}[1]    ${vm_ips}
-
-Remove The Rules From Additional Security Group
-    OpenStackOperations.Delete All Security Group Rules    additional-sg
+    ${vm_ips} =    BuiltIn.Create List    ${NET_1_VM_IPS}[0]
+    OpenStackOperations.Test Operations From Vm Instance    ${NETWORKS}[0]    ${NET_1_VM_IPS}[1]    ${vm_ips}
+
+Test Connection when Rules Change Dynamically
+    [Documentation]    Initiate ping from DHCP to VM instance and remove security rules
+    ...    dynamically check the communication has stopped after removing the security group rules.
+    ${net_id} =    OpenstackOperations.Get Net Id    ${NETWORKS}[0]
+    Get ControlNode Connection
+    ${output} =    SSHLibrary.Write    sudo ip netns exec qdhcp-${net_id} ping ${NET_1_VM_IPS}[0]
+    Delete All Security Group Rules    additional-sg
+    Read    delay=10s
+    Write_Bare_Ctrl_C
+    ${output} =    Read Until    packet loss
+    Should Not Contain    ${output}    ${PING_REGEXP}
 
 No Ping From DHCP To Vm Instance1 With Additional Security Group Rules Removed
     [Documentation]    Check non-reachability of vm instances by pinging to them.
-    OpenStackOperations.Ping From DHCP Should Not Succeed    @{NETWORKS}[0]    @{NET_1_VM_IPS}[0]
+    OpenStackOperations.Ping From DHCP Should Not Succeed    ${NETWORKS}[0]    ${NET_1_VM_IPS}[0]
 
 No Ping From DHCP To Vm Instance2 With Additional Security Group Rules Removed
     [Documentation]    Check non-reachability of vm instances by pinging to them.
-    OpenStackOperations.Ping From DHCP Should Not Succeed    @{NETWORKS}[0]    @{NET_1_VM_IPS}[1]
+    OpenStackOperations.Ping From DHCP Should Not Succeed    ${NETWORKS}[0]    ${NET_1_VM_IPS}[1]
 
 Add The Rules To Additional Security Group Again
-    OpenStackOperations.Neutron Security Group Rule Create Legacy Cli    additional-sg    direction=ingress    protocol=icmp    remote_ip_prefix=${NET_1_DHCP_IP}/32
+    OpenStackOperations.Neutron Security Group Rule Create
+    ...    additional-sg
+    ...    direction=ingress
+    ...    protocol=icmp
+    ...    remote_ip_prefix=${NET_1_DHCP_IP}/32
 
 Ping From DHCP To Vm Instance1 After Rules Are Added Again
     [Documentation]    Check reachability of vm instances by pinging to them from DHCP.
-    OpenStackOperations.Ping Vm From DHCP Namespace    @{NETWORKS}[0]    @{NET_1_VM_IPS}[0]
+    OpenStackOperations.Ping Vm From DHCP Namespace    ${NETWORKS}[0]    ${NET_1_VM_IPS}[0]
 
 Ping From DHCP To Vm Instance2 After Rules Are Added Again
     [Documentation]    Check reachability of vm instances by pinging to them from DHCP.
-    OpenStackOperations.Ping Vm From DHCP Namespace    @{NETWORKS}[0]    @{NET_1_VM_IPS}[1]
+    OpenStackOperations.Ping Vm From DHCP Namespace    ${NETWORKS}[0]    ${NET_1_VM_IPS}[1]
 
 Remove the additional Security Group from First Vm
-    OpenStackOperations.Remove Security Group From VM    @{NET_1_VMS}[0]    additional-sg
+    OpenStackOperations.Remove Security Group From VM    ${NET_1_VMS}[0]    additional-sg
 
 Repeat Ping From Vm Instance1 To Vm Instance2 With Additional SG Removed From Vm1
     [Documentation]    Login to the vm instance and test some operations
-    ${vm_ips} =    BuiltIn.Create List    @{NET_1_VM_IPS}[1]
-    OpenStackOperations.Test Operations From Vm Instance    @{NETWORKS}[0]    @{NET_1_VM_IPS}[0]    ${vm_ips}
+    ${vm_ips} =    BuiltIn.Create List    ${NET_1_VM_IPS}[1]
+    OpenStackOperations.Test Operations From Vm Instance    ${NETWORKS}[0]    ${NET_1_VM_IPS}[0]    ${vm_ips}
 
 Repeat Ping From Vm Instance2 To Vm Instance1 With Additional SG Removed From Vm1
     [Documentation]    Login to the vm instance and test operations
-    ${vm_ips} =    BuiltIn.Create List    @{NET_1_VM_IPS}[0]
-    OpenStackOperations.Test Operations From Vm Instance    @{NETWORKS}[0]    @{NET_1_VM_IPS}[1]    ${vm_ips}
+    ${vm_ips} =    BuiltIn.Create List    ${NET_1_VM_IPS}[0]
+    OpenStackOperations.Test Operations From Vm Instance    ${NETWORKS}[0]    ${NET_1_VM_IPS}[1]    ${vm_ips}
 
 Remove Router Interfaces
-    : FOR    ${interface}    IN    @{SUBNETS}
-    \    OpenStackOperations.Remove Interface    ${ROUTER}    ${interface}
+    FOR    ${interface}    IN    @{SUBNETS}
+        OpenStackOperations.Remove Interface    ${ROUTER}    ${interface}
+    END
 
 Delete Router
     OpenStackOperations.Delete Router    ${ROUTER}
 
 Repeat Ping From Vm Instance1 To Vm Instance2 With Router Removed
     [Documentation]    Login to the vm instance and test some operations
-    ${vm_ips}    BuiltIn.Create List    @{NET_1_VM_IPS}[1]
-    OpenStackOperations.Test Operations From Vm Instance    @{NETWORKS}[0]    @{NET_1_VM_IPS}[0]    ${vm_ips}
+    ${vm_ips} =    BuiltIn.Create List    ${NET_1_VM_IPS}[1]
+    OpenStackOperations.Test Operations From Vm Instance    ${NETWORKS}[0]    ${NET_1_VM_IPS}[0]    ${vm_ips}
 
 Repeat Ping From Vm Instance2 To Vm Instance1 With Router Removed
     [Documentation]    Login to the vm instance and test operations
-    ${vm_ips}    BuiltIn.Create List    @{NET_1_VM_IPS}[0]
-    OpenStackOperations.Test Operations From Vm Instance    @{NETWORKS}[0]    @{NET_1_VM_IPS}[1]    ${vm_ips}
+    ${vm_ips} =    BuiltIn.Create List    ${NET_1_VM_IPS}[0]
+    OpenStackOperations.Test Operations From Vm Instance    ${NETWORKS}[0]    ${NET_1_VM_IPS}[1]    ${vm_ips}
 
 Delete Vm Instances In net_2
-    : FOR    ${vm}    IN    @{NET_2_VMS}
-    \    OpenStackOperations.Delete Vm Instance    ${vm}
+    FOR    ${vm}    IN    @{NET_2_VMS}
+        OpenStackOperations.Delete Vm Instance    ${vm}
+    END
 
 Repeat Ping From Vm Instance1 To Vm Instance2 With net_2 VM Deleted
     [Documentation]    Login to the vm instance and test some operations
-    ${vm_ips}    BuiltIn.Create List    @{NET_1_VM_IPS}[1]
-    OpenStackOperations.Test Operations From Vm Instance    @{NETWORKS}[0]    @{NET_1_VM_IPS}[0]    ${vm_ips}
+    ${vm_ips} =    BuiltIn.Create List    ${NET_1_VM_IPS}[1]
+    OpenStackOperations.Test Operations From Vm Instance    ${NETWORKS}[0]    ${NET_1_VM_IPS}[0]    ${vm_ips}
 
 Repeat Ping From Vm Instance2 To Vm Instance1 With net_2 VM Deleted
     [Documentation]    Login to the vm instance and test operations
-    ${vm_ips} =    BuiltIn.Create List    @{NET_1_VM_IPS}[0]
-    OpenStackOperations.Test Operations From Vm Instance    @{NETWORKS}[0]    @{NET_1_VM_IPS}[1]    ${vm_ips}
-
-Delete Vm Instances In net_1
-    : FOR    ${VmElement}    IN    @{NET_1_VMS}
-    \    OpenStackOperations.Delete Vm Instance    ${VmElement}
+    ${vm_ips} =    BuiltIn.Create List    ${NET_1_VM_IPS}[0]
+    OpenStackOperations.Test Operations From Vm Instance    ${NETWORKS}[0]    ${NET_1_VM_IPS}[1]    ${vm_ips}
 
-Delete Security Groups
-    OpenStackOperations.Delete SecurityGroup    additional-sg
-    OpenStackOperations.Delete SecurityGroup    ${SECURITY_GROUP}
 
 *** Keywords ***
-Suite Teardown
-    : FOR    ${vm}    IN    @{NET_1_VMS}
-    \    OpenStackOperations.Delete Vm Instance    ${vm}
-    : FOR    ${vm}    IN    @{NET_2_VMS}
-    \    OpenStackOperations.Delete Vm Instance    ${vm}
-    : FOR    ${subnet}    IN    @{SUBNETS}
-    \    BuiltIn.Run Keyword And Ignore Error    OpenStackOperations.Delete SubNet    ${subnet}
-    : FOR    ${network}    IN    @{NETWORKS}
-    \    BuiltIn.Run Keyword And Ignore Error    OpenStackOperations.Delete Network    ${network}
-    BuiltIn.Run Keyword And Ignore Error    OpenStackOperations.Delete SecurityGroup    additional-sg
-    BuiltIn.Run Keyword And Ignore Error    OpenStackOperations.Delete SecurityGroup    ${SECURITY_GROUP}
-    SSHLibrary.Close All Connections
+Suite Setup
+    OpenStackOperations.OpenStack Suite Setup
+    OpenStackOperations.Create Network    ${NETWORKS}[0]
+    OpenStackOperations.Create Network    ${NETWORKS}[1]
+    BuiltIn.Wait Until Keyword Succeeds
+    ...    10s
+    ...    2s
+    ...    Utils.Check For Elements At URI
+    ...    ${NETWORK_URL}
+    ...    ${NETWORKS}
+    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
+    ...    10s
+    ...    2s
+    ...    Utils.Check For Elements At URI
+    ...    ${SUBNETWORK_URL}
+    ...    ${SUBNETS}
+    OpenStackOperations.Security Group Create Without Default Security Rules    ${SECURITY_GROUP}
+    OpenStackOperations.Neutron Security Group Rule Create
+    ...    ${SECURITY_GROUP}
+    ...    direction=ingress
+    ...    port_range_max=65535
+    ...    port_range_min=1
+    ...    protocol=tcp
+    OpenStackOperations.Neutron Security Group Rule Create
+    ...    ${SECURITY_GROUP}
+    ...    direction=egress
+    ...    port_range_max=65535
+    ...    port_range_min=1
+    ...    protocol=tcp
+    OpenStackOperations.Neutron Security Group Show    ${SECURITY_GROUP}
+    OpenStackOperations.Create Vm Instance On Compute Node
+    ...    ${NETWORKS}[0]
+    ...    ${NET_1_VMS}[0]
+    ...    ${OS_CMP1_HOSTNAME}
+    ...    sg=${SECURITY_GROUP}
+    OpenStackOperations.Create Vm Instance On Compute Node
+    ...    ${NETWORKS}[0]
+    ...    ${NET_1_VMS}[1]
+    ...    ${OS_CMP2_HOSTNAME}
+    ...    sg=${SECURITY_GROUP}
+    OpenStackOperations.Create Vm Instance On Compute Node
+    ...    ${NETWORKS}[1]
+    ...    ${NET_2_VMS}[0]
+    ...    ${OS_CMP1_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_1_DHCP_IP}
+    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
+    OpenStackOperations.Show Debugs    @{NET_1_VMS}    @{NET_2_VMS}
+    OpenStackOperations.Get Suite Debugs