Update Robot Framework format - step 13
[integration/test.git] / csit / suites / openstack / connectivity / external_network.robot
1 *** Settings ***
2 Documentation       Test suite to check North-South connectivity in L3 using a router and an external network
3
4 Library             Collections
5 Library             SSHLibrary
6 Library             OperatingSystem
7 Library             RequestsLibrary
8 Resource            ../../../libraries/DevstackUtils.robot
9 Resource            ../../../libraries/DataModels.robot
10 Resource            ../../../libraries/OpenStackOperations.robot
11 Resource            ../../../libraries/SetupUtils.robot
12 Resource            ../../../libraries/Utils.robot
13 Resource            ../../../variables/netvirt/Variables.robot
14
15 Suite Setup         Suite Setup
16 Suite Teardown      OpenStackOperations.OpenStack Suite Teardown
17 Test Setup          SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
18 Test Teardown       OpenStackOperations.Get Test Teardown Debugs
19
20 Force Tags          skip_if_${odl_snat_mode}
21
22
23 *** Variables ***
24 ${SECURITY_GROUP}                       l3_ext_sg
25 @{NETWORKS}                             l3_ext_net_1    l3_ext_net_2
26 @{SUBNETS}                              l3_ext_sub_1    l3_ext_sub_2
27 @{ROUTERS}                              l3_ext_router_1    l3_ext_router_2
28 @{NET1_FIP_VMS}                         l3_ext_net_1_fip_vm_1    l3_ext_net_1_fip_vm_2    l3_ext_net_1_fip_vm_3
29 @{NET1_SNAT_VMS}                        l3_ext_net_1_snat_vm_1    l3_ext_net_1_snat_vm_2
30 @{NET2_SNAT_VMS}                        l3_ext_net_2_snat_vm_3
31 @{SNAT_VMS}                             @{NET1_SNAT_VMS}    @{NET2_SNAT_VMS}
32 @{SUBNET_CIDRS}                         41.0.0.0/24    42.0.0.0/24
33 # Parameter values below are based on releng/builder - changing them requires updates in releng/builder as well
34 ${EXTERNAL_GATEWAY}                     10.10.10.250
35 ${EXTERNAL_PNF}                         10.10.10.253
36 ${EXTERNAL_SUBNET}                      10.10.10.0/24
37 ${EXTERNAL_SUBNET_ALLOCATION_POOL}      start=10.10.10.2,end=10.10.10.249
38 ${EXTERNAL_INTERNET_ADDR}               10.9.9.9
39
40
41 *** Test Cases ***
42 Initial Ping To External Network PNF from Vm Instance 1
43     [Documentation]    Check reachability of External Network PNF from VM instance (with ttl=1 to make sure no router hops)
44     ${expect_ping_to_work} =    Set Variable If    "skip_if_controller" in @{TEST_TAGS}    False    True
45     ${dst_ip} =    BuiltIn.Create List    ${EXTERNAL_PNF}
46     OpenStackOperations.Test Operations From Vm Instance
47     ...    ${NETWORKS}[0]
48     ...    ${NET1_FIP_VM_IPS}[0]
49     ...    ${dst_ip}
50     ...    ttl=1
51     ...    ping_should_succeed=${expect_ping_to_work}
52     ...    ping_tries=8
53
54 Initial Ping To External Network PNF from Vm Instance 2
55     [Documentation]    Check reachability of External Network PNF from VM instance (with ttl=1 to make sure no router hops)
56     ${expect_ping_to_work} =    Set Variable If    "skip_if_controller" in @{TEST_TAGS}    False    True
57     ${dst_ip} =    BuiltIn.Create List    ${EXTERNAL_PNF}
58     OpenStackOperations.Test Operations From Vm Instance
59     ...    ${NETWORKS}[0]
60     ...    ${NET1_FIP_VM_IPS}[1]
61     ...    ${dst_ip}
62     ...    ttl=1
63     ...    ping_should_succeed=${expect_ping_to_work}
64     ...    ping_tries=8
65
66 Create And Associate Floating IPs for VMs
67     [Documentation]    Create and associate a floating IP for the VM
68     ${VM_FLOATING_IPS} =    OpenStackOperations.Create And Associate Floating IPs
69     ...    ${EXTERNAL_NET_NAME}
70     ...    @{NET1_FIP_VMS}
71     BuiltIn.Set Suite Variable    ${VM_FLOATING_IPS}
72     [Teardown]    BuiltIn.Run Keywords    OpenStackOperations.Show Debugs    @{NET1_FIP_VMS}
73     ...    AND    OpenStackOperations.Get Test Teardown Debugs
74
75 Ping External Gateway From Control Node
76     [Documentation]    Check reachability of external gateway by pinging it from the control node.
77     OpenStackOperations.Ping Vm From Control Node
78     ...    ${EXTERNAL_GATEWAY}
79     ...    additional_args=-I ${EXTERNAL_INTERNET_ADDR}
80
81 Ping Vm Instance1 Floating IP From Control Node
82     [Documentation]    Check reachability of VM instance through floating IP by pinging them.
83     OpenStackOperations.Ping Vm From Control Node
84     ...    ${VM_FLOATING_IPS}[0]
85     ...    additional_args=-I ${EXTERNAL_INTERNET_ADDR}
86
87 Ping Vm Instance2 Floating IP From Control Node
88     [Documentation]    Check reachability of VM instance through floating IP by pinging them.
89     OpenStackOperations.Ping Vm From Control Node
90     ...    ${VM_FLOATING_IPS}[1]
91     ...    additional_args=-I ${EXTERNAL_INTERNET_ADDR}
92
93 Ping Vm Instance2 Floating IP From Vm Instance1 With Floating IP (Hairpinning)
94     [Documentation]    Check reachability of VM instance floating IP from another VM instance with FIP (with ttl=1 to make sure no router hops)
95     ${dst_ip} =    BuiltIn.Create List    ${VM_FLOATING_IPS}[1]
96     OpenStackOperations.Test Operations From Vm Instance
97     ...    ${NETWORKS}[0]
98     ...    ${NET1_FIP_VM_IPS}[0]
99     ...    ${dst_ip}
100     ...    ttl=1
101
102 Connectivity Tests To Vm Instance2 Floating IP From Vm Instance3 With Floating IP (FIP-FIP in the same compute node)
103     [Documentation]    Check reachability of VM instance floating IP from another VM instance with FIP (FIP-FIP in the same compute node)
104     BuiltIn.Pass Execution    pass this test until ovs 2.9 is ready
105     ${dst_ip} =    BuiltIn.Create List    ${VM_FLOATING_IPS}[1]
106     OpenStackOperations.Test Netcat Operations From Vm Instance    ${NETWORKS}[0]    ${NET1_FIP_VM_IPS}[2]    ${dst_ip}
107
108 Ping Vm Instance1 Floating IP From SNAT VM Instance1
109     [Documentation]    Check reachability of VM instance floating IP from another VM without Floating IP
110     ${expect_ping_to_work} =    Set Variable If    "skip_if_controller" in @{TEST_TAGS}    False    True
111     ${dst_ip} =    BuiltIn.Create List    ${VM_FLOATING_IPS}[0]
112     OpenStackOperations.Test Operations From Vm Instance
113     ...    ${NETWORKS}[0]
114     ...    ${NET1_SNAT_VM_IPS}[0]
115     ...    ${dst_ip}
116     ...    ttl=1
117     ...    ping_should_succeed=${expect_ping_to_work}
118     OpenStackOperations.Test Operations From Vm Instance
119     ...    ${NETWORKS}[1]
120     ...    ${NET2_SNAT_VM_IPS}[0]
121     ...    ${dst_ip}
122     ...    ttl=1
123     ...    ping_should_succeed=${expect_ping_to_work}
124
125 Ping Vm Instance1 Floating IP From SNAT VM Instance2
126     [Documentation]    Check reachability of VM instance floating IP from another VM without Floating IP
127     ${expect_ping_to_work} =    Set Variable If    "skip_if_controller" in @{TEST_TAGS}    False    True
128     ${dst_ip} =    BuiltIn.Create List    ${VM_FLOATING_IPS}[0]
129     OpenStackOperations.Test Operations From Vm Instance
130     ...    ${NETWORKS}[0]
131     ...    ${NET1_SNAT_VM_IPS}[1]
132     ...    ${dst_ip}
133     ...    ttl=1
134     ...    ping_should_succeed=${expect_ping_to_work}
135
136 Ping Vm Instance2 Floating IP From SNAT VM Instance1
137     [Documentation]    Check reachability of VM instance floating IP from another VM without Floating IP
138     ${expect_ping_to_work} =    Set Variable If    "skip_if_controller" in @{TEST_TAGS}    False    True
139     ${dst_ip} =    BuiltIn.Create List    ${VM_FLOATING_IPS}[1]
140     OpenStackOperations.Test Operations From Vm Instance
141     ...    ${NETWORKS}[0]
142     ...    ${NET1_SNAT_VM_IPS}[0]
143     ...    ${dst_ip}
144     ...    ttl=1
145     ...    ping_should_succeed=${expect_ping_to_work}
146     OpenStackOperations.Test Operations From Vm Instance
147     ...    ${NETWORKS}[1]
148     ...    ${NET2_SNAT_VM_IPS}[0]
149     ...    ${dst_ip}
150     ...    ttl=1
151     ...    ping_should_succeed=${expect_ping_to_work}
152
153 Ping Vm Instance2 Floating IP From SNAT VM Instance2
154     [Documentation]    Check reachability of VM instance floating IP from another VM without Floating IP
155     ${expect_ping_to_work} =    Set Variable If    "skip_if_controller" in @{TEST_TAGS}    False    True
156     ${dst_ip} =    BuiltIn.Create List    ${VM_FLOATING_IPS}[1]
157     OpenStackOperations.Test Operations From Vm Instance
158     ...    ${NETWORKS}[0]
159     ...    ${NET1_SNAT_VM_IPS}[1]
160     ...    ${dst_ip}
161     ...    ttl=1
162     ...    ping_should_succeed=${expect_ping_to_work}
163
164 Ping External Network PNF from Vm Instance 1 After Floating IP Assignment
165     [Documentation]    Check reachability of External Network PNF from VM instance (with ttl=1 to make sure no router hops)
166     ${dst_ip} =    BuiltIn.Create List    ${EXTERNAL_PNF}
167     OpenStackOperations.Test Operations From Vm Instance
168     ...    ${NETWORKS}[0]
169     ...    ${NET1_FIP_VM_IPS}[0]
170     ...    ${dst_ip}
171     ...    ttl=1
172     ...    ping_tries=8
173
174 SNAT - TCP connection to External Gateway From SNAT VM Instance1
175     [Documentation]    Login to the VM instance and test TCP connection to the controller via SNAT
176     [Tags]    non_gate
177     OpenStackOperations.Test Netcat Operations From Vm Instance
178     ...    ${NETWORKS}[0]
179     ...    ${NET1_SNAT_VM_IPS}[0]
180     ...    ${EXTERNAL_GATEWAY}
181
182 SNAT - UDP connection to External Gateway From SNAT VM Instance1
183     [Documentation]    Login to the VM instance and test UDP connection to the controller via SNAT
184     [Tags]    non_gate
185     OpenStackOperations.Test Netcat Operations From Vm Instance
186     ...    ${NETWORKS}[0]
187     ...    ${NET1_SNAT_VM_IPS}[0]
188     ...    ${EXTERNAL_GATEWAY}
189     ...    -u
190
191 SNAT - TCP connection to External Gateway From SNAT VM Instance2
192     [Documentation]    Login to the VM instance and test TCP connection to the controller via SNAT
193     [Tags]    non_gate
194     OpenStackOperations.Test Netcat Operations From Vm Instance
195     ...    ${NETWORKS}[0]
196     ...    ${NET1_SNAT_VM_IPS}[1]
197     ...    ${EXTERNAL_GATEWAY}
198
199 SNAT - UDP connection to External Gateway From SNAT VM Instance2
200     [Documentation]    Login to the VM instance and test UDP connection to the controller via SNAT
201     [Tags]    non_gate
202     OpenStackOperations.Test Netcat Operations From Vm Instance
203     ...    ${NETWORKS}[0]
204     ...    ${NET1_SNAT_VM_IPS}[1]
205     ...    ${EXTERNAL_GATEWAY}
206     ...    -u
207
208 SNAT - TCP connection to External Gateway From SNAT VM Instance3
209     [Documentation]    Login to the VM instance and test TCP connection to the controller via SNAT
210     [Tags]    non_gate
211     OpenStackOperations.Test Netcat Operations From Vm Instance
212     ...    ${NETWORKS}[1]
213     ...    ${NET2_SNAT_VM_IPS}[0]
214     ...    ${EXTERNAL_GATEWAY}
215
216 SNAT - UDP connection to External Gateway From SNAT VM Instance3
217     [Documentation]    Login to the VM instance and test UDP connection to the controller via SNAT
218     [Tags]    non_gate
219     OpenStackOperations.Test Netcat Operations From Vm Instance
220     ...    ${NETWORKS}[1]
221     ...    ${NET2_SNAT_VM_IPS}[0]
222     ...    ${EXTERNAL_GATEWAY}
223     ...    -u
224
225 Ping External Network PNF from SNAT VM Instance1
226     [Documentation]    Check reachability of External Network PNF from SNAT VM Instance1
227     [Tags]    non_gate
228     ${expect_ping_to_work} =    Set Variable If    "skip_if_controller" in @{TEST_TAGS}    False    True
229     ${dst_ip} =    BuiltIn.Create List    ${EXTERNAL_PNF}
230     OpenStackOperations.Test Operations From Vm Instance
231     ...    ${NETWORKS}[0]
232     ...    ${NET1_SNAT_VM_IPS}[0]
233     ...    ${dst_ip}
234     ...    ping_should_succeed=${expect_ping_to_work}
235
236 Ping External Network PNF from SNAT VM Instance2
237     [Documentation]    Check reachability of External Network PNF from SNAT VM Instance2
238     [Tags]    non_gate
239     ${expect_ping_to_work} =    Set Variable If    "skip_if_controller" in @{TEST_TAGS}    False    True
240     ${dst_ip} =    BuiltIn.Create List    ${EXTERNAL_PNF}
241     OpenStackOperations.Test Operations From Vm Instance
242     ...    ${NETWORKS}[0]
243     ...    ${NET1_SNAT_VM_IPS}[1]
244     ...    ${dst_ip}
245     ...    ping_should_succeed=${expect_ping_to_work}
246
247 Remove Floating Ip from VM Instance 1
248     [Documentation]    Delete FIP from VM Instance 1
249     [Tags]    non_gate
250     OpenStackOperations.Remove Floating Ip From Vm    ${NET1_FIP_VMS}[0]    ${VM_FLOATING_IPS}[0]
251
252 Remove Floating Ip from VM Instance 2
253     [Documentation]    Delete FIP from VM Instance 2
254     [Tags]    non_gate
255     OpenStackOperations.Remove Floating Ip From Vm    ${NET1_FIP_VMS}[1]    ${VM_FLOATING_IPS}[1]
256
257 Ping External Network PNF from Vm Instance 1 After Floating IP Removal
258     [Documentation]    Check reachability of External Network PNF from VM instance (with ttl=1 to make sure no router hops)
259     [Tags]    non_gate
260     ${expect_ping_to_work} =    Set Variable If    "skip_if_controller" in @{TEST_TAGS}    False    True
261     ${dst_ip} =    BuiltIn.Create List    ${EXTERNAL_PNF}
262     OpenStackOperations.Test Operations From Vm Instance
263     ...    ${NETWORKS}[0]
264     ...    ${NET1_FIP_VM_IPS}[0]
265     ...    ${dst_ip}
266     ...    ttl=1
267     ...    ping_should_succeed=${expect_ping_to_work}
268
269 Ping External Network PNF from Vm Instance 2 After Floating IP Removal
270     [Documentation]    Check reachability of External Network PNF from VM instance (with ttl=1 to make sure no router hops)
271     [Tags]    non_gate
272     ${expect_ping_to_work} =    Set Variable If    "skip_if_controller" in @{TEST_TAGS}    False    True
273     ${dst_ip} =    BuiltIn.Create List    ${EXTERNAL_PNF}
274     OpenStackOperations.Test Operations From Vm Instance
275     ...    ${NETWORKS}[0]
276     ...    ${NET1_FIP_VM_IPS}[1]
277     ...    ${dst_ip}
278     ...    ttl=1
279     ...    ping_should_succeed=${expect_ping_to_work}
280
281
282 *** Keywords ***
283 Suite Setup
284     OpenStackOperations.OpenStack Suite Setup
285     FOR    ${network}    IN    @{NETWORKS}
286         OpenStackOperations.Create Network    ${network}
287     END
288     FOR    ${network}    ${subnet}    ${cidr}    IN ZIP    ${NETWORKS}    ${SUBNETS}
289     ...    ${SUBNET_CIDRS}
290         OpenStackOperations.Create SubNet    ${network}    ${subnet}    ${cidr}
291     END
292     OpenStackOperations.Create Allow All SecurityGroup    ${SECURITY_GROUP}
293     OpenStackOperations.Create Vm Instance On Compute Node
294     ...    ${NETWORKS}[0]
295     ...    ${NET1_FIP_VMS}[0]
296     ...    ${OS_CMP1_HOSTNAME}
297     ...    sg=${SECURITY_GROUP}
298     OpenStackOperations.Create Vm Instance On Compute Node
299     ...    ${NETWORKS}[0]
300     ...    ${NET1_FIP_VMS}[1]
301     ...    ${OS_CMP2_HOSTNAME}
302     ...    sg=${SECURITY_GROUP}
303     OpenStackOperations.Create Vm Instance On Compute Node
304     ...    ${NETWORKS}[0]
305     ...    ${NET1_FIP_VMS}[2]
306     ...    ${OS_CMP2_HOSTNAME}
307     ...    sg=${SECURITY_GROUP}
308     OpenStackOperations.Create Vm Instance On Compute Node
309     ...    ${NETWORKS}[0]
310     ...    ${NET_1_SNAT_VMS}[0]
311     ...    ${OS_CMP1_HOSTNAME}
312     ...    sg=${SECURITY_GROUP}
313     OpenStackOperations.Create Vm Instance On Compute Node
314     ...    ${NETWORKS}[0]
315     ...    ${NET_1_SNAT_VMS}[1]
316     ...    ${OS_CMP1_HOSTNAME}
317     ...    sg=${SECURITY_GROUP}
318     OpenStackOperations.Create Vm Instance On Compute Node
319     ...    ${NETWORKS}[1]
320     ...    ${NET_2_SNAT_VMS}[0]
321     ...    ${OS_CMP2_HOSTNAME}
322     ...    sg=${SECURITY_GROUP}
323     @{NET1_FIP_VM_IPS}    ${NET1_FIP_DHCP_IP} =    OpenStackOperations.Get VM IPs    @{NET1_FIP_VMS}
324     @{NET1_SNAT_VM_IPS}    ${NET1_SNAT_DHCP_IP} =    OpenStackOperations.Get VM IPs    @{NET1_SNAT_VMS}
325     @{NET2_SNAT_VM_IPS}    ${NET2_SNAT_DHCP_IP} =    OpenStackOperations.Get VM IPs    @{NET2_SNAT_VMS}
326     BuiltIn.Set Suite Variable    @{NET1_FIP_VM_IPS}
327     BuiltIn.Set Suite Variable    @{NET1_SNAT_VM_IPS}
328     BuiltIn.Set Suite Variable    @{NET2_SNAT_VM_IPS}
329     BuiltIn.Should Not Contain    ${NET1_FIP_VM_IPS}    None
330     BuiltIn.Should Not Contain    ${NET1_SNAT_VM_IPS}    None
331     BuiltIn.Should Not Contain    ${NET2_SNAT_VM_IPS}    None
332     BuiltIn.Should Not Contain    ${NET1_FIP_DHCP_IP}    None
333     BuiltIn.Should Not Contain    ${NET1_SNAT_DHCP_IP}    None
334     BuiltIn.Should Not Contain    ${NET2_SNAT_DHCP_IP}    None
335     OpenStackOperations.Create Network
336     ...    ${EXTERNAL_NET_NAME}
337     ...    --provider-network-type flat --provider-physical-network ${PUBLIC_PHYSICAL_NETWORK}
338     OpenStackOperations.Update Network    ${EXTERNAL_NET_NAME}    --external
339     OpenStackOperations.Create Subnet
340     ...    ${EXTERNAL_NET_NAME}
341     ...    ${EXTERNAL_SUBNET_NAME}
342     ...    ${EXTERNAL_SUBNET}
343     ...    --gateway ${EXTERNAL_GATEWAY} --allocation-pool ${EXTERNAL_SUBNET_ALLOCATION_POOL}
344     FOR    ${router}    IN    @{ROUTERS}
345         OpenStackOperations.Create Router    ${router}
346     END
347     FOR    ${router}    ${interface}    IN ZIP    ${ROUTERS}    ${SUBNETS}
348         OpenStackOperations.Add Router Interface    ${router}    ${interface}
349     END
350     FOR    ${router}    IN    @{ROUTERS}
351         OpenStackOperations.Add Router Gateway    ${router}    ${EXTERNAL_NET_NAME}
352     END
353     ${data} =    Utils.Get Data From URI    1    ${NEUTRON_ROUTERS_API}
354     BuiltIn.Log    ${data}
355     FOR    ${router}    IN    @{ROUTERS}
356         Should Contain    ${data}    ${router}
357     END
358     OpenStackOperations.Show Debugs    @{NET1_FIP_VMS}    @{NET1_SNAT_VMS}    @{NET2_SNAT_VMS}
359     OpenStackOperations.Get Suite Debugs