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
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
19 ${SECURITY_GROUP} sg-sfc
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
28 Create VXLAN Network net_1
29 [Documentation] Create Network with neutron request.
30 OpenStackOperations.Create Network @{NETWORKS}[0]
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]
37 [Documentation] Allow all TCP/UDP/ICMP packets for this suite
38 OpenStackOperations.Create Allow All SecurityGroup ${SECURITY_GROUP}
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}
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}
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
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
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
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
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
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 &
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
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]
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}