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/OpenStackOperations.robot
13 Resource ../../../libraries/SetupUtils.robot
14 Resource ../../../libraries/Utils.robot
17 @{NETWORKS_NAME} l3_net
18 @{SUBNETS_NAME} l3_subnet
19 @{VM_INSTANCES_FLOATING} VmInstanceFloating1 VmInstanceFloating2
20 @{VM_INSTANCES_SNAT} VmInstanceSnat3 VmInstanceSnat4
21 @{SUBNETS_RANGE} 90.0.0.0/24
22 ${external_gateway} 10.10.10.250
23 ${external_subnet} 10.10.10.0/24
24 ${external_net_name} external-net
25 ${external_subnet_name} external-subnet
26 ${network1_vlan_id} 167
29 Create All Controller Sessions
30 [Documentation] Create sessions for all three controllers
31 ClusterManagement.ClusterManagement Setup
33 Create Private Network
34 [Documentation] Create Network with neutron request.
35 : FOR ${NetworkElement} IN @{NETWORKS_NAME}
36 \ OpenStackOperations.Create Network ${NetworkElement}
38 Create Subnet For Private Network
39 [Documentation] Create Sub Nets for the Networks with neutron request.
40 OpenStackOperations.Create SubNet @{NETWORKS_NAME}[0] @{SUBNETS_NAME}[0] @{SUBNETS_RANGE}[0]
43 [Documentation] Create VM instances using flavor and image names for a network.
44 OpenStackOperations.Create Vm Instances @{NETWORKS_NAME}[0] ${VM_INSTANCES_FLOATING} sg=csit
45 OpenStackOperations.Create Vm Instances @{NETWORKS_NAME}[0] ${VM_INSTANCES_SNAT} sg=csit
47 Check Vm Instances Have Ip Address
48 [Documentation] Test case to verify that all created VMs are ready and have received their ip addresses.
49 ... We are polling first and longest on the last VM created assuming that if it's received it's address
50 ... already the other instances should have theirs already or at least shortly thereafter.
51 # first, ensure all VMs are in ACTIVE state. if not, we can just fail the test case and not waste time polling
53 : FOR ${vm} IN @{VM_INSTANCES_FLOATING} @{VM_INSTANCES_SNAT}
54 \ Wait Until Keyword Succeeds 15s 5s Verify VM Is ACTIVE ${vm}
55 ${status} ${message} Run Keyword And Ignore Error Wait Until Keyword Succeeds 60s 5s Collect VM IP Addresses
56 ... true @{VM_INSTANCES_FLOATING}
57 ${status} ${message} Run Keyword And Ignore Error Wait Until Keyword Succeeds 60s 5s Collect VM IP Addresses
58 ... true @{VM_INSTANCES_SNAT}
59 ${FLOATING_VM_IPS} ${FLOATING_DHCP_IP} Collect VM IP Addresses false @{VM_INSTANCES_FLOATING}
60 ${SNAT_VM_IPS} ${SNAT_DHCP_IP} Collect VM IP Addresses false @{VM_INSTANCES_SNAT}
61 ${VM_INSTANCES}= Collections.Combine Lists ${VM_INSTANCES_FLOATING} ${VM_INSTANCES_SNAT}
62 ${VM_IPS}= Collections.Combine Lists ${FLOATING_VM_IPS} ${SNAT_VM_IPS}
63 ${LOOP_COUNT} Get Length ${VM_INSTANCES}
64 : FOR ${index} IN RANGE 0 ${LOOP_COUNT}
65 \ ${status} ${message} Run Keyword And Ignore Error Should Not Contain @{VM_IPS}[${index}] None
66 \ Run Keyword If '${status}' == 'FAIL' Write Commands Until Prompt nova console-log @{VM_INSTANCES}[${index}] 30s
67 Set Suite Variable ${FLOATING_VM_IPS}
68 Set Suite Variable ${SNAT_VM_IPS}
69 Should Not Contain ${FLOATING_VM_IPS} None
70 Should Not Contain ${SNAT_VM_IPS} None
71 Should Not Contain @{FLOATING_DHCP_IP}[0] None
72 Should Not Contain @{SNAT_DHCP_IP}[0] None
73 [Teardown] Run Keywords Show Debugs @{VM_INSTANCES_FLOATING} @{VM_INSTANCES_SNAT}
74 ... AND Get Test Teardown Debugs
76 Create External Network And Subnet
77 Create Network ${external_net_name} --router:external --provider:network_type=vlan --provider:physical_network=${PUBLIC_PHYSICAL_NETWORK} --provider:segmentation_id=${network1_vlan_id}
78 Create Subnet ${external_net_name} ${external_subnet_name} ${external_subnet} --gateway ${external_gateway}
81 [Documentation] Create Router and Add Interface to the subnets.
82 OpenStackOperations.Create Router router1
84 Add Interfaces To Router
85 [Documentation] Add Interfaces
86 : FOR ${interface} IN @{SUBNETS_NAME}
87 \ OpenStackOperations.Add Router Interface router1 ${interface}
89 Add Router Gateway To Router
90 [Documentation] Add Router Gateway
91 OpenStackOperations.Add Router Gateway router1 ${external_net_name}
93 Verify Created Routers
94 [Documentation] Check created routers using northbound rest calls
95 ${data} Utils.Get Data From URI 1 ${NEUTRON_ROUTERS_API}
97 Should Contain ${data} router1
99 Create And Associate Floating IPs for VMs
100 [Documentation] Create and associate a floating IP for the VM
101 ${VM_FLOATING_IPS} OpenStackOperations.Create And Associate Floating IPs ${external_net_name} @{VM_INSTANCES_FLOATING}
102 Set Suite Variable ${VM_FLOATING_IPS}
103 [Teardown] Run Keywords Show Debugs @{VM_INSTANCES_FLOATING}
104 ... AND Get Test Teardown Debugs
106 Ping External Gateway From Control Node
107 [Documentation] Check reachability of external gateway by pinging it from the control node.
108 OpenStackOperations.Ping Vm From Control Node ${external_gateway}
110 Ping Vm Instance1 Floating IP From Control Node
111 [Documentation] Check reachability of VM instance through floating IP by pinging them.
112 OpenStackOperations.Ping Vm From Control Node @{VM_FLOATING_IPS}[0]
114 Ping Vm Instance2 Floating IP From Control Node
115 [Documentation] Check reachability of VM instance through floating IP by pinging them.
116 OpenStackOperations.Ping Vm From Control Node @{VM_FLOATING_IPS}[1]
118 Prepare SNAT - Install Netcat On Controller
119 Install Netcat On Controller
121 SNAT - TCP connection to External Gateway From SNAT VM Instance1
122 [Documentation] Login to the VM instance and test TCP connection to the controller via SNAT
123 Test Netcat Operations From Vm Instance @{NETWORKS_NAME}[0] @{SNAT_VM_IPS}[0] ${external_gateway}
125 SNAT - UDP connection to External Gateway From SNAT VM Instance1
126 [Documentation] Login to the VM instance and test UDP connection to the controller via SNAT
127 Test Netcat Operations From Vm Instance @{NETWORKS_NAME}[0] @{SNAT_VM_IPS}[0] ${external_gateway} -u
129 SNAT - TCP connection to External Gateway From SNAT VM Instance2
130 [Documentation] Login to the VM instance and test TCP connection to the controller via SNAT
131 Test Netcat Operations From Vm Instance @{NETWORKS_NAME}[0] @{SNAT_VM_IPS}[1] ${external_gateway}
133 SNAT - UDP connection to External Gateway From SNAT VM Instance2
134 [Documentation] Login to the VM instance and test UDP connection to the controller via SNAT
135 Test Netcat Operations From Vm Instance @{NETWORKS_NAME}[0] @{SNAT_VM_IPS}[1] ${external_gateway} -u
138 [Documentation] Delete Vm instances using instance names.
139 : FOR ${VmElement} IN @{VM_INSTANCES_FLOATING}
140 \ OpenStackOperations.Delete Vm Instance ${VmElement}
141 : FOR ${VmElement} IN @{VM_INSTANCES_SNAT}
142 \ OpenStackOperations.Delete Vm Instance ${VmElement}
144 Delete Router Interfaces
145 [Documentation] Remove Interface to the subnets.
146 : FOR ${interface} IN @{SUBNETS_NAME}
147 \ OpenStackOperations.Remove Interface router1 ${interface}
150 [Documentation] Delete Router and Interface to the subnets.
151 OpenStackOperations.Delete Router router1
153 Verify Deleted Routers
154 [Documentation] Check deleted routers using northbound rest calls
155 ${data} Utils.Get Data From URI 1 ${NEUTRON_ROUTERS_API}
157 Should Not Contain ${data} router1
160 [Documentation] Delete Sub Nets for the Networks with neutron request.
161 OpenStackOperations.Delete SubNet @{SUBNETS_NAME}[0]
164 [Documentation] Delete Networks with neutron request.
165 : FOR ${NetworkElement} IN @{NETWORKS_NAME}
166 \ OpenStackOperations.Delete Network ${NetworkElement}
167 OpenStackOperations.Delete Network ${external_net_name}