Remove variables and scripts for netvirt
[integration/test.git] / csit / suites / openstack / securitygroup / security_group_l3bcast.robot
1 *** Settings ***
2 Documentation       Test Suite for Network and Subnet Broadcast with security group
3
4 Library             String
5 Library             RequestsLibrary
6 Library             SSHLibrary
7 Library             Collections
8 Library             json
9 Library             OperatingSystem
10 Resource            ../../../libraries/DevstackUtils.robot
11 Resource            ../../../libraries/KarafKeywords.robot
12 Resource            ../../../libraries/OpenStackOperations.robot
13 Resource            ../../../libraries/OVSDB.robot
14 Resource            ../../../libraries/OvsManager.robot
15 Resource            ../../../libraries/SetupUtils.robot
16 Resource            ../../../libraries/Utils.robot
17 Resource            ../../../variables/Variables.robot
18
19 Suite Setup         Start Suite
20 Suite Teardown      OpenStackOperations.OpenStack Suite Teardown
21 Test Setup          SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
22 Test Teardown       OpenStackOperations.Get Test Teardown Debugs
23
24
25 *** Variables ***
26 @{SECURITY_GROUP}       sgbcast1    sgbcast2
27 @{NETWORKS}             sgbcast_net_1    sgbcast_net_2
28 @{SUBNETS}              sgbcast_sub_1    sgbcast_sub_2
29 @{SUBNET_CIDRS}         55.0.0.0/24    56.0.0.0/24
30 ${ROUTER}               sgbcast_router
31 @{NET_1_PORTS}          sgbcast_net_1_port_1    sgbcast_net_1_port_2    sgbcast_net_1_port_3
32 @{NET_2_PORTS}          sgbcast_net_2_port_1    sgbcast_net_2_port_2
33 @{NET_1_VMS}            sgbcast_net_1_vm_1    sgbcast_net_1_vm_2    sgbcast_net_1_vm_3
34 @{NET_2_VMS}            sgbcast_net_2_vm_1    sgbcast_net_2_vm_2
35 ${DUMP_FLOW}            sudo ovs-ofctl dump-flows br-int -OOpenflow13
36 ${DUMP_PORT_DESC}       sudo ovs-ofctl dump-ports-desc br-int -OOpenflow13
37 ${PACKET_COUNT}         5
38 ${BCAST_IP}             255.255.255.255
39 ${SUBNET1_BCAST_IP}     55.0.0.255
40 ${SUBNET2_BCAST_IP}     56.0.0.255
41 ${ENABLE_BCAST}         echo 0 | sudo tee /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
42 ${EGRESS_ACL_TABLE}     240
43
44
45 *** Test Cases ***
46 Verify Network Broadcast traffic between the VMs hosted in Single Network
47     [Documentation]    This TC is to verify Network Broadcast traffic between the VMs hosted in Same Network on same/different compute node
48     ${pkt_check} =    BuiltIn.Set Variable If    "${OPENSTACK_TOPO}" == "1cmb-0ctl-0cmp"    10    5
49     Wait Until Keyword Succeeds
50     ...    30s
51     ...    5s
52     ...    Verify L3Broadcast With Antispoofing Table
53     ...    ${OS_CMP1_IP}
54     ...    ${EGRESS_ACL_TABLE}
55     ...    ${BCAST_IP}
56     ...    ${VM_IPS}[0]
57     ...    same
58     ...    pingsuccess
59     ...    pkt_check=${pkt_check}
60
61 Verify Network Broadcast traffic between the VMs hosted in Multi Network
62     [Documentation]    This TC is to verify Network Broadcast traffic between the VMs hosted in Different Network on same/different compute node.
63     ${pkt_check} =    BuiltIn.Set Variable If    "${OPENSTACK_TOPO}" == "1cmb-0ctl-0cmp"    5    0
64     Wait Until Keyword Succeeds
65     ...    30s
66     ...    5s
67     ...    Verify L3Broadcast With Antispoofing Table
68     ...    ${OS_CMP1_IP}
69     ...    ${EGRESS_ACL_TABLE}
70     ...    ${BCAST_IP}
71     ...    ${VM_IPS}[3]
72     ...    different
73     ...    pingsuccess
74     ...    pkt_check=${pkt_check}
75
76 Verify Subnet Broadcast traffic between the VMs hosted on same compute node in Single Network
77     [Documentation]    Verify L3-Subnet Broadcast traffic between the VMs hosted on same compute node in Single Network
78     Wait Until Keyword Succeeds
79     ...    30s
80     ...    5s
81     ...    Verify L3Broadcast With Antispoofing Table
82     ...    ${OS_CMP1_IP}
83     ...    ${EGRESS_ACL_TABLE}
84     ...    ${SUBNET1_BCAST_IP}
85     ...    ${VM_IPS}[0]
86     ...    same
87     ...    pingsuccess
88     ...    ${VM2_SUBMETA}
89     ...    pkt_check=5
90     ...    additional_args=| grep ${VM2_SUBMETA}
91
92 Verify Subnet Broadcast traffic between the VMs hosted on Different compute node in Single Network
93     [Documentation]    Verify L3-Subnet Broadcast traffic between the VMs hosted on same compute node in Single Network
94     Wait Until Keyword Succeeds
95     ...    30s
96     ...    5s
97     ...    Verify L3Broadcast With Antispoofing Table
98     ...    ${OS_CMP2_IP}
99     ...    ${EGRESS_ACL_TABLE}
100     ...    ${SUBNET1_BCAST_IP}
101     ...    ${VM_IPS}[0]
102     ...    same
103     ...    pingsuccess
104     ...    ${VM3_SUBMETA}
105     ...    pkt_check=5
106     ...    additional_args=| grep ${VM3_SUBMETA}
107
108 Verify Subnet Broadcast traffic between the VMs hosted on same compute node in Multi Network
109     [Documentation]    Verify L3-Subnet Broadcast traffic between the VMs hosted on same compute node in Multi Network
110     Wait Until Keyword Succeeds
111     ...    30s
112     ...    5s
113     ...    Verify L3Broadcast With Antispoofing Table
114     ...    ${OS_CMP1_IP}
115     ...    ${EGRESS_ACL_TABLE}
116     ...    ${SUBNET2_BCAST_IP}
117     ...    ${VM_IPS}[0]
118     ...    different
119     ...    nosuccess
120     ...    ${VM4_SUBMETA}
121     ...    pkt_check=0
122     ...    additional_args=| grep ${VM4_SUBMETA}
123
124 Verify Subnet Broadcast traffic between the VMs hosted on Different compute node in Multi Network
125     [Documentation]    Verify L3-Subnet Broadcast traffic between the VMs hosted on Different compute node in Multi Network
126     Wait Until Keyword Succeeds
127     ...    30s
128     ...    5s
129     ...    Verify L3Broadcast With Antispoofing Table
130     ...    ${OS_CMP2_IP}
131     ...    ${EGRESS_ACL_TABLE}
132     ...    ${SUBNET2_BCAST_IP}
133     ...    ${VM_IPS}[0]
134     ...    different
135     ...    nosuccess
136     ...    ${VM5_SUBMETA}
137     ...    pkt_check=0
138     ...    additional_args=| grep ${VM5_SUBMETA}
139
140
141 *** Keywords ***
142 Start Suite
143     [Documentation]    Test Suite for Network and Subnet Broadcast with security group
144     OpenStackOperations.OpenStack Suite Setup
145     Create Setup
146     OpenStackOperations.Show Debugs    @{NET_1_VMS}    @{NET_2_VMS}
147     OpenStackOperations.Get Suite Debugs
148
149 Create Setup
150     FOR    ${network}    IN    @{NETWORKS}
151         OpenStackOperations.Create Network    ${network}
152     END
153     FOR    ${i}    IN RANGE    len(${NETWORKS})
154         OpenStackOperations.Create SubNet    ${NETWORKS}[${i}]    ${SUBNETS}[${i}]    ${SUBNET_CIDRS}[${i}]
155     END
156     OpenStackOperations.Create Allow All SecurityGroup    ${SECURITY_GROUP}[0]
157     OpenStackOperations.Create Router    ${ROUTER}
158     FOR    ${interface}    IN    @{SUBNETS}
159         OpenStackOperations.Add Router Interface    ${ROUTER}    ${interface}
160     END
161     FOR    ${port_net1}    IN    @{NET_1_PORTS}
162         OpenStackOperations.Create Port    ${NETWORKS}[0]    ${port_net1}    sg=${SECURITY_GROUP}[0]
163     END
164     FOR    ${port_net2}    IN    @{NET_2_PORTS}
165         OpenStackOperations.Create Port    ${NETWORKS}[1]    ${port_net2}    sg=${SECURITY_GROUP}[0]
166     END
167     ${ports} =    BuiltIn.Create List
168     ...    ${NET_1_PORTS}[0]
169     ...    ${NET_1_PORTS}[1]
170     ...    ${NET_1_PORTS}[2]
171     ...    ${NET_2_PORTS}[0]
172     ...    ${NET_2_PORTS}[1]
173     ${vms} =    BuiltIn.Create List
174     ...    ${NET_1_VMS}[0]
175     ...    ${NET_1_VMS}[1]
176     ...    ${NET_1_VMS}[2]
177     ...    ${NET_2_VMS}[0]
178     ...    ${NET_2_VMS}[1]
179     @{nodes} =    BuiltIn.Create List
180     ...    ${OS_CMP1_HOSTNAME}
181     ...    ${OS_CMP1_HOSTNAME}
182     ...    ${OS_CMP2_HOSTNAME}
183     ...    ${OS_CMP1_HOSTNAME}
184     ...    ${OS_CMP2_HOSTNAME}
185     FOR    ${port}    ${vm}    ${node}    IN ZIP    ${ports}    ${vms}
186     ...    ${nodes}
187         OpenStackOperations.Create Vm Instance With Port On Compute Node
188         ...    ${port}
189         ...    ${vm}
190         ...    ${node}
191         ...    sg=${SECURITY_GROUP}[0]
192     END
193     @{vms} =    Collections.Combine Lists    ${NET_1_VMS}    ${NET_2_VMS}
194     @{VM_IPS} =    OpenStackOperations.Get VM IPs    @{vms}
195     BuiltIn.Should Not Contain    ${VM_IPS}    None
196     BuiltIn.Set Suite Variable    @{VM_IPS}
197     OpenStackOperations.Execute Command on VM Instance    ${NETWORKS[0]}    ${VM_IPS}[0]    ${ENABLE_BCAST}
198     OpenStackOperations.Execute Command on VM Instance    ${NETWORKS[1]}    ${VM_IPS}[3]    ${ENABLE_BCAST}
199     ${vm1_in_port}    ${vm1_meta} =    BuiltIn.Wait Until Keyword Succeeds
200     ...    60s
201     ...    10s
202     ...    Get VMs Metadata and In Port
203     ...    ${NET_1_PORTS}[0]
204     ...    ${OS_CMP1_IP}
205     ${vm2_in_port}    ${vm2_meta} =    BuiltIn.Wait Until Keyword Succeeds
206     ...    60s
207     ...    10s
208     ...    Get VMs Metadata and In Port
209     ...    ${NET_1_PORTS}[1]
210     ...    ${OS_CMP1_IP}
211     ${vm3_in_port}    ${vm3_meta} =    BuiltIn.Wait Until Keyword Succeeds
212     ...    60s
213     ...    10s
214     ...    Get VMs Metadata and In Port
215     ...    ${NET_1_PORTS}[2]
216     ...    ${OS_CMP2_IP}
217     ${vm4_in_port}    ${vm4_meta} =    BuiltIn.Wait Until Keyword Succeeds
218     ...    60s
219     ...    10s
220     ...    Get VMs Metadata and In Port
221     ...    ${NET_2_PORTS}[0]
222     ...    ${OS_CMP1_IP}
223     ${vm5_in_port}    ${vm5_meta} =    BuiltIn.Wait Until Keyword Succeeds
224     ...    60s
225     ...    10s
226     ...    Get VMs Metadata and In Port
227     ...    ${NET_2_PORTS}[1]
228     ...    ${OS_CMP2_IP}
229     ${VM1_SUBMETA} =    Get Submetadata    ${vm1_meta}
230     ${VM2_SUBMETA} =    Get Submetadata    ${vm2_meta}
231     ${VM3_SUBMETA} =    Get Submetadata    ${vm3_meta}
232     ${VM4_SUBMETA} =    Get Submetadata    ${vm4_meta}
233     ${VM5_SUBMETA} =    Get Submetadata    ${vm5_meta}
234     BuiltIn.Set Suite Variable    ${VM1_SUBMETA}
235     BuiltIn.Set Suite Variable    ${VM2_SUBMETA}
236     BuiltIn.Set Suite Variable    ${VM3_SUBMETA}
237     BuiltIn.Set Suite Variable    ${VM4_SUBMETA}
238     BuiltIn.Set Suite Variable    ${VM5_SUBMETA}
239
240 Get VMs Metadata and In Port
241     [Documentation]    This keyword is to get the VM metadata and the in_port Id of the VM
242     [Arguments]    ${portname}    ${OS_COMPUTE_IP}
243     ${subport} =    OpenStackOperations.Get Sub Port Id    ${portname}
244     ${get_vm_in_port} =    Utils.Run Command On Remote System And Log
245     ...    ${OS_COMPUTE_IP}
246     ...    ${DUMP_PORT_DESC} | grep ${subport} | awk '{print$1}'
247     ${vms_in_port} =    BuiltIn.Should Match Regexp    ${get_vm_in_port}    [0-9]+
248     ${grep_metadata} =    Utils.Run Command On Remote System And Log
249     ...    ${OS_COMPUTE_IP}
250     ...    ${DUMP_FLOW} | grep table=${VLAN_INTERFACE_INGRESS_TABLE} | grep in_port=${vms_in_port} | awk '{print$7}'
251     @{metadata} =    String.Split string    ${grep_metadata}    ,
252     ${get_write_metadata} =    Collections.get from list    ${metadata}    0
253     @{complete_metadata} =    String.Split string    ${get_write_metadata}    :
254     ${extract_metadata} =    Collections.get from list    ${complete_metadata}    1
255     @{split_metadata} =    String.Split string    ${extract_metadata}    /
256     ${vm_metadata} =    Collections.Get From List    ${split_metadata}    0
257     RETURN    ${vms_in_port}    ${vm_metadata}
258
259 Get Submetadata
260     [Documentation]    Get the submetadata of the VM
261     [Arguments]    ${vm_metadata}
262     ${cmd1} =    Utils.Run Command On Remote System And Log
263     ...    ${OS_CMP1_IP}
264     ...    ${DUMP_FLOW} | grep ${EGRESS_LPORT_DISPATCHER_TABLE} | grep write_metadata:
265     ${output1} =    String.Get Regexp Matches    ${cmd1}    reg6=(\\w+)    1
266     ${cmd2} =    Utils.Run Command On Remote System And Log
267     ...    ${OS_CMP2_IP}
268     ...    ${DUMP_FLOW} | grep ${EGRESS_LPORT_DISPATCHER_TABLE} | grep write_metadata:
269     ${output2} =    String.Get Regexp Matches    ${cmd2}    reg6=(\\w+)    1
270     ${metalist} =    Collections.Combine Lists    ${output1}    ${output2}
271     FOR    ${meta}    IN    @{metalist}
272         ${metadata_check_status} =    Run Keyword And Return Status    should contain    ${vm_metadata}    ${meta}
273         IF    ${metadata_check_status} == True    RETURN    ${meta}
274     END
275
276 Verify L3Broadcast With Antispoofing Table
277     [Documentation]    Verify the l3 broadcast requests are hitting to antispoofing table in same subnet
278     [Arguments]    ${OS_COMPUTE_IP}    ${EGRESS_ACL_TABLE}    ${BCAST_IP}    ${vm_ip}    ${subnet_var}    ${ping_response}='pingsuccess'
279     ...    ${vm_submeta}=''    ${pkt_check}=0    ${additional_args}=${EMPTY}
280     ${get_pkt_count_before_bcast} =    OvsManager.Get Packet Count In Table For IP
281     ...    ${OS_COMPUTE_IP}
282     ...    ${EGRESS_ACL_TABLE}
283     ...    ${BCAST_IP}
284     ...    additional_args=| grep ${vm_submeta}
285     ${output} =    OpenStackOperations.Execute Command on VM Instance
286     ...    ${NETWORKS}[0]
287     ...    ${vm_ip}
288     ...    ping -c ${PACKET_COUNT} ${BCAST_IP}
289     IF    '${ping_response}'=='pingsuccess'
290         BuiltIn.Should Contain    ${output}    ${PING_REGEXP}
291     ELSE
292         BuiltIn.Should Contain    ${output}    ${NO_PING_REGEXP}
293     END
294     ${bcast_egress} =    Utils.Run Command On Remote System And Log
295     ...    ${OS_COMPUTE_IP}
296     ...    ${DUMP_FLOW} | grep table=${EGRESS_ACL_TABLE} | grep ${BCAST_IP} ${additional_args}
297     ${get_pkt_count_after_bcast} =    OvsManager.Get Packet Count In Table For IP
298     ...    ${OS_COMPUTE_IP}
299     ...    ${EGRESS_ACL_TABLE}
300     ...    ${BCAST_IP}
301     ...    additional_args=| grep ${vm_submeta}
302     ${pkt_diff} =    Evaluate    int(${get_pkt_count_after_bcast})-int(${get_pkt_count_before_bcast})
303     BuiltIn.Should Be Equal As Numbers    ${pkt_diff}    ${pkt_check}