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 Close All Connections
+Suite Teardown BuiltIn.Run Keywords Delete Configurations
+... AND Close All Connections
Test Setup SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
Test Teardown Get Test Teardown Debugs
+... AND Get Test Teardown Debugs For SFC
Library SSHLibrary
Library OperatingSystem
Library RequestsLibrary
Resource ../../../libraries/KarafKeywords.robot
*** Variables ***
+${SECURITY_GROUP} sg-sfc
@{NETWORKS_NAME} network_1
@{SUBNETS_NAME} l2_subnet_1
@{VM_INSTANCES} sf1 sf2 sf3 source_vm dest_vm
Create SubNet @{NETWORKS_NAME}[0] @{SUBNETS_NAME}[0] @{SUBNETS_RANGE}[0]
Add Allow All Rules
- [Documentation] Allow all packets for this suite
- Neutron Security Group Create sg-sfc
- Neutron Security Group Rule Create sg-sfc direction=ingress port_range_max=65535 port_range_min=1 protocol=tcp remote_ip_prefix=0.0.0.0/0
- Neutron Security Group Rule Create sg-sfc direction=egress port_range_max=65535 port_range_min=1 protocol=tcp remote_ip_prefix=0.0.0.0/0
- Neutron Security Group Rule Create sg-sfc direction=ingress port_range_max=65535 port_range_min=1 protocol=udp remote_ip_prefix=0.0.0.0/0
- Neutron Security Group Rule Create sg-sfc direction=egress port_range_max=65535 port_range_min=1 protocol=udp remote_ip_prefix=0.0.0.0/0
- Neutron Security Group Rule Create sg-sfc direction=ingress protocol=icmp remote_ip_prefix=0.0.0.0/0
- Neutron Security Group Rule Create sg-sfc direction=egress protocol=icmp remote_ip_prefix=0.0.0.0/0
+ [Documentation] Allow all TCP/UDP/ICMP packets for this suite
+ OpenStackOperations.Create Allow All SecurityGroup ${SECURITY_GROUP}
Create Neutron Ports
[Documentation] Precreate neutron ports to be used for SFC VMs
: FOR ${port} IN @{PORTS}
- \ Create Port @{NETWORKS_NAME}[0] ${port} sg=sg-sfc
+ \ Create Port @{NETWORKS_NAME}[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 Ports p1in p1out sf1 sg=sg-sfc
- Create Vm Instance With Ports p2in p2out sf2 sg=sg-sfc
- Create Vm Instance With Ports p3in p3out sf3 sg=sg-sfc
- Create Vm Instance With Port source_vm_port source_vm sg=sg-sfc
- Create Vm Instance With Port dest_vm_port dest_vm sg=sg-sfc
+ Create Vm Instance With Ports p1in p1out sf1 sg=${SECURITY_GROUP}
+ Create Vm Instance With Ports p2in p2out sf2 sg=${SECURITY_GROUP}
+ Create Vm Instance With Ports p3in p3out sf3 sg=${SECURITY_GROUP}
+ Create Vm Instance With Port source_vm_port source_vm sg=${SECURITY_GROUP}
+ 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.
# 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}
- \ Wait Until Keyword Succeeds 15s 5s Verify VM Is ACTIVE ${vm}
+ \ 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}
${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 nova console-log @{VM_INSTANCES}[${index}] 30s
+ \ 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
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\n\r\nWelcome to $(hostname)" | sudo nc -l -p 80 ; done&
+ 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 &
Add Static Routing On Service Function VMs
[Documentation] Enable eth1 and add static routing between the ports on the SF VMs
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]
-Delete Vm Instances In network_1
- [Documentation] Delete Vm instances using instance names in network_1.
+*** 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 All SFC Objects
- [Documentation] Delete all previously created SFC objects
Delete SFC Port Chain PC1
Delete SFC Port Pair Group PG1
Delete SFC Port Pair Group PG2
Delete SFC Port Pair PP2
Delete SFC Port Pair PP3
Delete SFC Flow Classifier FC_http
-
-Delete Sub Networks In network_1
- [Documentation] Delete Sub Nets for the Networks with neutron request.
+ : FOR ${port} IN @{PORTS}
+ \ Delete Port ${port}
Delete SubNet l2_subnet_1
-
-Delete Networks
- [Documentation] Delete Networks with neutron request.
: FOR ${NetworkElement} IN @{NETWORKS_NAME}
\ Delete Network ${NetworkElement}