*** Settings ***
-Documentation Test suite for SFC Service Functions, Operates functions from Restconf APIs.
+Documentation Test suite for SFC Rendered Service Paths and Classifiers.
Suite Setup Init Suite
Suite Teardown Cleanup Suite
Library SSHLibrary
Resource ../../../libraries/KarafKeywords.robot
Resource ../../../libraries/DataModels.robot
Resource ../../../libraries/SFC/DockerSfc.robot
+Resource ../../../libraries/Utils.robot
Variables ../../../variables/sfc/Modules.py
-*** Variables ***
-${CREATE_RSP1_INPUT} {"input":{"parent-service-function-path":"SFP1","name":"RSP1"}}
-${CREATE_RSP_FAILURE_INPUT} {"input":{"parent-service-function-path":"SFC1-empty","name":"RSP1-empty-Path-1"}}
-@{SF_NAMES} "name":"firewall-1" "name":"dpi-1"
-@{INTERFACE_NAMES} v-ovsnsn6g1 v-ovsnsn1g1
-
*** Test Cases ***
Basic Environment Setup Tests
- [Documentation] Prepare Basic Test Environment
- Add Elements To URI From File ${SERVICE_FORWARDERS_URI} ${SERVICE_FORWARDERS_FILE}
- Add Elements To URI From File ${SERVICE_NODES_URI} ${SERVICE_NODES_FILE}
- Add Elements To URI From File ${SERVICE_FUNCTIONS_URI} ${SERVICE_FUNCTIONS_FILE}
- Wait Until Keyword Succeeds 60s 2s Check Service Function Types Added ${SF_NAMES}
- Add Elements To URI From File ${SERVICE_CHAINS_URI} ${SERVICE_CHAINS_FILE}
- Add Elements To URI From File ${SERVICE_METADATA_URI} ${SERVICE_METADATA_FILE}
- Add Elements To URI From File ${SERVICE_FUNCTION_PATHS_URI} ${SERVICE_FUNCTION_PATHS_FILE}
- Add Elements To URI From File ${SERVICE_FUNCTION_ACLS_URI} ${SERVICE_FUNCTION_ACLS_FILE}
+ [Documentation] Prepare Basic Test Environment. Full Deploy
+ Utils.Add Elements To URI From File ${SERVICE_FORWARDERS_URI} ${SERVICE_FORWARDERS_FILE}
+ Utils.Add Elements To URI From File ${SERVICE_NODES_URI} ${SERVICE_NODES_FILE}
+ Utils.Add Elements To URI From File ${SERVICE_FUNCTIONS_URI} ${SERVICE_FUNCTIONS_FILE}
+ BuiltIn.Wait Until Keyword Succeeds 60s 2s SfcKeywords.Check Service Function Types Added ${SF_NAMES}
+ Utils.Add Elements To URI From File ${SERVICE_CHAINS_URI} ${SERVICE_CHAINS_FILE}
+ Utils.Add Elements To URI From File ${SERVICE_METADATA_URI} ${SERVICE_METADATA_FILE}
+ SfcKeywords.Create Sfp And Wait For Rsp Creation ${SERVICE_FUNCTION_PATHS_FILE}
+ ${rsp_name} = SfcKeywords.Get Rendered Service Path Name ${SFP_NAME}
+ ${rsp_rev_name} = SfcKeywords.Get Rendered Service Path Name ${SFP_NAME} True
+ ${mapping} = BuiltIn.Create Dictionary RSP1=${rsp_name} RSP1_Reverse=${rsp_rev_name}
+ ${sf_acl_text} = TemplatedRequests.Resolve_Text_From_Template_File folder=${CONFIG_DIR} file_name=${SERVICE_FUNCTION_ACLS_FILE} mapping=${mapping}
+ Utils.Add Elements To URI And Verify ${SERVICE_FUNCTION_ACLS_URI} ${sf_acl_text}
-Create and Get Rendered Service Path
- [Documentation] Create and Get Rendered Service Path Through RESTConf APIs
- Post Elements To URI As JSON ${OPERATIONS_CREATE_RSP_URI} ${CREATE_RSP1_INPUT}
- ${resp} RequestsLibrary.Get Request session ${OPERATIONAL_RSPS_URI}
- Should Contain ${ALLOWED_STATUS_CODES} ${resp.status_code}
- ${elements}= Create List RSP1 "parent-service-function-path":"SFP1" "hop-number":0 "service-index":255 "hop-number":1
+Get Rendered Service Path By Name
+ [Documentation] Get Rendered Service Path By Name Through RESTConf APIs. Full Deploy
+ # The RSP should be symetric, so 2 should be created for the SFP
+ ${rsp_name} = SfcKeywords.Get Rendered Service Path Name ${SFP_NAME}
+ Utils.Get URI And Verify ${OPERATIONAL_RSP_URI}${rsp_name}
+ ${rsp_rev_name} = SfcKeywords.Get Rendered Service Path Name ${SFP_NAME} True
+ Utils.Get URI And Verify ${OPERATIONAL_RSP_URI}${rsp_rev_name}
+ ${elements} = BuiltIn.Create List ${rsp_name} "parent-service-function-path":"${SFP_NAME}" "hop-number":0 "service-index":255 "hop-number":1
... "service-index":254
- Check For Elements At URI ${OPERATIONAL_RSPS_URI} ${elements}
+ Utils.Check For Elements At URI ${OPERATIONAL_RSPS_URI} ${elements}
Create and Get Classifiers
- [Documentation] Apply json file descriptions of ACLs and Classifiers
- Add Elements To URI From File ${SERVICE_CLASSIFIERS_URI} ${SERVICE_CLASSIFIERS_FILE}
- ${classifiers}= Create List "service-function-classifiers" "service-function-classifier" "type":"ietf-access-control-list:ipv4-acl" "scl-service-function-forwarder"
+ [Documentation] Apply json file descriptions of ACLs and Classifiers. Full Deploy
+ Utils.Add Elements To URI From File ${SERVICE_CLASSIFIERS_URI} ${SERVICE_CLASSIFIERS_FILE}
+ ${classifiers}= BuiltIn.Create List "service-function-classifiers" "service-function-classifier" "type":"ietf-access-control-list:ipv4-acl" "scl-service-function-forwarder"
Append To List ${classifiers} "name":"Classifier2" "name":"ACL2"
Append To List ${classifiers} "name":"Classifier1" "name":"ACL1"
- Check For Elements At URI ${SERVICE_CLASSIFIERS_URI} ${classifiers}
- Wait Until Keyword Succeeds 60s 2s Check Classifier Flows
+ Utils.Check For Elements At URI ${SERVICE_CLASSIFIERS_URI} ${classifiers}
+ BuiltIn.Wait Until Keyword Succeeds 60s 2s SfcKeywords.Check Classifier Flows
*** Keywords ***
Init Suite
[Documentation] Connect Create session and initialize ODL version specific variables
- Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS}
+ RequestsLibrary.Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS}
SSHLibrary.Open Connection ${TOOLS_SYSTEM_IP} timeout=3s
SSHKeywords.Flexible Mininet Login
- ${docker_cidr}= DockerSfc.Get Docker Bridge Subnet
- ${docker_nw}= SfcUtils.Get Network From Cidr ${docker_cidr}
- ${docker_mask}= SfcUtils.Get Mask From Cidr ${docker_cidr}
- ${route_to_docker_net}= Set Variable sudo route add -net ${docker_nw} netmask ${docker_mask} gw ${TOOLS_SYSTEM_IP}
- Run Command On Remote System ${ODL_SYSTEM_IP} ${route_to_docker_net} ${ODL_SYSTEM_USER} prompt=${ODL_SYSTEM_PROMPT}
+ ${docker_cidr} = DockerSfc.Get Docker Bridge Subnet
+ ${docker_nw} = SfcUtils.Get Network From Cidr ${docker_cidr}
+ ${docker_mask} = SfcUtils.Get Mask From Cidr ${docker_cidr}
+ ${route_to_docker_net} = BuiltIn.Set Variable sudo route add -net ${docker_nw} netmask ${docker_mask} gw ${TOOLS_SYSTEM_IP}
+ Utils.Run Command On Remote System ${ODL_SYSTEM_IP} ${route_to_docker_net} ${ODL_SYSTEM_USER} prompt=${ODL_SYSTEM_PROMPT}
SSHLibrary.Put File ${CURDIR}/docker-ovs.sh . mode=0755
SSHLibrary.Put File ${CURDIR}/Dockerfile . mode=0755
SSHLibrary.Put File ${CURDIR}/setup-docker-image.sh . mode=0755
- ${result} SSHLibrary.Execute Command ./setup-docker-image.sh > >(tee myFile.log) 2> >(tee myFile.log) return_stderr=True return_stdout=True return_rc=True
- log ${result}
- Should be equal as integers ${result[2]} 0
+ ${result} = SSHLibrary.Execute Command ./setup-docker-image.sh > >(tee myFile.log) 2> >(tee myFile.log) return_stderr=True return_stdout=True return_rc=True
+ BuiltIn.log ${result}
+ BuiltIn.Should be equal as integers ${result[2]} 0
+ BuiltIn.Set Suite Variable @{INTERFACE_NAMES} v-ovsnsn6g1 v-ovsnsn1g1
DockerSfc.Docker Ovs Start nodes=6 guests=1 tunnel=vxlan-gpe odl_ip=${ODL_SYSTEM_IP}
- Wait Until Keyword Succeeds 60s 2s Check For Elements At URI ${OVSDB_TOPOLOGY_URI} ${INTERFACE_NAMES}
- ${docker_name_list}= DockerSfc.Get Docker Names As List
- Set Suite Variable ${DOCKER_NAMES_LIST} ${docker_name_list}
- log ${ODL_STREAM}
- Set Suite Variable ${CONFIG_DIR} ${CURDIR}/../../../variables/sfc/master/full-deploy
- Set Suite Variable ${SERVICE_FUNCTIONS_FILE} ${CONFIG_DIR}/service-functions.json
- Set Suite Variable ${SERVICE_FORWARDERS_FILE} ${CONFIG_DIR}/service-function-forwarders.json
- Set Suite Variable ${SERVICE_NODES_FILE} ${CONFIG_DIR}/service-nodes.json
- Set Suite Variable ${SERVICE_CHAINS_FILE} ${CONFIG_DIR}/service-function-chains.json
- Set Suite Variable ${SERVICE_FUNCTION_PATHS_FILE} ${CONFIG_DIR}/service-function-paths.json
- Set Suite Variable ${SERVICE_METADATA_FILE} ${CONFIG_DIR}/service-function-metadata.json
- Set Suite Variable ${SERVICE_FUNCTION_ACLS_FILE} ${CONFIG_DIR}/service-function-acls.json
- Set Suite Variable ${SERVICE_CLASSIFIERS_FILE} ${CONFIG_DIR}/service-function-classifiers.json
- Switch Ips In Json Files ${CONFIG_DIR} ${DOCKER_NAMES_LIST}
+ BuiltIn.Wait Until Keyword Succeeds 60s 2s Utils.Check For Elements At URI ${OVSDB_TOPOLOGY_URI} ${INTERFACE_NAMES}
+ ${docker_name_list} = DockerSfc.Get Docker Names As List
+ BuiltIn.Set Suite Variable ${DOCKER_NAMES_LIST} ${docker_name_list}
+ BuiltIn.log ${ODL_STREAM}
+ BuiltIn.Set Suite Variable ${SFP_NAME} SFP1
+ BuiltIn.Set Suite Variable ${CONFIG_DIR} ${CURDIR}/../../../variables/sfc/master/full-deploy
+ BuiltIn.Set Suite Variable ${SERVICE_FUNCTIONS_FILE} ${CONFIG_DIR}/service-functions.json
+ BuiltIn.Set Suite Variable ${SERVICE_FORWARDERS_FILE} ${CONFIG_DIR}/service-function-forwarders.json
+ BuiltIn.Set Suite Variable ${SERVICE_NODES_FILE} ${CONFIG_DIR}/service-nodes.json
+ BuiltIn.Set Suite Variable ${SERVICE_CHAINS_FILE} ${CONFIG_DIR}/service-function-chains.json
+ BuiltIn.Set Suite Variable ${SERVICE_FUNCTION_PATHS_FILE} ${CONFIG_DIR}/service-function-paths.json
+ BuiltIn.Set Suite Variable ${SERVICE_METADATA_FILE} ${CONFIG_DIR}/service-function-metadata.json
+ BuiltIn.Set Suite Variable ${SERVICE_FUNCTION_ACLS_FILE} service-function-acls.json
+ BuiltIn.Set Suite Variable ${SERVICE_CLASSIFIERS_FILE} ${CONFIG_DIR}/service-function-classifiers.json
+ BuiltIn.Set Suite Variable @{SF_NAMES} "firewall-1" "dpi-1"
+ SfcKeywords.Switch Ips In Json Files ${CONFIG_DIR} ${DOCKER_NAMES_LIST}
Cleanup Suite
[Documentation] Clean up all docker containers created and delete sessions
- Get Model Dump ${ODL_SYSTEM_IP} ${sfc_data_models}
- Remove All Elements At URI ${SERVICE_CLASSIFIERS_URI}
- Remove All Elements At URI ${SERVICE_FUNCTION_ACLS_URI}
- Remove All Elements At URI ${SERVICE_FUNCTIONS_URI}
- Wait Until Keyword Succeeds 60s 2s Check Service Function Types Removed ${SF_NAMES}
- Remove All Elements At URI ${SERVICE_FORWARDERS_URI}
- Remove All Elements At URI ${SERVICE_NODES_URI}
- Remove All Elements At URI ${SERVICE_CHAINS_URI}
- Remove All Elements At URI ${SERVICE_FUNCTION_PATHS_URI}
- Remove All Elements At URI ${SERVICE_METADATA_URI}
+ DataModels.Get Model Dump ${ODL_SYSTEM_IP} ${sfc_data_models}
+ Utils.Remove All Elements At URI ${SERVICE_CLASSIFIERS_URI}
+ Utils.Remove All Elements At URI ${SERVICE_FUNCTION_ACLS_URI}
+ SfcKeywords.Delete Sfp And Wait For Rsps Deletion ${SFP_NAME}
+ Utils.Remove All Elements At URI ${SERVICE_FUNCTIONS_URI}
+ BuiltIn.Wait Until Keyword Succeeds 60s 2s SfcKeywords.Check Service Function Types Removed ${SF_NAMES}
+ Utils.Remove All Elements At URI ${SERVICE_FORWARDERS_URI}
+ Utils.Remove All Elements At URI ${SERVICE_NODES_URI}
+ Utils.Remove All Elements At URI ${SERVICE_CHAINS_URI}
+ Utils.Remove All Elements At URI ${SERVICE_METADATA_URI}
DockerSfc.Docker Ovs Clean log_file=myFile4.log
- Delete All Sessions
+ RequestsLibrary.Delete All Sessions
SSHLibrary.Close Connection