16628bdd20f087c9d3ad8fc5a0a65a59ca3dfc1f
[integration/test.git] / csit / suites / netvirt / vnibasedl3forwarding / vnibasedl3forwarding.robot
1 *** Settings ***
2 Documentation     Test Suite for vni-based-l2-l3-nat:
3 ...               This feature attempts to realize the use of VxLAN VNI
4 ...               (Virtual Network Identifier) for VxLAN tenant traffic
5 ...               flowing on the cloud data-network. This is applicable
6 ...               to L2 switching, L3 forwarding and NATing for all VxLAN
7 ...               based provider networks. In doing so, it eliminates the
8 ...               presence of LPort tags, ELAN tags and MPLS labels on the
9 ...               wire and instead, replaces them with VNIs supplied by the
10 ...               tenant’s OpenStack.
11 Suite Setup       Start Suite
12 Suite Teardown    OpenStackOperations.OpenStack Suite Teardown
13 Test Setup        Run Keywords    OpenStackOperations.Get DumpFlows And Ovsconfig    ${OS_CMP1_CONN_ID}
14 ...               AND    OpenStackOperations.Get DumpFlows And Ovsconfig    ${OS_CMP2_CONN_ID}
15 Test Teardown     OpenStackOperations.Get Test Teardown Debugs
16 Library           OperatingSystem
17 Library           RequestsLibrary
18 Library           String
19 Resource          ../../../libraries/DevstackUtils.robot
20 Resource          ../../../libraries/KarafKeywords.robot
21 Resource          ../../../variables/netvirt/Variables.robot
22 Resource          ../../../libraries/OpenStackOperations.robot
23 Resource          ../../../libraries/OVSDB.robot
24 Resource          ../../../libraries/SetupUtils.robot
25 Resource          ../../../libraries/Utils.robot
26 Resource          ../../../libraries/VpnOperations.robot
27 Resource          ../../../variables/netvirt/Variables.robot
28 Resource          ../../../variables/Variables.robot
29
30 *** Variables ***
31 ${EGRESS}         Egress
32 ${INGRESS}        Ingress
33 ${IP}             ipv4
34 ${VNI_SECURITY_GROUP}    vni_sg
35 @{VNI_NETWORKS}    vni_l3_net_0    vni_l3_net_1    vni_l3_net_2    vni_l3_net_3    vni_l3_net_4    vni_l3_net_5
36 @{VNI_SUBNETS}    vni_l3_sub_0    vni_l3_sub_1    vni_l3_sub_2    vni_l3_sub_3    vni_l3_sub_4    vni_l3_sub_5
37 @{VNI_SUBNET_CIDRS}    61.1.1.0/24    62.1.1.0/24    63.1.1.0/24    64.1.1.0/24    65.1.1.0/24    66.1.1.0/24
38 @{VNI_NET_0_PORTS}    vni_l3_net_0_port_1    vni_l3_net_0_port_2
39 @{VNI_NET_1_PORTS}    vni_l3_net_1_port_1    vni_l3_net_1_port_2
40 @{VNI_NET_2_PORTS}    vni_l3_net_2_port_1    vni_l3_net_2_port_2
41 @{VNI_NET_3_PORTS}    vni_l3_net_3_port_1    vni_l3_net_3_port_2
42 @{VNI_NET_4_PORTS}    vni_l3_net_4_port_1    vni_l3_net_4_port_2
43 @{VNI_NET_5_PORTS}    vni_l3_net_5_port_1    vni_l3_net_5_port_2
44 @{VNI_NET_0_VMS}    vni_l3_net_0_vm
45 @{VNI_NET_1_VMS}    vni_l3_net_1_vm
46 @{VNI_NET_2_VMS}    vni_l3_net_2_vm
47 @{VNI_NET_3_VMS}    vni_l3_net_3_vm
48 @{VNI_NET_4_VMS}    vni_l3_net_4_vm
49 @{VNI_NET_5_VMS}    vni_l3_net_5_vm
50 @{VNI_ROUTER}     vni_l3_router1    vni_l3_router2
51 @{VNI_BGPVPN}     vni_l3_bgpvpn
52 @{VNI_RDS}        ["2200:2"]    ["2300:2"]    ["2400:2"]    ["2500:2"]
53 @{VNI_VPN_NAMES}    vni_l3_vpn_1    vni_l3_vpn_2    vni_l3_vpn_3    vni_l3_vpn_4
54 @{VNI_VPN_INSTANCE_IDS}    4ae8cd92-48ca-49b5-94e1-b2921a261441    4ae8cd92-48ca-49b5-94e1-b2921a261442    4ae8cd92-48ca-49b5-94e1-b2921a261443    4ae8cd92-48ca-49b5-94e1-b2921a261444
55
56 *** Test Cases ***
57 VNI Based L3 Forwarding
58     [Documentation]    verify VNI id for L3 Unicast frames exchanged over OVS datapaths that are on different hypervisors
59     Wait Until Keyword Succeeds    60s    5s    OVSDB.Verify Vni Segmentation Id and Tunnel Id    @{VNI_NET_0_PORTS}[0]    @{VNI_NET_1_PORTS}[0]    @{VNI_NETWORKS}[0]
60     ...    @{VNI_NETWORKS}[1]    @{NET_0_VM_IPS}[0]    @{NET_1_VM_IPS}[0]    ${IP}
61
62 VNI Based L3 Forwarding With BGPVPN Router Association
63     [Documentation]    verify VNI id for L3 Unicast frames exchanged over OVS datapaths that are on different hypervisors
64     ...    With Router associated to a BGPVPN.
65     ${net_id} =    OpenStackOperations.Get Net Id    @{VNI_NETWORKS}[0]
66     ${tenant_id} =    OpenStackOperations.Get Tenant ID From Network    ${net_id}
67     VpnOperations.VPN Create L3VPN    vpnid=@{VNI_VPN_INSTANCE_IDS}[0]    name=@{VNI_VPN_NAMES}[0]    rd=@{VNI_RDS}[0]    exportrt=@{VNI_RDS}[0]    importrt=@{VNI_RDS}[0]    tenantid=${tenant_id}
68     ${resp} =    VpnOperations.VPN Get L3VPN    vpnid=@{VNI_VPN_INSTANCE_IDS}[0]
69     BuiltIn.Should Contain    ${resp}    @{VNI_VPN_INSTANCE_IDS}[0]
70     ${router_id} =    OpenStackOperations.Get Router Id    @{VNI_ROUTER}[0]
71     VpnOperations.Associate VPN to Router    routerid=${router_id}    vpnid=@{VNI_VPN_INSTANCE_IDS}[0]
72     ${resp} =    VpnOperations.VPN Get L3VPN    vpnid=@{VNI_VPN_INSTANCE_IDS}[0]
73     BuiltIn.Should Contain    ${resp}    ${router_id}
74     BuiltIn.Wait Until Keyword Succeeds    60s    5s    OVSDB.Verify Vni Segmentation Id and Tunnel Id    @{VNI_NET_0_PORTS}[0]    @{VNI_NET_1_PORTS}[0]    @{VNI_NETWORKS}[0]
75     ...    @{VNI_NETWORKS}[1]    @{NET_0_VM_IPS}[0]    @{NET_1_VM_IPS}[0]    ${IP}
76
77 VNI Based L3 Forwarding With BGPVPN Network Association
78     [Documentation]    verify VNI id for L3 Unicast frames exchanged over OVS datapaths that are on different hypervisors
79     ...    With Networks associated to a BGPVPN.
80     OpenStackOperations.Create Network    @{VNI_NETWORKS}[2]
81     OpenStackOperations.Create Network    @{VNI_NETWORKS}[3]
82     OpenStackOperations.Create SubNet    @{VNI_NETWORKS}[2]    @{VNI_SUBNETS}[2]    @{VNI_SUBNET_CIDRS}[2]
83     OpenStackOperations.Create SubNet    @{VNI_NETWORKS}[3]    @{VNI_SUBNETS}[3]    @{VNI_SUBNET_CIDRS}[3]
84     OpenStackOperations.Create Port    @{VNI_NETWORKS}[2]    @{VNI_NET_2_PORTS}[0]    sg=${VNI_SECURITY_GROUP}
85     OpenStackOperations.Create Port    @{VNI_NETWORKS}[3]    @{VNI_NET_3_PORTS}[0]    sg=${VNI_SECURITY_GROUP}
86     ${net_id} =    OpenStackOperations.Get Net Id    @{VNI_NETWORKS}[2]
87     ${tenant_id} =    OpenStackOperations.Get Tenant ID From Network    ${net_id}
88     BuiltIn.Log    @{VNI_RDS}[1]
89     VpnOperations.VPN Create L3VPN    vpnid=@{VNI_VPN_INSTANCE_IDS}[1]    name=@{VNI_VPN_NAMES}[1]    rd=@{VNI_RDS}[1]    exportrt=@{VNI_RDS}[1]    importrt=@{VNI_RDS}[1]    tenantid=${tenant_id}
90     ${resp} =    VpnOperations.VPN Get L3VPN    vpnid=@{VNI_VPN_INSTANCE_IDS}[1]
91     BuiltIn.Should Contain    ${resp}    @{VNI_VPN_INSTANCE_IDS}[1]
92     ${network2_id} =    OpenStackOperations.Get Net Id    @{VNI_NETWORKS}[2]
93     ${network3_id} =    OpenStackOperations.Get Net Id    @{VNI_NETWORKS}[3]
94     VpnOperations.Associate L3VPN To Network    networkid=${network2_id}    vpnid=@{VNI_VPN_INSTANCE_IDS}[1]
95     ${resp} =    VpnOperations.VPN Get L3VPN    vpnid=@{VNI_VPN_INSTANCE_IDS}[1]
96     BuiltIn.Should Contain    ${resp}    ${network2_id}
97     VpnOperations.Associate L3VPN To Network    networkid=${network3_id}    vpnid=@{VNI_VPN_INSTANCE_IDS}[1]
98     ${resp} =    VpnOperations.VPN Get L3VPN    vpnid=@{VNI_VPN_INSTANCE_IDS}[1]
99     BuiltIn.Should Contain    ${resp}    ${network3_id}
100     OpenStackOperations.Create Vm Instance With Port On Compute Node    @{VNI_NET_2_PORTS}[0]    @{VNI_NET_2_VMS}[0]    ${OS_CMP1_HOSTNAME}    sg=${VNI_SECURITY_GROUP}
101     OpenStackOperations.Create Vm Instance With Port On Compute Node    @{VNI_NET_3_PORTS}[0]    @{VNI_NET_3_VMS}[0]    ${OS_CMP2_HOSTNAME}    sg=${VNI_SECURITY_GROUP}
102     @{NET_2_VM_IPS}    ${NET_2_DHCP_IP} =    OpenStackOperations.Get VM IPs    @{VNI_NET_2_VMS}
103     @{NET_3_VM_IPS}    ${NET_3_DHCP_IP} =    OpenStackOperations.Get VM IPs    @{VNI_NET_3_VMS}
104     BuiltIn.Set Suite Variable    @{NET_2_VM_IPS}
105     BuiltIn.Set Suite Variable    @{NET_3_VM_IPS}
106     BuiltIn.Should Not Contain    ${NET_2_VM_IPS}    None
107     BuiltIn.Should Not Contain    ${NET_3_VM_IPS}    None
108     BuiltIn.Should Not Contain    ${NET_2_DHCP_IP}    None
109     BuiltIn.Should Not Contain    ${NET_3_DHCP_IP}    None
110     BuiltIn.Wait Until Keyword Succeeds    60s    5s    OVSDB.Verify Vni Segmentation Id and Tunnel Id    @{VNI_NET_2_PORTS}[0]    @{VNI_NET_3_PORTS}[0]    @{VNI_NETWORKS}[2]
111     ...    @{VNI_NETWORKS}[3]    @{NET_2_VM_IPS}[0]    @{NET_3_VM_IPS}[0]    ${IP}
112
113 VNI Based L3 Forwarding With BGPVPN With Irt Ert
114     [Documentation]    verify VNI id for L3 Unicast frames exchanged over OVS datapaths that are on different hypervisors
115     ...    With two Networks associated to two BGPVPN.
116     OpenStackOperations.Create Network    @{VNI_NETWORKS}[4]
117     OpenStackOperations.Create Network    @{VNI_NETWORKS}[5]
118     OpenStackOperations.Create SubNet    @{VNI_NETWORKS}[4]    @{VNI_SUBNETS}[4]    @{VNI_SUBNET_CIDRS}[4]
119     OpenStackOperations.Create SubNet    @{VNI_NETWORKS}[5]    @{VNI_SUBNETS}[5]    @{VNI_SUBNET_CIDRS}[5]
120     OpenStackOperations.Create Port    @{VNI_NETWORKS}[4]    @{VNI_NET_4_PORTS}[0]    sg=${VNI_SECURITY_GROUP}
121     OpenStackOperations.Create Port    @{VNI_NETWORKS}[5]    @{VNI_NET_5_PORTS}[0]    sg=${VNI_SECURITY_GROUP}
122     ${net_id} =    OpenStackOperations.Get Net Id    @{VNI_NETWORKS}[4]
123     ${tenant_id} =    OpenStackOperations.Get Tenant ID From Network    ${net_id}
124     BuiltIn.Log    @{VNI_RDS}[2]
125     VpnOperations.VPN Create L3VPN    vpnid=@{VNI_VPN_INSTANCE_IDS}[2]    name=@{VNI_VPN_NAMES}[2]    rd=@{VNI_RDS}[2]    exportrt=@{VNI_RDS}[2]    importrt=@{VNI_RDS}[3]    tenantid=${tenant_id}
126     ${resp} =    VpnOperations.VPN Get L3VPN    vpnid=@{VNI_VPN_INSTANCE_IDS}[2]
127     BuiltIn.Should Contain    ${resp}    @{VNI_VPN_INSTANCE_IDS}[2]
128     ${network4_id} =    OpenStackOperations.Get Net Id    @{VNI_NETWORKS}[4]
129     VpnOperations.Associate L3VPN To Network    networkid=${network4_id}    vpnid=@{VNI_VPN_INSTANCE_IDS}[2]
130     ${resp} =    VpnOperations.VPN Get L3VPN    vpnid=@{VNI_VPN_INSTANCE_IDS}[2]
131     BuiltIn.Should Contain    ${resp}    ${network4_id}
132     BuiltIn.Log    @{VNI_RDS}[3]
133     VpnOperations.VPN Create L3VPN    vpnid=@{VNI_VPN_INSTANCE_IDS}[3]    name=@{VNI_VPN_NAMES}[3]    rd=@{VNI_RDS}[3]    exportrt=@{VNI_RDS}[3]    importrt=@{VNI_RDS}[2]    tenantid=${tenant_id}
134     ${resp} =    VpnOperations.VPN Get L3VPN    vpnid=@{VNI_VPN_INSTANCE_IDS}[3]
135     BuiltIn.Should Contain    ${resp}    @{VNI_VPN_INSTANCE_IDS}[3]
136     ${network5_id} =    OpenStackOperations.Get Net Id    @{VNI_NETWORKS}[5]
137     VpnOperations.Associate L3VPN To Network    networkid=${network5_id}    vpnid=@{VNI_VPN_INSTANCE_IDS}[3]
138     ${resp} =    VpnOperations.VPN Get L3VPN    vpnid=@{VNI_VPN_INSTANCE_IDS}[3]
139     BuiltIn.Should Contain    ${resp}    ${network5_id}
140     OpenStackOperations.Create Vm Instance With Port On Compute Node    @{VNI_NET_4_PORTS}[0]    @{VNI_NET_4_VMS}[0]    ${OS_CMP1_HOSTNAME}    sg=${VNI_SECURITY_GROUP}
141     OpenStackOperations.Create Vm Instance With Port On Compute Node    @{VNI_NET_5_PORTS}[0]    @{VNI_NET_5_VMS}[0]    ${OS_CMP2_HOSTNAME}    sg=${VNI_SECURITY_GROUP}
142     @{NET_4_VM_IPS}    ${NET_4_DHCP_IP} =    OpenStackOperations.Get VM IPs    @{VNI_NET_4_VMS}
143     @{NET_5_VM_IPS}    ${NET_5_DHCP_IP} =    OpenStackOperations.Get VM IPs    @{VNI_NET_5_VMS}
144     BuiltIn.Set Suite Variable    @{NET_4_VM_IPS}
145     BuiltIn.Set Suite Variable    @{NET_5_VM_IPS}
146     BuiltIn.Should Not Contain    ${NET_4_VM_IPS}    None
147     BuiltIn.Should Not Contain    ${NET_5_VM_IPS}    None
148     BuiltIn.Should Not Contain    ${NET_4_DHCP_IP}    None
149     BuiltIn.Should Not Contain    ${NET_5_DHCP_IP}    None
150     BuiltIn.Wait Until Keyword Succeeds    60s    5s    OVSDB.Verify Vni Segmentation Id and Tunnel Id    @{VNI_NET_4_PORTS}[0]    @{VNI_NET_5_PORTS}[0]    @{VNI_NETWORKS}[4]
151     ...    @{VNI_NETWORKS}[5]    @{NET_4_VM_IPS}[0]    @{NET_5_VM_IPS}[0]    ${IP}
152
153 *** Keywords ***
154 Start Suite
155     [Documentation]    Create Basic setup for the feature. Creates single network, subnet, two ports and two VMs.
156     ...    Create Two VMs for TC1 : (VM1, N1, Compute1) and (VM2, N2, Compute2) and R1
157     VpnOperations.Basic Suite Setup
158     OpenStackOperations.Create Allow All SecurityGroup    ${VNI_SECURITY_GROUP}
159     OpenStackOperations.Create Network    @{VNI_NETWORKS}[0]
160     OpenStackOperations.Create Network    @{VNI_NETWORKS}[1]
161     OpenStackOperations.Create SubNet    @{VNI_NETWORKS}[0]    @{VNI_SUBNETS}[0]    @{VNI_SUBNET_CIDRS}[0]
162     OpenStackOperations.Create SubNet    @{VNI_NETWORKS}[1]    @{VNI_SUBNETS}[1]    @{VNI_SUBNET_CIDRS}[1]
163     OpenStackOperations.Create Port    @{VNI_NETWORKS}[0]    @{VNI_NET_0_PORTS}[0]    sg=${VNI_SECURITY_GROUP}
164     OpenStackOperations.Create Port    @{VNI_NETWORKS}[1]    @{VNI_NET_1_PORTS}[0]    sg=${VNI_SECURITY_GROUP}
165     OpenStackOperations.Create Router    @{VNI_ROUTER}[0]
166     OpenStackOperations.Add Router Interface    @{VNI_ROUTER}[0]    @{VNI_SUBNETS}[0]
167     OpenStackOperations.Add Router Interface    @{VNI_ROUTER}[0]    @{VNI_SUBNETS}[1]
168     ${interface_output} =    OpenStackOperations.Show Router Interface    @{VNI_ROUTER}[0]
169     ${GWMAC_ADDRS}    ${GWIP_ADDRS} =    VpnOperations.Get Gateway MAC And IP Address    @{VNI_ROUTER}[0]
170     BuiltIn.Set Suite Variable    ${GWMAC_ADDRS}
171     BuiltIn.Set Suite Variable    ${GWIP_ADDRS}
172     ${router_list} =    BuiltIn.Create List    @{VNI_ROUTER}[0]
173     OpenStackOperations.Create Vm Instance With Port On Compute Node    @{VNI_NET_0_PORTS}[0]    @{VNI_NET_0_VMS}[0]    ${OS_CMP1_HOSTNAME}    sg=${VNI_SECURITY_GROUP}
174     OpenStackOperations.Create Vm Instance With Port On Compute Node    @{VNI_NET_1_PORTS}[0]    @{VNI_NET_1_VMS}[0]    ${OS_CMP2_HOSTNAME}    sg=${VNI_SECURITY_GROUP}
175     @{NET_0_VM_IPS}    ${NET_0_DHCP_IP} =    OpenStackOperations.Get VM IPs    @{VNI_NET_0_VMS}
176     @{NET_1_VM_IPS}    ${NET_1_DHCP_IP} =    OpenStackOperations.Get VM IPs    @{VNI_NET_1_VMS}
177     BuiltIn.Set Suite Variable    @{NET_0_VM_IPS}
178     BuiltIn.Set Suite Variable    @{NET_1_VM_IPS}
179     BuiltIn.Should Not Contain    ${NET_0_VM_IPS}    None
180     BuiltIn.Should Not Contain    ${NET_1_VM_IPS}    None
181     BuiltIn.Should Not Contain    ${NET_0_DHCP_IP}    None
182     BuiltIn.Should Not Contain    ${NET_1_DHCP_IP}    None