2 Documentation Test suite for SFC Service Functions, Operates functions from Restconf APIs.
4 Suite Teardown Cleanup Suite
7 Library OperatingSystem
8 Library RequestsLibrary
9 Library ../../../libraries/SFC/SfcUtils.py
10 Variables ../../../variables/Variables.py
11 Resource ../../../variables/sfc/Variables.robot
12 Resource ../../../libraries/Utils.robot
13 Resource ../../../libraries/TemplatedRequests.robot
14 Resource ../../../libraries/KarafKeywords.robot
15 Resource ../../../libraries/SFC/DockerSfc.robot
18 ${CREATE_RSP1_INPUT} {"input":{"parent-service-function-path":"SFP1","name":"RSP1"}}
19 ${CREATE_RSP_FAILURE_INPUT} {"input":{"parent-service-function-path":"SFC1-empty","name":"RSP1-empty-Path-1"}}
22 Basic Environment Setup Tests
23 [Documentation] Prepare Basic Test Environment
24 Add Elements To URI From File ${SERVICE_FORWARDERS_URI} ${SERVICE_FORWARDERS_FILE}
25 Add Elements To URI From File ${SERVICE_NODES_URI} ${SERVICE_NODES_FILE}
26 Add Elements To URI From File ${SERVICE_FUNCTIONS_URI} ${SERVICE_FUNCTIONS_FILE}
27 Add Elements To URI From File ${SERVICE_CHAINS_URI} ${SERVICE_CHAINS_FILE}
28 Add Elements To URI From File ${SERVICE_METADATA_URI} ${SERVICE_METADATA_FILE}
29 Add Elements To URI From File ${SERVICE_FUNCTION_PATHS_URI} ${SERVICE_FUNCTION_PATHS_FILE}
30 Add Elements To URI From File ${SERVICE_FUNCTION_ACLS_URI} ${SERVICE_FUNCTION_ACLS_FILE}
32 Create and Get Rendered Service Path
33 [Documentation] Create and Get Rendered Service Path Through RESTConf APIs
34 Post Elements To URI As JSON ${OPERATIONS_CREATE_RSP_URI} ${CREATE_RSP1_INPUT}
35 ${resp} RequestsLibrary.Get Request session ${OPERATIONAL_RSPS_URI}
36 Should Contain ${ALLOWED_STATUS_CODES} ${resp.status_code}
37 ${elements}= Create List RSP1 "parent-service-function-path":"SFP1" "hop-number":0 "service-index":255 "hop-number":1
38 ... "service-index":254
39 Check For Elements At URI ${OPERATIONAL_RSPS_URI} ${elements}
41 Create and Get Classifiers
42 [Documentation] Apply json file descriptions of ACLs and Classifiers
43 Add Elements To URI From File ${SERVICE_CLASSIFIERS_URI} ${SERVICE_CLASSIFIERS_FILE}
44 ${classifiers}= Create List "service-function-classifiers" "service-function-classifier" "type":"ietf-access-control-list:ipv4-acl" "scl-service-function-forwarder"
45 Append To List ${classifiers} "name":"Classifier2" "name":"ACL2"
46 Append To List ${classifiers} "name":"Classifier1" "name":"ACL1"
47 Check For Elements At URI ${SERVICE_CLASSIFIERS_URI} ${classifiers}
48 Wait Until Keyword Succeeds 60s 2s Check Classifier Flows
51 Post Elements To URI As JSON
52 [Arguments] ${uri} ${data}
53 ${resp} RequestsLibrary.Post Request session ${uri} data=${data} headers=${headers}
54 Should Contain ${ALLOWED_STATUS_CODES} ${resp.status_code}
56 Get JSON Elements From URI
58 ${resp} RequestsLibrary.Get Request session ${uri}
59 ${value} To Json ${resp.content}
62 Check Classifier Flows
63 ${flowList}= DockerSfc.Get Flows In Docker Containers
65 Should Contain Match ${flowList} *actions=pop_nsh*
66 Should Contain Match ${flowList} *actions=push_nsh*
68 Switch Ips In Json Files
69 [Arguments] ${json_dir} ${container_names}
70 ${normalized_dir}= OperatingSystem.Normalize Path ${json_dir}/*.json
71 : FOR ${cont_name} IN @{container_names}
72 \ ${cont_ip}= Get Docker IP ${cont_name}
73 \ OperatingSystem.Run sudo sed -i 's/${cont_name}/${cont_ip}/g' ${normalized_dir}
76 [Documentation] Connect Create session and initialize ODL version specific variables
77 SSHLibrary.Open Connection ${TOOLS_SYSTEM_IP} timeout=3s
78 Utils.Flexible Mininet Login
79 ${docker_cidr}= DockerSfc.Get Docker Bridge Subnet
80 ${docker_nw}= SfcUtils.Get Network From Cidr ${docker_cidr}
81 ${docker_mask}= SfcUtils.Get Mask From Cidr ${docker_cidr}
82 ${route_to_docker_net}= Set Variable sudo route add -net ${docker_nw} netmask ${docker_mask} gw ${TOOLS_SYSTEM_IP}
83 Run Command On Remote System ${ODL_SYSTEM_IP} ${route_to_docker_net} ${ODL_SYSTEM_USER} prompt=${ODL_SYSTEM_PROMPT}
84 SSHLibrary.Put File ${CURDIR}/docker-ovs.sh . mode=0755
85 SSHLibrary.Put File ${CURDIR}/Dockerfile . mode=0755
86 SSHLibrary.Put File ${CURDIR}/setup-docker-image.sh . mode=0755
87 ${result} SSHLibrary.Execute Command ./setup-docker-image.sh > >(tee myFile.log) 2> >(tee myFile.log) return_stderr=True return_stdout=True return_rc=True
89 Should be equal as integers ${result[2]} 0
90 DockerSfc.Docker Ovs Start nodes=6 guests=1 tunnel=vxlan-gpe odl_ip=${ODL_SYSTEM_IP}
91 ${docker_name_list}= DockerSfc.Get Docker Names As List
92 Set Suite Variable ${DOCKER_NAMES_LIST} ${docker_name_list}
93 Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS}
95 Set Suite Variable ${CONFIG_DIR} ${CURDIR}/../../../variables/sfc/master/full-deploy
96 Set Suite Variable ${SERVICE_FUNCTIONS_FILE} ${CONFIG_DIR}/service-functions.json
97 Set Suite Variable ${SERVICE_FORWARDERS_FILE} ${CONFIG_DIR}/service-function-forwarders.json
98 Set Suite Variable ${SERVICE_NODES_FILE} ${CONFIG_DIR}/service-nodes.json
99 Set Suite Variable ${SERVICE_CHAINS_FILE} ${CONFIG_DIR}/service-function-chains.json
100 Set Suite Variable ${SERVICE_FUNCTION_PATHS_FILE} ${CONFIG_DIR}/service-function-paths.json
101 Set Suite Variable ${SERVICE_METADATA_FILE} ${CONFIG_DIR}/service-function-metadata.json
102 Set Suite Variable ${SERVICE_FUNCTION_ACLS_FILE} ${CONFIG_DIR}/service-function-acls.json
103 Set Suite Variable ${SERVICE_CLASSIFIERS_FILE} ${CONFIG_DIR}/service-function-classifiers.json
104 Switch Ips In Json Files ${CONFIG_DIR} ${DOCKER_NAMES_LIST}
107 [Documentation] Clean up all docker containers created and delete sessions
108 Remove All Elements At URI ${SERVICE_CLASSIFIERS_URI}
109 Remove All Elements At URI ${SERVICE_FUNCTION_ACLS_URI}
110 Remove All Elements At URI ${SERVICE_FUNCTIONS_URI}
111 Remove All Elements At URI ${SERVICE_FORWARDERS_URI}
112 Remove All Elements At URI ${SERVICE_NODES_URI}
113 Remove All Elements At URI ${SERVICE_CHAINS_URI}
114 Remove All Elements At URI ${SERVICE_FUNCTION_PATHS_URI}
115 Remove All Elements At URI ${SERVICE_METADATA_URI}
116 DockerSfc.Docker Ovs Clean log_file=myFile4.log
118 SSHLibrary.Close Connection