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
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
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
34 Create All Controller Sessions
35 [Documentation] Create sessions for all three controllers
36 ClusterManagement.ClusterManagement Setup
38 Create Private Network
39 [Documentation] Create Network with neutron request.
40 : FOR ${NetworkElement} IN @{NETWORKS_NAME}
41 \ OpenStackOperations.Create Network ${NetworkElement}
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]
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
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
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
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}
86 [Documentation] Create Router and Add Interface to the subnets.
87 OpenStackOperations.Create Router router1
89 Add Interfaces To Router
90 [Documentation] Add Interfaces
91 : FOR ${interface} IN @{SUBNETS_NAME}
92 \ OpenStackOperations.Add Router Interface router1 ${interface}
94 Add Router Gateway To Router
95 [Documentation] Add Router Gateway
96 OpenStackOperations.Add Router Gateway router1 ${external_net_name}
98 Verify Created Routers
99 [Documentation] Check created routers using northbound rest calls
100 ${data} Utils.Get Data From URI 1 ${NEUTRON_ROUTERS_API}
102 Should Contain ${data} router1
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
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}
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}
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}
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
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
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}
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
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}
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
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}
158 Delete Router Interfaces
159 [Documentation] Remove Interface to the subnets.
160 : FOR ${interface} IN @{SUBNETS_NAME}
161 \ OpenStackOperations.Remove Interface router1 ${interface}
164 [Documentation] Delete Router and Interface to the subnets.
165 OpenStackOperations.Delete Router router1
167 Verify Deleted Routers
168 [Documentation] Check deleted routers using northbound rest calls
169 ${data} Utils.Get Data From URI 1 ${NEUTRON_ROUTERS_API}
171 Should Not Contain ${data} router1
174 [Documentation] Delete Sub Nets for the Networks with neutron request.
175 OpenStackOperations.Delete SubNet @{SUBNETS_NAME}[0]
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}
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