Update remaining tests for combos
[integration/test.git] / csit / suites / netvirt / vnibasedIpv6forwarding / vnibasedIpv6forwarding.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    Stop Suite
13 Test Setup        VpnOperations.VNI Test Setup
14 Test Teardown     VpnOperations.VNI Test Teardown
15 Library           OperatingSystem
16 Library           RequestsLibrary
17 Library           String
18 Resource          ../../../libraries/DevstackUtils.robot
19 Resource          ../../../libraries/KarafKeywords.robot
20 Resource          ../../../variables/netvirt/Variables.robot
21 Resource          ../../../libraries/OpenStackOperations.robot
22 Resource          ../../../libraries/OVSDB.robot
23 Resource          ../../../libraries/SetupUtils.robot
24 Resource          ../../../libraries/Utils.robot
25 Resource          ../../../libraries/VpnOperations.robot
26 Resource          ../../../variables/netvirt/Variables.robot
27 Resource          ../../../variables/Variables.robot
28
29 *** Variables ***
30 ${EGRESS}         Egress
31 ${INGRESS}        Ingress
32 ${IP}             ipv6
33 ${VNI6_SECURITY_GROUP}    vni6_sg
34 @{VNI6_NETWORKS}    vni6_net_0    vni6_net_1    vni6_net_2    vni6_net_3
35 @{VNI6_SUBNETS}    vni6_sub_0    vni6_sub_1    vni6_sub_2    vni6_sub_3
36 @{VNI6_SUBNET_CIDRS}    2001:db8:0:4::/64    2001:db8:0:5::/64    2001:db8:0:6::/64    2001:db8:0:7::/64
37 @{VNI6_NET_0_PORTS}    vni6_net_0_port_1    vni6_net_0_port_2
38 @{VNI6_NET_1_PORTS}    vni6_net_1_port_1    vni6_net_1_port_2
39 @{VNI6_NET_2_PORTS}    vni6_net_2_port_1    vni6_net_2_port_2
40 @{VNI6_NET_3_PORTS}    vni6_net_3_port_1    vni6_net_3_port_2
41 @{VNI6_NET_0_VMS}    vni6_net_0_vm_1
42 @{VNI6_NET_1_VMS}    vni6_net_1_vm_1
43 @{VNI6_NET_2_VMS}    vni6_net_2_vm_1
44 @{VNI6_NET_3_VMS}    vni6_net_3_vm_1
45 @{VNI6_ROUTER}    vni6_router1    vni6_router2    vni6_router3
46 @{VNI6_RDS}       ["2600:2"]    ["2700:2"]    ["2800:2"]
47 @{VNI6_VPN_NAMES}    VNI6_vpn_1    VNI6_vpn_2    VNI6_vpn_3
48 @{VNI6_VPN_INSTANCE_IDS}    4ae8cd92-48ca-49b5-94e1-b2921a261551    4ae8cd92-48ca-49b5-94e1-b2921a261552    4ae8cd92-48ca-49b5-94e1-b2921a261553
49 ${NET0_ADDITIONAL_ARGS}    --ip-version=6 --ipv6-address-mode=slaac --ipv6-ra-mode=slaac --allocation-pool start=2001:db8:0:4::2,end=2001:db8:0:4:ffff:ffff:ffff:fffe
50 ${NET1_ADDITIONAL_ARGS}    --ip-version=6 --ipv6-address-mode=slaac --ipv6-ra-mode=slaac --allocation-pool start=2001:db8:0:5::2,end=2001:db8:0:5:ffff:ffff:ffff:fffe
51 ${NET2_ADDITIONAL_ARGS}    --ip-version=6 --ipv6-address-mode=slaac --ipv6-ra-mode=slaac --allocation-pool start=2001:db8:0:6::2,end=2001:db8:0:6:ffff:ffff:ffff:fffe
52 ${NET3_ADDITIONAL_ARGS}    --ip-version=6 --ipv6-address-mode=slaac --ipv6-ra-mode=slaac --allocation-pool start=2001:db8:0:7::2,end=2001:db8:0:7:ffff:ffff:ffff:fffe
53
54 *** Test Cases ***
55 VNI Based IPv6 Forwarding
56     [Documentation]    verify VNI id for IPv6 Unicast frames exchanged over OVS datapaths that are on different hypervisors
57     BuiltIn.Pass Execution If    "${OS_DEPLOY}" == "1cmb-0ctl-0cmp"    "Test is not supported for combo node"
58     BuiltIn.Wait Until Keyword Succeeds    60s    5s    OVSDB.Verify Vni Segmentation Id and Tunnel Id    @{VNI6_NET_0_PORTS}[0]    @{VNI6_NET_1_PORTS}[0]    @{VNI6_NETWORKS}[0]
59     ...    @{VNI6_NETWORKS}[1]    @{VM_IP_NET0}[0]    @{VM_IP_NET1}[0]    ${IP}
60
61 VNI Based IPv6 Forwarding With BGPVPN Router Association
62     [Documentation]    verify VNI id for IPv6 Unicast frames exchanged over OVS datapaths that are on different hypervisors
63     ...    With Router associated to a BGPVPN.
64     BuiltIn.Pass Execution If    "${OS_DEPLOY}" == "1cmb-0ctl-0cmp"    "Test is not supported for combo node"
65     ${net_id} =    OpenStackOperations.Get Net Id    @{VNI6_NETWORKS}[0]
66     ${tenant_id} =    OpenStackOperations.Get Tenant ID From Network    ${net_id}
67     VpnOperations.VPN Create L3VPN    vpnid=@{VNI6_VPN_INSTANCE_IDS}[0]    name=@{VNI6_VPN_NAMES}[0]    rd=@{VNI6_RDS}[0]    exportrt=@{VNI6_RDS}[0]    importrt=@{VNI6_RDS}[0]    tenantid=${tenant_id}
68     ${resp} =    VpnOperations.VPN Get L3VPN    vpnid=@{VNI6_VPN_INSTANCE_IDS}[0]
69     BuiltIn.Should Contain    ${resp}    @{VNI6_VPN_INSTANCE_IDS}[0]
70     ${router_id} =    OpenStackOperations.Get Router Id    @{VNI6_ROUTER}[0]
71     VpnOperations.Associate VPN to Router    routerid=${router_id}    vpnid=@{VNI6_VPN_INSTANCE_IDS}[0]
72     ${resp} =    VpnOperations.VPN Get L3VPN    vpnid=@{VNI6_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    @{VNI6_NET_0_PORTS}[0]    @{VNI6_NET_1_PORTS}[0]    @{VNI6_NETWORKS}[0]
75     ...    @{VNI6_NETWORKS}[1]    @{VM_IP_NET0}[0]    @{VM_IP_NET1}[0]    ${IP}
76
77 VNI Based IPv6 Forwarding With Two Routers And BGPVPN With Irt Ert
78     [Documentation]    verify VNI id for IPv6 Unicast frames exchanged over OVS datapaths that are on different hypervisors
79     ...    With Two Routers each associated to a BGPVPN and The Two BGPVPN is connected with irt and ert.
80     BuiltIn.Pass Execution If    "${OS_DEPLOY}" == "1cmb-0ctl-0cmp"    "Test is not supported for combo node"
81     OpenStackOperations.Create Network    @{VNI6_NETWORKS}[2]
82     OpenStackOperations.Create Network    @{VNI6_NETWORKS}[3]
83     OpenStackOperations.Create SubNet    @{VNI6_NETWORKS}[2]    @{VNI6_SUBNETS}[2]    @{VNI6_SUBNET_CIDRS}[2]    ${NET2_ADDITIONAL_ARGS}
84     OpenStackOperations.Create SubNet    @{VNI6_NETWORKS}[3]    @{VNI6_SUBNETS}[3]    @{VNI6_SUBNET_CIDRS}[3]    ${NET3_ADDITIONAL_ARGS}
85     OpenStackOperations.Create Port    @{VNI6_NETWORKS}[2]    @{VNI6_NET_2_PORTS}[0]    sg=${VNI6_SECURITY_GROUP}
86     OpenStackOperations.Create Port    @{VNI6_NETWORKS}[3]    @{VNI6_NET_3_PORTS}[0]    sg=${VNI6_SECURITY_GROUP}
87     OpenStackOperations.Create Router    @{VNI6_ROUTER}[1]
88     OpenStackOperations.Add Router Interface    @{VNI6_ROUTER}[1]    @{VNI6_SUBNETS}[2]
89     OpenStackOperations.Create Router    @{VNI6_ROUTER}[2]
90     OpenStackOperations.Add Router Interface    @{VNI6_ROUTER}[2]    @{VNI6_SUBNETS}[3]
91     ${net_id} =    OpenStackOperations.Get Net Id    @{VNI6_NETWORKS}[2]
92     ${tenant_id} =    OpenStackOperations.Get Tenant ID From Network    ${net_id}
93     VpnOperations.VPN Create L3VPN    vpnid=@{VNI6_VPN_INSTANCE_IDS}[1]    name=@{VNI6_VPN_NAMES}[1]    rd=@{VNI6_RDS}[1]    exportrt=@{VNI6_RDS}[1]    importrt=@{VNI6_RDS}[2]    tenantid=${tenant_id}
94     ${resp} =    VpnOperations.VPN Get L3VPN    vpnid=@{VNI6_VPN_INSTANCE_IDS}[1]
95     BuiltIn.Should Contain    ${resp}    @{VNI6_VPN_INSTANCE_IDS}[1]
96     ${router_id} =    OpenStackOperations.Get Router Id    @{VNI6_ROUTER}[1]
97     VpnOperations.Associate VPN to Router    routerid=${router_id}    vpnid=@{VNI6_VPN_INSTANCE_IDS}[1]
98     ${resp} =    VpnOperations.VPN Get L3VPN    vpnid=@{VNI6_VPN_INSTANCE_IDS}[1]
99     BuiltIn.Should Contain    ${resp}    ${router_id}
100     VpnOperations.VPN Create L3VPN    vpnid=@{VNI6_VPN_INSTANCE_IDS}[2]    name=@{VNI6_VPN_NAMES}[2]    rd=@{VNI6_RDS}[2]    exportrt=@{VNI6_RDS}[2]    importrt=@{VNI6_RDS}[1]    tenantid=${tenant_id}
101     ${resp} =    VpnOperations.VPN Get L3VPN    vpnid=@{VNI6_VPN_INSTANCE_IDS}[2]
102     BuiltIn.Should Contain    ${resp}    @{VNI6_VPN_INSTANCE_IDS}[2]
103     ${router_id} =    OpenStackOperations.Get Router Id    @{VNI6_ROUTER}[2]
104     VpnOperations.Associate VPN to Router    routerid=${router_id}    vpnid=@{VNI6_VPN_INSTANCE_IDS}[2]
105     ${resp} =    VpnOperations.VPN Get L3VPN    vpnid=@{VNI6_VPN_INSTANCE_IDS}[2]
106     BuiltIn.Should Contain    ${resp}    ${router_id}
107     OpenStackOperations.Create Vm Instance With Port On Compute Node    @{VNI6_NET_2_PORTS}[0]    @{VNI6_NET_2_VMS}[0]    ${OS_CMP1_HOSTNAME}    sg=${VNI6_SECURITY_GROUP}
108     OpenStackOperations.Create Vm Instance With Port On Compute Node    @{VNI6_NET_3_PORTS}[0]    @{VNI6_NET_3_VMS}[0]    ${OS_CMP2_HOSTNAME}    sg=${VNI6_SECURITY_GROUP}
109     OpenStackOperations.Poll VM Is ACTIVE    @{VNI6_NET_2_VMS}[0]
110     OpenStackOperations.Poll VM Is ACTIVE    @{VNI6_NET_3_VMS}[0]
111     @{networks} =    BuiltIn.Create List    @{VNI6_NETWORKS}[2]    @{VNI6_NETWORKS}[3]
112     @{subnet_cidrs} =    BuiltIn.Create List    @{VNI6_SUBNET_CIDRS}[2]    @{VNI6_SUBNET_CIDRS}[3]
113     BuiltIn.Wait Until Keyword Succeeds    30s    10s    OpenStackOperations.Wait For Routes To Propogate    ${networks}    ${subnet_cidrs}
114     ${prefix_net2} =    String.Replace String    @{VNI6_SUBNET_CIDRS}[2]    ::/64    (:[a-f0-9]{,4}){,4}
115     ${status}    ${message}    Run Keyword And Ignore Error    BuiltIn.Wait Until Keyword Succeeds    3x    60s    OpenStackOperations.Collect VM IPv6 SLAAC Addresses
116     ...    fail_on_none=true    vm_list=${VNI6_NET_2_VMS}    network=@{VNI6_NETWORKS}[2]    subnet=${prefix_net2}
117     ${prefix_net3} =    String.Replace String    @{VNI6_SUBNET_CIDRS}[3]    ::/64    (:[a-f0-9]{,4}){,4}
118     ${status}    ${message}    Run Keyword And Ignore Error    BuiltIn.Wait Until Keyword Succeeds    3x    60s    OpenStackOperations.Collect VM IPv6 SLAAC Addresses
119     ...    fail_on_none=true    vm_list=${VNI6_NET_3_VMS}    network=@{VNI6_NETWORKS}[3]    subnet=${prefix_net3}
120     ${VM_IP_NET2} =    OpenStackOperations.Collect VM IPv6 SLAAC Addresses    fail_on_none=false    vm_list=${VNI6_NET_2_VMS}    network=@{VNI6_NETWORKS}[2]    subnet=${prefix_net2}
121     ${VM_IP_NET3} =    OpenStackOperations.Collect VM IPv6 SLAAC Addresses    fail_on_none=false    vm_list=${VNI6_NET_3_VMS}    network=@{VNI6_NETWORKS}[3]    subnet=${prefix_net3}
122     ${status}    ${message}    Run Keyword And Ignore Error    BuiltIn.Should Not Contain    ${VM_IP_NET2}    None
123     Run Keyword If    '${status}' == 'FAIL'    OpenStack CLI    openstack console log show @{VNI6_NET_2_VMS}[0]    30s
124     ${status}    ${message}    Run Keyword And Ignore Error    BuiltIn.Should Not Contain    ${VM_IP_NET3}    None
125     Run Keyword If    '${status}' == 'FAIL'    OpenStack CLI    openstack console log show @{VNI6_NET_3_VMS}[0]    30s
126     OpenStackOperations.Copy DHCP Files From Control Node
127     BuiltIn.Should Not Contain    ${VM_IP_NET2}    None
128     BuiltIn.Should Not Contain    ${VM_IP_NET3}    None
129     BuiltIn.Wait Until Keyword Succeeds    60s    5s    OVSDB.Verify Vni Segmentation Id and Tunnel Id    @{VNI6_NET_2_PORTS}[0]    @{VNI6_NET_3_PORTS}[0]    @{VNI6_NETWORKS}[2]
130     ...    @{VNI6_NETWORKS}[3]    @{VM_IP_NET2}[0]    @{VM_IP_NET3}[0]    ${IP}
131
132 *** Keywords ***
133 Start Suite
134     [Documentation]    Create Basic setup for the feature. Creates single network, subnet, two ports and two VMs.
135     ...    Create Two VMs for TC1 : (VM1, N1, Compute1) and (VM2, N2, Compute2) and R1
136     BuiltIn.Return From Keyword If    "${OS_DEPLOY}" == "1cmb-0ctl-0cmp"
137     VpnOperations.Basic Suite Setup
138     OpenStackOperations.Create Allow All SecurityGroup    ${VNI6_SECURITY_GROUP}    IPv6
139     OpenStackOperations.Create Network    @{VNI6_NETWORKS}[0]
140     OpenStackOperations.Create Network    @{VNI6_NETWORKS}[1]
141     OpenStackOperations.Create SubNet    @{VNI6_NETWORKS}[0]    @{VNI6_SUBNETS}[0]    @{VNI6_SUBNET_CIDRS}[0]    ${NET0_ADDITIONAL_ARGS}
142     OpenStackOperations.Create SubNet    @{VNI6_NETWORKS}[1]    @{VNI6_SUBNETS}[1]    @{VNI6_SUBNET_CIDRS}[1]    ${NET1_ADDITIONAL_ARGS}
143     OpenStackOperations.Create Port    @{VNI6_NETWORKS}[0]    @{VNI6_NET_0_PORTS}[0]    sg=${VNI6_SECURITY_GROUP}
144     OpenStackOperations.Create Port    @{VNI6_NETWORKS}[1]    @{VNI6_NET_1_PORTS}[0]    sg=${VNI6_SECURITY_GROUP}
145     OpenStackOperations.Create Router    @{VNI6_ROUTER}[0]
146     OpenStackOperations.Add Router Interface    @{VNI6_ROUTER}[0]    @{VNI6_SUBNETS}[0]
147     OpenStackOperations.Add Router Interface    @{VNI6_ROUTER}[0]    @{VNI6_SUBNETS}[1]
148     ${interface_output} =    OpenStackOperations.Show Router Interface    @{VNI6_ROUTER}[0]
149     ${GWMAC_ADDRS}    ${GWIP_ADDRS} =    VpnOperations.Get Gateway MAC And IP Address    @{VNI6_ROUTER}[0]
150     BuiltIn.Set Suite Variable    ${GWMAC_ADDRS}
151     BuiltIn.Set Suite Variable    ${GWIP_ADDRS}
152     ${router_list} =    BuiltIn.Create List    @{VNI6_ROUTER}[0]
153     OpenStackOperations.Create Vm Instance With Port On Compute Node    @{VNI6_NET_0_PORTS}[0]    @{VNI6_NET_0_VMS}[0]    ${OS_CMP1_HOSTNAME}    sg=${VNI6_SECURITY_GROUP}
154     OpenStackOperations.Create Vm Instance With Port On Compute Node    @{VNI6_NET_1_PORTS}[0]    @{VNI6_NET_1_VMS}[0]    ${OS_CMP2_HOSTNAME}    sg=${VNI6_SECURITY_GROUP}
155     OpenStackOperations.Poll VM Is ACTIVE    @{VNI6_NET_0_VMS}[0]
156     OpenStackOperations.Poll VM Is ACTIVE    @{VNI6_NET_1_VMS}[0]
157     @{networks} =    BuiltIn.Create List    @{VNI6_NETWORKS}[0]    @{VNI6_NETWORKS}[1]
158     @{subnet_cidrs} =    BuiltIn.Create List    @{VNI6_SUBNET_CIDRS}[0]    @{VNI6_SUBNET_CIDRS}[1]
159     BuiltIn.Wait Until Keyword Succeeds    30s    10s    OpenStackOperations.Wait For Routes To Propogate    ${networks}    ${subnet_cidrs}
160     ${prefix_net0} =    Replace String    @{VNI6_SUBNET_CIDRS}[0]    ::/64    (:[a-f0-9]{,4}){,4}
161     ${status}    ${message}    Run Keyword And Ignore Error    BuiltIn.Wait Until Keyword Succeeds    3x    60s    OpenStackOperations.Collect VM IPv6 SLAAC Addresses
162     ...    fail_on_none=true    vm_list=${VNI6_NET_0_VMS}    network=@{VNI6_NETWORKS}[0]    subnet=${prefix_net0}
163     ${prefix_net1} =    Replace String    @{VNI6_SUBNET_CIDRS}[1]    ::/64    (:[a-f0-9]{,4}){,4}
164     ${status}    ${message}    Run Keyword And Ignore Error    BuiltIn.Wait Until Keyword Succeeds    3x    60s    OpenStackOperations.Collect VM IPv6 SLAAC Addresses
165     ...    fail_on_none=true    vm_list=${VNI6_NET_1_VMS}    network=@{VNI6_NETWORKS}[1]    subnet=${prefix_net1}
166     ${VM_IP_NET0} =    OpenStackOperations.Collect VM IPv6 SLAAC Addresses    fail_on_none=false    vm_list=${VNI6_NET_0_VMS}    network=@{VNI6_NETWORKS}[0]    subnet=${prefix_net0}
167     ${VM_IP_NET1} =    OpenStackOperations.Collect VM IPv6 SLAAC Addresses    fail_on_none=false    vm_list=${VNI6_NET_1_VMS}    network=@{VNI6_NETWORKS}[1]    subnet=${prefix_net1}
168     ${status}    ${message}    Run Keyword And Ignore Error    BuiltIn.Should Not Contain    ${VM_IP_NET0}    None
169     Run Keyword If    '${status}' == 'FAIL'    OpenStack CLI    openstack console log show @{VNI6_NET_0_VMS}[0]    30s
170     ${status}    ${message}    Run Keyword And Ignore Error    BuiltIn.Should Not Contain    ${VM_IP_NET1}    None
171     Run Keyword If    '${status}' == 'FAIL'    OpenStack CLI    openstack console log show @{VNI6_NET_1_VMS}[0]    30s
172     OpenStackOperations.Copy DHCP Files From Control Node
173     BuiltIn.Set Suite Variable    ${VM_IP_NET0}
174     BuiltIn.Set Suite Variable    ${VM_IP_NET1}
175     BuiltIn.Should Not Contain    ${VM_IP_NET0}    None
176     BuiltIn.Should Not Contain    ${VM_IP_NET1}    None
177     Get OvsDebugInfo
178
179 Stop Suite
180     BuiltIn.Return From Keyword If    "${OS_DEPLOY}" == "1cmb-0ctl-0cmp"
181     OpenStackOperations.OpenStack Suite Teardown