2378c6e80ddc7da1eb0ab858b6d486f465794a86
[integration/test.git] / csit / suites / netvirt / snatdnat / snat_dnat.robot
1 *** Settings ***
2 Documentation     Test suite to validate network address translation(snat/dnat) functionality in openstack integrated environment.
3 ...               All the testcases were written to do flow validation since dc gateway is unavailable in csit environment.
4 ...               This suite assumes proper integration bridges and vxlan tunnels are configured in the environment.
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 Library           Collections
10 Library           RequestsLibrary
11 Library           SSHLibrary
12 Library           String
13 Resource          ../../../libraries/BgpOperations.robot
14 Resource          ../../../libraries/OpenStackOperations.robot
15 Resource          ../../../libraries/SetupUtils.robot
16 Resource          ../../../libraries/Tcpdump.robot
17 Resource          ../../../libraries/Utils.robot
18 Resource          ../../../libraries/VpnOperations.robot
19 Resource          ../../../variables/Variables.robot
20 Resource          ../../../variables/netvirt/Variables.robot
21
22 *** Variables ***
23 ${SECURITY_GROUP}    nat_sg
24 ${NETWORK_TYPE}    gre
25 ${SNAT_ENABLED}    "enable_snat": true
26 ${SNAT_DISABLED}    "enable_snat": false
27 ${ROUTER}         nat_router
28 ${AS_ID}          100
29 ${DCGW_SYSTEM_IP}    ${TOOLS_SYSTEM_1_IP}
30 ${LOOPBACK_IP}    5.5.5.2
31 ${DCGW_RD}        100:1
32 ${VPN_NAME}       vpn_1
33 ${VPN_INSTANCE_ID}    4ae8cd92-48ca-49b5-94e1-b2921a261442
34 ${ExtIP}          100.100.100.24
35 @{NETWORKS}       nat_net_1    nat_net_2
36 @{EXTERNAL_NETWORKS}    nat_ext_11    nat_ext_22
37 @{EXTERNAL_SUB_NETWORKS}    nat_ext_sub_net_1    nat_ext_sub_net_2
38 @{SUBNETS}        nat_sub_net_1    nat_sub_net_2
39 @{SUBNET_CIDRS}    10.1.1.0/24    20.1.1.0/24
40 @{EXT_SUBNET_CIDRS}    100.100.100.0/24    200.200.200.0/24
41 @{PORTS}          nat_port_1    nat_port_2    nat_port_3    nat_port_4
42 @{NET_1_VMS}      nat_net_1_vm_1    nat_net_1_vm_2    nat_net_1_vm_3    nat_net_1_vm_4
43
44 *** Test Cases ***
45 Verify Successful Creation Of External Network With Router External Set To TRUE
46     [Documentation]    Create external network,enable snat on router and validate the same.
47     OpenStackOperations.Add Router Gateway    ${ROUTER}    ${EXTERNAL_NETWORKS}[0]    --enable-snat
48     ${output} =    OpenStackOperations.Show Router    ${ROUTER}
49     BuiltIn.Should Contain    ${output}    ${SNAT_ENABLED}
50     ${output} =    OpenStackOperations.Show Network    ${EXTERNAL_NETWORKS}[0]
51     BuiltIn.Should Contain    ${output}    ${EXTERNAL_NETWORKS}[0]
52
53 Verify Successful Update Of Router With External_gateway_info, Disable SNAT And Enable SNAT
54     [Documentation]    Disable snat, enable snat and validate the same.
55     OpenStackOperations.Add Router Gateway    ${ROUTER}    ${EXTERNAL_NETWORKS}[0]    --disable-snat
56     ${output} =    OpenStackOperations.Show Router    ${ROUTER}
57     BuiltIn.Should Contain    ${output}    ${SNAT_DISABLED}
58     OpenStackOperations.Add Router Gateway    ${ROUTER}    ${EXTERNAL_NETWORKS}[0]    --enable-snat
59     ${output} =    OpenStackOperations.Show Router    ${ROUTER}
60     BuiltIn.Should Contain    ${output}    ${SNAT_ENABLED}
61
62 Verify Successful Deletion Of External Network
63     [Documentation]    Delete the external network and validate the same.
64     OpenStackOperations.Remove Gateway    ${ROUTER}
65     ${output} =    OpenStackOperations.Show Router    ${ROUTER}
66     BuiltIn.Should Not Contain    ${output}    ${SNAT_ENABLED}
67
68 Verify Floating Ip Provision And Reachability From External Network Via Neutron Router Through L3vpn
69     [Documentation]    Check floating IP should be present in dump flows after creating the floating IP and associating it to external network
70     ...    which is associated to L3VPN
71     VpnOperations.VPN Create L3VPN    vpnid=${VPN_INSTANCE_ID}    name=${VPN_NAME}    rd=["${DCGW_RD}"]    exportrt=["${DCGW_RD}"]    importrt=["${DCGW_RD}"]
72     ${ext_net_id} =    OpenStackOperations.Get Net Id    ${EXTERNAL_NETWORKS}[0]
73     VpnOperations.Associate L3VPN To Network    networkid=${ext_net_id}    vpnid=${VPN_INSTANCE_ID}
74     OpenStackOperations.Add Router Gateway    ${ROUTER}    ${EXTERNAL_NETWORKS}[0]    --disable-snat
75     ${output} =    OpenStackOperations.Show Router    ${ROUTER}
76     BuiltIn.Should Contain    ${output}    ${SNAT_DISABLED}
77     ${subnetid} =    OpenStackOperations.Get Subnet Id    ${EXTERNAL_SUB_NETWORKS}[0]
78     OpenStackOperations.Add Router Gateway    ${ROUTER}    ${EXTERNAL_NETWORKS}[0]    --fixed-ip subnet=${subnetid},ip-address=${ExtIP}
79     ${float} =    OpenStackOperations.Create And Associate Floating IPs    ${EXTERNAL_NETWORKS}[0]    ${NET_1_VMS}[0]
80     ${float} =    BuiltIn.Set Variable    ${float}[0]
81     @{matching_paras} =    BuiltIn.Create List    nw_dst=${float}    goto_table:${DNAT_TABLE}
82     BuiltIn.Wait Until Keyword Succeeds    10s    5s    OVSDB.Verify Dump Flows For Specific Table    ${OS_CMP1_IP}    ${PDNAT_TABLE}    True
83     ...    ${EMPTY}    @{matching_paras}
84     @{matching_paras} =    BuiltIn.Create List    actions=set_field:${float}    goto_table:${SNAT_TABLE}
85     BuiltIn.Wait Until Keyword Succeeds    10s    5s    OVSDB.Verify Dump Flows For Specific Table    ${OS_CMP1_IP}    ${PSNAT_TABLE}    True
86     ...    ${EMPTY}    @{matching_paras}
87
88 Verify Floating Ip De-provision And Reachability From External Network Via Neutron Router Through L3vpn
89     [Documentation]    Check floating IP should not be present in dump flows after deleting the floating IP
90     ...    and removing the external gateway from router which is associated to L3VPN
91     OpenStackOperations.Get ControlNode Connection
92     ${output} =    OpenStackOperations.OpenStack CLI    openstack floating ip list |awk '{print$2}'
93     ${floating_id} =    BuiltIn.Should Match Regexp    ${output}    [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}
94     OpenStackOperations.Delete Floating IP    ${floating_id}
95     OpenStackOperations.Remove Gateway    ${ROUTER}
96     ${output} =    OVSDB.Get Flow Entries On Node    ${OS_CMP1_CONN_ID}
97     BuiltIn.Should Not Contain    ${output}    ${ExtIP}
98
99 Verify Floating Ip Re-provision And Reachability From External Network Via Neutron Router Through L3vpn
100     [Documentation]    Check floating IP should be present in dump flows after creating the floating IP again wnd associating it to external network
101     ...    which is associated to L3VPN
102     ${subnetid} =    OpenStackOperations.Get Subnet Id    ${EXTERNAL_SUB_NETWORKS}[0]
103     OpenStackOperations.Add Router Gateway    ${ROUTER}    ${EXTERNAL_NETWORKS}[0]    --fixed-ip subnet=${subnetid},ip-address=${ExtIP}
104     ${float} =    OpenStackOperations.Create And Associate Floating IPs    ${EXTERNAL_NETWORKS}[0]    ${NET_1_VMS}[0]
105     ${float} =    BuiltIn.Set Variable    ${float}[0]
106     @{matching_paras} =    BuiltIn.Create List    nw_dst=${float}    goto_table:${DNAT_TABLE}
107     BuiltIn.Wait Until Keyword Succeeds    10s    5s    OVSDB.Verify Dump Flows For Specific Table    ${OS_CMP1_IP}    ${PDNAT_TABLE}    True
108     ...    ${EMPTY}    @{matching_paras}
109     @{matching_paras} =    BuiltIn.Create List    actions=set_field:${float}    goto_table:${SNAT_TABLE}
110     BuiltIn.Wait Until Keyword Succeeds    10s    5s    OVSDB.Verify Dump Flows For Specific Table    ${OS_CMP1_IP}    ${PSNAT_TABLE}    True
111     ...    ${EMPTY}    @{matching_paras}
112
113 Verify Multiple Floating Ip Creation and Association to external network
114     [Documentation]    Check Multiple floating IPs should be present in dump flows after creating multiple floating IPs and associating it to external network
115     ...    which is associated to L3VPN
116     ${subnetid} =    OpenStackOperations.Get Subnet Id    ${EXTERNAL_SUB_NETWORKS}[0]
117     OpenStackOperations.Add Router Gateway    ${ROUTER}    ${EXTERNAL_NETWORKS}[0]    --fixed-ip subnet=${subnetid},ip-address=${ExtIP}
118     ${FloatIp1} =    OpenStackOperations.Create And Associate Floating IPs    ${EXTERNAL_NETWORKS}[0]    ${NET_1_VMS}[1]
119     ${FloatIp2} =    OpenStackOperations.Create And Associate Floating IPs    ${EXTERNAL_NETWORKS}[0]    ${NET_1_VMS}[2]
120     ${FloatIp3} =    OpenStackOperations.Create And Associate Floating IPs    ${EXTERNAL_NETWORKS}[0]    ${NET_1_VMS}[3]
121     ${output} =    OVSDB.Get Flow Entries On Node    ${OS_CMP2_CONN_ID}
122     BuiltIn.Should Match Regexp    ${output}    ${ExtIP}
123     BuiltIn.Should Match Regexp    ${output}    .*${FloatIp1}.*
124     BuiltIn.Should Match Regexp    ${output}    .*${FloatIp2}.*
125     BuiltIn.Should Match Regexp    ${output}    .*${FloatIp3}.*
126
127 *** Keywords ***
128 Suite Setup
129     [Documentation]    Test Suite for Subnet_Routing_and_Multicast_Deployments.
130     VpnOperations.Basic Suite Setup
131     BgpOperations.Start Quagga Processes On ODL    ${ODL_SYSTEM_IP}
132     BgpOperations.Start Quagga Processes On DCGW    ${DCGW_SYSTEM_IP}
133     Create Setup
134     OpenStackOperations.Show Debugs    @{NET_1_VMS}
135     OpenStackOperations.Get Suite Debugs
136
137 Create Setup
138     Create Neutron Networks
139     Create Neutron Subnets
140     OpenStackOperations.Create SubNet    ${EXTERNAL_NETWORKS}[0]    ${EXTERNAL_SUB_NETWORKS}[0]    ${EXT_SUBNET_CIDRS}[0]
141     OpenStackOperations.Create Allow All SecurityGroup    ${SECURITY_GROUP}
142     Create Neutron Ports
143     Create Nova VMs
144     BgpOperations.Setup BGP Peering On ODL    ${ODL_SYSTEM_IP}    ${AS_ID}    ${DCGW_SYSTEM_IP}
145     BgpOperations.Setup BGP Peering On DCGW    ${DCGW_SYSTEM_IP}    ${AS_ID}    ${ODL_SYSTEM_IP}    ${VPN_NAME}    ${DCGW_RD}    ${LOOPBACK_IP}
146     OpenStackOperations.Create Router    ${ROUTER}
147     OpenStackOperations.Add Router Interface    ${ROUTER}    ${SUBNETS}[0]
148     OpenStackOperations.Add Router Interface    ${ROUTER}    ${SUBNETS}[1]
149
150 Create Neutron Networks
151     [Documentation]    Create required number of networks
152     FOR    ${NET}    IN    @{NETWORKS}
153         OpenStackOperations.Create Network    ${NET}
154     END
155     OpenStackOperations.Create Network    ${EXTERNAL_NETWORKS}[0]    --external --provider-network-type ${NETWORK_TYPE}
156     BuiltIn.Wait Until Keyword Succeeds    3s    1s    Utils.Check For Elements At URI    ${NETWORK_URL}    ${NETWORKS}
157
158 Create Neutron Subnets
159     [Documentation]    Create required number of subnets for previously created networks
160     ${num_of_networks} =    BuiltIn.Get Length    ${NETWORKS}
161     FOR    ${index}    IN RANGE    0    ${num_of_networks}
162         OpenStackOperations.Create SubNet    ${NETWORKS}[${index}]    ${SUBNETS}[${index}]    ${SUBNET_CIDRS}[${index}]
163     END
164     BuiltIn.Wait Until Keyword Succeeds    3s    1s    Utils.Check For Elements At URI    ${SUBNETWORK_URL}    ${SUBNETS}
165
166 Create Neutron Ports
167     [Documentation]    Create required number of ports under previously created subnets
168     OpenStackOperations.Create Port    ${NETWORKS}[0]    ${PORTS}[0]    sg=${SECURITY_GROUP}
169     OpenStackOperations.Create Port    ${NETWORKS}[0]    ${PORTS}[1]    sg=${SECURITY_GROUP}
170     OpenStackOperations.Create Port    ${NETWORKS}[1]    ${PORTS}[2]    sg=${SECURITY_GROUP}
171     OpenStackOperations.Create Port    ${NETWORKS}[1]    ${PORTS}[3]    sg=${SECURITY_GROUP}
172     BuiltIn.Wait Until Keyword Succeeds    3s    1s    Utils.Check For Elements At URI    ${CONFIG_API}/neutron:neutron/ports/    ${PORTS}
173
174 Create Nova VMs
175     [Documentation]    Create Vm instances on compute nodes
176     OpenStackOperations.Create Vm Instance With Port On Compute Node    ${PORTS}[0]    ${NET_1_VMS}[0]    ${OS_CMP1_HOSTNAME}    sg=${SECURITY_GROUP}
177     OpenStackOperations.Create Vm Instance With Port On Compute Node    ${PORTS}[1]    ${NET_1_VMS}[1]    ${OS_CMP2_HOSTNAME}    sg=${SECURITY_GROUP}
178     OpenStackOperations.Create Vm Instance With Port On Compute Node    ${PORTS}[2]    ${NET_1_VMS}[2]    ${OS_CMP1_HOSTNAME}    sg=${SECURITY_GROUP}
179     OpenStackOperations.Create Vm Instance With Port On Compute Node    ${PORTS}[3]    ${NET_1_VMS}[3]    ${OS_CMP2_HOSTNAME}    sg=${SECURITY_GROUP}
180     @{NET_1_VM_IPS}    ${NET_1_DHCP_IP} =    OpenStackOperations.Get VM IPs    @{NET_1_VMS}
181     BuiltIn.Set Suite Variable    @{NET_1_VM_IPS}
182     BuiltIn.Should Not Contain    ${NET_1_VM_IPS}    None
183     BuiltIn.Should Not Contain    ${NET_1_DHCP_IP}    None
184
185 Stop Suite
186     [Documentation]    Test teardown for snat suite.
187     BgpOperations.Delete BGP Configuration On ODL    session
188     BgpOperations.Delete BGP Config On Quagga    ${DCGW_SYSTEM_IP}    ${AS_ID}
189     BgpOperations.Stop BGP Processes On Node    ${ODL_SYSTEM_IP}
190     BgpOperations.Stop BGP Processes On Node    ${DCGW_SYSTEM_IP}
191     OpenStackOperations.OpenStack Suite Teardown