2 Documentation Test suite to validate subnet routing and multicast functionality in an openstack integrated environment.
3 ... The assumption of this suite is that the environment is already configured with the proper
4 ... integration bridges and vxlan tunnels.
5 Suite Setup Suite Setup
6 Suite Teardown Stop Suite
7 Test Setup SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
8 Test Teardown OpenStackOperations.Get Test Teardown Debugs
9 Resource ../../../libraries/BgpOperations.robot
10 Resource ../../../libraries/KarafKeywords.robot
11 Resource ../../../libraries/OpenStackOperations.robot
12 Resource ../../../libraries/Utils.robot
13 Resource ../../../libraries/SetupUtils.robot
14 Resource ../../../variables/Variables.robot
15 Resource ../../../variables/netvirt/Variables.robot
16 Resource ../../../libraries/VpnOperations.robot
20 ${SECURITY_GROUP} mc_sg
21 ${NUM_OF_PORTS_PER_NETWORK} 4
22 ${NUM_OF_INSTANCES} 20
23 ${VPN_INSTANCE_ID} 4ae8cd92-48ca-49b5-94e1-b2921a261111
25 ${LOOPBACK_IP} 5.5.5.2
27 ${DCGW_SYSTEM_IP} ${TOOLS_SYSTEM_1_IP}
28 ${RPING_MIP_IP} sudo arping -I eth0:1 -c 5 -b -s @{EXTRA_NW_SUBNET}[0] @{EXTRA_NW_SUBNET}[0]
29 ${RPING_MIP_IP1} sudo arping -I eth0:1 -c 5 -b -s @{EXTRA_NW_SUBNET}[1] @{EXTRA_NW_SUBNET}[1]
30 ${RPING_MIP_IP2} sudo arping -I eth0:1 -c 5 -b -s @{EXTRA_NW_SUBNET}[2] @{EXTRA_NW_SUBNET}[2]
31 @{INTERFACE_STATE} up down
32 @{NETWORKS} mc_net_1 mc_net_2 mc_net_3
33 @{NET_1_VMS} mc_net_1_vm_1 mc_net_1_vm_2 mc_net_1_vm_3 mc_net_1_vm_4
34 @{NET_2_VMS} mc_net_2_vm_1 mc_net_2_vm_2 mc_net_2_vm_3 mc_net_2_vm_4
35 @{NET_3_VMS} mc_net_3_vm_1 mc_net_3_vm_2 mc_net_3_vm_3 mc_net_3_vm_4
36 @{NET_1_PORTS} mc_net_1_port_1 mc_net_1_port_2 mc_net_1_port_3 mc_net_1_port_4
37 @{NET_2_PORTS} mc_net_2_port_1 mc_net_2_port_2 mc_net_2_port_3 mc_net_2_port_4
38 @{NET_3_PORTS} mc_net_3_port_1 mc_net_3_port_2 mc_net_3_port_3 mc_net_3_port_4
39 @{SUBNETS} mc_sub_1 mc_sub_2 mc_sub_3
40 @{SUBNET_CIDR} 10.1.0.0/24 10.2.0.0/24 10.3.0.0/24
41 @{EXTRA_NW_SUBNET} 10.1.0.100 10.2.0.100 10.3.0.100
45 Verify The Subnet Route When Neutron Port Hosting Subnet Route Is Down/up On Single VSwitch Topology
46 [Documentation] Verify the subnet route when enterprise host is down and up.
47 BuiltIn.Wait Until Keyword Succeeds 30s 5s OpenStackOperations.Configure_IP_On_Sub_Interface @{NETWORKS}[0] @{EXTRA_NW_SUBNET}[0] @{NET_1_VM_IPS}[0]
48 ... ${MASK} @{INTERFACE_STATE}[1]
49 ${allowed_ip_list} = BuiltIn.Create List @{EXTRA_NW_SUBNET}[0]
50 BuiltIn.Wait Until Keyword Succeeds 30s 10s Utils.Check For Elements At URI ${FIB_ENTRY_URL} ${allowed_ip_list}
51 BuiltIn.Wait Until Keyword Succeeds 30s 5s OpenStackOperations.Configure_IP_On_Sub_Interface @{NETWORKS}[0] @{EXTRA_NW_SUBNET}[0] @{NET_1_VM_IPS}[0]
52 ... ${MASK} @{INTERFACE_STATE}[0]
53 BuiltIn.Wait Until Keyword Succeeds 30s 5s OpenStackOperations.Verify_IP_Configured_On_Sub_Interface @{NETWORKS}[0] @{EXTRA_NW_SUBNET}[0] @{NET_1_VM_IPS}[0]
54 BuiltIn.Wait Until Keyword Succeeds 30s 10s Utils.Check For Elements At URI ${FIB_ENTRY_URL} ${allowed_ip_list}
55 Verify Ping between Inter Intra And Enterprise host
57 Verify Enterprise Hosts Reachability After VM Reboot
58 [Documentation] Restart the VSwitch1 which is hosting the enterprise host and check the subnet route
59 OpenStackOperations.Get ControlNode Connection
60 @{NET_1_VM_IPS} ${NET1_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_1_VMS}
61 OpenStackOperations.Reboot Nova VM @{NET_1_VMS}[0]
62 @{NET_1_VM_IPS} ${NET1_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_1_VMS}
63 BuiltIn.Wait Until Keyword Succeeds 30s 5s OpenStackOperations.Configure_IP_On_Sub_Interface @{NETWORKS}[0] @{EXTRA_NW_SUBNET}[0] @{NET_1_VM_IPS}[0]
64 ... ${MASK} @{INTERFACE_STATE}[0]
65 BuiltIn.Wait Until Keyword Succeeds 30s 5s OpenStackOperations.Verify_IP_Configured_On_Sub_Interface @{NETWORKS}[0] @{EXTRA_NW_SUBNET}[0] @{NET_1_VM_IPS}[0]
66 Verify Ping between Inter Intra And Enterprise host
68 Verify The Subnet Route For Multiple Subnets On Multi VSwitch Topology When DC-GW Is Restarted
69 [Documentation] Restart dcgw and check enterprise hosts reachability
70 BgpOperations.Restart BGP Processes On DCGW ${DCGW_SYSTEM_IP}
71 Create BGP Config On DCGW
72 Verify Ping between Inter Intra And Enterprise host
74 Verify The Subnet Route For Multiple Subnets On Multi VSwitch Topology When Qbgp Is Restarted
75 [Documentation] Restart qbgp and check enterprise hosts reachability
76 BgpOperations.Restart BGP Processes On ODL ${ODL_SYSTEM_IP}
77 Verify Ping between Inter Intra And Enterprise host
79 Verify The Subnet Route When Vswitch Hosting Subnet Route Is Restarted On Single Vswitch Topology
80 [Documentation] Restart single OVS node on which subnet route is configured and verify enterprise hosts reachability
81 OVSDB.Restart OVSDB ${OS_COMPUTE_2_IP}
82 BuiltIn.Wait Until Keyword Succeeds 10s 20s OVSDB.Verify Ovsdb State ${OS_COMPUTE_2_IP}
83 VpnOperations.Verify Tunnel Status as UP
84 Verify Ping between Inter Intra And Enterprise host
88 [Documentation] Test Suite for Subnet_Routing_and_Multicast_Deployments.
89 VpnOperations.Basic Suite Setup
90 BgpOperations.Start Quagga Processes On ODL ${ODL_SYSTEM_IP}
91 BgpOperations.Start Quagga Processes On DCGW ${DCGW_SYSTEM_IP}
95 [Documentation] Test Teardown for Subnet_Routing_and_Multicast_Deployments.
96 BgpOperations.Delete BGP Configuration On ODL session
97 BgpOperations.Delete BGP Config On Quagga ${DCGW_SYSTEM_IP} ${AS_ID}
98 BgpOperations.Stop BGP Processes On Node ${ODL_SYSTEM_IP}
99 BgpOperations.Stop BGP Processes On Node ${DCGW_SYSTEM_IP}
100 OpenStackOperations.OpenStack Suite Teardown
103 [Documentation] Create basic topology
104 OpenStackOperations.OpenStack Suite Setup
105 ${id} = OpenStackOperations.Get Project Id ${ODL_RESTCONF_USER}
106 OpenStackOperations.Set Instance Quota For Project ${NUM_OF_INSTANCES} ${id}
107 Create Neutron Networks
108 Create Neutron Subnets ${3}
109 OpenStackOperations.Create And Configure Security Group ${SECURITY_GROUP}
112 Create Sub Interfaces And Verify
114 : FOR ${network} IN @{NETWORKS}
115 \ ${network_id} = OpenStackOperations.Get Net Id ${network}
116 \ VpnOperations.Associate L3VPN To Network networkid=${network_id} vpnid=${VPN_INSTANCE_ID}
117 Create BGP Config On ODL
118 Create BGP Config On DCGW
119 BuiltIn.Wait Until Keyword Succeeds 60s 10s VpnOperations.Verify Tunnel Status as UP
120 ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET_1_VM_IPS}[0] ${RPING_MIP_IP}
121 BuiltIn.Should Contain ${output} broadcast Received 0 reply
122 ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[1] @{NET_2_VM_IPS}[0] ${RPING_MIP_IP1}
123 BuiltIn.Should Contain ${output} broadcast Received 0 reply
124 ${output} = OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[2] @{NET_3_VM_IPS}[0] ${RPING_MIP_IP2}
125 BuiltIn.Should Contain ${output} broadcast Received 0 reply
127 Create Neutron Networks
128 [Documentation] Create required number of networks
129 : FOR ${net} IN @{NETWORKS}
130 \ OpenStackOperations.Create Network ${net}
131 BuiltIn.Wait Until Keyword Succeeds 3s 1s Utils.Check For Elements At URI ${NETWORK_URL} ${NETWORKS}
133 Create Neutron Subnets
134 [Arguments] ${num_of_network} ${additional_args}=${EMPTY} ${verbose}=TRUE
135 [Documentation] Create required number of subnets for previously created networks
136 : FOR ${index} IN RANGE 0 ${num_of_network}
137 \ OpenStackOperations.Create SubNet @{NETWORKS}[${index}] @{SUBNETS}[${index}] @{SUBNET_CIDR}[${index}]
138 BuiltIn.Wait Until Keyword Succeeds 3s 1s Utils.Check For Elements At URI ${SUBNETWORK_URL} ${SUBNETS}
141 [Documentation] Create required number of ports under previously created subnets
142 ${allowed_address_pairs_args1} = BuiltIn.Set Variable --allowed-address ip-address=@{EXTRA_NW_SUBNET}[0] --allowed-address ip-address=@{EXTRA_NW_SUBNET}[1]
143 ${allowed_address_pairs_args2} = BuiltIn.Set Variable --allowed-address ip-address=@{EXTRA_NW_SUBNET}[1] --allowed-address ip-address=@{EXTRA_NW_SUBNET}[2]
144 ${allowed_address_pairs_args3} = BuiltIn.Set Variable --allowed-address ip-address=@{EXTRA_NW_SUBNET}[2] --allowed-address ip-address=@{EXTRA_NW_SUBNET}[0]
145 : FOR ${index} IN RANGE 0 ${NUM_OF_PORTS_PER_NETWORK}
146 \ OpenStackOperations.Create Port @{NETWORKS}[0] @{NET_1_PORTS}[${index}] sg=${SECURITY_GROUP} additional_args=${allowed_address_pairs_args1}
147 : FOR ${index} IN RANGE 0 ${NUM_OF_PORTS_PER_NETWORK}
148 \ OpenStackOperations.Create Port @{NETWORKS}[1] @{NET_2_PORTS}[${index}] sg=${SECURITY_GROUP} additional_args=${allowed_address_pairs_args2}
149 : FOR ${index} IN RANGE 0 ${NUM_OF_PORTS_PER_NETWORK}
150 \ OpenStackOperations.Create Port @{NETWORKS}[2] @{NET_3_PORTS}[${index}] sg=${SECURITY_GROUP} additional_args=${allowed_address_pairs_args3}
153 [Documentation] Create Vm instances on compute nodes
154 : FOR ${index} IN RANGE 0 2
155 \ OpenStackOperations.Create Vm Instance With Port On Compute Node @{NET_1_PORTS}[${index}] @{NET_1_VMS}[${index}] ${OS_CMP1_HOSTNAME} sg=${SECURITY_GROUP}
156 \ OpenStackOperations.Create Vm Instance With Port On Compute Node @{NET_1_PORTS}[${index+2}] @{NET_1_VMS}[${index+2}] ${OS_CMP2_HOSTNAME} sg=${SECURITY_GROUP}
157 \ OpenStackOperations.Create Vm Instance With Port On Compute Node @{NET_2_PORTS}[${index}] @{NET_2_VMS}[${index}] ${OS_CMP1_HOSTNAME} sg=${SECURITY_GROUP}
158 \ OpenStackOperations.Create Vm Instance With Port On Compute Node @{NET_2_PORTS}[${index+2}] @{NET_2_VMS}[${index+2}] ${OS_CMP2_HOSTNAME} sg=${SECURITY_GROUP}
159 \ OpenStackOperations.Create Vm Instance With Port On Compute Node @{NET_3_PORTS}[${index}] @{NET_3_VMS}[${index}] ${OS_CMP1_HOSTNAME} sg=${SECURITY_GROUP}
160 \ OpenStackOperations.Create Vm Instance With Port On Compute Node @{NET_3_PORTS}[${index+2}] @{NET_3_VMS}[${index+2}] ${OS_CMP2_HOSTNAME} sg=${SECURITY_GROUP}
161 @{NET_1_VM_IPS} ${NET1_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_1_VMS}
162 @{NET_2_VM_IPS} ${NET2_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_2_VMS}
163 @{NET_3_VM_IPS} ${NET3_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_3_VMS}
164 BuiltIn.Set Suite Variable @{NET_1_VM_IPS}
165 BuiltIn.Set Suite Variable @{NET_2_VM_IPS}
166 BuiltIn.Set Suite Variable @{NET_3_VM_IPS}
167 BuiltIn.Should Not Contain ${NET_1_VM_IPS} None
168 BuiltIn.Should Not Contain ${NET_2_VM_IPS} None
169 BuiltIn.Should Not Contain ${NET_3_VM_IPS} None
170 OpenStackOperations.Show Debugs @{NET_1_VMS} @{NET_2_VMS} @{NET_3_VMS}
172 Create Sub Interfaces And Verify
173 [Documentation] Create Sub Interface and verify for all VMs
174 BuiltIn.Wait Until Keyword Succeeds 30s 5s OpenStackOperations.Configure_IP_On_Sub_Interface @{NETWORKS}[0] @{EXTRA_NW_SUBNET}[0] @{NET_1_VM_IPS}[0]
175 ... ${MASK} @{INTERFACE_STATE}[0]
176 BuiltIn.Wait Until Keyword Succeeds 30s 5s OpenStackOperations.Verify_IP_Configured_On_Sub_Interface @{NETWORKS}[0] @{EXTRA_NW_SUBNET}[0] @{NET_1_VM_IPS}[0]
177 BuiltIn.Wait Until Keyword Succeeds 30s 5s OpenStackOperations.Configure_IP_On_Sub_Interface @{NETWORKS}[1] @{EXTRA_NW_SUBNET}[1] @{NET_2_VM_IPS}[0]
178 ... ${MASK} @{INTERFACE_STATE}[0]
179 BuiltIn.Wait Until Keyword Succeeds 30s 5s OpenStackOperations.Verify_IP_Configured_On_Sub_Interface @{NETWORKS}[1] @{EXTRA_NW_SUBNET}[1] @{NET_2_VM_IPS}[0]
180 BuiltIn.Wait Until Keyword Succeeds 30s 5s OpenStackOperations.Configure_IP_On_Sub_Interface @{NETWORKS}[2] @{EXTRA_NW_SUBNET}[2] @{NET_3_VM_IPS}[0]
181 ... ${MASK} @{INTERFACE_STATE}[0]
182 BuiltIn.Wait Until Keyword Succeeds 30s 5s OpenStackOperations.Verify_IP_Configured_On_Sub_Interface @{NETWORKS}[2] @{EXTRA_NW_SUBNET}[2] @{NET_3_VM_IPS}[0]
185 [Documentation] Create L3VPN and verify the same
186 ${net_id} = OpenStackOperations.Get Net Id @{NETWORKS}[0]
187 ${tenant_id} = OpenStackOperations.Get Tenant ID From Network ${net_id}
188 VpnOperations.VPN Create L3VPN vpnid=${VPN_INSTANCE_ID} name=${VPN_NAME} rd=["${L3VPN_RD}"] exportrt=["${L3VPN_RD}"] importrt=["${L3VPN_RD}"] tenantid=${tenant_id}
189 VpnOperations.Verify L3VPN On ODL ${VPN_INSTANCE_ID}
191 Create BGP Config On ODL
192 [Documentation] Configure BGP Config on ODL
193 KarafKeywords.Issue Command On Karaf Console ${BGP_CONFIG_SERVER_CMD}
194 BgpOperations.Create BGP Configuration On ODL localas=${AS_ID} routerid=${ODL_SYSTEM_IP}
195 BgpOperations.AddNeighbor To BGP Configuration On ODL remoteas=${AS_ID} neighborAddr=${DCGW_SYSTEM_IP}
196 ${output} = BgpOperations.Get BGP Configuration On ODL session
197 BuiltIn.Should Contain ${output} ${DCGW_SYSTEM_IP}
199 Create BGP Config On DCGW
200 [Documentation] Configure BGP on DCGW
201 BgpOperations.Configure BGP And Add Neighbor On DCGW ${DCGW_SYSTEM_IP} ${AS_ID} ${DCGW_SYSTEM_IP} ${ODL_SYSTEM_IP} ${VPN_NAME} ${L3VPN_RD}
203 ${output} = BgpOperations.Execute Show Command On Quagga ${DCGW_SYSTEM_IP} ${RUN_CONFIG}
204 BuiltIn.Should Contain ${output} ${ODL_SYSTEM_IP}
205 ${output} = BuiltIn.Wait Until Keyword Succeeds 180s 10s BgpOperations.Verify BGP Neighbor Status On Quagga ${DCGW_SYSTEM_IP} ${ODL_SYSTEM_IP}
207 Verify Ping between Inter Intra And Enterprise host
208 [Documentation] Ping Enterprise Host for Intra, Inter from different and same network
209 ${dst_ip_list} = BuiltIn.Create List @{NET_1_VM_IPS} @{NET_2_VM_IPS} @{EXTRA_NW_SUBNET}
210 OpenStackOperations.Test Operations From Vm Instance @{NETWORKS}[0] @{NET_1_VM_IPS}[0] ${dst_ip_list}
211 OpenStackOperations.Test Operations From Vm Instance @{NETWORKS}[1] @{NET_2_VM_IPS}[0] ${dst_ip_list}
212 OpenStackOperations.Test Operations From Vm Instance @{NETWORKS}[0] @{NET_1_VM_IPS}[2] ${dst_ip_list}
213 OpenStackOperations.Test Operations From Vm Instance @{NETWORKS}[1] @{NET_2_VM_IPS}[2] ${dst_ip_list}