Documentation Test suite to verify SFC configuration and packet flows.
Suite Setup BuiltIn.Run Keywords SetupUtils.Setup_Utils_For_Setup_And_Teardown
... AND DevstackUtils.Devstack Suite Setup
-Suite Teardown BuiltIn.Run Keywords Delete Configurations
-... AND Close All Connections
+Suite Teardown OpenStackOperations.OpenStack Suite Teardown
Test Setup SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
-Test Teardown Get Test Teardown Debugs
+Test Teardown BuiltIn.Run Keywords OpenStackOperations.Get Test Teardown Debugs
+... AND OpenStackOperations.Get Test Teardown Debugs For SFC
Library SSHLibrary
Library OperatingSystem
Library RequestsLibrary
*** Variables ***
${SECURITY_GROUP} sg-sfc
-@{NETWORKS_NAME} network_1
-@{SUBNETS_NAME} l2_subnet_1
-@{VM_INSTANCES} sf1 sf2 sf3 source_vm dest_vm
-@{SUBNETS_RANGE} 30.0.0.0/24
+@{NETWORKS} network_1
+@{SUBNETS} l2_subnet_1
+@{NET_1_VMS} sf1 sf2 sf3 source_vm dest_vm
+@{SUBNET_CIDRS} 30.0.0.0/24
@{PORTS} p1in p1out p2in p2out p3in p3out source_vm_port
... dest_vm_port
*** Test Cases ***
-Create VXLAN Network (network_1)
+Create VXLAN Network net_1
[Documentation] Create Network with neutron request.
- Create Network @{NETWORKS_NAME}[0]
+ OpenStackOperations.Create Network @{NETWORKS}[0]
-Create Subnets For network_1
+Create Subnets For net_1
[Documentation] Create Sub Nets for the Networks with neutron request.
- Create SubNet @{NETWORKS_NAME}[0] @{SUBNETS_NAME}[0] @{SUBNETS_RANGE}[0]
+ OpenStackOperations.Create SubNet @{NETWORKS}[0] @{SUBNETS}[0] @{SUBNET_CIDRS}[0]
Add Allow All Rules
[Documentation] Allow all TCP/UDP/ICMP packets for this suite
Create Neutron Ports
[Documentation] Precreate neutron ports to be used for SFC VMs
: FOR ${port} IN @{PORTS}
- \ Create Port @{NETWORKS_NAME}[0] ${port} sg=${SECURITY_GROUP}
+ \ OpenStackOperations.Create Port @{NETWORKS}[0] ${port} sg=${SECURITY_GROUP}
Create Vm Instances
[Documentation] Create Four Vm instances using flavor and image names for a network.
Create Vm Instance With Port dest_vm_port dest_vm sg=${SECURITY_GROUP}
Check Vm Instances Have Ip Address
- [Documentation] Test case to verify that all created VMs are ready and have received their ip addresses.
- ... We are polling first and longest on the last VM created assuming that if it's received it's address
- ... already the other instances should have theirs already or at least shortly thereafter.
- # first, ensure all VMs are in ACTIVE state. if not, we can just fail the test case and not waste time polling
- # for dhcp addresses
- : FOR ${vm} IN @{VM_INSTANCES}
- \ Poll VM Is ACTIVE ${vm}
- ${status} ${message} Run Keyword And Ignore Error Wait Until Keyword Succeeds 60s 5s Collect VM IP Addresses
- ... true @{VM_INSTANCES}
- ${NET1_VM_IPS} ${NET1_DHCP_IP} Collect VM IP Addresses false @{VM_INSTANCES}
- ${VM_INSTANCES}= Collections.Combine Lists ${VM_INSTANCES}
- ${VM_IPS}= Collections.Combine Lists ${NET1_VM_IPS}
- ${LOOP_COUNT} Get Length ${VM_INSTANCES}
- : FOR ${index} IN RANGE 0 ${LOOP_COUNT}
- \ ${status} ${message} Run Keyword And Ignore Error Should Not Contain @{VM_IPS}[${index}] None
- \ Run Keyword If '${status}' == 'FAIL' Write Commands Until Prompt openstack console log show @{VM_INSTANCES}[${index}] 30s
- Set Suite Variable ${NET1_VM_IPS}
- Should Not Contain ${NET1_VM_IPS} None
- Should Not Contain ${NET1_DHCP_IP} None
- [Teardown] Run Keywords Show Debugs @{VM_INSTANCES}
- ... AND Get Test Teardown Debugs
+ @{NET1_VM_IPS} ${NET1_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_1_VMS}
+ BuiltIn.Set Suite Variable @{NET1_VM_IPS}
+ BuiltIn.Should Not Contain ${NET1_VM_IPS} None
+ BuiltIn.Should Not Contain ${NET1_DHCP_IP} None
+ [Teardown] BuiltIn.Run Keywords OpenStackOperations.Show Debugs @{NET_1_VMS}
+ ... AND OpenStackOperations.Get Test Teardown Debugs
Create Flow Classifiers
[Documentation] Create SFC Flow Classifier for TCP traffic between source VM and destination VM
- Create SFC Flow Classifier FC_http @{NET1_VM_IPS}[3] @{NET1_VM_IPS}[4] tcp 80 source_vm_port
+ OpenStackOperations.Create SFC Flow Classifier FC_http @{NET1_VM_IPS}[3] @{NET1_VM_IPS}[4] tcp 80 source_vm_port
Create Port Pairs
[Documentation] Create SFC Port Pairs
- Create SFC Port Pair PP1 p1in p1out
- Create SFC Port Pair PP2 p2in p2out
- Create SFC Port Pair PP3 p3in p3out
+ OpenStackOperations.Create SFC Port Pair PP1 p1in p1out
+ OpenStackOperations.Create SFC Port Pair PP2 p2in p2out
+ OpenStackOperations.Create SFC Port Pair PP3 p3in p3out
Create Port Pair Groups
[Documentation] Create SFC Port Pair Groups
- Create SFC Port Pair Group With Two Pairs PG1 PP1 PP2
- Create SFC Port Pair Group PG2 PP3
+ OpenStackOperations.Create SFC Port Pair Group With Two Pairs PG1 PP1 PP2
+ OpenStackOperations.Create SFC Port Pair Group PG2 PP3
Create Port Chain
[Documentation] Create SFC Port Chain using two port groups an classifier created previously
- Create SFC Port Chain PC1 PG1 PG2 FC_http
+ OpenStackOperations.Create SFC Port Chain PC1 PG1 PG2 FC_http
Start Web Server On Destination VM
[Documentation] Start a simple web server on the destination VM
- Execute Command on VM Instance @{NETWORKS_NAME}[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 &
+ 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 &
Add Static Routing On Service Function VMs
[Documentation] Enable eth1 and add static routing between the ports on the SF VMs
- : FOR ${INDEX} IN RANGE 0 2
- \ Execute Command on VM Instance @{NETWORKS_NAME}[0] @{NET1_VM_IPS}[${INDEX}] sudo sh -c 'echo "auto eth1" >> /etc/network/interfaces'
- \ Execute Command on VM Instance @{NETWORKS_NAME}[0] @{NET1_VM_IPS}[${INDEX}] sudo sh -c 'echo "iface eth1 inet dhcp" >> /etc/network/interfaces'
- \ Execute Command on VM Instance @{NETWORKS_NAME}[0] @{NET1_VM_IPS}[${INDEX}] sudo /etc/init.d/S40network restart
- \ Execute Command on VM Instance @{NETWORKS_NAME}[0] @{NET1_VM_IPS}[${INDEX}] sudo sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'
- \ Execute Command on VM Instance @{NETWORKS_NAME}[0] @{NET1_VM_IPS}[${INDEX}] sudo ip route add @{NET1_VM_IPS}[3] dev eth0
- \ Execute Command on VM Instance @{NETWORKS_NAME}[0] @{NET1_VM_IPS}[${INDEX}] sudo ip route add @{NET1_VM_IPS}[4] dev eth1
+ : FOR ${index} IN RANGE 0 2
+ \ OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET1_VM_IPS}[${index}] sudo sh -c 'echo "auto eth1" >> /etc/network/interfaces'
+ \ OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET1_VM_IPS}[${index}] sudo sh -c 'echo "iface eth1 inet dhcp" >> /etc/network/interfaces'
+ \ OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET1_VM_IPS}[${index}] sudo /etc/init.d/S40network restart
+ \ OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET1_VM_IPS}[${index}] sudo sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'
+ \ OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET1_VM_IPS}[${index}] sudo ip route add @{NET1_VM_IPS}[3] dev eth0
+ \ OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET1_VM_IPS}[${index}] sudo ip route add @{NET1_VM_IPS}[4] dev eth1
-Connectivity Tests From Vm Instance1 In network_1
+Connectivity Tests From Vm Instance1 In net_1
[Documentation] Login to the source VM instance, and send a HTTP GET using curl to the destination VM instance
# FIXME need to somehow verify it goes through SFs (flows?)
- ${DEST_VM_LIST} Create List @{NET1_VM_IPS}[4]
- Test Operations From Vm Instance network_1 @{NET1_VM_IPS}[3] ${DEST_VM_LIST}
- Execute Command on VM Instance @{NETWORKS_NAME}[0] @{NET1_VM_IPS}[3] curl http://@{NET1_VM_IPS}[4]
+ ${DEST_VM_LIST} BuiltIn.Create List @{NET1_VM_IPS}[4]
+ OpenStackOperations.Test Operations From Vm Instance @{NETWORKS}[0] @{NET1_VM_IPS}[3] ${DEST_VM_LIST}
+ OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET1_VM_IPS}[3] curl http://@{NET1_VM_IPS}[4]
-*** Keywords ***
Delete Configurations
[Documentation] Delete all elements that were created in the test case section. These are done
... in a local keyword so this can be called as part of the Suite Teardown. When called as part
... of the Suite Teardown, all steps will be attempted. This prevents robot framework from bailing
... on the rest of a test case if one step intermittently has trouble and fails. The goal is to attempt
... to leave the test environment as clean as possible upon completion of this suite.
- : FOR ${VmElement} IN @{VM_INSTANCES}
- \ Delete Vm Instance ${VmElement}
- Delete SFC Port Chain PC1
- Delete SFC Port Pair Group PG1
- Delete SFC Port Pair Group PG2
- Delete SFC Port Pair PP1
- Delete SFC Port Pair PP2
- Delete SFC Port Pair PP3
- Delete SFC Flow Classifier FC_http
+ : FOR ${vm} IN @{NET_1_VMS}
+ \ OpenStackOperations.Delete Vm Instance ${vm}
+ OpenStackOperations.Delete SFC Port Chain PC1
+ OpenStackOperations.Delete SFC Port Pair Group PG1
+ OpenStackOperations.Delete SFC Port Pair Group PG2
+ OpenStackOperations.Delete SFC Port Pair PP1
+ OpenStackOperations.Delete SFC Port Pair PP2
+ OpenStackOperations.Delete SFC Port Pair PP3
+ OpenStackOperations.Delete SFC Flow Classifier FC_http
: FOR ${port} IN @{PORTS}
- \ Delete Port ${port}
- Delete SubNet l2_subnet_1
- : FOR ${NetworkElement} IN @{NETWORKS_NAME}
- \ Delete Network ${NetworkElement}
+ \ OpenStackOperations.Delete Port ${port}
+ OpenStackOperations.Delete SubNet l2_subnet_1
+ : FOR ${network} IN @{NETWORKS}
+ \ OpenStackOperations.Delete Network ${network}
+ OpenStackOperations.Delete SecurityGroup ${SECURITY_GROUP}