Verify dispatcher flows are cleaned at suite end
[integration/test.git] / csit / suites / openstack / connectivity / 03_external_network_tests.robot
1 *** Settings ***
2 Documentation     Test suite to check North-South connectivity in L3 using a router and an external network
3 Suite Setup       BuiltIn.Run Keywords    SetupUtils.Setup_Utils_For_Setup_And_Teardown
4 ...               AND    DevstackUtils.Devstack Suite Setup
5 Suite Teardown    Close All Connections
6 Test Setup        SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
7 Test Teardown     Get Test Teardown Debugs
8 Library           SSHLibrary
9 Library           OperatingSystem
10 Library           RequestsLibrary
11 Resource          ../../../libraries/DevstackUtils.robot
12 Resource          ../../../libraries/Netvirt.robot
13 Resource          ../../../libraries/OpenStackOperations.robot
14 Resource          ../../../libraries/SetupUtils.robot
15 Resource          ../../../libraries/Utils.robot
16
17 *** Variables ***
18 @{NETWORKS_NAME}    l3_net
19 @{SUBNETS_NAME}    l3_subnet
20 @{VM_INSTANCES_FLOATING}    VmInstanceFloating1    VmInstanceFloating2
21 @{VM_INSTANCES_SNAT}    VmInstanceSnat3    VmInstanceSnat4
22 @{SUBNETS_RANGE}    90.0.0.0/24
23 # Parameter values below are based on releng/builder - changing them requires updates in releng/builder as well
24 ${external_gateway}    10.10.10.250
25 ${external_pnf}    10.10.10.253
26 ${external_subnet}    10.10.10.0/24
27 ${external_subnet_allocation_pool}    start=10.10.10.2,end=10.10.10.249
28 ${external_internet_addr}    10.9.9.9
29 ${external_net_name}    external-net
30 ${external_subnet_name}    external-subnet
31 ${network1_vlan_id}    167
32
33 *** Test Cases ***
34 Create All Controller Sessions
35     [Documentation]    Create sessions for all three controllers
36     ClusterManagement.ClusterManagement Setup
37
38 Create Private Network
39     [Documentation]    Create Network with neutron request.
40     : FOR    ${NetworkElement}    IN    @{NETWORKS_NAME}
41     \    OpenStackOperations.Create Network    ${NetworkElement}
42
43 Create Subnet For Private Network
44     [Documentation]    Create Sub Nets for the Networks with neutron request.
45     OpenStackOperations.Create SubNet    @{NETWORKS_NAME}[0]    @{SUBNETS_NAME}[0]    @{SUBNETS_RANGE}[0]
46
47 Create Vm Instances
48     [Documentation]    Create VM instances using flavor and image names for a network.
49     OpenStackOperations.Create Vm Instances    @{NETWORKS_NAME}[0]    ${VM_INSTANCES_FLOATING}    sg=csit
50     OpenStackOperations.Create Vm Instances    @{NETWORKS_NAME}[0]    ${VM_INSTANCES_SNAT}    sg=csit
51
52 Check Vm Instances Have Ip Address
53     [Documentation]    Test case to verify that all created VMs are ready and have received their ip addresses.
54     ...    We are polling first and longest on the last VM created assuming that if it's received it's address
55     ...    already the other instances should have theirs already or at least shortly thereafter.
56     # first, ensure all VMs are in ACTIVE state.    if not, we can just fail the test case and not waste time polling
57     # for dhcp addresses
58     : FOR    ${vm}    IN    @{VM_INSTANCES_FLOATING}    @{VM_INSTANCES_SNAT}
59     \    Wait Until Keyword Succeeds    15s    5s    Verify VM Is ACTIVE    ${vm}
60     ${status}    ${message}    Run Keyword And Ignore Error    Wait Until Keyword Succeeds    60s    5s    Collect VM IP Addresses
61     ...    true    @{VM_INSTANCES_FLOATING}
62     ${status}    ${message}    Run Keyword And Ignore Error    Wait Until Keyword Succeeds    60s    5s    Collect VM IP Addresses
63     ...    true    @{VM_INSTANCES_SNAT}
64     ${FLOATING_VM_IPS}    ${FLOATING_DHCP_IP}    Collect VM IP Addresses    false    @{VM_INSTANCES_FLOATING}
65     ${SNAT_VM_IPS}    ${SNAT_DHCP_IP}    Collect VM IP Addresses    false    @{VM_INSTANCES_SNAT}
66     ${VM_INSTANCES}=    Collections.Combine Lists    ${VM_INSTANCES_FLOATING}    ${VM_INSTANCES_SNAT}
67     ${VM_IPS}=    Collections.Combine Lists    ${FLOATING_VM_IPS}    ${SNAT_VM_IPS}
68     ${LOOP_COUNT}    Get Length    ${VM_INSTANCES}
69     : FOR    ${index}    IN RANGE    0    ${LOOP_COUNT}
70     \    ${status}    ${message}    Run Keyword And Ignore Error    Should Not Contain    @{VM_IPS}[${index}]    None
71     \    Run Keyword If    '${status}' == 'FAIL'    Write Commands Until Prompt    nova console-log @{VM_INSTANCES}[${index}]    30s
72     Set Suite Variable    ${FLOATING_VM_IPS}
73     Set Suite Variable    ${SNAT_VM_IPS}
74     Should Not Contain    ${FLOATING_VM_IPS}    None
75     Should Not Contain    ${SNAT_VM_IPS}    None
76     Should Not Contain    @{FLOATING_DHCP_IP}[0]    None
77     Should Not Contain    @{SNAT_DHCP_IP}[0]    None
78     [Teardown]    Run Keywords    Show Debugs    @{VM_INSTANCES_FLOATING}    @{VM_INSTANCES_SNAT}
79     ...    AND    Get Test Teardown Debugs
80
81 Create External Network And Subnet
82     Create Network    ${external_net_name} --router:external --provider:network_type=vlan --provider:physical_network=${PUBLIC_PHYSICAL_NETWORK} --provider:segmentation_id=${network1_vlan_id}
83     Create Subnet    ${external_net_name}    ${external_subnet_name}    ${external_subnet}    --gateway ${external_gateway} --allocation-pool ${external_subnet_allocation_pool}
84
85 Create Router
86     [Documentation]    Create Router and Add Interface to the subnets.
87     OpenStackOperations.Create Router    router1
88
89 Add Interfaces To Router
90     [Documentation]    Add Interfaces
91     : FOR    ${interface}    IN    @{SUBNETS_NAME}
92     \    OpenStackOperations.Add Router Interface    router1    ${interface}
93
94 Add Router Gateway To Router
95     [Documentation]    Add Router Gateway
96     OpenStackOperations.Add Router Gateway    router1    ${external_net_name}
97
98 Verify Created Routers
99     [Documentation]    Check created routers using northbound rest calls
100     ${data}    Utils.Get Data From URI    1    ${NEUTRON_ROUTERS_API}
101     Log    ${data}
102     Should Contain    ${data}    router1
103
104 Create And Associate Floating IPs for VMs
105     [Documentation]    Create and associate a floating IP for the VM
106     ${VM_FLOATING_IPS}    OpenStackOperations.Create And Associate Floating IPs    ${external_net_name}    @{VM_INSTANCES_FLOATING}
107     Set Suite Variable    ${VM_FLOATING_IPS}
108     [Teardown]    Run Keywords    Show Debugs    @{VM_INSTANCES_FLOATING}
109     ...    AND    Get Test Teardown Debugs
110
111 Ping External Gateway From Control Node
112     [Documentation]    Check reachability of external gateway by pinging it from the control node.
113     OpenStackOperations.Ping Vm From Control Node    ${external_gateway}    additional_args=-I ${external_internet_addr}
114
115 Ping Vm Instance1 Floating IP From Control Node
116     [Documentation]    Check reachability of VM instance through floating IP by pinging them.
117     OpenStackOperations.Ping Vm From Control Node    @{VM_FLOATING_IPS}[0]    additional_args=-I ${external_internet_addr}
118
119 Ping Vm Instance2 Floating IP From Control Node
120     [Documentation]    Check reachability of VM instance through floating IP by pinging them.
121     OpenStackOperations.Ping Vm From Control Node    @{VM_FLOATING_IPS}[1]    additional_args=-I ${external_internet_addr}
122
123 Ping Vm Instance2 Floating IP From Vm Instance1 With Floating IP (Hairpinning)
124     [Documentation]    Check reachability of VM instance floating IP from another VM instance with FIP (with ttl=1 to make sure no router hops)
125     Pass Execution If    "${ODL_STREAM}" == "boron"    Hairpinning support is not available in boron or earlier
126     ${dst_ip}=    Create List    @{VM_FLOATING_IPS}[1]
127     OpenStackOperations.Test Operations From Vm Instance    @{NETWORKS_NAME}[0]    @{FLOATING_VM_IPS}[0]    ${dst_ip}    ttl=1
128
129 Ping External Network PNF from Vm Instance 1
130     [Documentation]    Check reachability of External Network PNF from VM instance (with ttl=1 to make sure no router hops)
131     Pass Execution If    "${ODL_STREAM}" == "boron"    PNF subnet route support is not available in boron or earlier
132     ${dst_ip}=    Create List    ${external_pnf}
133     OpenStackOperations.Test Operations From Vm Instance    @{NETWORKS_NAME}[0]    @{FLOATING_VM_IPS}[0]    ${dst_ip}    ttl=1
134
135 SNAT - TCP connection to External Gateway From SNAT VM Instance1
136     [Documentation]    Login to the VM instance and test TCP connection to the controller via SNAT
137     Test Netcat Operations From Vm Instance    @{NETWORKS_NAME}[0]    @{SNAT_VM_IPS}[0]    ${external_gateway}
138
139 SNAT - UDP connection to External Gateway From SNAT VM Instance1
140     [Documentation]    Login to the VM instance and test UDP connection to the controller via SNAT
141     Test Netcat Operations From Vm Instance    @{NETWORKS_NAME}[0]    @{SNAT_VM_IPS}[0]    ${external_gateway}    -u
142
143 SNAT - TCP connection to External Gateway From SNAT VM Instance2
144     [Documentation]    Login to the VM instance and test TCP connection to the controller via SNAT
145     Test Netcat Operations From Vm Instance    @{NETWORKS_NAME}[0]    @{SNAT_VM_IPS}[1]    ${external_gateway}
146
147 SNAT - UDP connection to External Gateway From SNAT VM Instance2
148     [Documentation]    Login to the VM instance and test UDP connection to the controller via SNAT
149     Test Netcat Operations From Vm Instance    @{NETWORKS_NAME}[0]    @{SNAT_VM_IPS}[1]    ${external_gateway}    -u
150
151 Delete Vm Instances
152     [Documentation]    Delete Vm instances using instance names.
153     : FOR    ${VmElement}    IN    @{VM_INSTANCES_FLOATING}
154     \    OpenStackOperations.Delete Vm Instance    ${VmElement}
155     : FOR    ${VmElement}    IN    @{VM_INSTANCES_SNAT}
156     \    OpenStackOperations.Delete Vm Instance    ${VmElement}
157
158 Delete Router Interfaces
159     [Documentation]    Remove Interface to the subnets.
160     : FOR    ${interface}    IN    @{SUBNETS_NAME}
161     \    OpenStackOperations.Remove Interface    router1    ${interface}
162
163 Delete Routers
164     [Documentation]    Delete Router and Interface to the subnets.
165     OpenStackOperations.Delete Router    router1
166
167 Verify Deleted Routers
168     [Documentation]    Check deleted routers using northbound rest calls
169     ${data}    Utils.Get Data From URI    1    ${NEUTRON_ROUTERS_API}
170     Log    ${data}
171     Should Not Contain    ${data}    router1
172
173 Delete Sub Networks
174     [Documentation]    Delete Sub Nets for the Networks with neutron request.
175     OpenStackOperations.Delete SubNet    @{SUBNETS_NAME}[0]
176
177 Delete Networks
178     [Documentation]    Delete Networks with neutron request.
179     : FOR    ${NetworkElement}    IN    @{NETWORKS_NAME}
180     \    OpenStackOperations.Delete Network    ${NetworkElement}
181     OpenStackOperations.Delete Network    ${external_net_name}
182
183 Verify Flows Cleanup
184     [Documentation]    Verify that flows have been cleaned up properly after removing all neutron configurations
185     Verify Flows Are Cleaned Up On All OpenStack Nodes