Add OpenStack grenade
[integration/test.git] / csit / suites / openstack / extensions / sfc.robot
1 *** Settings ***
2 Documentation     Test suite to verify SFC configuration and packet flows.
3 Suite Setup       BuiltIn.Run Keywords    SetupUtils.Setup_Utils_For_Setup_And_Teardown
4 ...               AND    DevstackUtils.Devstack Suite Setup
5 Suite Teardown    OpenStackOperations.OpenStack Suite Teardown
6 Test Setup        SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
7 Test Teardown     BuiltIn.Run Keywords    OpenStackOperations.Get Test Teardown Debugs
8 ...               AND    OpenStackOperations.Get Test Teardown Debugs For SFC
9 Library           SSHLibrary
10 Library           OperatingSystem
11 Library           RequestsLibrary
12 Resource          ../../../libraries/DevstackUtils.robot
13 Resource          ../../../libraries/OpenStackOperations.robot
14 Resource          ../../../libraries/SetupUtils.robot
15 Resource          ../../../libraries/Utils.robot
16 Resource          ../../../libraries/KarafKeywords.robot
17
18 *** Variables ***
19 ${SECURITY_GROUP}    sg-sfc
20 @{NETWORKS}       network_1
21 @{SUBNETS}        l2_subnet_1
22 @{NET_1_VMS}      sf1    sf2    sf3    source_vm    dest_vm
23 @{SUBNET_CIDRS}    30.0.0.0/24
24 @{PORTS}          p1in    p1out    p2in    p2out    p3in    p3out    source_vm_port
25 ...               dest_vm_port
26
27 *** Test Cases ***
28 Create VXLAN Network net_1
29     [Documentation]    Create Network with neutron request.
30     OpenStackOperations.Create Network    @{NETWORKS}[0]
31
32 Create Subnets For net_1
33     [Documentation]    Create Sub Nets for the Networks with neutron request.
34     OpenStackOperations.Create SubNet    @{NETWORKS}[0]    @{SUBNETS}[0]    @{SUBNET_CIDRS}[0]
35
36 Add Allow All Rules
37     [Documentation]    Allow all TCP/UDP/ICMP packets for this suite
38     OpenStackOperations.Create Allow All SecurityGroup    ${SECURITY_GROUP}
39
40 Create Neutron Ports
41     [Documentation]    Precreate neutron ports to be used for SFC VMs
42     : FOR    ${port}    IN    @{PORTS}
43     \    OpenStackOperations.Create Port    @{NETWORKS}[0]    ${port}    sg=${SECURITY_GROUP}
44
45 Create Vm Instances
46     [Documentation]    Create Four Vm instances using flavor and image names for a network.
47     Create Vm Instance With Ports    p1in    p1out    sf1    sg=${SECURITY_GROUP}
48     Create Vm Instance With Ports    p2in    p2out    sf2    sg=${SECURITY_GROUP}
49     Create Vm Instance With Ports    p3in    p3out    sf3    sg=${SECURITY_GROUP}
50     Create Vm Instance With Port    source_vm_port    source_vm    sg=${SECURITY_GROUP}
51     Create Vm Instance With Port    dest_vm_port    dest_vm    sg=${SECURITY_GROUP}
52
53 Check Vm Instances Have Ip Address
54     @{NET1_VM_IPS}    ${NET1_DHCP_IP} =    OpenStackOperations.Get VM IPs    @{NET_1_VMS}
55     BuiltIn.Set Suite Variable    @{NET1_VM_IPS}
56     BuiltIn.Should Not Contain    ${NET1_VM_IPS}    None
57     BuiltIn.Should Not Contain    ${NET1_DHCP_IP}    None
58     [Teardown]    BuiltIn.Run Keywords    OpenStackOperations.Show Debugs    @{NET_1_VMS}
59     ...    AND    OpenStackOperations.Get Test Teardown Debugs
60
61 Create Flow Classifiers
62     [Documentation]    Create SFC Flow Classifier for TCP traffic between source VM and destination VM
63     OpenStackOperations.Create SFC Flow Classifier    FC_http    @{NET1_VM_IPS}[3]    @{NET1_VM_IPS}[4]    tcp    80    source_vm_port
64
65 Create Port Pairs
66     [Documentation]    Create SFC Port Pairs
67     OpenStackOperations.Create SFC Port Pair    PP1    p1in    p1out
68     OpenStackOperations.Create SFC Port Pair    PP2    p2in    p2out
69     OpenStackOperations.Create SFC Port Pair    PP3    p3in    p3out
70
71 Create Port Pair Groups
72     [Documentation]    Create SFC Port Pair Groups
73     OpenStackOperations.Create SFC Port Pair Group With Two Pairs    PG1    PP1    PP2
74     OpenStackOperations.Create SFC Port Pair Group    PG2    PP3
75
76 Create Port Chain
77     [Documentation]    Create SFC Port Chain using two port groups an classifier created previously
78     OpenStackOperations.Create SFC Port Chain    PC1    PG1    PG2    FC_http
79
80 Start Web Server On Destination VM
81     [Documentation]    Start a simple web server on the destination VM
82     OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{NET1_VM_IPS}[4]    while true; do echo -e "HTTP/1.0 200 OK\r\nContent-Length: 21\r\n\r\nWelcome to web-server" | sudo nc -l -p 80 ; done &
83
84 Add Static Routing On Service Function VMs
85     [Documentation]    Enable eth1 and add static routing between the ports on the SF VMs
86     : FOR    ${index}    IN RANGE    0    2
87     \    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{NET1_VM_IPS}[${index}]    sudo sh -c 'echo "auto eth1" >> /etc/network/interfaces'
88     \    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{NET1_VM_IPS}[${index}]    sudo sh -c 'echo "iface eth1 inet dhcp" >> /etc/network/interfaces'
89     \    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{NET1_VM_IPS}[${index}]    sudo /etc/init.d/S40network restart
90     \    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{NET1_VM_IPS}[${index}]    sudo sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'
91     \    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{NET1_VM_IPS}[${index}]    sudo ip route add @{NET1_VM_IPS}[3] dev eth0
92     \    OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{NET1_VM_IPS}[${index}]    sudo ip route add @{NET1_VM_IPS}[4] dev eth1
93
94 Connectivity Tests From Vm Instance1 In net_1
95     [Documentation]    Login to the source VM instance, and send a HTTP GET using curl to the destination VM instance
96     # FIXME need to somehow verify it goes through SFs (flows?)
97     ${DEST_VM_LIST}    BuiltIn.Create List    @{NET1_VM_IPS}[4]
98     OpenStackOperations.Test Operations From Vm Instance    @{NETWORKS}[0]    @{NET1_VM_IPS}[3]    ${DEST_VM_LIST}
99     OpenStackOperations.Execute Command on VM Instance    @{NETWORKS}[0]    @{NET1_VM_IPS}[3]    curl http://@{NET1_VM_IPS}[4]
100
101 Delete Configurations
102     [Documentation]    Delete all elements that were created in the test case section. These are done
103     ...    in a local keyword so this can be called as part of the Suite Teardown. When called as part
104     ...    of the Suite Teardown, all steps will be attempted. This prevents robot framework from bailing
105     ...    on the rest of a test case if one step intermittently has trouble and fails. The goal is to attempt
106     ...    to leave the test environment as clean as possible upon completion of this suite.
107     : FOR    ${vm}    IN    @{NET_1_VMS}
108     \    OpenStackOperations.Delete Vm Instance    ${vm}
109     OpenStackOperations.Delete SFC Port Chain    PC1
110     OpenStackOperations.Delete SFC Port Pair Group    PG1
111     OpenStackOperations.Delete SFC Port Pair Group    PG2
112     OpenStackOperations.Delete SFC Port Pair    PP1
113     OpenStackOperations.Delete SFC Port Pair    PP2
114     OpenStackOperations.Delete SFC Port Pair    PP3
115     OpenStackOperations.Delete SFC Flow Classifier    FC_http
116     : FOR    ${port}    IN    @{PORTS}
117     \    OpenStackOperations.Delete Port    ${port}
118     OpenStackOperations.Delete SubNet    l2_subnet_1
119     : FOR    ${network}    IN    @{NETWORKS}
120     \    OpenStackOperations.Delete Network    ${network}
121     OpenStackOperations.Delete SecurityGroup    ${SECURITY_GROUP}