X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=csit%2Fsuites%2Fopenstack%2Fextensions%2Fsfc.robot;h=b7f85783d72af8beae3e516fdbfc983751606b3c;hb=94651ca9711d8eb316721775561e815830bc6c7e;hp=8c28f9d7592bff36b5a6021d252e606d65101654;hpb=36f1d4cdc79940c94358065f999bc31537c029c1;p=integration%2Ftest.git diff --git a/csit/suites/openstack/extensions/sfc.robot b/csit/suites/openstack/extensions/sfc.robot index 8c28f9d759..b7f85783d7 100644 --- a/csit/suites/openstack/extensions/sfc.robot +++ b/csit/suites/openstack/extensions/sfc.robot @@ -23,24 +23,36 @@ ${SECURITY_GROUP} sg-sfc @{NON_SF_VMS} sourcevm destvm @{SUBNET_CIDRS} 30.0.0.0/24 @{PORTS} p1in p1out source_vm_port dest_vm_port -${CURL_COMMAND} curl -v --connect-timeout 25 -${HTTP_SUCCESS} 200 OK -${HTTP_FAILURE} connect() timed out! -${WEBSERVER_80} while true; do echo -e "HTTP/1.0 200 OK\r\nContent-Length: 21\r\n\r\nWelcome to web-server80" | sudo nc -l -p 80 ; done -${WEBSERVER_81} while true; do echo -e "HTTP/1.0 200 OK\r\nContent-Length: 21\r\n\r\nWelcome to web-server81" | sudo nc -l -p 81 ; done -${WEBSERVER_82} while true; do echo -e "HTTP/1.0 200 OK\r\nContent-Length: 21\r\n\r\nWelcome to web-server82" | sudo nc -l -p 82 ; done -${CLOUD_IMAGE} "https://cloud-images.ubuntu.com/releases/18.04/release/ubuntu-18.04-server-cloudimg-amd64.img" -${CLOUD_IMAGE_NAME} ubuntu -${CLOUD_FLAVOR_NAME} ubuntu -${CLOUD_USER_NAME} ubuntu -${VXLAN_TOOL_URL} "https://git.opendaylight.org/gerrit/gitweb?p=sfc.git;a=blob_plain;f=sfc-test/nsh-tools/vxlan_tool.py;h=1445292405bc17516d03e4a448ac2e0f65d38e79;hb=HEAD" +${NC_COMMAND} nc -zv -w 5 +${RES_SUCCESS} open +${RES_FAILURE} Operation timed out +${WEBSERVER_80} (python -m SimpleHTTPServer 80 > /dev/null 2>&1 &) +${WEBSERVER_81} (python -m SimpleHTTPServer 81 > /dev/null 2>&1 &) +${WEBSERVER_82} (python -m SimpleHTTPServer 82 > /dev/null 2>&1 &) +${WEBSERVER_83} (python -m SimpleHTTPServer 83 > /dev/null 2>&1 &) +${WEBSERVER_84} (python -m SimpleHTTPServer 84 > /dev/null 2>&1 &) +${WEBSERVER_85} (python -m SimpleHTTPServer 85 > /dev/null 2>&1 &) +${WEBSERVER_100} (python -m SimpleHTTPServer 100 > /dev/null 2>&1 &) +${WEBSERVER_101} (python -m SimpleHTTPServer 101 > /dev/null 2>&1 &) +${WEBSERVER_102} (python -m SimpleHTTPServer 102 > /dev/null 2>&1 &) +${WEBSERVER_103} (python -m SimpleHTTPServer 103 > /dev/null 2>&1 &) +${WEBSERVER_CMDS} ${WEBSERVER_80} && ${WEBSERVER_81} && ${WEBSERVER_82} && ${WEBSERVER_83} && ${WEBSERVER_84} && ${WEBSERVER_85} && ${WEBSERVER_100} && ${WEBSERVER_101} && ${WEBSERVER_102} && ${WEBSERVER_103} +${CLOUD_IMAGE} "https://artifacts.opnfv.org/sfc/images/sfc_nsh_fraser.qcow2" +${CLOUD_IMAGE_NAME} sfc_nsh_fraser +${CLOUD_FLAVOR_NAME} sfc_nsh_fraser @{NETVIRT_DIAG_SERVICES} OPENFLOW IFM ITM DATASTORE ELAN +${ETH_IN} eth0 +${ETH_OUT} eth1 +${CLOUD_IMAGE_USER} root +${CLOUD_IMAGE_PASS} opnfv +${CLOULD_IMAGE_CONSOLE} root *** Test Cases *** Create Flow Classifiers For Basic Test [Documentation] Create SFC Flow Classifier for TCP traffic between source VM and destination VM OpenStackOperations.Create SFC Flow Classifier FC_80 @{NET1_VM_IPS}[0] @{NET1_VM_IPS}[1] tcp source_vm_port args=--destination-port 80:80 OpenStackOperations.Create SFC Flow Classifier FC_81 @{NET1_VM_IPS}[0] @{NET1_VM_IPS}[1] tcp source_vm_port args=--destination-port 81:81 + OpenStackOperations.Create SFC Flow Classifier FC_83_85 @{NET1_VM_IPS}[0] @{NET1_VM_IPS}[1] tcp source_vm_port args=--destination-port 83:85 Create Port Pair [Documentation] Create SFC Port Pairs @@ -51,12 +63,14 @@ Create Port Pair Groups OpenStackOperations.Create SFC Port Pair Group SFPPG1 SFPP1 Test Communication From Vm Instance1 In net_1 No SF - [Documentation] Login to the source VM instance, and send a HTTP GET using curl to the destination VM instance, If the SF handles the traffic, there will be delay causing the time for curl to be higher. + [Documentation] Login to the source VM instance, and send a nc req to the destination VM instance, If the SF handles the traffic, there will be delay causing the time for nc to be higher. ${DEST_VM_LIST} BuiltIn.Create List @{NET1_VM_IPS}[1] - ${curl_resp} OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${CURL_COMMAND} http://@{NET1_VM_IPS}[1] - BuiltIn.Should Contain ${curl_resp} ${HTTP_SUCCESS} - ${curl_resp} OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${CURL_COMMAND} http://@{NET1_VM_IPS}[1]:81 - BuiltIn.Should Contain ${curl_resp} ${HTTP_SUCCESS} + ${nc_resp} OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} @{NET1_VM_IPS}[1] 80 user=${CLOUD_IMAGE_USER} password=${CLOUD_IMAGE_PASS} + ... console=${CLOULD_IMAGE_CONSOLE} + BuiltIn.Should Contain ${nc_resp} ${RES_SUCCESS} + ${nc_resp} OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} @{NET1_VM_IPS}[1] 81 user=${CLOUD_IMAGE_USER} password=${CLOUD_IMAGE_PASS} + ... console=${CLOULD_IMAGE_CONSOLE} + BuiltIn.Should Contain ${nc_resp} ${RES_SUCCESS} [Teardown] BuiltIn.Run Keywords OpenStackOperations.Get Test Teardown Debugs ... AND OpenStackOperations.Get Test Teardown Debugs For SFC ... AND OpenStackOperations.Exit From Vm Console @@ -66,84 +80,191 @@ Create Port Chain For Src->Dest Port 80 OpenStackOperations.Create SFC Port Chain SFPC1 args=--port-pair-group SFPPG1 --flow-classifier FC_80 Test Communication From Vm Instance1 In net_1 Port 80 via SF - [Documentation] Login to the source VM instance, and send a HTTP GET using curl to the destination VM instance, If the SF handles the traffic, there will be delay causing the time for curl to be higher. - Start Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} args=--do forward --interface ens2 --output ens3 --verbose off - Wait Until Keyword Succeeds 3x 10s Access Http And Check Status @{NETWORKS}[0] ${CURL_COMMAND} http://@{NET1_VM_IPS}[1] ${HTTP_SUCCESS} - Wait Until Keyword Succeeds 3x 10s Access Http And Check Status @{NETWORKS}[0] ${CURL_COMMAND} http://@{NET1_VM_IPS}[1]:81 ${HTTP_SUCCESS} + [Documentation] Login to the source VM instance, and send a nc req to the destination VM instance, If the SF handles the traffic, there will be delay causing the time for nc to be higher. + Start Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} args=--do forward --interface ${ETH_IN} --output ${ETH_OUT} --verbose off + Wait Until Keyword Succeeds 3x 10s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} + ... 80 ${RES_SUCCESS} + Wait Until Keyword Succeeds 3x 10s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} + ... 81 ${RES_SUCCESS} Stop Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} - Start Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} args=--do forward --interface ens2 --output ens3 --verbose off --block 80 + Start Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} args=--do forward --interface ${ETH_IN} --output ${ETH_OUT} --verbose off --block 80 BuiltIn.Comment Port 80 communication should fail as the SF blocks the same - Wait Until Keyword Succeeds 3x 10s Access Http And Check Status @{NETWORKS}[0] ${CURL_COMMAND} http://@{NET1_VM_IPS}[1] ${HTTP_FAILURE} + Wait Until Keyword Succeeds 3x 10s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} + ... 80 ${RES_FAILURE} BuiltIn.Comment Test to confirm Port 81 is not blocked - Wait Until Keyword Succeeds 3x 10s Access Http And Check Status @{NETWORKS}[0] ${CURL_COMMAND} http://@{NET1_VM_IPS}[1]:81 ${HTTP_SUCCESS} + Wait Until Keyword Succeeds 3x 10s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} + ... 81 ${RES_SUCCESS} Stop Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} - Start Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} args=--do forward --interface ens2 --output ens3 --verbose off --block 81 - Wait Until Keyword Succeeds 3x 10s Access Http And Check Status @{NETWORKS}[0] ${CURL_COMMAND} http://@{NET1_VM_IPS}[1] ${HTTP_SUCCESS} - Wait Until Keyword Succeeds 3x 10s Access Http And Check Status @{NETWORKS}[0] ${CURL_COMMAND} http://@{NET1_VM_IPS}[1]:81 ${HTTP_SUCCESS} + Start Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} args=--do forward --interface ${ETH_IN} --output ${ETH_OUT} --verbose off --block 81 + Wait Until Keyword Succeeds 3x 10s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} + ... 80 ${RES_SUCCESS} + Wait Until Keyword Succeeds 3x 10s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} + ... 81 ${RES_SUCCESS} Stop Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} [Teardown] BuiltIn.Run Keywords OpenStackOperations.Get Test Teardown Debugs ... AND OpenStackOperations.Get Test Teardown Debugs For SFC ... AND OpenStackOperations.Exit From Vm Console Update Port Chain To Use Flow Classifier For Port 81 - [Documentation] Update Port Chain to use FC_82 and FC_83 instead of FC_80 and FC_81 + [Documentation] Update Port Chain to use FC_81 instead of FC_80 OpenStackOperations.Update SFC Port Chain With A New Flow Classifier SFPC1 FC_81 OpenStackOperations.Update SFC Port Chain Removing A Flow Classifier SFPC1 FC_80 Test Communication From Vm Instance1 In net_1 Port 81 via SF - [Documentation] Login to the source VM instance, and send a HTTP GET using curl to the destination VM instance, If the SF handles the traffic, there will be delay causing the time for curl to be higher. + [Documentation] Login to the source VM instance, and send a nc req to the destination VM instance. Stop Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} - Start Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} args=--do forward --interface ens2 --output ens3 --verbose off - Wait Until Keyword Succeeds 3x 10s Access Http And Check Status @{NETWORKS}[0] ${CURL_COMMAND} http://@{NET1_VM_IPS}[1] ${HTTP_SUCCESS} - Wait Until Keyword Succeeds 3x 10s Access Http And Check Status @{NETWORKS}[0] ${CURL_COMMAND} http://@{NET1_VM_IPS}[1]:81 ${HTTP_SUCCESS} - ... cmd_timeout=60s + Start Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} args=--do forward --interface ${ETH_IN} --output ${ETH_OUT} --verbose off + Wait Until Keyword Succeeds 3x 10s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} + ... 80 ${RES_SUCCESS} + Wait Until Keyword Succeeds 3x 10s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} + ... 81 ${RES_SUCCESS} Stop Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} - Start Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} args=--do forward --interface ens2 --output ens3 --verbose off --block 81 - Wait Until Keyword Succeeds 3x 10s Access Http And Check Status @{NETWORKS}[0] ${CURL_COMMAND} http://@{NET1_VM_IPS}[1] ${HTTP_SUCCESS} - Wait Until Keyword Succeeds 3x 10s Access Http And Check Status @{NETWORKS}[0] ${CURL_COMMAND} http://@{NET1_VM_IPS}[1]:81 ${HTTP_FAILURE} - ... cmd_timeout=60s + Start Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} args=--do forward --interface ${ETH_IN} --output ${ETH_OUT} --verbose off --block 81 BuiltIn.Comment Port 81 communication should fail as the SF blocks the same + Wait Until Keyword Succeeds 3x 10s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} + ... 80 ${RES_SUCCESS} + Wait Until Keyword Succeeds 3x 10s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} + ... 81 ${RES_FAILURE} BuiltIn.Comment Test to confirm Port 80 does not continue to get routed through SF Stop Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} - Start Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} args=--do forward --interface ens2 --output ens3 --verbose off --block 80 - Wait Until Keyword Succeeds 3x 10s Access Http And Check Status @{NETWORKS}[0] ${CURL_COMMAND} http://@{NET1_VM_IPS}[1] ${HTTP_SUCCESS} - Wait Until Keyword Succeeds 3x 10s Access Http And Check Status @{NETWORKS}[0] ${CURL_COMMAND} http://@{NET1_VM_IPS}[1]:81 ${HTTP_SUCCESS} - ... cmd_timeout=60s + Start Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} args=--do forward --interface ${ETH_IN} --output ${ETH_OUT} --verbose off --block 80 + Wait Until Keyword Succeeds 3x 10s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} + ... 80 ${RES_SUCCESS} + Wait Until Keyword Succeeds 3x 10s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} + ... 81 ${RES_SUCCESS} Stop Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} [Teardown] BuiltIn.Run Keywords OpenStackOperations.Get Test Teardown Debugs ... AND OpenStackOperations.Get Test Teardown Debugs For SFC ... AND OpenStackOperations.Exit From Vm Console +Update Port Chain To Use Flow Classifier For Port Range 83-85 + [Documentation] Update Port Chain to use FC_83_85 + OpenStackOperations.Update SFC Port Chain With A New Flow Classifier SFPC1 FC_83_85 + +Test Communication From Vm Instance1 In net_1 Port 84 And 85 via SF + [Documentation] Login to the source VM instance, and send a nc req to the destination VM instance. + Stop Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} + Start Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} args=--do forward --interface ${ETH_IN} --output ${ETH_OUT} --verbose off + Wait Until Keyword Succeeds 3x 10s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} + ... 80 ${RES_SUCCESS} + Wait Until Keyword Succeeds 3x 10s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} + ... 83 ${RES_SUCCESS} + Wait Until Keyword Succeeds 3x 10s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} + ... 84 ${RES_SUCCESS} + Wait Until Keyword Succeeds 3x 10s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} + ... 85 ${RES_SUCCESS} + Stop Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} + Start Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} args=--do forward --interface ${ETH_IN} --output ${ETH_OUT} --verbose off --block 83 + BuiltIn.Comment Port 83 communication should fail as the SF blocks the same + Wait Until Keyword Succeeds 3x 10s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} + ... 80 ${RES_SUCCESS} + Wait Until Keyword Succeeds 3x 10s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} + ... 83 ${RES_FAILURE} + Wait Until Keyword Succeeds 3x 10s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} + ... 84 ${RES_SUCCESS} + Wait Until Keyword Succeeds 3x 10s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} + ... 85 ${RES_SUCCESS} + Stop Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} + Start Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} args=--do forward --interface ${ETH_IN} --output ${ETH_OUT} --verbose off --block 84 + BuiltIn.Comment Port 84 communication should fail as the SF blocks the same + Wait Until Keyword Succeeds 3x 10s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} + ... 80 ${RES_SUCCESS} + Wait Until Keyword Succeeds 3x 10s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} + ... 84 ${RES_FAILURE} + Wait Until Keyword Succeeds 3x 10s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} + ... 83 ${RES_SUCCESS} + Wait Until Keyword Succeeds 3x 10s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} + ... 85 ${RES_SUCCESS} + Stop Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} + Start Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} args=--do forward --interface ${ETH_IN} --output ${ETH_OUT} --verbose off --block 85 + BuiltIn.Comment Port 85 communication should fail as the SF blocks the same + Wait Until Keyword Succeeds 3x 10s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} + ... 80 ${RES_SUCCESS} + Wait Until Keyword Succeeds 3x 10s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} + ... 83 ${RES_SUCCESS} + Wait Until Keyword Succeeds 3x 10s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} + ... 84 ${RES_SUCCESS} + Wait Until Keyword Succeeds 3x 10s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} + ... 85 ${RES_FAILURE} + Stop Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} + Start Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} args=--do forward --interface ${ETH_IN} --output ${ETH_OUT} --verbose off --block 80 + Wait Until Keyword Succeeds 3x 10s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} + ... 80 ${RES_SUCCESS} + Wait Until Keyword Succeeds 3x 10s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} + ... 83 ${RES_SUCCESS} + Wait Until Keyword Succeeds 3x 10s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} + ... 84 ${RES_SUCCESS} + Wait Until Keyword Succeeds 3x 10s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} + ... 85 ${RES_SUCCESS} + +Update Port Chain To Use Flow Classifier For Input Port Range 101-103 + [Documentation] Update Port Chain to use FC_101_103 + BuiltIn.Comment Removing and Deleting Existing Conflicting Flow Classifiers + OpenStackOperations.Update SFC Port Chain Removing A Flow Classifier SFPC1 FC_81 + OpenStackOperations.Update SFC Port Chain Removing A Flow Classifier SFPC1 FC_83_85 + OpenStackOperations.Delete SFC Flow Classifier FC_80 + OpenStackOperations.Delete SFC Flow Classifier FC_81 + OpenStackOperations.Delete SFC Flow Classifier FC_83_85 + OpenStackOperations.Create SFC Flow Classifier FC_101_103 @{NET1_VM_IPS}[0] @{NET1_VM_IPS}[1] tcp source_vm_port args=--source-port 101:103 + OpenStackOperations.Update SFC Port Chain With A New Flow Classifier SFPC1 FC_101_103 + +Test Communication From Vm Instance1 In net_1 Port 100 And 102 via SF + [Documentation] Login to the source VM instance, and send a nc req to the destination VM instance. + Stop Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} + Start Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} args=--do forward --interface ${ETH_IN} --output ${ETH_OUT} --verbose off + Wait Until Keyword Succeeds 3x 10s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} -p 80 + ... 83 ${RES_SUCCESS} + Wait Until Keyword Succeeds 3x 10s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} -p 100 + ... 83 ${RES_SUCCESS} + Wait Until Keyword Succeeds 3x 10s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} -p 101 + ... 83 ${RES_SUCCESS} + Wait Until Keyword Succeeds 3x 10s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} -p 102 + ... 83 ${RES_SUCCESS} + Wait Until Keyword Succeeds 3x 10s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} -p 103 + ... 83 ${RES_SUCCESS} + Stop Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} + Start Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} args=--do forward --interface ${ETH_IN} --output ${ETH_OUT} --verbose off --block 83 + Wait Until Keyword Succeeds 3x 10s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} -p 80 + ... 83 ${RES_SUCCESS} + Wait Until Keyword Succeeds 3x 10s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} -p 100 + ... 83 ${RES_SUCCESS} + Wait Until Keyword Succeeds 3x 10s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} -p 101 + ... 83 ${RES_FAILURE} + Wait Until Keyword Succeeds 3x 10s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} -p 102 + ... 83 ${RES_FAILURE} + Wait Until Keyword Succeeds 3x 10s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} -p 103 + ... 83 ${RES_FAILURE} + Delete And Recreate Port Chain And Flow Classifiers For Symmetric Test OpenStackOperations.Create SFC Flow Classifier FC_SYM @{NET1_VM_IPS}[0] @{NET1_VM_IPS}[1] tcp source_vm_port args=--destination-port 82:82 --source-port 2000 --logical-destination-port dest_vm_port OpenStackOperations.Delete SFC Port Chain SFPC1 OpenStackOperations.Create SFC Port Chain SFPSYM args=--port-pair-group SFPPG1 --flow-classifier FC_SYM --chain-parameters symmetric=true Test Communication From Vm Instance1 For Symmetric Chain - [Documentation] Login to the source VM instance, and send a HTTP GET using curl to the destination VM instance, If the SF handles the traffic, there will be delay causing the time for curl to be higher. + [Documentation] Login to the source VM instance, and send a nc req to the destination VM instance. Stop Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} - Start Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} args=--do forward --interface ens2 --output ens3 --verbose off - Start Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} args=--do forward --interface ens3 --output ens2 --verbose off - Wait Until Keyword Succeeds 8x 20s Access Http And Check Status @{NETWORKS}[0] ${CURL_COMMAND} --local-port 2000 -m 60 http://@{NET1_VM_IPS}[1]:82 ${HTTP_SUCCESS} - ... cmd_timeout=80s + Start Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} args=--do forward --interface ${ETH_IN} --output ${ETH_OUT} --verbose off + Start Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} args=--do forward --interface ${ETH_OUT} --output ${ETH_IN} --verbose off + Wait Until Keyword Succeeds 8x 20s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} -p 2000 + ... 82 ${RES_SUCCESS} BuiltIn.Comment Test to confirm the SRC->DEST Port 82 is routed through SF Stop Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} - Start Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} args=--do forward --interface ens2 --output ens3 --verbose off --block 82 - Start Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} args=--do forward --interface ens3 --output ens2 --verbose off - Wait Until Keyword Succeeds 8x 20s Access Http And Check Status @{NETWORKS}[0] ${CURL_COMMAND} --local-port 2000 -m 60 http://@{NET1_VM_IPS}[1]:82 ${HTTP_FAILURE} - ... cmd_timeout=80s + Start Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} args=--do forward --interface ${ETH_IN} --output ${ETH_OUT} --verbose off --block 82 + Start Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} args=--do forward --interface ${ETH_OUT} --output ${ETH_IN} --verbose off + Wait Until Keyword Succeeds 8x 20s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} -p 2000 + ... 82 ${RES_FAILURE} BuiltIn.Comment Test to confirm DEST->SRC Port 2000 path SFC traversal Stop Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} - Start Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} args=--do forward --interface ens2 --output ens3 --verbose off - Start Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} args=--do forward --interface ens3 --output ens2 --verbose off --block 2000 - Wait Until Keyword Succeeds 8x 20s Access Http And Check Status @{NETWORKS}[0] ${CURL_COMMAND} --local-port 2000 -m 60 http://@{NET1_VM_IPS}[1]:82 ${HTTP_FAILURE} - ... cmd_timeout=80s + Start Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} args=--do forward --interface ${ETH_IN} --output ${ETH_OUT} --verbose off + Start Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} args=--do forward --interface ${ETH_OUT} --output ${ETH_IN} --verbose off --block 2000 + Wait Until Keyword Succeeds 8x 20s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} -p 2000 + ... 82 ${RES_FAILURE} BuiltIn.Comment Test to confirm the Normalcy restored Stop Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} - Start Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} args=--do forward --interface ens2 --output ens3 --verbose off - Start Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} args=--do forward --interface ens3 --output ens2 --verbose off - Wait Until Keyword Succeeds 8x 20s Access Http And Check Status @{NETWORKS}[0] ${CURL_COMMAND} --local-port 2000 -m 60 http://@{NET1_VM_IPS}[1]:82 ${HTTP_SUCCESS} - ... cmd_timeout=80s + Start Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} args=--do forward --interface ${ETH_IN} --output ${ETH_OUT} --verbose off + Start Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} args=--do forward --interface ${ETH_OUT} --output ${ETH_IN} --verbose off + Wait Until Keyword Succeeds 8x 20s Check Network Reachability @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${NC_COMMAND} -p 2000 + ... 82 ${RES_SUCCESS} Stop Vxlan Tool in SF @{NETWORKS}[0] ${SF1_IP} [Teardown] BuiltIn.Run Keywords OpenStackOperations.Get Test Teardown Debugs ... AND OpenStackOperations.Get Test Teardown Debugs For SFC @@ -155,19 +276,21 @@ Delete Configurations ... 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 ${vm} IN @{NET_1_VMS} - \ OpenStackOperations.Delete Vm Instance ${vm} + FOR ${vm} IN @{NET_1_VMS} + OpenStackOperations.Delete Vm Instance ${vm} + END OpenStackOperations.Delete SFC Port Chain SFPSYM OpenStackOperations.Delete SFC Port Pair Group SFPPG1 OpenStackOperations.Delete SFC Port Pair SFPP1 - OpenStackOperations.Delete SFC Flow Classifier FC_80 - OpenStackOperations.Delete SFC Flow Classifier FC_81 + OpenStackOperations.Delete SFC Flow Classifier FC_101_103 OpenStackOperations.Delete SFC Flow Classifier FC_SYM - : FOR ${port} IN @{PORTS} - \ OpenStackOperations.Delete Port ${port} + FOR ${port} IN @{PORTS} + OpenStackOperations.Delete Port ${port} + END OpenStackOperations.Delete SubNet l2_subnet_1 - : FOR ${network} IN @{NETWORKS} - \ OpenStackOperations.Delete Network ${network} + FOR ${network} IN @{NETWORKS} + OpenStackOperations.Delete Network ${network} + END OpenStackOperations.Delete SecurityGroup ${SECURITY_GROUP} *** Keywords *** @@ -189,23 +312,27 @@ Create Basic Networks OpenStackOperations.Get Suite Debugs Create Ports For Testing - : FOR ${port} IN @{PORTS} - \ OpenStackOperations.Create Port @{NETWORKS}[0] ${port} sg=${SECURITY_GROUP} + FOR ${port} IN @{PORTS} + OpenStackOperations.Create Port @{NETWORKS}[0] ${port} sg=${SECURITY_GROUP} + END OpenStackOperations.Update Port p1in additional_args=--no-security-group OpenStackOperations.Update Port p1in additional_args=--disable-port-security OpenStackOperations.Update Port p1out additional_args=--no-security-group OpenStackOperations.Update Port p1out additional_args=--disable-port-security + CompareStream.Run_Keyword_If_Equals oxygen OpenStackOperations.Update Port source_vm_port additional_args=--no-security-group + CompareStream.Run_Keyword_If_Equals oxygen OpenStackOperations.Update Port source_vm_port additional_args=--disable-port-security + CompareStream.Run_Keyword_If_Equals oxygen OpenStackOperations.Update Port dest_vm_port additional_args=--no-security-group + CompareStream.Run_Keyword_If_Equals oxygen OpenStackOperations.Update Port dest_vm_port additional_args=--disable-port-security OpenStackOperations.Get Suite Debugs Create Instances For Testing - BuiltIn.Comment Create one ubuntu instances and two cirros instances + ${SF_COMP_HOST} = BuiltIn.Set Variable If 2 < ${NUM_OS_SYSTEM} ${OS_CMP2_HOSTNAME} ${OS_CMP1_HOSTNAME} OpenStackOperations.Add New Image From Url ${CLOUD_IMAGE} ${CLOUD_IMAGE_NAME} - OpenStackOperations.Create Flavor ${CLOUD_FLAVOR_NAME} 2048 4 - OpenStackOperations.Generate And Add Keypair sfctest odlsfctest - OpenStackOperations.Create Vm Instance With Ports And Key On Compute Node p1in p1out sf1 ${OS_CMP1_HOSTNAME} image=${CLOUD_IMAGE_NAME} flavor=${CLOUD_FLAVOR_NAME} - ... sg=${SECURITY_GROUP} keyname=sfctest - OpenStackOperations.Create Vm Instance With Port On Compute Node source_vm_port sourcevm ${OS_CMP1_HOSTNAME} sg=${SECURITY_GROUP} flavor=cirros256 - OpenStackOperations.Create Vm Instance With Port On Compute Node dest_vm_port destvm ${OS_CMP1_HOSTNAME} sg=${SECURITY_GROUP} flavor=cirros256 + OpenStackOperations.Create Flavor ${CLOUD_FLAVOR_NAME} 512 1 + OpenStackOperations.Create Vm Instance With Ports On Compute Node p1in p1out sf1 ${SF_COMP_HOST} image=${CLOUD_IMAGE_NAME} flavor=${CLOUD_FLAVOR_NAME} + ... sg=${SECURITY_GROUP} + OpenStackOperations.Create Vm Instance With Port On Compute Node source_vm_port sourcevm ${OS_CMP1_HOSTNAME} image=${CLOUD_IMAGE_NAME} flavor=${CLOUD_FLAVOR_NAME} sg=${SECURITY_GROUP} + OpenStackOperations.Create Vm Instance With Port On Compute Node dest_vm_port destvm ${OS_CMP1_HOSTNAME} image=${CLOUD_IMAGE_NAME} flavor=${CLOUD_FLAVOR_NAME} sg=${SECURITY_GROUP} OpenStackOperations.Show Debugs @{NET_1_VMS} OpenStackOperations.Get Suite Debugs @@ -226,36 +353,34 @@ Check Vm Instances Have Ip Address And Ready For Test ${NET1_VM_IPS} BuiltIn.Create List ${src_ip} ${dest_ip} BuiltIn.Set Suite Variable @{NET1_VM_IPS} BuiltIn.Set Suite Variable ${SF1_IP} - BuiltIn.Wait Until Keyword Succeeds 300s 60s OpenStackOperations.Check If Instance Is Ready For Ssh Login Using PublicKey @{NETWORKS}[0] ${SF1_IP} user=ubuntu - ... idfile=/tmp/odlsfctest - BuiltIn.Wait Until Keyword Succeeds 300s 60s OpenStackOperations.Check If Instance Is Ready For Ssh Login Using Password @{NETWORKS}[0] @{NET1_VM_IPS}[0] - BuiltIn.Wait Until Keyword Succeeds 300s 60s OpenStackOperations.Check If Instance Is Ready For Ssh Login Using Password @{NETWORKS}[0] @{NET1_VM_IPS}[1] + BuiltIn.Set Suite Variable ${OS_SYSTEM_PROMPT} \# + BuiltIn.Wait Until Keyword Succeeds 300s 60s OpenStackOperations.Check If Instance Is Ready For Ssh Login Using Password @{NETWORKS}[0] ${SF1_IP} user=${CLOUD_IMAGE_USER} + ... password=${CLOUD_IMAGE_PASS} console=${CLOULD_IMAGE_CONSOLE} + BuiltIn.Wait Until Keyword Succeeds 300s 60s OpenStackOperations.Check If Instance Is Ready For Ssh Login Using Password @{NETWORKS}[0] @{NET1_VM_IPS}[0] user=${CLOUD_IMAGE_USER} + ... password=${CLOUD_IMAGE_PASS} console=${CLOULD_IMAGE_CONSOLE} + BuiltIn.Wait Until Keyword Succeeds 300s 60s OpenStackOperations.Check If Instance Is Ready For Ssh Login Using Password @{NETWORKS}[0] @{NET1_VM_IPS}[1] user=${CLOUD_IMAGE_USER} + ... password=${CLOUD_IMAGE_PASS} console=${CLOULD_IMAGE_CONSOLE} OpenStackOperations.Show Debugs @{NET_1_VMS} OpenStackOperations.Get Suite Debugs Start Applications on VM Instances For Test BuiltIn.Comment Run Web server Scripts on destination vm listening to 80,81 and 82 ports - OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET1_VM_IPS}[1] ${WEBSERVER_80} & - OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET1_VM_IPS}[1] ${WEBSERVER_81} & - OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET1_VM_IPS}[1] ${WEBSERVER_82} & - BuiltIn.Comment Get vxlan_tool script - Utils.Download File On Openstack Node ${OS_CNTL_CONN_ID} vxlan_tool.py ${VXLAN_TOOL_URL} - BuiltIn.Comment Copy vxlan_tool script to SFC VM - OpenStackOperations.Copy File To VM Instance With PublicKey Auth @{NETWORKS}[0] ${SF1_IP} /tmp/vxlan_tool.py user=${CLOUD_USER_NAME} idfile=/tmp/odlsfctest - BuiltIn.Comment Bring up the second Interface for egress - Execute Command on VM Instance with PublicKey Auth @{NETWORKS}[0] ${SF1_IP} sudo ifconfig ens3 up user=${CLOUD_USER_NAME} idfile=/tmp/odlsfctest + ${resp} OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET1_VM_IPS}[1] ${WEBSERVER_CMDS} && (echo done) user=${CLOUD_IMAGE_USER} password=${CLOUD_IMAGE_PASS} + ... console=${CLOULD_IMAGE_CONSOLE} + BuiltIn.Should Contain ${resp} done Start Vxlan Tool in SF [Arguments] ${network} ${sf_vm_ip} ${args}=${EMPTY} [Documentation] Starts the tool in the SF VM's - Execute Command on VM Instance with PublicKey Auth ${network} ${sf_vm_ip} nohup sudo python3 /tmp/vxlan_tool.py ${args} & user=ubuntu idfile=/tmp/odlsfctest + OpenStackOperations.Execute Command on VM Instance ${network} ${sf_vm_ip} nohup python vxlan_tool.py ${args} & user=${CLOUD_IMAGE_USER} password=${CLOUD_IMAGE_PASS} console=${CLOULD_IMAGE_CONSOLE} Stop Vxlan Tool in SF [Arguments] ${network} ${sf_vm_ip} [Documentation] Starts the tool in the SF VM's - Execute Command on VM Instance With PublicKey Auth ${network} ${sf_vm_ip} sudo pkill python3 user=ubuntu idfile=/tmp/odlsfctest + OpenStackOperations.Execute Command on VM Instance ${network} ${sf_vm_ip} pkill python user=${CLOUD_IMAGE_USER} password=${CLOUD_IMAGE_PASS} console=${CLOULD_IMAGE_CONSOLE} -Access Http And Check Status - [Arguments] ${vm_ip} ${curl_command} ${ret_code} ${cmd_timeout}=30s - ${curl_resp} OpenStackOperations.Execute Command on VM Instance @{NETWORKS}[0] @{NET1_VM_IPS}[0] ${curl_command} cmd_timeout=${cmd_timeout} - BuiltIn.Should Contain ${curl_resp} ${ret_code} +Check Network Reachability + [Arguments] ${net_name} ${source_vm_ip} ${command} ${port} ${ret_code} ${cmd_timeout}=30s + ${nc_resp} OpenStackOperations.Execute Command on VM Instance ${net_name} ${source_vm_ip} ${command} @{NET1_VM_IPS}[1] ${port} cmd_timeout=${cmd_timeout} user=${CLOUD_IMAGE_USER} + ... password=${CLOUD_IMAGE_PASS} console=${CLOULD_IMAGE_CONSOLE} + BuiltIn.Should Contain ${nc_resp} ${ret_code}