Add testcase for Vswitch Hosting Subnet Route Restart
[integration/test.git] / csit / suites / netvirt / subnet_routing / subnet_routing_and_multicast.robot
1 *** Settings ***
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
17
18 *** Variables ***
19 ${AS_ID}          100
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
24 ${VPN_NAME}       mc_vpn1
25 ${LOOPBACK_IP}    5.5.5.2
26 ${L3VPN_RD}       2200: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
42 ${MASK}           255.255.255.0
43
44 *** Test Cases ***
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
56
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
67
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
73
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
78
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
85
86 Verify The Subnet Route When Vswitch Hosting Subnet Enterprise Host Is Restarted On Multiple Vswitch Topology
87     [Documentation]    Restart the OVS node on both compute nodes and verify the subnet route
88     OVSDB.Restart OVSDB    ${OS_COMPUTE_1_IP}
89     OVSDB.Restart OVSDB    ${OS_COMPUTE_2_IP}
90     BuiltIn.Wait Until Keyword Succeeds    10s    20s    OVSDB.Verify Ovsdb State    ${OS_COMPUTE_1_IP}
91     BuiltIn.Wait Until Keyword Succeeds    10s    20s    OVSDB.Verify Ovsdb State    ${OS_COMPUTE_2_IP}
92     VpnOperations.Verify Tunnel Status as UP
93     Verify Ping between Inter Intra And Enterprise host
94
95 *** Keywords ***
96 Suite Setup
97     [Documentation]    Test Suite for Subnet_Routing_and_Multicast_Deployments.
98     VpnOperations.Basic Suite Setup
99     BgpOperations.Start Quagga Processes On ODL    ${ODL_SYSTEM_IP}
100     BgpOperations.Start Quagga Processes On DCGW    ${DCGW_SYSTEM_IP}
101     Create Setup
102
103 Stop Suite
104     [Documentation]    Test Teardown for Subnet_Routing_and_Multicast_Deployments.
105     BgpOperations.Delete BGP Configuration On ODL    session
106     BgpOperations.Delete BGP Config On Quagga    ${DCGW_SYSTEM_IP}    ${AS_ID}
107     BgpOperations.Stop BGP Processes On Node    ${ODL_SYSTEM_IP}
108     BgpOperations.Stop BGP Processes On Node    ${DCGW_SYSTEM_IP}
109     OpenStackOperations.OpenStack Suite Teardown
110
111 Create Setup
112     [Documentation]    Create basic topology
113     OpenStackOperations.OpenStack Suite Setup
114     ${id} =    OpenStackOperations.Get Project Id    ${ODL_RESTCONF_USER}
115     OpenStackOperations.Set Instance Quota For Project    ${NUM_OF_INSTANCES}    ${id}
116     Create Neutron Networks
117     Create Neutron Subnets    ${3}
118     OpenStackOperations.Create And Configure Security Group    ${SECURITY_GROUP}
119     Create Neutron Ports
120     Create Nova VMs
121     Create Sub Interfaces And Verify
122     Create L3VPN
123     : FOR    ${network}    IN    @{NETWORKS}
124     \    ${network_id} =    OpenStackOperations.Get Net Id    ${network}
125     \    VpnOperations.Associate L3VPN To Network    networkid=${network_id}    vpnid=${VPN_INSTANCE_ID}
126     Create BGP Config On ODL
127     Create BGP Config On DCGW
128     BuiltIn.Wait Until Keyword Succeeds    60s    10s    VpnOperations.Verify Tunnel Status as UP
129     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{NET_1_VM_IPS}[0]    ${RPING_MIP_IP}
130     BuiltIn.Should Contain    ${output}    broadcast    Received 0 reply
131     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[1]    @{NET_2_VM_IPS}[0]    ${RPING_MIP_IP1}
132     BuiltIn.Should Contain    ${output}    broadcast    Received 0 reply
133     ${output} =    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[2]    @{NET_3_VM_IPS}[0]    ${RPING_MIP_IP2}
134     BuiltIn.Should Contain    ${output}    broadcast    Received 0 reply
135
136 Create Neutron Networks
137     [Documentation]    Create required number of networks
138     : FOR    ${net}    IN    @{NETWORKS}
139     \    OpenStackOperations.Create Network    ${net}
140     BuiltIn.Wait Until Keyword Succeeds    3s    1s    Utils.Check For Elements At URI    ${NETWORK_URL}    ${NETWORKS}
141
142 Create Neutron Subnets
143     [Arguments]    ${num_of_network}    ${additional_args}=${EMPTY}    ${verbose}=TRUE
144     [Documentation]    Create required number of subnets for previously created networks
145     : FOR    ${index}    IN RANGE    0    ${num_of_network}
146     \    OpenStackOperations.Create SubNet    @{NETWORKS}[${index}]    @{SUBNETS}[${index}]    @{SUBNET_CIDR}[${index}]
147     BuiltIn.Wait Until Keyword Succeeds    3s    1s    Utils.Check For Elements At URI    ${SUBNETWORK_URL}    ${SUBNETS}
148
149 Create Neutron Ports
150     [Documentation]    Create required number of ports under previously created subnets
151     ${allowed_address_pairs_args1} =    BuiltIn.Set Variable    --allowed-address ip-address=@{EXTRA_NW_SUBNET}[0] --allowed-address ip-address=@{EXTRA_NW_SUBNET}[1]
152     ${allowed_address_pairs_args2} =    BuiltIn.Set Variable    --allowed-address ip-address=@{EXTRA_NW_SUBNET}[1] --allowed-address ip-address=@{EXTRA_NW_SUBNET}[2]
153     ${allowed_address_pairs_args3} =    BuiltIn.Set Variable    --allowed-address ip-address=@{EXTRA_NW_SUBNET}[2] --allowed-address ip-address=@{EXTRA_NW_SUBNET}[0]
154     : FOR    ${index}    IN RANGE    0    ${NUM_OF_PORTS_PER_NETWORK}
155     \    OpenStackOperations.Create Port    @{NETWORKS}[0]    @{NET_1_PORTS}[${index}]    sg=${SECURITY_GROUP}    additional_args=${allowed_address_pairs_args1}
156     : FOR    ${index}    IN RANGE    0    ${NUM_OF_PORTS_PER_NETWORK}
157     \    OpenStackOperations.Create Port    @{NETWORKS}[1]    @{NET_2_PORTS}[${index}]    sg=${SECURITY_GROUP}    additional_args=${allowed_address_pairs_args2}
158     : FOR    ${index}    IN RANGE    0    ${NUM_OF_PORTS_PER_NETWORK}
159     \    OpenStackOperations.Create Port    @{NETWORKS}[2]    @{NET_3_PORTS}[${index}]    sg=${SECURITY_GROUP}    additional_args=${allowed_address_pairs_args3}
160
161 Create Nova VMs
162     [Documentation]    Create Vm instances on compute nodes
163     : FOR    ${index}    IN RANGE    0    2
164     \    OpenStackOperations.Create Vm Instance With Port On Compute Node    @{NET_1_PORTS}[${index}]    @{NET_1_VMS}[${index}]    ${OS_CMP1_HOSTNAME}    sg=${SECURITY_GROUP}
165     \    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}
166     \    OpenStackOperations.Create Vm Instance With Port On Compute Node    @{NET_2_PORTS}[${index}]    @{NET_2_VMS}[${index}]    ${OS_CMP1_HOSTNAME}    sg=${SECURITY_GROUP}
167     \    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}
168     \    OpenStackOperations.Create Vm Instance With Port On Compute Node    @{NET_3_PORTS}[${index}]    @{NET_3_VMS}[${index}]    ${OS_CMP1_HOSTNAME}    sg=${SECURITY_GROUP}
169     \    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}
170     @{NET_1_VM_IPS}    ${NET1_DHCP_IP} =    OpenStackOperations.Get VM IPs    @{NET_1_VMS}
171     @{NET_2_VM_IPS}    ${NET2_DHCP_IP} =    OpenStackOperations.Get VM IPs    @{NET_2_VMS}
172     @{NET_3_VM_IPS}    ${NET3_DHCP_IP} =    OpenStackOperations.Get VM IPs    @{NET_3_VMS}
173     BuiltIn.Set Suite Variable    @{NET_1_VM_IPS}
174     BuiltIn.Set Suite Variable    @{NET_2_VM_IPS}
175     BuiltIn.Set Suite Variable    @{NET_3_VM_IPS}
176     BuiltIn.Should Not Contain    ${NET_1_VM_IPS}    None
177     BuiltIn.Should Not Contain    ${NET_2_VM_IPS}    None
178     BuiltIn.Should Not Contain    ${NET_3_VM_IPS}    None
179     OpenStackOperations.Show Debugs    @{NET_1_VMS}    @{NET_2_VMS}    @{NET_3_VMS}
180
181 Create Sub Interfaces And Verify
182     [Documentation]    Create Sub Interface and verify for all VMs
183     BuiltIn.Wait Until Keyword Succeeds    30s    5s    OpenStackOperations.Configure_IP_On_Sub_Interface    @{NETWORKS}[0]    @{EXTRA_NW_SUBNET}[0]    @{NET_1_VM_IPS}[0]
184     ...    ${MASK}    @{INTERFACE_STATE}[0]
185     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]
186     BuiltIn.Wait Until Keyword Succeeds    30s    5s    OpenStackOperations.Configure_IP_On_Sub_Interface    @{NETWORKS}[1]    @{EXTRA_NW_SUBNET}[1]    @{NET_2_VM_IPS}[0]
187     ...    ${MASK}    @{INTERFACE_STATE}[0]
188     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]
189     BuiltIn.Wait Until Keyword Succeeds    30s    5s    OpenStackOperations.Configure_IP_On_Sub_Interface    @{NETWORKS}[2]    @{EXTRA_NW_SUBNET}[2]    @{NET_3_VM_IPS}[0]
190     ...    ${MASK}    @{INTERFACE_STATE}[0]
191     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]
192
193 Create L3VPN
194     [Documentation]    Create L3VPN and verify the same
195     ${net_id} =    OpenStackOperations.Get Net Id    @{NETWORKS}[0]
196     ${tenant_id} =    OpenStackOperations.Get Tenant ID From Network    ${net_id}
197     VpnOperations.VPN Create L3VPN    vpnid=${VPN_INSTANCE_ID}    name=${VPN_NAME}    rd=["${L3VPN_RD}"]    exportrt=["${L3VPN_RD}"]    importrt=["${L3VPN_RD}"]    tenantid=${tenant_id}
198     VpnOperations.Verify L3VPN On ODL    ${VPN_INSTANCE_ID}
199
200 Create BGP Config On ODL
201     [Documentation]    Configure BGP Config on ODL
202     KarafKeywords.Issue Command On Karaf Console    ${BGP_CONFIG_SERVER_CMD}
203     BgpOperations.Create BGP Configuration On ODL    localas=${AS_ID}    routerid=${ODL_SYSTEM_IP}
204     BgpOperations.AddNeighbor To BGP Configuration On ODL    remoteas=${AS_ID}    neighborAddr=${DCGW_SYSTEM_IP}
205     ${output} =    BgpOperations.Get BGP Configuration On ODL    session
206     BuiltIn.Should Contain    ${output}    ${DCGW_SYSTEM_IP}
207
208 Create BGP Config On DCGW
209     [Documentation]    Configure BGP on DCGW
210     BgpOperations.Configure BGP And Add Neighbor On DCGW    ${DCGW_SYSTEM_IP}    ${AS_ID}    ${DCGW_SYSTEM_IP}    ${ODL_SYSTEM_IP}    ${VPN_NAME}    ${L3VPN_RD}
211     ...    ${LOOPBACK_IP}
212     ${output} =    BgpOperations.Execute Show Command On Quagga    ${DCGW_SYSTEM_IP}    ${RUN_CONFIG}
213     BuiltIn.Should Contain    ${output}    ${ODL_SYSTEM_IP}
214     ${output} =    BuiltIn.Wait Until Keyword Succeeds    180s    10s    BgpOperations.Verify BGP Neighbor Status On Quagga    ${DCGW_SYSTEM_IP}    ${ODL_SYSTEM_IP}
215
216 Verify Ping between Inter Intra And Enterprise host
217     [Documentation]    Ping Enterprise Host for Intra, Inter from different and same network
218     ${dst_ip_list} =    BuiltIn.Create List    @{NET_1_VM_IPS}    @{NET_2_VM_IPS}    @{EXTRA_NW_SUBNET}
219     OpenStackOperations.Test Operations From Vm Instance    @{NETWORKS}[0]    @{NET_1_VM_IPS}[0]    ${dst_ip_list}
220     OpenStackOperations.Test Operations From Vm Instance    @{NETWORKS}[1]    @{NET_2_VM_IPS}[0]    ${dst_ip_list}
221     OpenStackOperations.Test Operations From Vm Instance    @{NETWORKS}[0]    @{NET_1_VM_IPS}[2]    ${dst_ip_list}
222     OpenStackOperations.Test Operations From Vm Instance    @{NETWORKS}[1]    @{NET_2_VM_IPS}[2]    ${dst_ip_list}