Removed suites for no more active groupbasedpolicy project.
JIRA: INTTEST-140
Change-Id: Ib08a6d12c705d9a1ad37ba8fa1a200e79111cf1a
Signed-off-by: Oleksandr Zharov <oleksandr.zharov@pantheon.tech>
+++ /dev/null
-*** Settings ***
-Documentation Test suite for GBP Tenants, Operates functions from Restconf APIs.
-
-Library RequestsLibrary
-Library SSHLibrary
-Library Collections
-Library OperatingSystem
-Variables ../../../variables/Variables.py
-Resource ../../../libraries/CompareStream.robot
-Resource ../../../libraries/Utils.robot
-
-Suite Teardown Delete All Sessions
-
-
-*** Test Cases ***
-Init Variables
- [Documentation] Initialize ODL version specific variables using resource CompareStream.
- Init Variables Master
-
-Add Tenant to one node
- [Documentation] Add one Tenant from JSON file
- Create Session session http://${ODL_SYSTEM_1_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS}
- ${jsonbody} Read JSON From File ${GBP_TENANT1_FILE}
- Add Elements To URI From File ${GBP_TENANT1_API} ${GBP_TENANT1_FILE} headers=${HEADERS_YANG_JSON}
- ${resp} RequestsLibrary.Get Request session ${GBP_TENANT1_API}
- Should Be Equal As Strings ${resp.status_code} 200
- ${result} To JSON ${resp.content}
- Lists Should be Equal ${result} ${jsonbody}
-
-Read Tenant from other node
- Create Session session http://${ODL_SYSTEM_2_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS}
- ${jsonbody} Read JSON From File ${GBP_TENANT1_FILE}
- ${resp} RequestsLibrary.Get Request session ${GBP_TENANT1_API}
- Should Be Equal As Strings ${resp.status_code} 200
- ${result} To JSON ${resp.content}
- Lists Should be Equal ${result} ${jsonbody}
-
-
-*** Keywords ***
-Read JSON From File
- [Arguments] ${filepath}
- ${body} OperatingSystem.Get File ${filepath}
- ${jsonbody} To Json ${body}
- RETURN ${jsonbody}
-
-Init Variables Master
- [Documentation] Sets variables specific to latest(master) version
- Set Suite Variable ${GBP_TENANT_ID} tenant-red
- Set Suite Variable ${GBP_TENANT1_API} /restconf/config/policy:tenants/tenant/${GBP_TENANT_ID}
- Set Suite Variable ${GBP_TENANT1_FILE} ${CURDIR}/../../../variables/gbp/master/tenant1.json
+++ /dev/null
-*** Settings ***
-Documentation Creates/closes SSH connections to all GBP nodes. Existing connections
-... can be identified by aliases.
-
-Library SSHLibrary
-Resource ../../../../libraries/SSHKeywords.robot
-Resource Variables.robot
-
-
-*** Keywords ***
-Start Connections
- [Documentation] Establishes connections to remote VMs.
- SSHLibrary.Open Connection ${GBP1} alias=GBP1_CONNECTION
- SSHKeywords.Flexible Mininet Login
- SSHLibrary.Open Connection ${GBP2} alias=GBP2_CONNECTION
- SSHKeywords.Flexible Mininet Login
- SSHLibrary.Open Connection ${GBP3} alias=GBP3_CONNECTION
- SSHKeywords.Flexible Mininet Login
-
-Close Connections
- [Documentation] Closes connections to remote VMs.
- Switch Connection GBP1_CONNECTION
- SSHLibrary.Close Connection
- Switch Connection GBP2_CONNECTION
- SSHLibrary.Close Connection
- Switch Connection GBP3_CONNECTION
- SSHLibrary.Close Connection
+++ /dev/null
-*** Settings ***
-Library SSHLibrary
-Resource Variables.robot
-Resource ../../../../libraries/Utils.robot
-Resource ../../../../libraries/GBP/ConnUtils.robot
-Variables ../../../../variables/Variables.py
-
-
-*** Keywords ***
-Setup Node
- [Arguments] ${GBP} ${suite_dir} ${sw_index} ${timeout}=10s
- ConnUtils.Connect and Login ${GBP} timeout=${timeout}
- SSHLibrary.Put File ${suite_dir}/init_scripts/* ${VM_HOME_FOLDER}${/}${VM_SCRIPTS_FOLDER}/ mode=0755
- ${stdout} ${stderr} ${rc} Execute in VE
- ... python ${VM_HOME_FOLDER}${/}${VM_SCRIPTS_FOLDER}/infrastructure_launch.py ${ODL_SYSTEM_IP} ${sw_index}
- ... timeout=${timeout}
- Should Be Equal As Numbers ${rc} 0
- SSHLibrary.Close Connection
-
-Teardown Node
- [Arguments] ${GBP} ${suite_dir} ${timeout}=3s
- ConnUtils.Connect and Login ${GBP} timeout=${timeout}
- ${stderr} SSHLibrary.Execute Command
- ... rm ${VM_HOME_FOLDER}${/}${VM_SCRIPTS_FOLDER}/infrastructure_config.py
- ... return_stderr=True
- ... return_stdout=False
- Should Be Empty ${stderr}
- ${stderr} SSHLibrary.Execute Command
- ... ${VM_HOME_FOLDER}${/}${VM_SCRIPTS_FOLDER}/clean-demo.sh
- ... return_stderr=True
- ... return_stdout=False
- Should Be Empty ${stderr}
- SSHLibrary.Close Connection
+++ /dev/null
-*** Settings ***
-Documentation Global variables for GBPSFC 3-node topology
-
-Variables ../../../../variables/Variables.py
-Resource ../../../../libraries/CompareStream.robot
-
-
-*** Variables ***
-${VM_HOME_FOLDER} ${WORKSPACE}
-${VM_SCRIPTS_FOLDER} scripts
-${ODL} ${ODL_SYSTEM_IP}
-${GBP1} ${TOOLS_SYSTEM_IP}
-${GBP2} ${TOOLS_SYSTEM_2_IP}
-${GBP3} ${TOOLS_SYSTEM_3_IP}
-@{GBPs} ${GBP1} ${GBP2} ${GBP3}
-${TUNNELS_PATH} ${CONFIG_NODES_API}
-${ENDPOINT_REG_PATH} ${GBP_REGEP_API}
-${ENDPOINT_UNREG_PATH} ${GBP_UNREGEP_API}
-${ENDPOINTS_OPER_PATH} /restconf/operational/endpoint:endpoints
-${OF_OVERLAY_CONFIG_PATH} /restconf/config/ofoverlay:of-overlay-config
-${TUNNELS_FILE} ${CURDIR}/../../../../variables/gbp/3node/tunnels.json
-
-
-*** Keywords ***
-Set Test Variables
- [Documentation] Sets variables used in 3node test cases.
- [Arguments] ${client_switch_ip} ${client_docker} ${client_ip} ${client_mac} ${same_webserver_docker} ${same_webserver_ip}
- ... ${same_webserver_mac} ${diff_webserver_switch_ip} ${diff_webserver_docker} ${diff_webserver_ip} ${diff_webserver_mac}
- Set Global Variable ${CLIENT_SWITCH_IP} ${client_switch_ip}
- Set Global Variable ${CLIENT_DOCKER} ${client_docker}
- Set Global Variable ${CLIENT_IP} ${client_ip}
- Set Global Variable ${CLIENT_MAC} ${client_mac}
- Set Global Variable ${SAME_WEBSERVER_DOCKER} ${same_webserver_docker}
- Set Global Variable ${SAME_WEBSERVER_IP} ${same_webserver_ip}
- Set Global Variable ${SAME_WEBSERVER_MAC} ${same_webserver_mac}
- Set Global Variable ${DIFF_WEBSERVER_SWITCH_IP} ${diff_webserver_switch_ip}
- Set Global Variable ${DIFF_WEBSERVER_DOCKER} ${diff_webserver_docker}
- Set Global Variable ${DIFF_WEBSERVER_IP} ${diff_webserver_ip}
- Set Global Variable ${DIFF_WEBSERVER_MAC} ${diff_webserver_mac}
-
-Init Variables
- [Documentation] Initialize ODL version specific variables using resource CompareStream.
- Init Variables Master
-
-Init Variables Master
- [Documentation] Sets variables specific to latest(master) version
- Set Global Variable ${GBP_TENANT1_ID} tenant-red
- Set Global Variable ${GBP_TENANT2_ID} tenant-blue
- Set Global Variable ${TENANT1_PATH} ${GBP_TENANTS_API}/policy:tenant/${GBP_TENANT1_ID}
- Set Global Variable ${TENANT2_PATH} ${GBP_TENANTS_API}/policy:tenant/${GBP_TENANT2_ID}
- Set Global Variable ${TENANT1_FILE} ${CURDIR}/../../../../variables/gbp/3node/master/tenant1.json
- Set Global Variable ${TENANT2_FILE} ${CURDIR}/../../../../variables/gbp/3node/master/tenant2.json
- Set Global Variable ${ENDPOINTS_GBP1_DIR} ${CURDIR}/../../../../variables/gbp/3node/master/demo-gbp1
- Set Global Variable ${ENDPOINTS_GBP2_DIR} ${CURDIR}/../../../../variables/gbp/3node/master/demo-gbp2
+++ /dev/null
-*** Settings ***
-Documentation Setup/teardown for GBP 3-node topology
-
-Library SSHLibrary
-Library RequestsLibrary
-Resource ../../../../libraries/Utils.robot
-Resource ../../../../libraries/GBP/ConnUtils.robot
-Variables ../../../../variables/Variables.py
-Resource Variables.robot
-
-Suite Setup Setup Everything
-Suite Teardown Teardown Everything
-
-
-*** Variables ***
-${timeout} 10s
-
-
-*** Keywords ***
-Setup Everything
- Log start_suite_in_3_node
- Create Session session http://${ODL}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS}
- Wait Until Keyword Succeeds
- ... 10x
- ... 30 s
- ... Get Data From URI
- ... session
- ... ${OF_OVERLAY_CONFIG_PATH}
- ... headers=${headers}
- Delete All Sessions
- FOR ${GBP} IN @{GBPs}
- ConnUtils.Connect and Login ${GBP} timeout=${timeout}
- ${stderr} SSHLibrary.Execute Command
- ... virtualenv --system-site-packages ${VE_DIR}
- ... return_stdout=False
- ... return_stderr=True
- ... return_rc=False
- Should Be Empty ${stderr}
- SSHLibrary.Put File
- ... ${CURDIR}/../../common_scripts/*
- ... ${VM_HOME_FOLDER}${/}${VM_SCRIPTS_FOLDER}/
- ... mode=0755
- ${stdout} ${stderr} ${rc} ConnUtils.Execute in VE
- ... pip freeze | grep ipaddr -q || pip install ipaddr
- ... timeout=${timeout}
- Should Be Equal As Numbers ${rc} 0
- SSHLibrary.Close Connection
- END
- Init Variables
-
-Teardown Everything
- Log stop_suite_in_3_node
- FOR ${GBP} IN @{GBPs}
- ConnUtils.Connect and Login ${GBP} timeout=${timeout}
- SSHLibrary.Execute Command sudo rm -rf ${VM_SCRIPTS_FOLDER}
- SSHLibrary.Close Connection
- END
+++ /dev/null
-*** Settings ***
-Library SSHLibrary
-Resource ../../../../../libraries/Utils.robot
-Resource ../../../../../libraries/GBP/ConnUtils.robot
-Variables ../../../../../variables/Variables.py
-Resource ../Variables.robot
-Resource ../GBP_3node.robot
-
-Default Tags single-tenant setup single-tenant-setup
-
-
-*** Variables ***
-${timeout} 10s
-
-
-*** Test Cases ***
-Setup Suite
- Log Setup suite in gbp1
- GBP_3node.Setup Node ${GBP1} ${CURDIR} 0 timeout=${timeout}
- GBP_3node.Setup Node ${GBP2} ${CURDIR} 1 timeout=${timeout}
- GBP_3node.Setup Node ${GBP3} ${CURDIR} 2 timeout=${timeout}
+++ /dev/null
-*** Settings ***
-Documentation Test suite for GBP Tenants, Operates functions from Restconf APIs.
-
-Library RequestsLibrary
-Library OperatingSystem
-Variables ../../../../../variables/Variables.py
-Resource ../../../../../libraries/Utils.robot
-Resource ../Variables.robot
-
-Suite Setup Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS}
-Suite Teardown Delete All Sessions
-
-Default Tags single-tenant setup single-tenant-setup
-
-
-*** Test Cases ***
-Put Tunnels
- [Documentation] Send tunnel augmentation to ODL
- ${json_to_edit} OperatingSystem.Get File ${TUNNELS_FILE}
- ${edited_json} Replace String ${json_to_edit} _CLASSIFIER1 ${GBP1}
- ${edited_json} Replace String ${edited_json} _CLASSIFIER2 ${GBP2}
- ${edited_json} Replace String ${edited_json} _CLASSIFIER3 ${GBP3}
- Add Elements To URI And Verify ${TUNNELS_PATH} ${edited_json} ${HEADERS_YANG_JSON}
-
-Register Endpoints
- [Documentation] Endpoints registration
- @{endpoint_files} OperatingSystem.List Files In Directory ${ENDPOINTS_GBP1_DIR} vethl*.*json absolute
- FOR ${endpoint_file} IN @{endpoint_files}
- Post Elements To URI From File ${ENDPOINT_REG_PATH} ${endpoint_file} ${HEADERS_YANG_JSON}
- END
-
-Put Tenant
- [Documentation] Send GBP policy to ODL
- Add Elements To URI From File ${TENANT1_PATH} ${TENANT1_FILE} ${HEADERS_YANG_JSON}
+++ /dev/null
-*** Settings ***
-Documentation Waiting until flows are created
-
-Library SSHLibrary
-Resource ../../../../../libraries/Utils.robot
-Resource ../../../../../libraries/GBP/OpenFlowUtils.robot
-Variables ../../../../../variables/Variables.py
-Resource ../Variables.robot
-
-Default Tags single-tenant setup single-tenant-setup
-
-
-*** Variables ***
-${timeout} 10s
-
-
-*** Test Cases ***
-Wait For Flows
- Sleep 30s
- ${passed} = Run Keyword And Return Status OpenFlowUtils.Wait For Flows On Switch ${GBP1} sw1
- IF not ${passed} Fatal Error Flows not created on sw1!
- ${passed} = Run Keyword And Return Status OpenFlowUtils.Wait For Flows On Switch ${GBP2} sw2
- IF not ${passed} Fatal Error Flows not created on sw2!
- ${passed} = Run Keyword And Return Status OpenFlowUtils.Wait For Flows On Switch ${GBP3} sw3
- IF not ${passed} Fatal Error Flows not created on sw3!
+++ /dev/null
-*** Settings ***
-Documentation Tests for ICMP flow
-
-Library SSHLibrary
-Resource ../../../../../libraries/Utils.robot
-Resource ../../../../../libraries/GBP/ConnUtils.robot
-Resource ../../../../../libraries/GBP/DockerUtils.robot
-Resource ../../../../../libraries/GBP/OpenFlowUtils.robot
-Variables ../../../../../variables/Variables.py
-Resource ../Variables.robot
-
-Suite Setup Set Test Variables client_switch_ip=${GBP1} client_docker=h35_2 client_ip=10.0.35.2 client_mac=00:00:00:00:35:02 same_webserver_docker=h36_4 same_webserver_ip=10.0.36.4
-... same_webserver_mac=00:00:00:00:36:04 diff_webserver_switch_ip=${GBP3} diff_webserver_docker=h36_3 diff_webserver_ip=10.0.36.3 diff_webserver_mac=00:00:00:00:36:03
-
-Default Tags single-tenant icmp single-tenant-main
-
-
-*** Variables ***
-${timeout} 10s
-
-
-*** Test Cases ***
-Same switch, ping once from h35_2 to h36_4
- [Documentation] Ping between endpoints located on the same switch "sw1".
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- DockerUtils.Ping From Docker ${CLIENT_DOCKER} ${SAME_WEBSERVER_IP}
- SSHLibrary.Close Connection
-
-Same switch, start endless ping from h35_2 to h36_4
- [Documentation] Start endless ping from h35_2 to h36_4 so that icmp traffic
- ... can be inspected.
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- DockerUtils.Start Endless Ping from Docker ${CLIENT_DOCKER} ${SAME_WEBSERVER_IP}
- SSHLibrary.Close Connection
-
-Same switch, ICMP request ovs-dpctl output check on sw1
- [Documentation] Assert matches and actions on megaflow of ICMP request from h35_2 to h36_4
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- @{matches} Create List
- @{actions} Create List
- Append In Port Check ${matches} 4
- Append Inner MAC Check ${matches} src_addr=${CLIENT_MAC}
- Append Ether-Type Check ${matches} 0x0800
- Append Inner IPs Check ${matches} ${CLIENT_IP} ${SAME_WEBSERVER_IP}
- Append Proto Check ${matches} 1
- Append Inner MAC Check ${actions} dst_addr=${SAME_WEBSERVER_MAC}
- Append Inner IPs Check ${actions} ${CLIENT_IP} ${SAME_WEBSERVER_IP}
- Append Proto Check ${actions} 1
- Append Out Port Check ${actions} 6
- ${output} Find Flow in DPCTL Output ${matches} ${actions}
- SSHLibrary.Close Connection
-
-Same switch, ICMP reply ovs-dpctl output check on sw1
- [Documentation] Assert matches and actions on megaflow of ICMP reply from h36_4 to h35_2
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- Set Suite Variable @{matches} @{EMPTY}
- Set Suite Variable @{actions} @{EMPTY}
- Append In Port Check ${matches} 6
- Append Inner MAC Check ${matches} src_addr=${SAME_WEBSERVER_MAC}
- Append Ether-Type Check ${matches} 0x0800
- Append Inner IPs Check ${matches} ${SAME_WEBSERVER_IP} ${CLIENT_IP}
- Append Proto Check ${matches} 1
- Append Inner MAC Check ${actions} dst_addr=${CLIENT_MAC}
- Append Inner IPs Check ${actions} ${SAME_WEBSERVER_IP} ${CLIENT_IP}
- Append Proto Check ${actions} 1
- Append Out Port Check ${actions} 4
- ${output} Find Flow in DPCTL Output ${matches} ${actions}
- SSHLibrary.Close Connection
-
-Same switch, stop endless ping from h35_2 to h36_4
- [Documentation] Stops endless pinging from h35_2 to h36_4 when traffic inspection finishes.
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- DockerUtils.Stop Endless Ping from Docker to Address ${CLIENT_DOCKER} ${SAME_WEBSERVER_IP}
- SSHLibrary.Close Connection
-
-Different switches, ping once from h35_2 to h36_3
- [Documentation] Different switches (sw1 -> sw3)
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- DockerUtils.Ping From Docker ${CLIENT_DOCKER} ${DIFF_WEBSERVER_IP}
- SSHLibrary.Close Connection
-
-Different switches, start endless ping from h35_2 to h36_3
- [Documentation] Starting icmp session for traffic inspection between endpoints located
- ... on different switches.
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- DockerUtils.Start Endless Ping from Docker ${CLIENT_DOCKER} ${DIFF_WEBSERVER_IP}
- SSHLibrary.Close Connection
-
-Different switches, ICMP request ovs-dpctl output check on sw1
- [Documentation] Assert matches and actions on megaflow of ICMP request from h35_2 to h36_3
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- @{matches} Create List
- @{actions} Create List
- Append In Port Check ${matches} 4
- Append Inner MAC Check ${matches} src_addr=${CLIENT_MAC}
- Append Ether-Type Check ${matches} 0x0800
- Append Inner IPs Check ${matches} ${CLIENT_IP} ${DIFF_WEBSERVER_IP}
- Append Proto Check ${matches} 1
- Append Tunnel Set Check ${actions}
- Append Inner MAC Check ${actions} dst_addr=${DIFF_WEBSERVER_MAC}
- Append Inner IPs Check ${actions} ${CLIENT_IP} ${DIFF_WEBSERVER_IP}
- Append Proto Check ${actions} 1
- Append Out Port Check ${actions} 3
- ${output} Find Flow in DPCTL Output ${matches} ${actions}
- SSHLibrary.Close Connection
-
-Different switches, ICMP request ovs-dpctl output check on sw3
- [Documentation] Assert matches and actions on megaflow of ICMP request from h35_2 to h36_3
- ConnUtils.Connect and Login ${DIFF_WEBSERVER_SWITCH_IP} timeout=${timeout}
- @{matches} Create List
- @{actions} Create List
- Append Tunnel Set Check ${matches}
- Append Outer IPs Check ${matches} src_ip=${CLIENT_SWITCH_IP}
- Append Outer IPs Check ${matches} dst_ip=${DIFF_WEBSERVER_SWITCH_IP}
- Append In Port Check ${matches} 3
- Append Inner MAC Check ${matches} dst_addr=${DIFF_WEBSERVER_MAC}
- Append Ether-Type Check ${matches} 0x0800
- Append Inner IPs Check ${matches} ${CLIENT_IP} ${DIFF_WEBSERVER_IP}
- Append Proto Check ${matches} 1
- Append Inner IPs Check ${actions} ${CLIENT_IP} ${DIFF_WEBSERVER_IP}
- Append Proto Check ${actions} 1
- Append Out Port Check ${actions} 5
- ${output} Find Flow in DPCTL Output ${matches} ${actions}
- SSHLibrary.Close Connection
-
-Different switches, ICMP reply ovs-dpctl output check on sw3
- [Documentation] assert matches and actions on megaflow of ICMP reply from h36_3 to h35_2
- ConnUtils.Connect and Login ${DIFF_WEBSERVER_SWITCH_IP} timeout=${timeout}
- @{matches} Create List
- @{actions} Create List
- Append In Port Check ${matches} 5
- Append Inner MAC Check ${matches} src_addr=${DIFF_WEBSERVER_MAC}
- Append Ether-Type Check ${matches} 0x0800
- Append Inner IPs Check ${matches} ${DIFF_WEBSERVER_IP} ${CLIENT_IP}
- Append Proto Check ${matches} 1
- Append Tunnel Set Check ${actions}
- Append Inner MAC Check ${actions} dst_addr=${CLIENT_MAC}
- Append Inner IPs Check ${actions} ${DIFF_WEBSERVER_IP} ${CLIENT_IP}
- Append Proto Check ${actions} 1
- Append Out Port Check ${actions} 3
- ${output} Find Flow in DPCTL Output ${matches} ${actions}
- SSHLibrary.Close Connection
-
-Different switches, ICMP reply ovs-dpctl output check on sw1
- [Documentation] Assert matches and actions on megaflow of ICMP reply from h36_3 to h35_2
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- @{matches} Create List
- @{actions} Create List
- Append Tunnel Set Check ${matches}
- Append Outer IPs Check ${matches} src_ip=${DIFF_WEBSERVER_SWITCH_IP}
- Append Outer IPs Check ${matches} dst_ip=${CLIENT_SWITCH_IP}
- Append In Port Check ${matches} 3
- Append Inner MAC Check ${matches} dst_addr=${CLIENT_MAC}
- Append Ether-Type Check ${matches} 0x0800
- Append Inner IPs Check ${matches} ${DIFF_WEBSERVER_IP} ${CLIENT_IP}
- Append Proto Check ${matches} 1
- Append Inner IPs Check ${actions} ${DIFF_WEBSERVER_IP} ${CLIENT_IP}
- Append Proto Check ${actions} 1
- Append Out Port Check ${actions} 4
- ${output} Find Flow in DPCTL Output ${matches} ${actions}
- SSHLibrary.Close Connection
-
-Different switches, stop endless ping from h35_2 to h36_3
- [Documentation] Stops endless pinging from h35_2 to h36_3 when traffic inspection finishes.
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- DockerUtils.Stop Endless Ping from Docker to Address ${CLIENT_DOCKER} ${DIFF_WEBSERVER_IP}
- SSHLibrary.Close Connection
+++ /dev/null
-*** Settings ***
-Documentation Tests for HTTP flow
-
-Library SSHLibrary
-Resource ../../../../../libraries/Utils.robot
-Resource ../../../../../libraries/GBP/ConnUtils.robot
-Resource ../../../../../libraries/GBP/DockerUtils.robot
-Resource ../../../../../libraries/GBP/OpenFlowUtils.robot
-Variables ../../../../../variables/Variables.py
-Resource ../Variables.robot
-
-Suite Setup Set Test Variables client_switch_ip=${GBP1} client_docker=h35_2 client_ip=10.0.35.2 client_mac=00:00:00:00:35:02 same_webserver_docker=h36_4 same_webserver_ip=10.0.36.4
-... same_webserver_mac=00:00:00:00:36:04 diff_webserver_switch_ip=${GBP3} diff_webserver_docker=h36_3 diff_webserver_ip=10.0.36.3 diff_webserver_mac=00:00:00:00:36:03
-
-Default Tags single-tenant http single-tenant-main
-
-
-*** Variables ***
-${timeout} 10s
-
-
-*** Test Cases ***
-Same switch, start SimpleHttpServer on h36_4
- [Documentation] Same Switch (sw1)
- # Same subnet tests are not supported by current topology configuration;
- # clients and webservers are put in two different subnets
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- DockerUtils.Start HTTP Service on Docker ${SAME_WEBSERVER_DOCKER} 80
- SSHLibrary.Close Connection
-
-Same switch, curl once from h35_2 to h36_4
- [Documentation] Test HTTP req/resp from h35_2 to h36_4.
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- DockerUtils.Curl from Docker ${CLIENT_DOCKER} ${SAME_WEBSERVER_IP} 80
- SSHLibrary.Close Connection
-
-Same switch, start endless curl from h35_2 to h36_4
- [Documentation] Init of endless HTTP session for purposes of traffic inspection.
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- DockerUtils.Start Endless Curl from Docker ${CLIENT_DOCKER} ${SAME_WEBSERVER_IP} 80
- SSHLibrary.Close Connection
-
-Same switch, HTTP request ovs-dpctl output check on sw1
- [Documentation] Assert matches and actions on megaflow of HTTP request from h35_2 to h36_4
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- @{matches} Create List
- @{actions} Create List
- Append In Port Check ${matches} 4
- Append Inner MAC Check ${matches} src_addr=${CLIENT_MAC}
- Append Ether-Type Check ${matches} 0x0800
- Append Inner IPs Check ${matches} ${CLIENT_IP} ${SAME_WEBSERVER_IP}
- Append Proto Check ${matches} 6
- Append Inner MAC Check ${actions} dst_addr=${SAME_WEBSERVER_MAC}
- Append Inner IPs Check ${actions} ${CLIENT_IP} ${SAME_WEBSERVER_IP}
- Append Proto Check ${actions} 6
- Append Out Port Check ${actions} 6
- ${output} Find Flow in DPCTL Output ${matches} ${actions}
- SSHLibrary.Close Connection
-
-Same switch, HTTP reply ovs-dpctl output check on sw1
- [Documentation] Assert matches and actions on megaflow of HTTP reply from h36_4 to h35_2
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- @{matches} Create List
- @{actions} Create List
- Append In Port Check ${matches} 6
- Append Inner MAC Check ${matches} src_addr=${SAME_WEBSERVER_MAC}
- Append Ether-Type Check ${matches} 0x0800
- Append Inner IPs Check ${matches} ${SAME_WEBSERVER_IP} ${CLIENT_IP}
- Append Proto Check ${matches} 6
- Append Inner MAC Check ${actions} dst_addr=${CLIENT_MAC}
- Append Inner IPs Check ${actions} ${SAME_WEBSERVER_IP} ${CLIENT_IP}
- Append Proto Check ${actions} 6
- Append Out Port Check ${actions} 4
- ${output} Find Flow in DPCTL Output ${matches} ${actions}
- SSHLibrary.Close Connection
-
-Same switch, stop endless curl from h35_2 to h36_4
- [Documentation] Stopping endless HTTP session when traffic inspection finishes.
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- DockerUtils.Stop Endless Curl from Docker ${CLIENT_DOCKER}
- SSHLibrary.Close Connection
-
-Same switch, stop SimpleHttpServer on h36_4
- [Documentation] Shutting down HTTP service on h36_4.
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- DockerUtils.Stop HTTP Service on Docker ${SAME_WEBSERVER_DOCKER}
- SSHLibrary.Close Connection
-
-Different switches, start SimpleHttpServer on h36_3
- [Documentation] Different switches (sw1 -> sw3)
- ConnUtils.Connect and Login ${DIFF_WEBSERVER_SWITCH_IP} timeout=${timeout}
- DockerUtils.Start HTTP Service on Docker ${DIFF_WEBSERVER_DOCKER} 80
- SSHLibrary.Close Connection
-
-Different switches, curl once from h35_2 to h36_3
- [Documentation] Test HTTP req/resp from h35_2 to h36_3.
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- DockerUtils.Curl from Docker ${CLIENT_DOCKER} ${DIFF_WEBSERVER_IP} 80
- SSHLibrary.Close Connection
-
-Different switches, start endless curl from h35_2 to h36_3
- [Documentation] Init of endless HTTP session for purposes of traffic inspection.
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- DockerUtils.Start Endless Curl from Docker ${CLIENT_DOCKER} ${DIFF_WEBSERVER_IP} 80
- SSHLibrary.Close Connection
-
-Different switches, HTTP request ovs-dpctl output check on sw1
- [Documentation] Assert matches and actions on megaflow of HTTP request from h35_2 to h36_3
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- @{matches} Create List
- @{actions} Create List
- Append In Port Check ${matches} 4
- Append Inner MAC Check ${matches} src_addr=${CLIENT_MAC}
- Append Ether-Type Check ${matches} 0x0800
- Append Inner IPs Check ${matches} ${CLIENT_IP} ${DIFF_WEBSERVER_IP}
- Append Proto Check ${matches} 6
- Append Tunnel Set Check ${actions}
- Append Inner MAC Check ${actions} dst_addr=${DIFF_WEBSERVER_MAC}
- Append Inner IPs Check ${actions} ${CLIENT_IP} ${DIFF_WEBSERVER_IP}
- Append Proto Check ${actions} 6
- Append Out Port Check ${actions} 3
- ${output} Find Flow in DPCTL Output ${matches} ${actions}
- SSHLibrary.Close Connection
-
-Different switches, HTTP request ovs-dpctl output check on sw3
- [Documentation] Assert matches and actions on megaflow of HTTP request from h35_2 to h36_3
- ConnUtils.Connect and Login ${DIFF_WEBSERVER_SWITCH_IP} timeout=${timeout}
- @{matches} Create List
- @{actions} Create List
- Append Tunnel Set Check ${matches}
- Append Outer IPs Check ${matches} src_ip=${CLIENT_SWITCH_IP}
- Append Outer IPs Check ${matches} dst_ip=${DIFF_WEBSERVER_SWITCH_IP}
- Append In Port Check ${matches} 3
- Append Inner MAC Check ${matches} dst_addr=${DIFF_WEBSERVER_MAC}
- Append Ether-Type Check ${matches} 0x0800
- Append Inner IPs Check ${matches} ${CLIENT_IP} ${DIFF_WEBSERVER_IP}
- Append Proto Check ${matches} 6
- Append Inner IPs Check ${actions} ${CLIENT_IP} ${DIFF_WEBSERVER_IP}
- Append Proto Check ${actions} 6
- Append Out Port Check ${actions} 5
- ${output} Find Flow in DPCTL Output ${matches} ${actions}
- SSHLibrary.Close Connection
-
-Different switches, HTTP reply ovs-dpctl output check on sw3
- [Documentation] Assert matches and actions on megaflow of HTTP reply from h36_3 to h35_2
- ConnUtils.Connect and Login ${DIFF_WEBSERVER_SWITCH_IP} timeout=${timeout}
- @{matches} Create List
- @{actions} Create List
- Append In Port Check ${matches} 5
- Append Inner MAC Check ${matches} src_addr=${DIFF_WEBSERVER_MAC}
- Append Ether-Type Check ${matches} 0x0800
- Append Inner IPs Check ${matches} ${DIFF_WEBSERVER_IP} ${CLIENT_IP}
- Append Proto Check ${matches} 6
- Append Tunnel Set Check ${actions}
- Append Inner MAC Check ${actions} dst_addr=${CLIENT_MAC}
- Append Inner IPs Check ${actions} ${DIFF_WEBSERVER_IP} ${CLIENT_IP}
- Append Proto Check ${actions} 6
- Append Out Port Check ${actions} 3
- ${output} Find Flow in DPCTL Output ${matches} ${actions}
- SSHLibrary.Close Connection
-
-Different switches, HTTP reply ovs-dpctl output check on sw1
- [Documentation] Assert matches and actions on megaflow of HTTP request from h36_3 to h35_2
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- @{matches} Create List
- @{actions} Create List
- Append Tunnel Set Check ${matches}
- Append Outer IPs Check ${matches} src_ip=${DIFF_WEBSERVER_SWITCH_IP}
- Append Outer IPs Check ${matches} dst_ip=${CLIENT_SWITCH_IP}
- Append In Port Check ${matches} 3
- Append Inner MAC Check ${matches} dst_addr=${CLIENT_MAC}
- Append Ether-Type Check ${matches} 0x0800
- Append Inner IPs Check ${matches} ${DIFF_WEBSERVER_IP} ${CLIENT_IP}
- Append Proto Check ${matches} 6
- Append Inner IPs Check ${actions} ${DIFF_WEBSERVER_IP} ${CLIENT_IP}
- Append Proto Check ${actions} 6
- Append Out Port Check ${actions} 4
- ${output} Find Flow in DPCTL Output ${matches} ${actions}
- SSHLibrary.Close Connection
-
-Different switches, stop endless curl from h35_2 to h36_3
- [Documentation] Stopping endless HTTP session when traffic inspection finishes.
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- DockerUtils.Stop Endless Curl from Docker ${CLIENT_DOCKER}
- SSHLibrary.Close Connection
-
-Different switches, stop SimpleHttpServer on h36_3
- [Documentation] Shutting down HTTP service on h36_3.
- ConnUtils.Connect and Login ${DIFF_WEBSERVER_SWITCH_IP} timeout=${timeout}
- DockerUtils.Stop HTTP Service on Docker ${DIFF_WEBSERVER_DOCKER}
- SSHLibrary.Close Connection
+++ /dev/null
-*** Settings ***
-Documentation Deep inspection of HTTP traffic on asymmetric chain.
-... Nodes are located on different VMs.
-
-Library SSHLibrary
-Resource ../../../../../libraries/GBP/OpenFlowUtils.robot
-Resource ../../../../../libraries/GBP/ConnUtils.robot
-Resource ../Variables.robot
-Resource ../Connections.robot
-
-
-*** Test Cases ***
-Show GBPSFC1 Status
- [Documentation] Shows flows and configuration of a switch for easier debugging.
- Start Connections
- Switch Connection GBP1_CONNECTION
- Show Switch Status sw1
-
-Show GBPSFC2 Status
- [Documentation] Shows flows and configuration of a switch for easier debugging.
- Switch Connection GBP2_CONNECTION
- Show Switch Status sw2
-
-Show GBPSFC3 Status
- [Documentation] Shows flows and configuration of a switch for easier debugging.
- Switch Connection GBP3_CONNECTION
- Show Switch Status sw3
- Close Connections
-
-Read Tenants Confing From ODL
- [Documentation] Logs ODL data store.
- Create Session
- ... session
- ... http://${ODL_SYSTEM_IP}:${RESTCONFPORT}
- ... auth=${AUTH}
- ... headers=${HEADERS_YANG_JSON}
- ${resp} RequestsLibrary.Get Request session ${GBP_TENANTS_API}
- Log ${resp.content}
-
-Read Tenants Operational From ODL
- ${resp} RequestsLibrary.Get Request session ${OPERATIONAL_GBP_TENANTS_API}
- Log ${resp.content}
-
-Read Nodes Config From ODL
- ${resp} RequestsLibrary.Get Request session ${CONFIG_NODES_API}
- Log ${resp.content}
-
-Read Nodes Operational From ODL
- ${resp} RequestsLibrary.Get Request session ${OPERATIONAL_NODES_API}
- Log ${resp.content}
-
-Read Topology Config From ODL
- ${resp} RequestsLibrary.Get Request session ${CONFIG_TOPO_API}
- Log ${resp.content}
-
-Read Topology Operational From ODL
- ${resp} RequestsLibrary.Get Request session ${OPERATIONAL_TOPO_API}
- Log ${resp.content}
-
-Read Endpoints From ODL
- ${resp} RequestsLibrary.Get Request session ${GBP_ENDPOINTS_API}
- Log ${resp.content}
- Delete All Sessions
+++ /dev/null
-*** Settings ***
-Documentation Test suite for cleaning up / unregister infrastructure constructs like endpoints for demo-asymmetric-chain
-
-Library RequestsLibrary
-Library OperatingSystem
-Library json
-Variables ../../../../../variables/Variables.py
-Resource ../../../../../libraries/Utils.robot
-Resource ../../../../../libraries/GBP/RestconfUtils.robot
-Resource ../Variables.robot
-
-Suite Setup Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS}
-Suite Teardown Delete All Sessions
-
-Default Tags single-tenant teardown single-tenant-teardown
-
-
-*** Test Cases ***
-Delete Tenant
- [Documentation] Delete Tenants from ODL
- Remove All Elements At URI ${TENANT1_PATH}
-
-Unregister Endpoints
- [Documentation] Unregister Endpoints Endpoints from ODL
- RestconfUtils.Unregister Endpoints
-
-Delete Nodes
- [Documentation] Delete Nodes from ODL
- Remove All Elements At URI ${TUNNELS_PATH}
+++ /dev/null
-*** Settings ***
-Library SSHLibrary
-Resource ../../../../../libraries/Utils.robot
-Resource ../../../../../libraries/GBP/ConnUtils.robot
-Variables ../../../../../variables/Variables.py
-Resource ../Variables.robot
-Resource ../GBP_3node.robot
-
-Default Tags single-tenant teardown single-tenant-teardown
-
-
-*** Variables ***
-${timeout} 10s
-
-
-*** Test Cases ***
-Teardown Suite
- Log Teardown suite in gbp1
- FOR ${GBP} IN @{GBPs}
- GBP_3node.Teardown Node ${GBP} ${CURDIR} timeout=${timeout}
- END
+++ /dev/null
-# Config for switches, tunnelIP is the local IP address.
-switches = [
- {"name": "sw1", "type": "gbp", "dpid": "1"},
- {"name": "sw2", "type": "gbp", "dpid": "2"},
- {"name": "sw3", "type": "gbp", "dpid": "3"},
- {"name": "sw4", "type": "none", "dpid": "4"},
- {"name": "sw5", "type": "none", "dpid": "5"},
- {"name": "sw6", "type": "none", "dpid": "6"},
- {"name": "sw7", "type": "none", "dpid": "7"},
- {"name": "sw8", "type": "none", "dpid": "8"},
-]
-
-defaultContainerImage = "alagalah/odlpoc_ovs230"
-# defaultContainerImage='ubuntu:14.04'
-
-# Note that tenant name and endpointGroup name come from policy_config.py
-
-hosts = [
- {
- "name": "h35_2",
- "mac": "00:00:00:00:35:02",
- "ip": "10.0.35.2/24",
- "switch": "sw1",
- },
- {
- "name": "h35_3",
- "ip": "10.0.35.3/24",
- "mac": "00:00:00:00:35:03",
- "switch": "sw2",
- },
- {
- "name": "h35_4",
- "ip": "10.0.35.4/24",
- "mac": "00:00:00:00:35:04",
- "switch": "sw3",
- },
- {
- "name": "h35_5",
- "ip": "10.0.35.5/24",
- "mac": "00:00:00:00:35:05",
- "switch": "sw1",
- },
- {
- "name": "h36_2",
- "ip": "10.0.36.2/24",
- "mac": "00:00:00:00:36:02",
- "switch": "sw2",
- },
- {
- "name": "h36_3",
- "ip": "10.0.36.3/24",
- "mac": "00:00:00:00:36:03",
- "switch": "sw3",
- },
- {
- "name": "h36_4",
- "ip": "10.0.36.4/24",
- "mac": "00:00:00:00:36:04",
- "switch": "sw1",
- },
- {
- "name": "h36_5",
- "ip": "10.0.36.5/24",
- "mac": "00:00:00:00:36:05",
- "switch": "sw2",
- },
-]
+++ /dev/null
-*** Settings ***
-Library SSHLibrary
-Resource ../../../../../libraries/Utils.robot
-Resource ../../../../../libraries/GBP/ConnUtils.robot
-Variables ../../../../../variables/Variables.py
-Resource ../Variables.robot
-Resource ../GBP_3node.robot
-
-Default Tags multi-tenant setup multi-tenant-setup
-
-
-*** Variables ***
-${timeout} 10s
-
-
-*** Test Cases ***
-Setup Suite
- Log Setup suite in gbp2-multitenant
- GBP_3node.Setup Node ${GBP1} ${CURDIR} 0 timeout=${timeout}
- GBP_3node.Setup Node ${GBP2} ${CURDIR} 1 timeout=${timeout}
- GBP_3node.Setup Node ${GBP3} ${CURDIR} 2 timeout=${timeout}
+++ /dev/null
-*** Settings ***
-Documentation Test suite for GBP Tenants, Operates functions from Restconf APIs.
-
-Library RequestsLibrary
-Library OperatingSystem
-Variables ../../../../../variables/Variables.py
-Resource ../../../../../libraries/Utils.robot
-Resource ../Variables.robot
-
-Suite Setup Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS}
-Suite Teardown Delete All Sessions
-
-Default Tags multi-tenant setup multi-tenant-setup
-
-
-*** Test Cases ***
-Put Tunnels
- [Documentation] Send tunnel augmentation to ODL
- ${json_to_edit} OperatingSystem.Get File ${TUNNELS_FILE}
- ${edited_json} Replace String ${json_to_edit} _CLASSIFIER1 ${GBP1}
- ${edited_json} Replace String ${edited_json} _CLASSIFIER2 ${GBP2}
- ${edited_json} Replace String ${edited_json} _CLASSIFIER3 ${GBP3}
- Add Elements To URI And Verify ${TUNNELS_PATH} ${edited_json} ${HEADERS_YANG_JSON}
-
-Register Endpoints
- [Documentation] Endpoints registration
- @{endpoint_files} OperatingSystem.List Files In Directory ${ENDPOINTS_GBP2_DIR} vethl*.*json absolute
- FOR ${endpoint_file} IN @{endpoint_files}
- Post Elements To URI From File ${ENDPOINT_REG_PATH} ${endpoint_file} ${HEADERS_YANG_JSON}
- END
-
-Put Tenants
- [Documentation] Send GBP policy to ODL
- Add Elements To URI From File ${TENANT1_PATH} ${TENANT1_FILE} ${HEADERS_YANG_JSON}
- Add Elements To URI From File ${TENANT2_PATH} ${TENANT2_FILE} ${HEADERS_YANG_JSON}
+++ /dev/null
-*** Settings ***
-Documentation Waiting until flows are created
-
-Library SSHLibrary
-Resource ../../../../../libraries/Utils.robot
-Resource ../../../../../libraries/GBP/OpenFlowUtils.robot
-Variables ../../../../../variables/Variables.py
-Resource ../Variables.robot
-
-Default Tags multi-tenant setup multi-tenant-setup
-
-
-*** Variables ***
-${timeout} 10s
-
-
-*** Test Cases ***
-Wait For Flows
- Sleep 30s
- ${passed} = Run Keyword And Return Status OpenFlowUtils.Wait For Flows On Switch ${GBP1} sw1
- IF not ${passed} Fatal Error Flows not created on sw1!
- ${passed} = Run Keyword And Return Status OpenFlowUtils.Wait For Flows On Switch ${GBP2} sw2
- IF not ${passed} Fatal Error Flows not created on sw2!
- ${passed} = Run Keyword And Return Status OpenFlowUtils.Wait For Flows On Switch ${GBP3} sw3
- IF not ${passed} Fatal Error Flows not created on sw3!
+++ /dev/null
-*** Settings ***
-Documentation Tests for ICMP flow
-
-Library SSHLibrary
-Resource ../../../../../libraries/Utils.robot
-Resource ../../../../../libraries/GBP/ConnUtils.robot
-Resource ../../../../../libraries/GBP/DockerUtils.robot
-Resource ../../../../../libraries/GBP/OpenFlowUtils.robot
-Variables ../../../../../variables/Variables.py
-Resource ../Variables.robot
-
-Force Tags multi-tenant icmp multi-tenant-main
-
-
-*** Variables ***
-${timeout} 10s
-
-
-*** Test Cases ***
-Setting Variables For Tenant 1
- [Documentation] Setting variables for tenant 1 related test cases.
- Set Test Variables
- ... client_switch_ip=${GBP1}
- ... client_docker=h35_2
- ... client_ip=10.0.35.2
- ... client_mac=00:00:00:00:35:02
- ... same_webserver_docker=h36_3
- ... same_webserver_ip=10.0.36.3
- ... same_webserver_mac=00:00:00:00:36:03
- ... diff_webserver_switch_ip=${GBP3}
- ... diff_webserver_docker=h36_2
- ... diff_webserver_ip=10.0.36.2
- ... diff_webserver_mac=00:00:00:00:36:02
-
-Tenant 1 Same switch, ping once from h35_2 to h36_3
- [Documentation] Ping between endpoints located on the same switch "sw1".
- [Tags] tenant1
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- DockerUtils.Ping From Docker ${CLIENT_DOCKER} ${SAME_WEBSERVER_IP}
- SSHLibrary.Close Connection
-
-Tenant 1 Same switch, start endless ping from h35_2 to h36_3
- [Documentation] Start endless ping from h35_2 to h36_4 so that icmp traffic
- ... can be inspected.
- [Tags] tenant1
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- DockerUtils.Start Endless Ping from Docker ${CLIENT_DOCKER} ${SAME_WEBSERVER_IP}
- SSHLibrary.Close Connection
-
-Tenant 1 Same switch, ICMP request ovs-dpctl output check on sw1
- [Documentation] Assert matches and actions on megaflow of ICMP request from h35_2 to h36_3
- [Tags] tenant1
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- @{matches} Create List
- @{actions} Create List
- Append In Port Check ${matches} 4
- Append Inner MAC Check ${matches} src_addr=${CLIENT_MAC}
- Append Ether-Type Check ${matches} 0x0800
- Append Inner IPs Check ${matches} ${CLIENT_IP} ${SAME_WEBSERVER_IP}
- Append Proto Check ${matches} 1
- Append Inner MAC Check ${actions} dst_addr=${SAME_WEBSERVER_MAC}
- Append Inner IPs Check ${actions} ${CLIENT_IP} ${SAME_WEBSERVER_IP}
- Append Proto Check ${actions} 1
- Append Out Port Check ${actions} 7
- ${output} Find Flow in DPCTL Output ${matches} ${actions}
- SSHLibrary.Close Connection
-
-Tenant 1 Same switch, ICMP reply ovs-dpctl output check on sw1
- [Documentation] Assert matches and actions on megaflow of ICMP reply from h36_3 to h35_2.
- [Tags] tenant1
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- @{matches} Create List
- @{actions} Create List
- Append In Port Check ${matches} 7
- Append Inner MAC Check ${matches} src_addr=${SAME_WEBSERVER_MAC}
- Append Ether-Type Check ${matches} 0x0800
- Append Inner IPs Check ${matches} ${SAME_WEBSERVER_IP} ${CLIENT_IP}
- Append Proto Check ${matches} 1
- Append Inner MAC Check ${actions} dst_addr=${CLIENT_MAC}
- Append Inner IPs Check ${actions} ${SAME_WEBSERVER_IP} ${CLIENT_IP}
- Append Proto Check ${actions} 1
- Append Out Port Check ${actions} 4
- ${output} Find Flow in DPCTL Output ${matches} ${actions}
- SSHLibrary.Close Connection
-
-Tenant 1 Same switch, stop endless ping from h35_2 to h36_3
- [Documentation] Stops endless pinging from h35_8 to h36_6 when traffic inspection finishes.
- [Tags] tenant1
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- DockerUtils.Stop Endless Ping from Docker to Address ${CLIENT_DOCKER} ${SAME_WEBSERVER_IP}
- SSHLibrary.Close Connection
-
-Tenant 1 Different switches, ping once from h35_2 to h36_2
- [Documentation] Different switches (sw1 -> sw3)
- [Tags] tenant1
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- DockerUtils.Ping From Docker ${CLIENT_DOCKER} ${DIFF_WEBSERVER_IP}
- SSHLibrary.Close Connection
-
-Tenant 1 Different switches, start endless ping from h35_2 to h36_2
- [Documentation] Different switches (sw1 -> sw3)
- [Tags] tenant1
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- DockerUtils.Start Endless Ping from Docker ${CLIENT_DOCKER} ${DIFF_WEBSERVER_IP}
- SSHLibrary.Close Connection
-
-Tenant 1 Different switches, ICMP request ovs-dpctl output check on sw1
- [Documentation] Assert matches and actions on megaflow of ICMP request from h35_2 to h36_2
- [Tags] tenant1
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- @{matches} Create List
- @{actions} Create List
- Append In Port Check ${matches} 4
- Append Inner MAC Check ${matches} src_addr=${CLIENT_MAC}
- Append Ether-Type Check ${matches} 0x0800
- Append Inner IPs Check ${matches} ${CLIENT_IP} ${DIFF_WEBSERVER_IP}
- Append Proto Check ${matches} 1
- Append Tunnel Set Check ${actions}
- Append Inner MAC Check ${actions} dst_addr=${DIFF_WEBSERVER_MAC}
- Append Inner IPs Check ${actions} ${CLIENT_IP} ${DIFF_WEBSERVER_IP}
- Append Proto Check ${actions} 1
- Append Out Port Check ${actions} 3
- ${output} Find Flow in DPCTL Output ${matches} ${actions}
- SSHLibrary.Close Connection
-
-Tenant 1 Different switches, ICMP request ovs-dpctl output check on sw3
- [Documentation] Assert matches and actions on megaflow of ICMP request from h35_2 to h36_2
- ConnUtils.Connect and Login ${DIFF_WEBSERVER_SWITCH_IP} timeout=${timeout}
- @{matches} Create List
- @{actions} Create List
- Append Tunnel Set Check ${matches}
- Append Outer IPs Check ${matches} src_ip=${CLIENT_SWITCH_IP}
- Append Outer IPs Check ${matches} dst_ip=${DIFF_WEBSERVER_SWITCH_IP}
- Append In Port Check ${matches} 3
- Append Inner MAC Check ${matches} dst_addr=${DIFF_WEBSERVER_MAC}
- Append Ether-Type Check ${matches} 0x0800
- Append Inner IPs Check ${matches} ${CLIENT_IP} ${DIFF_WEBSERVER_IP}
- Append Proto Check ${matches} 1
- Append Inner IPs Check ${actions} ${CLIENT_IP} ${DIFF_WEBSERVER_IP}
- Append Proto Check ${actions} 1
- Append Out Port Check ${actions} 6
- ${output} Find Flow in DPCTL Output ${matches} ${actions}
- SSHLibrary.Close Connection
-
-Tenant 1 Different switches, ICMP reply ovs-dpctl output check on sw3
- [Documentation] Assert matches and actions on megaflow of ICMP request from h36_2 to h35_2
- [Tags] tenant1
- ConnUtils.Connect and Login ${DIFF_WEBSERVER_SWITCH_IP} timeout=${timeout}
- @{matches} Create List
- @{actions} Create List
- Append In Port Check ${matches} 6
- Append Inner MAC Check ${matches} src_addr=${DIFF_WEBSERVER_MAC}
- Append Ether-Type Check ${matches} 0x0800
- Append Inner IPs Check ${matches} ${DIFF_WEBSERVER_IP} ${CLIENT_IP}
- Append Proto Check ${matches} 1
- Append Tunnel Set Check ${actions}
- Append Inner MAC Check ${actions} dst_addr=${CLIENT_MAC}
- Append Inner IPs Check ${actions} ${DIFF_WEBSERVER_IP} ${CLIENT_IP}
- Append Proto Check ${actions} 1
- Append Out Port Check ${actions} 3
- ${output} Find Flow in DPCTL Output ${matches} ${actions}
- SSHLibrary.Close Connection
-
-Tenant 1 Different switches, ICMP reply ovs-dpctl output check on sw1
- [Documentation] Assert matches and actions on megaflow of ICMP reply from h36_2 to h35_2
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- @{matches} Create List
- @{actions} Create List
- Append Tunnel Set Check ${matches}
- Append Outer IPs Check ${matches} src_ip=${DIFF_WEBSERVER_SWITCH_IP}
- Append Outer IPs Check ${matches} dst_ip=${CLIENT_SWITCH_IP}
- Append In Port Check ${matches} 3
- Append Inner MAC Check ${matches} dst_addr=${CLIENT_MAC}
- Append Ether-Type Check ${matches} 0x0800
- Append Inner IPs Check ${matches} ${DIFF_WEBSERVER_IP} ${CLIENT_IP}
- Append Proto Check ${matches} 1
- Append Inner IPs Check ${actions} ${DIFF_WEBSERVER_IP} ${CLIENT_IP}
- Append Proto Check ${actions} 1
- Append Out Port Check ${actions} 4
- ${output} Find Flow in DPCTL Output ${matches} ${actions}
- SSHLibrary.Close Connection
-
-Tenant 1 Different switches, stop endless ping from h35_2 to h36_2
- [Documentation] Stops endless pinging from h35_2 to h36_2 when traffic inspection finishes.
- [Tags] tenant1
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- DockerUtils.Stop Endless Ping from Docker to Address ${CLIENT_DOCKER} ${DIFF_WEBSERVER_IP}
- SSHLibrary.Close Connection
-
-Setting Variables For Tenant 2
- [Documentation] Setting variables for tenant 2 related test cases.
- Set Test Variables
- ... client_switch_ip=${GBP1}
- ... client_docker=h35_8
- ... client_ip=10.0.35.8
- ... client_mac=00:00:00:00:35:08
- ... same_webserver_docker=h36_6
- ... same_webserver_ip=10.0.36.6
- ... same_webserver_mac=00:00:00:00:36:06
- ... diff_webserver_switch_ip=${GBP2}
- ... diff_webserver_docker=h36_7
- ... diff_webserver_ip=10.0.36.7
- ... diff_webserver_mac=00:00:00:00:36:07
-
-Tenant 2 Same switch, ping once from h35_8 to h36_6
- [Documentation] Same switch (sw1)
- [Tags] tenant2
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- DockerUtils.Ping From Docker ${CLIENT_DOCKER} ${SAME_WEBSERVER_IP}
- SSHLibrary.Close Connection
-
-Tenant 2 Same switch, start endless ping from h35_8 to h36_6
- [Documentation] Starting icmp between hosts on the same switch so that
- ... traffic can be inspected.
- [Tags] tenant2
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- DockerUtils.Start Endless Ping from Docker ${CLIENT_DOCKER} ${SAME_WEBSERVER_IP}
- SSHLibrary.Close Connection
-
-Tenant 2 Same switch, ICMP request ovs-dpctl output check on sw1
- [Documentation] Assert matches and actions on megaflow of ICMP request from h35_8 to h36_6
- [Tags] tenant2
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- @{matches} Create List
- @{actions} Create List
- Append In Port Check ${matches} 6
- Append Inner MAC Check ${matches} src_addr=${CLIENT_MAC}
- Append Ether-Type Check ${matches} 0x0800
- Append Inner IPs Check ${matches} ${CLIENT_IP} ${SAME_WEBSERVER_IP}
- Append Proto Check ${matches} 1
- Append Inner MAC Check ${actions} dst_addr=${SAME_WEBSERVER_MAC}
- Append Inner IPs Check ${actions} ${CLIENT_IP} ${SAME_WEBSERVER_IP}
- Append Proto Check ${actions} 1
- Append Out Port Check ${actions} 8
- ${output} Find Flow in DPCTL Output ${matches} ${actions}
- SSHLibrary.Close Connection
-
-Tenant 2 Same switch, ICMP reply ovs-dpctl output check on sw1
- [Documentation] Assert matches and actions on megaflow of ICMP reply from h35_8 to h36_6
- [Tags] tenant2
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- @{matches} Create List
- @{actions} Create List
- Append In Port Check ${matches} 8
- Append Inner MAC Check ${matches} src_addr=${SAME_WEBSERVER_MAC}
- Append Ether-Type Check ${matches} 0x0800
- Append Inner IPs Check ${matches} ${SAME_WEBSERVER_IP} ${CLIENT_IP}
- Append Proto Check ${matches} 1
- Append Inner MAC Check ${actions} dst_addr=${CLIENT_MAC}
- Append Inner IPs Check ${actions} ${SAME_WEBSERVER_IP} ${CLIENT_IP}
- Append Proto Check ${actions} 1
- Append Out Port Check ${actions} 6
- ${output} Find Flow in DPCTL Output ${matches} ${actions}
- SSHLibrary.Close Connection
-
-Tenant 2 Same switch, stop endless ping from h35_8 to h36_6
- [Documentation] Stops endless pinging from h35_8 to h36_6 when traffic inspection finishes.
- [Tags] tenant2
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- DockerUtils.Stop Endless Ping from Docker to Address ${CLIENT_DOCKER} ${SAME_WEBSERVER_IP}
- SSHLibrary.Close Connection
-
-Tenant 2 Different switches, ping once from h35_8 to h36_7
- [Documentation] Different switches (sw1 -> sw3)
- [Tags] tenant2
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- DockerUtils.Ping From Docker ${CLIENT_DOCKER} ${DIFF_WEBSERVER_IP}
- SSHLibrary.Close Connection
-
-Tenant 2 Different switches, start endless ping from h35_8 to h36_7
- [Documentation] Different switches (sw1 -> sw3)
- [Tags] tenant2
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- DockerUtils.Start Endless Ping from Docker ${CLIENT_DOCKER} ${DIFF_WEBSERVER_IP}
- SSHLibrary.Close Connection
-
-Tenant 2 Different switches, ICMP request ovs-dpctl output check on sw1
- [Documentation] Assert matches and actions on megaflow of ICMP request from h35_8 to h36_7
- [Tags] tenant2
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- @{matches} Create List
- @{actions} Create List
- Append In Port Check ${matches} 6
- Append Inner MAC Check ${matches} src_addr=${CLIENT_MAC}
- Append Ether-Type Check ${matches} 0x0800
- Append Inner IPs Check ${matches} ${CLIENT_IP} ${DIFF_WEBSERVER_IP}
- Append Proto Check ${matches} 1
- Append Tunnel Set Check ${actions}
- Append Inner MAC Check ${actions} dst_addr=${DIFF_WEBSERVER_MAC}
- Append Inner IPs Check ${actions} ${CLIENT_IP} ${DIFF_WEBSERVER_IP}
- Append Proto Check ${actions} 1
- Append Out Port Check ${actions} 3
- ${output} Find Flow in DPCTL Output ${matches} ${actions}
- SSHLibrary.Close Connection
-
-Tenant 2 Different switches, ICMP request ovs-dpctl output check on sw3
- [Documentation] Assert matches and actions on megaflow of ICMP request from h35_8 to h36_7
- ConnUtils.Connect and Login ${DIFF_WEBSERVER_SWITCH_IP} timeout=${timeout}
- @{matches} Create List
- @{actions} Create List
- Append Tunnel Set Check ${matches}
- Append Outer IPs Check ${matches} src_ip=${CLIENT_SWITCH_IP}
- Append Outer IPs Check ${matches} dst_ip=${DIFF_WEBSERVER_SWITCH_IP}
- Append In Port Check ${matches} 3
- Append Inner MAC Check ${matches} dst_addr=${DIFF_WEBSERVER_MAC}
- Append Ether-Type Check ${matches} 0x0800
- Append Inner IPs Check ${matches} ${CLIENT_IP} ${DIFF_WEBSERVER_IP}
- Append Proto Check ${matches} 1
- Append Inner IPs Check ${actions} ${CLIENT_IP} ${DIFF_WEBSERVER_IP}
- Append Proto Check ${actions} 1
- Append Out Port Check ${actions} 8
- ${output} Find Flow in DPCTL Output ${matches} ${actions}
- SSHLibrary.Close Connection
-
-Tenant 2 Different switches, ICMP reply ovs-dpctl output check on sw3
- [Documentation] Assert matches and actions on megaflow of ICMP request from h36_7 to h35_8
- [Tags] tenant2
- ConnUtils.Connect and Login ${DIFF_WEBSERVER_SWITCH_IP} timeout=${timeout}
- @{matches} Create List
- @{actions} Create List
- Append In Port Check ${matches} 8
- Append Inner MAC Check ${matches} src_addr=${DIFF_WEBSERVER_MAC}
- Append Ether-Type Check ${matches} 0x0800
- Append Inner IPs Check ${matches} ${DIFF_WEBSERVER_IP} ${CLIENT_IP}
- Append Proto Check ${matches} 1
- Append Tunnel Set Check ${actions}
- Append Inner MAC Check ${actions} dst_addr=${CLIENT_MAC}
- Append Inner IPs Check ${actions} ${DIFF_WEBSERVER_IP} ${CLIENT_IP}
- Append Proto Check ${actions} 1
- Append Out Port Check ${actions} 3
- ${output} Find Flow in DPCTL Output ${matches} ${actions}
- SSHLibrary.Close Connection
-
-Tenant 2 Different switches, ICMP reply ovs-dpctl output check on sw1
- [Documentation] Assert matches and actions on megaflow of ICMP reply from h36_7 to h35_8
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- @{matches} Create List
- @{actions} Create List
- Append Tunnel Set Check ${matches}
- Append Outer IPs Check ${matches} src_ip=${DIFF_WEBSERVER_SWITCH_IP}
- Append Outer IPs Check ${matches} dst_ip=${CLIENT_SWITCH_IP}
- Append In Port Check ${matches} 3
- Append Inner MAC Check ${matches} dst_addr=${CLIENT_MAC}
- Append Ether-Type Check ${matches} 0x0800
- Append Inner IPs Check ${matches} ${DIFF_WEBSERVER_IP} ${CLIENT_IP}
- Append Proto Check ${matches} 1
- Append Inner IPs Check ${actions} ${DIFF_WEBSERVER_IP} ${CLIENT_IP}
- Append Proto Check ${actions} 1
- Append Out Port Check ${actions} 6
- ${output} Find Flow in DPCTL Output ${matches} ${actions}
- SSHLibrary.Close Connection
-
-Tenant 2 Different switches, stop endless ping from h35_8 to h36_7
- [Documentation] Stops endless pinging from h35_8 to h36_7 when traffic inspection finishes.
- [Tags] tenant2
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- DockerUtils.Stop Endless Ping from Docker to Address ${CLIENT_DOCKER} ${DIFF_WEBSERVER_IP}
- SSHLibrary.Close Connection
+++ /dev/null
-*** Settings ***
-Documentation Tests for HTTP flow
-
-Library SSHLibrary
-Resource ../../../../../libraries/Utils.robot
-Resource ../../../../../libraries/GBP/ConnUtils.robot
-Resource ../../../../../libraries/GBP/DockerUtils.robot
-Resource ../../../../../libraries/GBP/OpenFlowUtils.robot
-Variables ../../../../../variables/Variables.py
-Resource ../Variables.robot
-
-Force Tags multi-tenant http multi-tenant-main
-
-
-*** Variables ***
-${timeout} 10s
-
-
-*** Test Cases ***
-Setting Variables for Tenant 1
- [Documentation] Setting variables for test cases related to tenant 1.
- # Same subnet tests are not supported by current topology configuration;
- # clients and webservers are put in two different subnets
- Set Test Variables
- ... client_switch_ip=${GBP1}
- ... client_docker=h35_2
- ... client_ip=10.0.35.2
- ... client_mac=00:00:00:00:35:02
- ... same_webserver_docker=h36_3
- ... same_webserver_ip=10.0.36.3
- ... same_webserver_mac=00:00:00:00:36:03
- ... diff_webserver_switch_ip=${GBP3}
- ... diff_webserver_docker=h36_2
- ... diff_webserver_ip=10.0.36.2
- ... diff_webserver_mac=00:00:00:00:36:02
-
-Tenant 1 Same switch, start SimpleHttpServer on h36_3
- [Documentation] Same Switch (sw1)
- [Tags] tenant1
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- DockerUtils.Start HTTP Service on Docker ${SAME_WEBSERVER_DOCKER} 80
- SSHLibrary.Close Connection
-
-Tenant 1 Same switch, curl once from h35_2 to h36_3
- [Documentation] Test HTTP req/rest session between docker located on the same switch.
- [Tags] tenant1
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- DockerUtils.Curl from Docker ${CLIENT_DOCKER} ${SAME_WEBSERVER_IP} 80
- SSHLibrary.Close Connection
-
-Tenant 1 Same switch, start endless curl from h35_2 to h36_3
- [Documentation] Init of endless HTTP session between endpoints so that
- ... HTTP traffic can be inspected.
- [Tags] tenant1
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- DockerUtils.Start Endless Curl from Docker ${CLIENT_DOCKER} ${SAME_WEBSERVER_IP} 80
- SSHLibrary.Close Connection
-
-Tenant 1 Same switch, HTTP request ovs-dpctl output check on sw1
- [Documentation] Assert matches and actions on megaflow of HTTP request from h35_2 to h36_3
- [Tags] tenant1
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- @{matches} Create List
- @{actions} Create List
- Append In Port Check ${matches} 4
- Append Inner MAC Check ${matches} src_addr=${CLIENT_MAC}
- Append Ether-Type Check ${matches} 0x0800
- Append Inner IPs Check ${matches} ${CLIENT_IP} ${SAME_WEBSERVER_IP}
- Append Proto Check ${matches} 6
- Append Inner MAC Check ${actions} dst_addr=${SAME_WEBSERVER_MAC}
- Append Inner IPs Check ${actions} ${CLIENT_IP} ${SAME_WEBSERVER_IP}
- Append Proto Check ${actions} 6
- Append Out Port Check ${actions} 7
- ${output} Find Flow in DPCTL Output ${matches} ${actions}
- SSHLibrary.Close Connection
-
-Tenant 1 Same switch, HTTP reply ovs-dpctl output check on sw1
- [Documentation] Assert matches and actions on megaflow of HTTP request from h36_3 to h35_2
- [Tags] tenant1
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- @{matches} Create List
- @{actions} Create List
- Append In Port Check ${matches} 7
- Append Inner MAC Check ${matches} src_addr=${SAME_WEBSERVER_MAC}
- Append Ether-Type Check ${matches} 0x0800
- Append Inner IPs Check ${matches} ${SAME_WEBSERVER_IP} ${CLIENT_IP}
- Append Proto Check ${matches} 6
- Append Inner MAC Check ${actions} dst_addr=${CLIENT_MAC}
- Append Inner IPs Check ${actions} ${SAME_WEBSERVER_IP} ${CLIENT_IP}
- Append Proto Check ${actions} 6
- Append Out Port Check ${actions} 4
- ${output} Find Flow in DPCTL Output ${matches} ${actions}
- SSHLibrary.Close Connection
-
-Tenant 1 Same switch, stop endless curl from h35_2 to h36_3
- [Documentation] Stopping endless HTTP session after traffic inspection is done.
- [Tags] tenant1
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- DockerUtils.Stop Endless Curl from Docker ${CLIENT_DOCKER}
- SSHLibrary.Close Connection
-
-Tenant 1 Same switch, stop SimpleHttpServer on h36_3
- [Documentation] Stoping HTTP service on docker container.
- [Tags] tenant1
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- DockerUtils.Stop HTTP Service on Docker ${SAME_WEBSERVER_DOCKER}
- SSHLibrary.Close Connection
-
-Tenant 1 Different switches, start SimpleHttpServer on h36_2
- [Documentation] Different switches (sw1 -> sw3)
- [Tags] tenant1
- ConnUtils.Connect and Login ${DIFF_WEBSERVER_SWITCH_IP} timeout=${timeout}
- DockerUtils.Start HTTP Service on Docker ${DIFF_WEBSERVER_DOCKER} 80
- SSHLibrary.Close Connection
-
-Tenant 1 Different switches, curl once from h35_2 to h36_2
- [Documentation] Test HTTP req/resp between endpoints located on different switches.
- [Tags] tenant1
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- DockerUtils.Curl from Docker ${CLIENT_DOCKER} ${DIFF_WEBSERVER_IP} 80
- SSHLibrary.Close Connection
-
-Tenant 1 Different switches, start endless curl from h35_2 to h36_2
- [Tags] tenant1
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- DockerUtils.Start Endless Curl from Docker ${CLIENT_DOCKER} ${DIFF_WEBSERVER_IP} 80
- SSHLibrary.Close Connection
-
-Tenant 1 Different switches, HTTP request ovs-dpctl output check on sw1
- [Documentation] Assert matches and actions on megaflow of HTTP request from h35_2 to h36_2
- [Tags] tenant1
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- @{matches} Create List
- @{actions} Create List
- Append In Port Check ${matches} 4
- Append Inner MAC Check ${matches} src_addr=${CLIENT_MAC}
- Append Ether-Type Check ${matches} 0x0800
- Append Inner IPs Check ${matches} ${CLIENT_IP} ${DIFF_WEBSERVER_IP}
- Append Proto Check ${matches} 6
- Append Tunnel Set Check ${actions}
- Append Inner MAC Check ${actions} dst_addr=${DIFF_WEBSERVER_MAC}
- Append Inner IPs Check ${actions} ${CLIENT_IP} ${DIFF_WEBSERVER_IP}
- Append Proto Check ${actions} 6
- Append Out Port Check ${actions} 3
- ${output} Find Flow in DPCTL Output ${matches} ${actions}
- SSHLibrary.Close Connection
-
-Tenant 1 Different switches, HTTP request ovs-dpctl output check on sw3
- [Documentation] Assert matches and actions on megaflow of HTTP request from h35_2 to h36_2
- [Tags] tenant1
- ConnUtils.Connect and Login ${DIFF_WEBSERVER_SWITCH_IP} timeout=${timeout}
- @{matches} Create List
- @{actions} Create List
- Append Tunnel Set Check ${matches}
- Append Outer IPs Check ${matches} src_ip=${CLIENT_SWITCH_IP}
- Append Outer IPs Check ${matches} dst_ip=${DIFF_WEBSERVER_SWITCH_IP}
- Append In Port Check ${matches} 3
- Append Inner MAC Check ${matches} dst_addr=${DIFF_WEBSERVER_MAC}
- Append Ether-Type Check ${matches} 0x0800
- Append Inner IPs Check ${matches} ${CLIENT_IP} ${DIFF_WEBSERVER_IP}
- Append Proto Check ${matches} 6
- Append Inner IPs Check ${actions} ${CLIENT_IP} ${DIFF_WEBSERVER_IP}
- Append Proto Check ${actions} 6
- Append Out Port Check ${actions} 6
- ${output} Find Flow in DPCTL Output ${matches} ${actions}
- SSHLibrary.Close Connection
-
-Tenant 1 Different switches, HTTP reply ovs-dpctl output check on sw3
- [Documentation] Assert matches and actions on megaflow of HTTP request from h36_2 to h35_2
- [Tags] tenant1
- ConnUtils.Connect and Login ${DIFF_WEBSERVER_SWITCH_IP} timeout=${timeout}
- @{matches} Create List
- @{actions} Create List
- Append In Port Check ${matches} 6
- Append Inner MAC Check ${matches} src_addr=${DIFF_WEBSERVER_MAC}
- Append Ether-Type Check ${matches} 0x0800
- Append Inner IPs Check ${matches} ${DIFF_WEBSERVER_IP} ${CLIENT_IP}
- Append Proto Check ${matches} 6
- Append Tunnel Set Check ${actions}
- Append Inner MAC Check ${actions} dst_addr=${CLIENT_MAC}
- Append Inner IPs Check ${actions} ${DIFF_WEBSERVER_IP} ${CLIENT_IP}
- Append Proto Check ${actions} 6
- Append Out Port Check ${actions} 3
- ${output} Find Flow in DPCTL Output ${matches} ${actions}
- SSHLibrary.Close Connection
-
-Tenant 1 Different switches, HTTP reply ovs-dpctl output check on sw1
- [Documentation] Assert matches and actions on megaflow of HTTP request from h36_2 to h35_2
- [Tags] tenant1
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- @{matches} Create List
- @{actions} Create List
- Append Tunnel Set Check ${matches}
- Append Outer IPs Check ${matches} src_ip=${DIFF_WEBSERVER_SWITCH_IP}
- Append Outer IPs Check ${matches} dst_ip=${CLIENT_SWITCH_IP}
- Append In Port Check ${matches} 3
- Append Inner MAC Check ${matches} dst_addr=${CLIENT_MAC}
- Append Ether-Type Check ${matches} 0x0800
- Append Inner IPs Check ${matches} ${DIFF_WEBSERVER_IP} ${CLIENT_IP}
- Append Proto Check ${matches} 6
- Append Inner IPs Check ${actions} ${DIFF_WEBSERVER_IP} ${CLIENT_IP}
- Append Proto Check ${actions} 6
- Append Out Port Check ${actions} 4
- ${output} Find Flow in DPCTL Output ${matches} ${actions}
- SSHLibrary.Close Connection
-
-Tenant 1 Different switches, stop endless curl from h35_2 to h36_2
- [Documentation] Stopping endless HTTP session when traffic inspection finishes.
- [Tags] tenant1
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- DockerUtils.Stop Endless Curl from Docker ${CLIENT_DOCKER}
- SSHLibrary.Close Connection
-
-Tenant 1 Different switches, stop SimpleHttpServer on h36_2
- [Documentation] Terminating HTTP service on docker container.
- [Tags] tenant1
- ConnUtils.Connect and Login ${DIFF_WEBSERVER_SWITCH_IP} timeout=${timeout}
- DockerUtils.Stop HTTP Service on Docker ${DIFF_WEBSERVER_DOCKER}
- SSHLibrary.Close Connection
-
-Setting Variables For Tenant 2
- [Documentation] Setting variables for test cases related to tenant 1.
- Set Test Variables
- ... client_switch_ip=${GBP1}
- ... client_docker=h35_8
- ... client_ip=10.0.35.8
- ... client_mac=00:00:00:00:35:08
- ... same_webserver_docker=h36_6
- ... same_webserver_ip=10.0.36.6
- ... same_webserver_mac=00:00:00:00:36:06
- ... diff_webserver_switch_ip=${GBP2}
- ... diff_webserver_docker=h36_7
- ... diff_webserver_ip=10.0.36.7
- ... diff_webserver_mac=00:00:00:00:36:07
-
-Tenant 2 Same switch, start SimpleHttpServer on h36_6
- [Documentation] Same Switch (sw1)
- [Tags] tenant2
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- DockerUtils.Start HTTP Service on Docker ${SAME_WEBSERVER_DOCKER} 80
- SSHLibrary.Close Connection
-
-Tenant 2 Same switch, curl once from h35_8 to h36_6
- [Documentation] Test HTTP req/resp between endpoints on the same switch.
- [Tags] tenant1
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- DockerUtils.Curl from Docker ${CLIENT_DOCKER} ${SAME_WEBSERVER_IP} 80
- SSHLibrary.Close Connection
-
-Tenant 2 Same switch, start endless curl from h35_8 to h36_6
- [Documentation] Init if endless HTTP Session between endpoints on the same switch.
- [Tags] tenant2
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- DockerUtils.Start Endless Curl from Docker ${CLIENT_DOCKER} ${SAME_WEBSERVER_IP} 80
- SSHLibrary.Close Connection
-
-Tenant 2 Same switch, HTTP request ovs-dpctl output check on sw1
- [Documentation] Assert matches and actions on megaflow of HTTP request from h35_8 to h36_6
- [Tags] tenant2
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- @{matches} Create List
- @{actions} Create List
- Append In Port Check ${matches} 6
- Append Inner MAC Check ${matches} src_addr=${CLIENT_MAC}
- Append Ether-Type Check ${matches} 0x0800
- Append Inner IPs Check ${matches} ${CLIENT_IP} ${SAME_WEBSERVER_IP}
- Append Proto Check ${matches} 6
- Append Inner MAC Check ${actions} dst_addr=${SAME_WEBSERVER_MAC}
- Append Inner IPs Check ${actions} ${CLIENT_IP} ${SAME_WEBSERVER_IP}
- Append Proto Check ${actions} 6
- Append Out Port Check ${actions} 8
- ${output} Find Flow in DPCTL Output ${matches} ${actions}
- SSHLibrary.Close Connection
-
-Tenant 2 Same switch, HTTP reply ovs-dpctl output check on sw1
- [Documentation] Assert matches and actions on megaflow of HTTP request from h36_6 to h35_8
- [Tags] tenant2
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- @{matches} Create List
- @{actions} Create List
- Append In Port Check ${matches} 8
- Append Inner MAC Check ${matches} src_addr=${SAME_WEBSERVER_MAC}
- Append Ether-Type Check ${matches} 0x0800
- Append Inner IPs Check ${matches} ${SAME_WEBSERVER_IP} ${CLIENT_IP}
- Append Proto Check ${matches} 6
- Append Inner MAC Check ${actions} dst_addr=${CLIENT_MAC}
- Append Inner IPs Check ${actions} ${SAME_WEBSERVER_IP} ${CLIENT_IP}
- Append Proto Check ${actions} 6
- Append Out Port Check ${actions} 6
- ${output} Find Flow in DPCTL Output ${matches} ${actions}
- SSHLibrary.Close Connection
-
-Tenant 2 Same switch, stop endless curl from h35_8 to h36_6
- [Documentation] Terminating endless HTTP session after traffic inspection is done.
- [Tags] tenant2
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- DockerUtils.Stop Endless Curl from Docker ${CLIENT_DOCKER}
- SSHLibrary.Close Connection
-
-Tenant 2 Same switch, stop SimpleHttpServer on h36_6
- [Documentation] Stoping HTTP service on serving docker container.
- [Tags] tenant2
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- DockerUtils.Stop HTTP Service on Docker ${SAME_WEBSERVER_DOCKER}
- SSHLibrary.Close Connection
-
-Tenant 2 Different switches, start SimpleHttpServer on h36_7
- [Documentation] Different switches (sw1 -> sw3)
- [Tags] tenant2
- ConnUtils.Connect and Login ${DIFF_WEBSERVER_SWITCH_IP} timeout=${timeout}
- DockerUtils.Start HTTP Service on Docker ${DIFF_WEBSERVER_DOCKER} 80
- SSHLibrary.Close Connection
-
-Tenant 2 Different switches, curl once from h35_8 to h36_7
- [Documentation] Test HTTP req/resp between endpoints located on different switches.
- [Tags] tenant2
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- DockerUtils.Curl from Docker ${CLIENT_DOCKER} ${DIFF_WEBSERVER_IP} 80
- SSHLibrary.Close Connection
-
-Tenant 2 Different switches, start endless curl from h35_8 to h36_7
- [Documentation] Starting endless HTTP session so that the traffic can be inspected.
- [Tags] tenant2
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- DockerUtils.Start Endless Curl from Docker ${CLIENT_DOCKER} ${DIFF_WEBSERVER_IP} 80
- SSHLibrary.Close Connection
-
-Tenant 2 Different switches, HTTP request ovs-dpctl output check on sw1
- [Documentation] Assert matches and actions on megaflow of HTTP request from h35_8 to h36_7
- [Tags] tenant2
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- @{matches} Create List
- @{actions} Create List
- Append In Port Check ${matches} 6
- Append Inner MAC Check ${matches} src_addr=${CLIENT_MAC}
- Append Ether-Type Check ${matches} 0x0800
- Append Inner IPs Check ${matches} ${CLIENT_IP} ${DIFF_WEBSERVER_IP}
- Append Proto Check ${matches} 6
- Append Tunnel Set Check ${actions}
- Append Inner MAC Check ${actions} dst_addr=${DIFF_WEBSERVER_MAC}
- Append Inner IPs Check ${actions} ${CLIENT_IP} ${DIFF_WEBSERVER_IP}
- Append Proto Check ${actions} 6
- Append Out Port Check ${actions} 3
- ${output} Find Flow in DPCTL Output ${matches} ${actions}
- SSHLibrary.Close Connection
-
-Tenant 2 Different switches, HTTP request ovs-dpctl output check on sw3
- [Documentation] Assert matches and actions on megaflow of HTTP request from h35_8 to h36_7
- [Tags] tenant1
- ConnUtils.Connect and Login ${DIFF_WEBSERVER_SWITCH_IP} timeout=${timeout}
- @{matches} Create List
- @{actions} Create List
- Append Tunnel Set Check ${matches}
- Append Outer IPs Check ${matches} src_ip=${CLIENT_SWITCH_IP}
- Append Outer IPs Check ${matches} dst_ip=${DIFF_WEBSERVER_SWITCH_IP}
- Append In Port Check ${matches} 3
- Append Inner MAC Check ${matches} dst_addr=${DIFF_WEBSERVER_MAC}
- Append Ether-Type Check ${matches} 0x0800
- Append Inner IPs Check ${matches} ${CLIENT_IP} ${DIFF_WEBSERVER_IP}
- Append Proto Check ${matches} 6
- Append Inner IPs Check ${actions} ${CLIENT_IP} ${DIFF_WEBSERVER_IP}
- Append Proto Check ${actions} 6
- Append Out Port Check ${actions} 8
- ${output} Find Flow in DPCTL Output ${matches} ${actions}
- SSHLibrary.Close Connection
-
-Tenant 2 Different switches, HTTP reply ovs-dpctl output check on sw3
- [Documentation] Assert matches and actions on megaflow of HTTP request from h36_7 to h35_8
- [Tags] tenant2
- ConnUtils.Connect and Login ${DIFF_WEBSERVER_SWITCH_IP} timeout=${timeout}
- @{matches} Create List
- @{actions} Create List
- Append In Port Check ${matches} 8
- Append Inner MAC Check ${matches} src_addr=${DIFF_WEBSERVER_MAC}
- Append Ether-Type Check ${matches} 0x0800
- Append Inner IPs Check ${matches} ${DIFF_WEBSERVER_IP} ${CLIENT_IP}
- Append Proto Check ${matches} 6
- Append Tunnel Set Check ${actions}
- Append Inner MAC Check ${actions} dst_addr=${CLIENT_MAC}
- Append Inner IPs Check ${actions} ${DIFF_WEBSERVER_IP} ${CLIENT_IP}
- Append Proto Check ${actions} 6
- Append Out Port Check ${actions} 3
- ${output} Find Flow in DPCTL Output ${matches} ${actions}
- SSHLibrary.Close Connection
-
-Tenant 2 Different switches, HTTP reply ovs-dpctl output check on sw1
- [Documentation] Assert matches and actions on megaflow of HTTP reply from h36_7 to h35_8
- [Tags] tenant2
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- @{matches} Create List
- @{actions} Create List
- Append Tunnel Set Check ${matches}
- Append Outer IPs Check ${matches} src_ip=${DIFF_WEBSERVER_SWITCH_IP}
- Append Outer IPs Check ${matches} dst_ip=${CLIENT_SWITCH_IP}
- Append In Port Check ${matches} 3
- Append Inner MAC Check ${matches} dst_addr=${CLIENT_MAC}
- Append Ether-Type Check ${matches} 0x0800
- Append Inner IPs Check ${matches} ${DIFF_WEBSERVER_IP} ${CLIENT_IP}
- Append Proto Check ${matches} 6
- Append Inner IPs Check ${actions} ${DIFF_WEBSERVER_IP} ${CLIENT_IP}
- Append Proto Check ${actions} 6
- Append Out Port Check ${actions} 6
- ${output} Find Flow in DPCTL Output ${matches} ${actions}
- SSHLibrary.Close Connection
-
-Tenant 2 Different switches, stop endless curl from h35_8 to h36_7
- [Documentation] Terminanting endless HTTP session after traffic inspection
- ... finishes.
- [Tags] tenant2
- ConnUtils.Connect and Login ${CLIENT_SWITCH_IP} timeout=${timeout}
- DockerUtils.Stop Endless Curl from Docker ${CLIENT_DOCKER}
- SSHLibrary.Close Connection
-
-Tenant 2 Different switches, stop SimpleHttpServer on h36_7
- [Documentation] Stopping HTTP service on docker container.
- [Tags] tenant2
- ConnUtils.Connect and Login ${DIFF_WEBSERVER_SWITCH_IP} timeout=${timeout}
- DockerUtils.Stop HTTP Service on Docker ${DIFF_WEBSERVER_DOCKER}
- SSHLibrary.Close Connection
+++ /dev/null
-*** Settings ***
-Documentation Deep inspection of HTTP traffic on asymmetric chain.
-... Nodes are located on different VMs.
-
-Library SSHLibrary
-Resource ../../../../../libraries/GBP/OpenFlowUtils.robot
-Resource ../../../../../libraries/GBP/ConnUtils.robot
-Resource ../Variables.robot
-Resource ../Connections.robot
-
-
-*** Test Cases ***
-Show GBPSFC1 Status
- [Documentation] Shows flows and configuration of a switch for easier debugging.
- Start Connections
- Switch Connection GBP1_CONNECTION
- Show Switch Status sw1
-
-Show GBPSFC2 Status
- [Documentation] Shows flows and configuration of a switch for easier debugging.
- Switch Connection GBP2_CONNECTION
- Show Switch Status sw2
-
-Show GBPSFC3 Status
- [Documentation] Shows flows and configuration of a switch for easier debugging.
- Switch Connection GBP3_CONNECTION
- Show Switch Status sw3
- Close Connections
-
-Read Tenants Confing From ODL
- [Documentation] Logs ODL data store.
- Create Session
- ... session
- ... http://${ODL_SYSTEM_IP}:${RESTCONFPORT}
- ... auth=${AUTH}
- ... headers=${HEADERS_YANG_JSON}
- ${resp} RequestsLibrary.Get Request session ${GBP_TENANTS_API}
- Log ${resp.content}
-
-Read Tenants Operational From ODL
- ${resp} RequestsLibrary.Get Request session ${OPERATIONAL_GBP_TENANTS_API}
- Log ${resp.content}
-
-Read Nodes Config From ODL
- ${resp} RequestsLibrary.Get Request session ${CONFIG_NODES_API}
- Log ${resp.content}
-
-Read Nodes Operational From ODL
- ${resp} RequestsLibrary.Get Request session ${OPERATIONAL_NODES_API}
- Log ${resp.content}
-
-Read Topology Config From ODL
- ${resp} RequestsLibrary.Get Request session ${CONFIG_TOPO_API}
- Log ${resp.content}
-
-Read Topology Operational From ODL
- ${resp} RequestsLibrary.Get Request session ${OPERATIONAL_TOPO_API}
- Log ${resp.content}
-
-Read Endpoints From ODL
- ${resp} RequestsLibrary.Get Request session ${GBP_ENDPOINTS_API}
- Log ${resp.content}
- Delete All Sessions
+++ /dev/null
-*** Settings ***
-Documentation Test suite for cleaning up / unregister infrastructure constructs like endpoints for demo-asymmetric-chain
-
-Library RequestsLibrary
-Library OperatingSystem
-Library json
-Variables ../../../../../variables/Variables.py
-Resource ../../../../../libraries/Utils.robot
-Resource ../../../../../libraries/GBP/RestconfUtils.robot
-Resource ../Variables.robot
-
-Suite Setup Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS}
-Suite Teardown Delete All Sessions
-
-Default Tags multi-tenant teardown multi-tenant-teardown
-
-
-*** Test Cases ***
-Delete Tenants
- [Documentation] Delete Tenants from ODL
- Remove All Elements At URI ${TENANT1_PATH}
- Remove All Elements At URI ${TENANT2_PATH}
-
-Unregister Endpoints
- [Documentation] Unregister Endpoints Endpoints from ODL
- RestconfUtils.Unregister Endpoints
-
-Delete Nodes
- [Documentation] Delete Nodes from ODL
- Remove All Elements At URI ${TUNNELS_PATH}
+++ /dev/null
-*** Settings ***
-Library SSHLibrary
-Resource ../../../../../libraries/Utils.robot
-Resource ../../../../../libraries/GBP/ConnUtils.robot
-Variables ../../../../../variables/Variables.py
-Resource ../Variables.robot
-Resource ../GBP_3node.robot
-
-Default Tags multi-tenant teardown multi-tenant-teardown
-
-
-*** Variables ***
-${timeout} 10s
-
-
-*** Test Cases ***
-Teardown Suite
- Log Teardown suite in gbp1
- FOR ${GBP} IN @{GBPs}
- GBP_3node.Teardown Node ${GBP} ${CURDIR} timeout=${timeout}
- END
+++ /dev/null
-# Config for switches, tunnelIP is the local IP address.
-switches = [
- {"name": "sw1", "type": "gbp", "dpid": "1"},
- {"name": "sw2", "type": "gbp", "dpid": "2"},
- {"name": "sw3", "type": "gbp", "dpid": "3"},
-]
-
-defaultContainerImage = "alagalah/odlpoc_ovs230"
-# defaultContainerImage='ubuntu:14.04'
-
-# Note that tenant name and endpointGroup name come from policy_config.py
-
-hosts = [
- {
- "name": "h35_2",
- "mac": "00:00:00:00:35:02",
- "ip": "10.0.35.2/24",
- "switch": "sw1",
- },
- {
- "name": "h35_3",
- "ip": "10.0.35.3/24",
- "mac": "00:00:00:00:35:03",
- "switch": "sw2",
- },
- {
- "name": "h35_4",
- "ip": "10.0.35.4/24",
- "mac": "00:00:00:00:35:04",
- "switch": "sw3",
- },
- {
- "name": "h35_5",
- "ip": "10.0.35.5/24",
- "mac": "00:00:00:00:35:05",
- "switch": "sw1",
- },
- {
- "name": "h35_6",
- "ip": "10.0.35.6/24",
- "mac": "00:00:00:00:35:06",
- "switch": "sw2",
- "tenant": "GBPPOC2",
- "endpointGroup": "test",
- },
- {
- "name": "h35_7",
- "ip": "10.0.35.7/24",
- "mac": "00:00:00:00:35:07",
- "switch": "sw3",
- "tenant": "GBPPOC2",
- "endpointGroup": "test",
- },
- {
- "name": "h35_8",
- "ip": "10.0.35.8/24",
- "mac": "00:00:00:00:35:08",
- "switch": "sw1",
- "tenant": "GBPPOC2",
- "endpointGroup": "test",
- },
- {
- "name": "h35_9",
- "ip": "10.0.35.9/24",
- "mac": "00:00:00:00:35:09",
- "switch": "sw2",
- "tenant": "GBPPOC2",
- "endpointGroup": "test",
- },
- {
- "name": "h36_2",
- "ip": "10.0.36.2/24",
- "mac": "00:00:00:00:36:02",
- "switch": "sw3",
- },
- {
- "name": "h36_3",
- "ip": "10.0.36.3/24",
- "mac": "00:00:00:00:36:03",
- "switch": "sw1",
- },
- {
- "name": "h36_4",
- "ip": "10.0.36.4/24",
- "mac": "00:00:00:00:36:04",
- "switch": "sw2",
- },
- {
- "name": "h36_5",
- "ip": "10.0.36.5/24",
- "mac": "00:00:00:00:36:05",
- "switch": "sw3",
- },
- {
- "name": "h36_6",
- "ip": "10.0.36.6/24",
- "mac": "00:00:00:00:36:06",
- "switch": "sw1",
- "tenant": "GBPPOC2",
- "endpointGroup": "test",
- },
- {
- "name": "h36_7",
- "ip": "10.0.36.7/24",
- "mac": "00:00:00:00:36:07",
- "switch": "sw2",
- "tenant": "GBPPOC2",
- "endpointGroup": "test",
- },
- {
- "name": "h36_8",
- "ip": "10.0.36.8/24",
- "mac": "00:00:00:00:36:08",
- "switch": "sw3",
- "tenant": "GBPPOC2",
- "endpointGroup": "test",
- },
- {
- "name": "h36_9",
- "ip": "10.0.36.9/24",
- "mac": "00:00:00:00:36:09",
- "switch": "sw1",
- "tenant": "GBPPOC2",
- "endpointGroup": "test",
- },
-]
+++ /dev/null
-*** Settings ***
-Documentation This suite verifies availability of ODL features needed for further testing
-
-Library SSHLibrary
-Library OperatingSystem
-Library RequestsLibrary
-Resource Variables.robot
-Resource ../../../../libraries/Utils.robot
-Resource ../../../../libraries/DevstackUtils.robot
-Variables ../../../../variables/Variables.py
-
-Suite Teardown Delete All Sessions
-
-
-*** Test Cases ***
-Wait for Renderers and NeutronMapper
- Create Session session http://${ODL_SYSTEM_IP}:8181 auth=${AUTH} headers=${headers}
- Wait Until Keyword Succeeds 60x 5s Renderers And NeutronMapper Initialized session
- Delete All Sessions
-
-
-*** Keywords ***
-Renderers And NeutronMapper Initialized
- [Documentation] Ofoverlay and Neutronmapper features start check via datastore.
- [Arguments] ${session}
- Get Data From URI ${session} ${OF_OVERLAY_BOOT_URL} headers=${headers}
- ${response} RequestsLibrary.Get Request ${session} ${NEURONMAPPER_BOOT_URL} ${headers}
- Should Be Equal As Strings 404 ${response.status_code}
+++ /dev/null
-*** Settings ***
-Documentation Testing of Group Based Policy Neutron-Mapper
-
-Library SSHLibrary
-Library OperatingSystem
-Library RequestsLibrary
-Library String
-Resource Variables.robot
-Resource ../../../../variables/gbp/Constants.robot
-Resource ../../../../libraries/Utils.robot
-Resource ../../../../libraries/GBP/RestconfUtils.robot
-Resource ../../../../libraries/GBP/AssertionUtils.robot
-Resource ../../../../libraries/DevstackUtils.robot
-Resource ../../../../libraries/OpenStackOperations.robot
-
-Suite Setup Devstack Suite Setup
-Suite Teardown Clean Suite
-
-
-*** Variables ***
-${NETWORK_NAME} net123
-${SUBNET_NAME} subnet123
-${CLIENT_SG} client_sg
-${SERVER_SG} server_sg
-${TENANTS_CONF_PATH} restconf/config/policy:tenants
-${CLIENT_PORT_IP} 10.0.0.5
-${SERVER_PORT_IP} 10.0.0.6
-${CLIENT_PORT_NAME} client
-${SERVER_PORT_NAME} server
-${REMOTE_IP_PREFIX} 10.0.0.0/24
-${SUBNET_IP_PREFIX} 10.0.0.0/24
-${ROUTER_NAME} router123
-${TENANT_ID} ${EMPTY}
-${SUBNET_ID} ${EMPTY}
-${FLOOD_DOMAIN_ID} ${EMPTY}
-${BRIDGE_DOMAIN_ID} ${EMPTY}
-${L3_CONTEXT_ID} ${EMPTY}
-${GROUP_RULE_ID} ${EMPTY}
-${CLIENT_MAC_ADDR} ${EMPTY}
-${SERVER_MAC_ADDR} ${EMPTY}
-${CLIENT_SG_ID} ${EMPTY}
-${SERVER_SG_ID} ${EMPTY}
-${ROUTER_ID} ${EMPTY}
-
-
-*** Test Cases ***
-Test Resolve Tenant ID
- [Documentation] Test reading tenant id from default security group
- ${tenant_id} Get Tenant ID From Security Group
- ${tenant_id} To Uuid ${tenant_id}
- Should Match Regexp ${tenant_id} ${UUID_PATTERN}
- Set Global Variable ${TENANT_ID} ${tenant_id}
-
-Test Create Network
- [Documentation] Create sec group and verify data generated in GBP
- ${uuid} Create Network net123 verbose=FALSE
- ${l2_fd_id} Should Match Regexp ${uuid} ${UUID_PATTERN}
- ${l2_fd_path} Get L2 Flood Domain Path ${TENANT_ID} ${l2_fd_id}
- ${l2_fd} Get Data From URI session ${l2_fd_path} headers=${headers}
- ${l2_bd_id} Assert L2-Flood-Domain ${l2_fd} ${NETWORK_NAME}
- ${l2_bd_path} Get L2 Bridge Domain Path ${TENANT_ID} ${l2_bd_id}
- ${l2_bd} Get Data From URI session ${l2_bd_path} headers=${headers}
- ${l3_ctx_id} Assert L2-Bridge-Domain ${l2_bd} ${NETWORK_NAME}
- ${l3_ctx_path} Get L3 Context Path ${TENANT_ID} ${l3_ctx_id}
- ${l3_ctx} Get Data From URI session ${l3_ctx_path} headers=${headers}
- Assert L3-Context ${l3_ctx} ${NETWORK_NAME}
- Set Global Variable ${FLOOD_DOMAIN_ID} ${l2_fd_id}
- Set Global Variable ${BRIDGE_DOMAIN_ID} ${l2_bd_id}
- Set Global Variable ${L3_CONTEXT_ID} ${l3_ctx_id}
-
-
-*** Keywords ***
-Create Neutron Entity And Return ID
- [Documentation] Designed for creating neutron entities and returing their IDs.
- [Arguments] ${cmd} ${pattern}=${UUID_PATTERN}
- ${output} Write Commands Until Prompt ${cmd} | grep -w id | awk '{print $4}'
- Should Not Be Empty ${output}
- ${id} Should Match Regexp ${output} ${pattern}
- RETURN ${id}
-
-To Uuid
- [Documentation] Insert dashes if missing to generate proper UUID string.
- [Arguments] ${init_string}
- Should Match Regexp ${init_string} ${UUID_NO_DASHES}
- ${first} Get Substring ${init_string} 0 8
- ${second} Get Substring ${init_string} 8 12
- ${third} Get Substring ${init_string} 12 16
- ${fourth} Get Substring ${init_string} 16 20
- ${fifth} Get Substring ${init_string} 20 32
- RETURN ${first}-${second}-${third}-${fourth}-${fifth}
-
-Clean Suite
- [Documentation] Clears Openstack. This is also helpful when debugging tests locally.
- ${output} Write Commands Until Prompt neutron net-delete net123
- Should Match Regexp ${output} Deleted|Removed
- Delete All Sessions
+++ /dev/null
-*** Settings ***
-Documentation Global variables for GBPSFC 6node topology. Some variables are release specific and their value depend on
-... ODL_STREAM variable which contains release name and is defined in Jenkins job. Keywords for setting release specific
-... data are located in this file.
-
-Variables ../../../../variables/Variables.py
-
-
-*** Variables ***
-${NEURONMAPPER_BOOT_URL} restconf/config/neutron-mapper:mappings
-${OF_OVERLAY_BOOT_URL} restconf/config/ofoverlay:of-overlay-config
-${PROMPT_TIMEOUT} ${DEFAULT_TIMEOUT}
-${DEVSTACK_BRANCH} ${OPENSTACK_BRANCH}
-${DEVSTACK_IP} ${TOOLS_SYSTEM_IP}
-${DEVSTACK_USER} ${TOOLS_SYSTEM_USER}
-${DEVSTACK_PROMPT} ${DEFAULT_LINUX_PROMPT}
-# modify the below var for local testing
-${DEVSTACK_DIR} ${DEVSTACK_DEPLOY_PATH}
-# modify the below var for local testing
-${DEVSTACK_PWD} ${EMPTY}
+++ /dev/null
-*** Settings ***
-Library SSHLibrary
-Resource ../../../../libraries/SSHKeywords.robot
-Resource ../../../../libraries/GBP/ConnUtils.robot
-Variables ../../../../variables/Variables.py
-Resource Variables.robot
-
-
-*** Keywords ***
-Start Connections
- [Documentation] Establishes connections to remote VMs.
- SSHLibrary.Open Connection ${GBPSFC1} alias=GPSFC1_CONNECTION
- SSHKeywords.Flexible Mininet Login
- SSHLibrary.Open Connection ${GBPSFC2} alias=GPSFC2_CONNECTION
- SSHKeywords.Flexible Mininet Login
- SSHLibrary.Open Connection ${GBPSFC3} alias=GPSFC3_CONNECTION
- SSHKeywords.Flexible Mininet Login
- SSHLibrary.Open Connection ${GBPSFC4} alias=GPSFC4_CONNECTION
- SSHKeywords.Flexible Mininet Login
- SSHLibrary.Open Connection ${GBPSFC5} alias=GPSFC5_CONNECTION
- SSHKeywords.Flexible Mininet Login
- SSHLibrary.Open Connection ${GBPSFC6} alias=GPSFC6_CONNECTION
- SSHKeywords.Flexible Mininet Login
-
-Close Connections
- [Documentation] Closes connections to remote VMs.
- Switch Connection GPSFC1_CONNECTION
- SSHLibrary.Close Connection
- Switch Connection GPSFC2_CONNECTION
- SSHLibrary.Close Connection
- Switch Connection GPSFC3_CONNECTION
- SSHLibrary.Close Connection
- Switch Connection GPSFC4_CONNECTION
- SSHLibrary.Close Connection
- Switch Connection GPSFC5_CONNECTION
- SSHLibrary.Close Connection
- Switch Connection GPSFC6_CONNECTION
- SSHLibrary.Close Connection
+++ /dev/null
-*** Settings ***
-Library SSHLibrary
-Resource Variables.robot
-Resource ../../../../libraries/Utils.robot
-Resource ../../../../libraries/GBP/ConnUtils.robot
-Variables ../../../../variables/Variables.py
-
-
-*** Keywords ***
-Setup Node
- [Documentation] Configures underlying infrastructure composed of Docker containers and OVS switches on remote VM.
- ... Python and Bash scripts are used.
- [Arguments] ${GBPSFC} ${sw_index} ${suite_dir} ${timeout}=10s
- ConnUtils.Connect and Login ${GBPSFC} timeout=${timeout}
- SSHLibrary.Put File ${suite_dir}/* ${VM_HOME_FOLDER}${/}${VM_SCRIPTS_FOLDER}/ mode=0755
- ${stdout} ${stderr} ${rc} Execute in VE
- ... python ${VM_HOME_FOLDER}${/}${VM_SCRIPTS_FOLDER}/infrastructure_launch.py ${ODL} ${sw_index}
- ... timeout=${timeout}
- Should Be Equal As Numbers ${rc} 0
- ${stderr} Set Variable
- # Flows for GBPSFC3 and GBPSFC5 have to be written manually.
- # GBPSFC2 is SFF for GBPSFC3 and GBPSFC4 is SFF for GBPSFC5
- IF "${GBPSFC}" == "${GBPSFC3}"
- Write SF Flows ${GBPSFC2} ${stderr}
- ELSE IF "${GBPSFC}" == "${GBPSFC5}"
- Write SF Flows ${GBPSFC4} ${stderr}
- END
- Should Be Empty ${stderr}
- SSHLibrary.Close Connection
-
-Write SF Flows
- [Documentation] Writes flows to SF node. SFF for given SF has to be specified in arguments.
- [Arguments] ${SFF} ${stderr}
- ${stderr} SSHLibrary.Execute Command
- ... ${VM_HOME_FOLDER}${/}${VM_SCRIPTS_FOLDER}/sf-flows.sh ${SFF}
- ... return_stderr=True
- ... return_stdout=False
-
-Teardown Node
- [Documentation] Clears underlying infrastructure composed of Docker containers and OVS switches from remote VM.
- ... Python and Bash scripts are used.
- [Arguments] ${GBPSFC} ${suite_dir} ${timeout}=3s
- ConnUtils.Connect and Login ${GBPSFC} timeout=${timeout}
- ${stderr} SSHLibrary.Execute Command
- ... rm ${VM_HOME_FOLDER}${/}${VM_SCRIPTS_FOLDER}/infrastructure_config.py
- ... return_stderr=True
- ... return_stdout=False
- Should Be Empty ${stderr}
- ${stderr} SSHLibrary.Execute Command
- ... rm ${VM_HOME_FOLDER}${/}${VM_SCRIPTS_FOLDER}/sf-flows.sh
- ... return_stderr=True
- ... return_stdout=False
- Should Be Empty ${stderr}
- ${stderr} SSHLibrary.Execute Command
- ... ${VM_HOME_FOLDER}${/}${VM_SCRIPTS_FOLDER}/clean-demo.sh
- ... return_stderr=True
- ... return_stdout=False
- Should Be Empty ${stderr}
- SSHLibrary.Close Connection
-
-Setup Nodes
- [Arguments] ${GBPSFCs} ${init_scripts_dir}
- ${sw_index} Set Variable 0
- FOR ${GBPSFC} IN @{GBPSFCs}
- Setup Node ${GBPSFC} ${sw_index} ${init_scripts_dir} timeout=10s
- ${sw_index} Evaluate ${sw_index} + 1
- END
+++ /dev/null
-*** Settings ***
-Documentation Global variables for GBPSFC 6node topology. Some variables are release specific and their value depend on
-... ODL_STREAM variable which contains release name and is defined in Jenkins job. Keywords for setting release specific
-... data are located in this file.
-
-Variables ../../../../variables/Variables.py
-Resource ../../../../libraries/CompareStream.robot
-
-
-*** Variables ***
-${VM_HOME_FOLDER} ${WORKSPACE}
-${VM_SCRIPTS_FOLDER} scripts
-${ODL} ${ODL_SYSTEM_IP}
-${GBPSFC1} ${TOOLS_SYSTEM_IP}
-${GBPSFC2} ${TOOLS_SYSTEM_2_IP}
-${GBPSFC3} ${TOOLS_SYSTEM_3_IP}
-${GBPSFC4} ${TOOLS_SYSTEM_4_IP}
-${GBPSFC5} ${TOOLS_SYSTEM_5_IP}
-${GBPSFC6} ${TOOLS_SYSTEM_6_IP}
-@{GBPSFCs} ${GBPSFC1} ${GBPSFC2} ${GBPSFC3} ${GBPSFC4} ${GBPSFC5} ${GBPSFC6}
-${OF_OVERLAY_CONFIG_PATH} /restconf/config/ofoverlay:of-overlay-config
-${TOPOLOGY_PATH} ${CONFIG_TOPO_API}/topology/ovsdb:1
-${SF_PATH} /restconf/config/service-function:service-functions
-${SF_FILE} ${CURDIR}/../../../../variables/gbp/6node/service_functions.json
-${SFF_PATH} /restconf/config/service-function-forwarder:service-function-forwarders
-${SFF_FILE} ${CURDIR}/../../../../variables/gbp/6node/service_function_forwarders.json
-${SFC_PATH} /restconf/config/service-function-chain:service-function-chains
-${TUNNELS_PATH} ${CONFIG_NODES_API}
-${TUNNELS_FILE} ${CURDIR}/../../../../variables/gbp/6node/tunnels.json
-${SFC_ASYMM_FILE}
-... ${CURDIR}/../../../../variables/gbp/6node/demo-asymmetric-chain/service_function_chains.json
-${SFC_SYMM_FILE}
-... ${CURDIR}/../../../../variables/gbp/6node/demo-symmetric-chain/service_function_chains.json
-${SFP_PATH} /restconf/config/service-function-path:service-function-paths
-${SFP_ASYMM_FILE}
-... ${CURDIR}/../../../../variables/gbp/6node/demo-asymmetric-chain/service_function_paths.json
-${SFP_SYMM_FILE}
-... ${CURDIR}/../../../../variables/gbp/6node/demo-symmetric-chain/service_function_paths.json
-${ENDPOINT_REG_PATH} ${GBP_REGEP_API}
-${ENDPOINT_UNREG_PATH} ${GBP_UNREGEP_API}
-${ENDPOINTS_OPER_PATH} /restconf/operational/endpoint:endpoints
-
-
-*** Keywords ***
-Set Test Variables
- [Documentation] Sets variables used in 6node test cases.
- [Arguments] ${client_ip} ${client_name} ${server_ip} ${server_name} ${ether_type} ${proto}
- ... ${service_port}=${EMPTY} ${vxlan_port}=${EMPTY} ${vxlan_gpe_port}=${EMPTY}
- Set Global Variable ${CLIENT_IP} ${client_ip}
- Set Global Variable ${CLIENT_NAME} ${client_name}
- Set Global Variable ${SERVER_IP} ${server_ip}
- Set Global Variable ${SERVER_NAME} ${server_name}
- Set Global Variable ${SERVICE_PORT} ${service_port}
- Set Global Variable ${ETHER_TYPE} ${ether_type}
- Set Global Variable ${PROTO} ${proto}
- Set Global Variable ${VXLAN_PORT} ${vxlan_port}
- Set Global Variable ${VXLAN_GPE_PORT} ${vxlan_gpe_port}
-
-Set ODL Variables
- [Documentation] Initialize ODL version specific variables using resource CompareStream.
- Set ODL Variables Master
-
-Set ODL Variables Master
- [Documentation] Sets variables specific to latest(master) version
- Set Global Variable ${GBP_TENANT_ID} tenant-red
- Set Global Variable ${TENANT_PATH} ${GBP_TENANTS_API}/tenant/${GBP_TENANT_ID}
- Set Global Variable
- ... ${TENANT_ASYMM_FILE}
- ... ${CURDIR}/../../../../variables/gbp/6node/demo-asymmetric-chain/master/tenants.json
- Set Global Variable
- ... ${TENANT_SYMM_FILE}
- ... ${CURDIR}/../../../../variables/gbp/6node/demo-symmetric-chain/master/tenants.json
- Set Global Variable
- ... ${SFF_FILE}
- ... ${CURDIR}/../../../../variables/gbp/6node/master/service_function_forwarders.json
- Set Global Variable
- ... ${ENDPOINTS_ASYMM_DIR}
- ... ${CURDIR}/../../../../variables/gbp/6node/demo-asymmetric-chain/master/
- Set Global Variable
- ... ${ENDPOINTS_SYMM_DIR}
- ... ${CURDIR}/../../../../variables/gbp/6node/demo-symmetric-chain/master/
+++ /dev/null
-*** Settings ***
-Documentation Setup/teardown for GBPSFC 6-node topology
-
-Library SSHLibrary
-Library RequestsLibrary
-Resource ../../../../libraries/Utils.robot
-Resource ../../../../libraries/GBP/ConnUtils.robot
-Resource Variables.robot
-Variables ../../../../variables/Variables.py
-
-Suite Setup Setup Everything
-Suite Teardown Teardown Everything
-
-
-*** Variables ***
-${timeout} 10s
-
-
-*** Keywords ***
-Setup Everything
- [Documentation] Initial setup of remote VM. Copying of scripts and installation python packages to virtual env if missing.
- Create Session session http://${ODL}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS}
- Wait Until Keyword Succeeds
- ... 10x
- ... 30 s
- ... Get Data From URI
- ... session
- ... ${OF_OVERLAY_CONFIG_PATH}
- ... headers=${headers}
- Delete All Sessions
- FOR ${GBPSFC} IN @{GBPSFCs}
- ConnUtils.Connect and Login ${GBPSFC} timeout=${timeout}
- # TODO if something extra needs to be installed, please do it in virt-env
- ${stderr} SSHLibrary.Execute Command
- ... virtualenv --system-site-packages ${VE_DIR}
- ... return_stdout=False
- ... return_stderr=True
- ... return_rc=False
- Should Be Empty ${stderr}
- SSHLibrary.Put File
- ... ${CURDIR}/../../common_scripts/*
- ... ${VM_HOME_FOLDER}${/}${VM_SCRIPTS_FOLDER}/
- ... mode=0755
- ${stdout} ${stderr} ${rc} ConnUtils.Execute in VE
- ... pip freeze | grep ipaddr -q || pip install ipaddr
- ... timeout=${timeout}
- Should Be Equal As Numbers ${rc} 0
- SSHLibrary.Close Connection
- END
- Set ODL Variables
-
-Teardown Everything
- [Documentation] Clearing remote VM - removing copied scripts.
- Log stop_suite_in_6_node
- FOR ${GBPSFC} IN @{GBPSFCs}
- ConnUtils.Connect and Login ${GBPSFC} timeout=${timeout}
- SSHLibrary.Execute Command sudo rm -rf ${VM_HOME_FOLDER}${/}${VM_SCRIPTS_FOLDER}
- SSHLibrary.Close Connection
- END
+++ /dev/null
-*** Settings ***
-Resource ../Variables.robot
-Resource ../GBPSFC_6node.robot
-
-
-*** Test Cases ***
-Initialize Nodes
- Setup Nodes ${GBPSFCs} ${CURDIR}/init_scripts
+++ /dev/null
-*** Settings ***
-Documentation Waiting for manager and switch connections.
-
-Library SSHLibrary
-Resource ../../../../../libraries/GBP/ConnUtils.robot
-Resource ../../../../../libraries/GBP/OpenFlowUtils.robot
-Resource ../Variables.robot
-Resource ../Connections.robot
-
-Suite Setup Start Connections
-Suite Teardown Close Connections
-
-
-*** Test Cases ***
-Wait For Manager Connected on GBPSFC2
- Switch Connection GPSFC2_CONNECTION
- Wait Until Keyword Succeeds 2 min 3s Manager is Connected
-
-Wait For Manager Connected on GBPSFC4
- Switch Connection GPSFC4_CONNECTION
- Wait Until Keyword Succeeds 2 min 3s Manager is Connected
+++ /dev/null
-*** Settings ***
-Documentation Test suite for setting up infrastructure for demo-asymmetric-chain
-
-Library RequestsLibrary
-Library OperatingSystem
-Variables ../../../../../variables/Variables.py
-Resource ../../../../../libraries/SSHKeywords.robot
-Resource ../Variables.robot
-Resource ../../../../../libraries/GBP/OpenFlowUtils.robot
-
-Suite Setup Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS_YANG_JSON}
-Suite Teardown Delete All Sessions
-
-
-*** Test Cases ***
-Put Service Functions
- [Documentation] Register Service Functions to ODL
- ${json_to_edit} OperatingSystem.Get File ${SF_FILE}
- ${edited_json} Replace String ${json_to_edit} _SF1 ${GBPSFC3}
- ${edited_json} Replace String ${edited_json} _SF2 ${GBPSFC5}
- Add Elements To URI And Verify ${SF_PATH} ${edited_json} ${HEADERS_YANG_JSON}
-
-Put Service Function Forwarders
- [Documentation] Register Service Function Forwarders to ODL
- ${json_to_edit} OperatingSystem.Get File ${SFF_FILE}
- ${edited_json} Replace String ${json_to_edit} _SFF1 ${GBPSFC2}
- ${edited_json} Replace String ${edited_json} _SFF2 ${GBPSFC4}
- Add Elements To URI And Verify ${SFF_PATH} ${edited_json} ${HEADERS_YANG_JSON}
-
-Wait For Manager and Switch Connected on GBPSFC2
- [Documentation] Making sure that manager is connected for further processing.
- SSHLibrary.Open Connection ${GBPSFC2}
- SSHKeywords.Flexible Mininet Login
- Wait Until Keyword Succeeds 2min 3s Manager and Switch Connected sw_name=sw2
- SSHLibrary.Close Connection
-
-Wait For Manager and Switch Connected on GBPSFC4
- [Documentation] Making sure that manager is connected for further processing.
- SSHLibrary.Open Connection ${GBPSFC4}
- SSHKeywords.Flexible Mininet Login
- Wait Until Keyword Succeeds 2min 3s Manager and Switch Connected sw_name=sw4
- SSHLibrary.Close Connection
-
-Put Service Function Chains
- [Documentation] Register Service Function Chains to ODL
- Add Elements To URI From File And Verify ${SFC_PATH} ${SFC_ASYMM_FILE} ${HEADERS_YANG_JSON}
-
-Put Service Function Paths
- [Documentation] Register Service Function Paths to ODL
- Add Elements To URI From File And Verify ${SFP_PATH} ${SFP_ASYMM_FILE} ${HEADERS_YANG_JSON}
-
-Put Tunnels
- [Documentation] Send tunnel augmentation to ODL
- ${json_to_edit} OperatingSystem.Get File ${TUNNELS_FILE}
- ${edited_json} Replace String ${json_to_edit} _CLASSIFIER1 ${GBPSFC1}
- ${edited_json} Replace String ${edited_json} _CLASSIFIER2 ${GBPSFC6}
- Add Elements To URI And Verify ${TUNNELS_PATH} ${edited_json} ${HEADERS_YANG_JSON}
-
-Put Tenant
- [Documentation] Send Tenant Data to ODL
- Add Elements To URI From File And Verify ${TENANT_PATH} ${TENANT_ASYMM_FILE} ${HEADERS_YANG_JSON}
-
-Register Endpoints
- [Documentation] Endpoints registration
- @{endpoint_files} OperatingSystem.List Files In Directory ${ENDPOINTS_ASYMM_DIR} vethl*.*json absolute
- FOR ${endpoint_file} IN @{endpoint_files}
- Post Elements To URI From File ${ENDPOINT_REG_PATH} ${endpoint_file} ${HEADERS_YANG_JSON}
- END
- ${resp} RequestsLibrary.Get Request session ${ENDPOINTS_OPER_PATH}
- Log ${resp.content}
+++ /dev/null
-*** Settings ***
-Documentation Documentation Waiting for flows to appear on switches.
-
-Library SSHLibrary
-Resource ../../../../../libraries/Utils.robot
-Resource ../../../../../libraries/GBP/ConnUtils.robot
-Resource ../../../../../libraries/GBP/DockerUtils.robot
-Resource ../../../../../libraries/GBP/OpenFlowUtils.robot
-Variables ../../../../../variables/Variables.py
-Resource ../Variables.robot
-Resource ../Connections.robot
-
-Suite Setup Start Connections
-Suite Teardown Close Connections
-
-
-*** Test Cases ***
-Wait For Flows on GBPSFC1
- [Documentation] Waiting for flows to appear on OVS switch.
- Switch Connection GPSFC1_CONNECTION
- Wait For Flows On Switch ${GBPSFC1} sw1
-
-Wait For Flows on GBPSFC2
- [Documentation] Waiting for flows to appear on OVS switch.
- Switch Connection GPSFC2_CONNECTION
- Wait For Flows On Switch ${GBPSFC2} sw2
-
-Wait For Flows on GBPSFC3
- [Documentation] Waiting for flows to appear on OVS switch.
- Switch Connection GPSFC3_CONNECTION
- Wait For Flows On Switch ${GBPSFC3} sw3
-
-Wait For Flows on GBPSFC4
- [Documentation] Waiting for flows to appear on OVS switch.
- Switch Connection GPSFC4_CONNECTION
- Wait For Flows On Switch ${GBPSFC4} sw4
-
-Wait For Flows on GBPSFC5
- [Documentation] Waiting for flows to appear on OVS switch.
- Switch Connection GPSFC5_CONNECTION
- Wait For Flows On Switch ${GBPSFC5} sw5
-
-Wait For Flows on GBPSFC6
- [Documentation] Waiting for flows to appear on OVS switch.
- Switch Connection GPSFC6_CONNECTION
- Wait For Flows On Switch ${GBPSFC6} sw6
+++ /dev/null
-*** Settings ***
-Documentation Deep icmp traffic inspection.
-... Nodes are located on the same VM in different subnets and are members of the same EPG.
-
-Library SSHLibrary
-Resource ../../../../../libraries/GBP/OpenFlowUtils.robot
-Resource ../Variables.robot
-Resource ../Connections.robot
-
-Suite Setup Start Connections
-Suite Teardown Close Connections
-
-
-*** Test Cases ***
-Ping Once from h35_2 to h36_2
- [Documentation] Test icmp request.
- Set Test Variables
- ... client_name=h35_2
- ... client_ip=10.0.35.2
- ... server_name=h36_2
- ... server_ip=10.0.36.2
- ... ether_type=0x0800
- ... proto=1
- Switch Connection GPSFC1_CONNECTION
- Ping from Docker ${CLIENT_NAME} ${SERVER_IP}
-
-Start Endless Ping from h35_2 to h36_2
- [Documentation] Starting of endless pinging for traffic inspection.
- Start Endless Ping from Docker ${CLIENT_NAME} ${SERVER_IP}
-
-Find ICMP Req from h35_2 to h36_2 on GBPSFC6
- [Documentation] Inspecting icmp req on GBPSFC1.
- Switch Connection GPSFC1_CONNECTION
- ${flow} Inspect Classifier Outbound
- ... in_port=4
- ... out_port=6
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP}
- ... proto=${PROTO}
-
-Find ICMP Resp from h36_2 to h35_2 on GBPSFC6
- [Documentation] Inspecting icmp resp on GBPSFC1.
- Switch Connection GPSFC1_CONNECTION
- ${flow} Inspect Classifier Outbound
- ... in_port=6
- ... out_port=4
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${SERVER_IP}
- ... inner_dst_ip=${CLIENT_IP}
- ... proto=${PROTO}
-
-Stop Endless Ping from h35_2 to h36_2
- [Documentation] Stoping of endless pinging after traffic inspection finishes.
- Switch Connection GPSFC1_CONNECTION
- Stop Endless Ping from Docker to Address ${CLIENT_NAME} ${SERVER_IP}
+++ /dev/null
-*** Settings ***
-Documentation Deep icmp traffic inspection.
-... Nodes are located on the same VM in the same subnet and are members of the same EPG.
-
-Library SSHLibrary
-Resource ../../../../../libraries/GBP/OpenFlowUtils.robot
-Resource ../Variables.robot
-Resource ../Connections.robot
-
-Suite Setup Start Connections
-Suite Teardown Close Connections
-
-
-*** Test Cases ***
-Ping Once from h35_2 to h35_3
- [Documentation] Test icmp request.
- Set Test Variables
- ... client_name=h35_2
- ... client_ip=10.0.35.2
- ... server_name=h35_3
- ... server_ip=10.0.35.3
- ... ether_type=0x0800
- ... proto=1
- Switch Connection GPSFC1_CONNECTION
- Ping from Docker ${CLIENT_NAME} ${SERVER_IP}
-
-Start Endless Ping from h35_2 to h35_3
- [Documentation] Starting of endless pinging for traffic inspection.
- Start Endless Ping from Docker ${CLIENT_NAME} ${SERVER_IP}
-
-Find ICMP Req from h35_2 to h35_3 on GBPSFC6
- [Documentation] Inspecting icmp req on GBPSFC1.
- Switch Connection GPSFC1_CONNECTION
- ${flow} Inspect Classifier Outbound
- ... in_port=4
- ... out_port=5
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP}
- ... proto=${PROTO}
-
-Find ICMP Resp from h35_3 to h35_2 on GBPSFC6
- [Documentation] Inspecting icmp resp on GBPSFC1.
- Switch Connection GPSFC1_CONNECTION
- ${flow} Inspect Classifier Outbound
- ... in_port=5
- ... out_port=4
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${SERVER_IP}
- ... inner_dst_ip=${CLIENT_IP}
- ... proto=${PROTO}
-
-Stop Endless Ping from h35_2 to h35_3
- [Documentation] Stoping of endless pinging after traffic inspection finishes.
- Switch Connection GPSFC1_CONNECTION
- Stop Endless Ping from Docker to Address ${CLIENT_NAME} ${SERVER_IP}
+++ /dev/null
-*** Settings ***
-Documentation Deep icmp traffic inspection.
-... Nodes are located on the same VM, in different subnets and are members of the same EPG.
-
-Library SSHLibrary
-Resource ../../../../../libraries/GBP/OpenFlowUtils.robot
-Resource ../Variables.robot
-Resource ../Connections.robot
-
-Suite Setup Start Connections
-Suite Teardown Close Connections
-
-
-*** Test Cases ***
-Ping from h36_4 to h35_4
- [Documentation] Test icmp request.
- Set Test Variables
- ... client_name=h36_4
- ... client_ip=10.0.36.4
- ... server_name=h35_4
- ... server_ip=10.0.35.4
- ... ether_type=0x0800
- ... proto=1
- Switch Connection GPSFC6_CONNECTION
- Ping from Docker ${CLIENT_NAME} ${SERVER_IP}
-
-Start Endless Ping from h36_4 to h35_4
- [Documentation] Starting of endless pinging for traffic inspection.
- Start Endless Ping from Docker ${CLIENT_NAME} ${SERVER_IP}
-
-Find ICMP Req from h36_4 to h35_4 on GBPSFC6
- [Documentation] Inspecting icmp req on GBPSFC6.
- Switch Connection GPSFC6_CONNECTION
- ${flow} Inspect Classifier Outbound
- ... in_port=6
- ... out_port=4
- ... eth_type=0x0800
- ... inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP}
- ... proto=${PROTO}
-
-Find ICMP Resp from h35_4 to h36_4 on GBPSFC6
- [Documentation] Inspecting icmp resp on GBPSFC6.
- Switch Connection GPSFC6_CONNECTION
- ${flow} Inspect Classifier Outbound
- ... in_port=4
- ... out_port=6
- ... eth_type=0x0800
- ... inner_src_ip=${SERVER_IP}
- ... inner_dst_ip=${CLIENT_IP}
- ... proto=${PROTO}
-
-Stop Endless Ping from h36_4 to h35_4
- [Documentation] Stoping of endless pinging after traffic inspection finishes.
- Switch Connection GPSFC6_CONNECTION
- Stop Endless Ping from Docker to Address ${CLIENT_NAME} ${SERVER_IP}
+++ /dev/null
-*** Settings ***
-Documentation Deep icmp traffic inspection.
-... Nodes are located on different VMs in different subnets and are members of different EPGs.
-
-Library SSHLibrary
-Resource ../../../../../libraries/GBP/OpenFlowUtils.robot
-Resource ../Variables.robot
-Resource ../Connections.robot
-
-Suite Setup Start Connections
-Suite Teardown Close Connections
-
-
-*** Test Cases ***
-Ping from h36_5 to h35_2
- [Documentation] Test icmp request.
- Set Test Variables
- ... client_name=h36_5
- ... client_ip=10.0.36.5
- ... server_name=h35_2
- ... server_ip=10.0.35.2
- ... ether_type=0x0800
- ... proto=1
- ... vxlan_port=3
- Switch Connection GPSFC6_CONNECTION
- Ping from Docker ${CLIENT_NAME} ${SERVER_IP}
-
-Start Endless Ping from h36_5 to h35_2
- [Documentation] Starting of endless pinging for traffic inspection.
- Start Endless Ping from Docker ${CLIENT_NAME} ${SERVER_IP}
-
-Find ICMP Req from h36_5 to h35_2 on GBPSFC6
- [Documentation] Inspecting icmp req on GBPSFC6.
- Switch Connection GPSFC6_CONNECTION
- ${flow} Inspect Classifier Outbound
- ... in_port=7
- ... out_port=${VXLAN_PORT}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP}
- ... next_hop_ip=${GBPSFC1}
- ... proto=${PROTO}
-
-Find ICMP Req from h36_5 to h35_2 on GBPSFC1
- [Documentation] Inspecting icmp req on GBPSFC1.
- Switch Connection GPSFC1_CONNECTION
- Inspect Classifier Inbound
- ... in_port=${VXLAN_PORT}
- ... out_port=4
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP}
- ... outer_src_ip=${GBPSFC6}
- ... outer_dst_ip=${GBPSFC1}
- ... proto=${PROTO}
-
-Find ICMP Resp from h35_2 to h36_5 on GBPSFC1
- [Documentation] Inspecting icmp resp on GBPSFC1.
- Switch Connection GPSFC1_CONNECTION
- ${flow} Inspect Classifier Outbound
- ... in_port=4
- ... out_port=${VXLAN_PORT}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${SERVER_IP}
- ... inner_dst_ip=${CLIENT_IP}
- ... next_hop_ip=${GBPSFC6}
- ... proto=${PROTO}
-
-Find ICMP Resp from h35_2 to h36_5 on GBPSFC6
- [Documentation] Inspecting icmp resp on GBPSFC6.
- Switch Connection GPSFC6_CONNECTION
- Inspect Classifier Inbound
- ... in_port=${VXLAN_PORT}
- ... out_port=7
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${SERVER_IP}
- ... inner_dst_ip=${CLIENT_IP}
- ... outer_src_ip=${GBPSFC1}
- ... outer_dst_ip=${GBPSFC6}
- ... proto=${PROTO}
-
-Stop Endless Ping from h36_5 to h35_2
- [Documentation] Stoping of endless pinging after traffic inspection finishes.
- Switch Connection GPSFC6_CONNECTION
- Stop Endless Ping from Docker to Address ${CLIENT_NAME} ${SERVER_IP}
+++ /dev/null
-*** Settings ***
-Documentation Deep inspection of HTTP traffic on asymmetric chain.
-... Nodes are located on the same VM.
-
-Library SSHLibrary
-Resource ../../../../../libraries/GBP/OpenFlowUtils.robot
-Resource ../../../../../libraries/GBP/ConnUtils.robot
-Resource ../Variables.robot
-Resource ../Connections.robot
-
-Suite Setup Start Connections
-Suite Teardown Close Connections
-
-
-*** Test Cases ***
-Start HTTP on h36_2 on Port 80
- [Documentation] Starting HTTP service on docker container.
- Set Test Variables
- ... client_name=h35_2
- ... client_ip=10.0.35.2
- ... server_name=h36_2
- ... server_ip=10.0.36.2
- ... service_port=80
- ... ether_type=0x0800
- ... proto=6
- ... vxlan_gpe_port=2
- Switch Connection GPSFC1_CONNECTION
- Start HTTP Service on Docker ${SERVER_NAME} ${SERVICE_PORT}
-
-Curl h36_2 from h35_2
- [Documentation] Test HTTP request from a docker container to serving docker container.
- Curl from Docker ${CLIENT_NAME} ${SERVER_IP} ${SERVICE_PORT}
-
-Start Endless Curl on h35_2 on port 80
- [Documentation] Starting endless HTTP session for traffic inspection.
- Start Endless Curl from Docker ${CLIENT_NAME} ${SERVER_IP} ${SERVICE_PORT} sleep=1
-
-On GBPSFC1 Send HTTP req h35_2-h36_2 to GBPSFC2
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC1_CONNECTION
- ${flow} Inspect Classifier Outbound
- ... in_port=4
- ... out_port=${VXLAN_GPE_PORT}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP}
- ... next_hop_ip=${GBPSFC2}
- ... nsi=255
- ... proto=${PROTO}
- ... dst_port=${SERVICE_PORT}
- ${nsp_35_2-nsp_36_2} GET NSP Value From Flow ${flow}
- Set Global Variable ${NSP} ${nsp_35_2-nsp_36_2}
-
-On GBPSFC2 Send HTTP req h35_2-h36_2 to GBPSFC3
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC2_CONNECTION
- Inspect Service Function Forwarder
- ... in_port=${VXLAN_GPE_PORT}
- ... out_port=${VXLAN_GPE_PORT}
- ... outer_src_ip=${GBPSFC1}
- ... outer_dst_ip=${GBPSFC2}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP}
- ... next_hop_ip=${GBPSFC3}
- ... nsp=${NSP}
- ... nsi=255
- ... proto=${PROTO}
-
-On GBPSFC3 Send HTTP req h35_2-h36_2 to GBPSFC2
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC3_CONNECTION
- Inspect Service Function
- ... in_port=${VXLAN_GPE_PORT}
- ... out_port=${VXLAN_GPE_PORT}
- ... outer_src_ip=${GBPSFC2}
- ... outer_dst_ip=${GBPSFC3}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP}
- ... next_hop_ip=${GBPSFC2}
- ... nsp=${NSP}
- ... received_nsi=255
-
-On GBPSFC2 Send HTTP req h35_2-h36_2 to GBPSFC4
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC2_CONNECTION
- Inspect Service Function Forwarder
- ... in_port=${VXLAN_GPE_PORT}
- ... out_port=${VXLAN_GPE_PORT}
- ... outer_src_ip=${GBPSFC3}
- ... outer_dst_ip=${GBPSFC2}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP}
- ... next_hop_ip=${GBPSFC4}
- ... nsp=${NSP}
- ... nsi=254
- ... proto=${PROTO}
-
-On GBPSFC4 Send HTTP req h35_2-h36_2 to GBPSFC5
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC4_CONNECTION
- Inspect Service Function Forwarder
- ... in_port=${VXLAN_GPE_PORT}
- ... out_port=${VXLAN_GPE_PORT}
- ... outer_src_ip=${GBPSFC2}
- ... outer_dst_ip=${GBPSFC4}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP}
- ... next_hop_ip=${GBPSFC5}
- ... nsp=${NSP}
- ... nsi=254
- ... proto=${PROTO}
-
-On GBPSFC5 Send HTTP req h35_2-h36_2 to GBPSFC4
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC5_CONNECTION
- Inspect Service Function
- ... in_port=${VXLAN_GPE_PORT}
- ... out_port=${VXLAN_GPE_PORT}
- ... outer_src_ip=${GBPSFC4}
- ... outer_dst_ip=${GBPSFC5}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP}
- ... next_hop_ip=${GBPSFC4}
- ... nsp=${NSP}
- ... received_nsi=254
-
-On GBPSFC4 Send HTTP req h35_2-h36_2 to GBPSFC1
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC4_CONNECTION
- Inspect Service Function Forwarder
- ... in_port=${VXLAN_GPE_PORT}
- ... out_port=${VXLAN_GPE_PORT}
- ... outer_src_ip=${GBPSFC5}
- ... outer_dst_ip=${GBPSFC4}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP}
- ... next_hop_ip=${GBPSFC1}
- ... nsp=${NSP}
- ... nsi=253
- ... proto=${PROTO}
-
-On GBPSFC1 Send HTTP req h35_2-h36_2 to h36_2
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC1_CONNECTION
- Inspect Classifier Inbound
- ... in_port=${VXLAN_GPE_PORT}
- ... out_port=6
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP}
- ... outer_src_ip=${GBPSFC4}
- ... outer_dst_ip=${GBPSFC1}
- ... nsp=${NSP}
- ... nsi=253
- ... proto=${PROTO}
-
-On GBPSFC1 Send HTTP resp h36_2-h35_2 to h35_2
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC1_CONNECTION
- ${flow} Inspect Classifier Outbound
- ... in_port=6
- ... out_port=4
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${SERVER_IP}
- ... inner_dst_ip=${CLIENT_IP}
- ... proto=${PROTO}
- ... src_port=${SERVICE_PORT}
-
-Stop Endless Curl on h36_2 on port 80
- [Documentation] Stopping endless HTTP session after traffic inspection finishes.
- Stop Endless Curl from Docker ${CLIENT_NAME}
-
-Stop HTTP on h36_2 on Port 80
- [Documentation] Stopping HTTP service on the docker container.
- Stop HTTP Service on Docker ${SERVER_NAME}
+++ /dev/null
-*** Settings ***
-Documentation Deep inspection of HTTP traffic on asymmetric chain.
-... Nodes are located on different VMs.
-
-Library SSHLibrary
-Resource ../../../../../libraries/GBP/OpenFlowUtils.robot
-Resource ../../../../../libraries/GBP/ConnUtils.robot
-Resource ../Variables.robot
-Resource ../Connections.robot
-
-Suite Setup Start Connections
-Suite Teardown Close Connections
-
-
-*** Test Cases ***
-Start HTTP on h36_4 on Port 80
- [Documentation] Starting HTTP service on docker container.
- Set Test Variables
- ... client_name=h35_3
- ... client_ip=10.0.35.3
- ... server_name=h36_4
- ... server_ip=10.0.36.4
- ... service_port=80
- ... ether_type=0x0800
- ... proto=6
- ... vxlan_gpe_port=2
- ... vxlan_port=3
- Switch Connection GPSFC6_CONNECTION
- Start HTTP Service on Docker ${SERVER_NAME} ${SERVICE_PORT}
-
-Curl h36_2 from h35_3
- [Documentation] Test HTTP request from a docker container to serving docker container.
- Switch Connection GPSFC1_CONNECTION
- Curl from Docker ${CLIENT_NAME} ${SERVER_IP} service_port=${SERVICE_PORT}
-
-Start Endless Curl on h35_3 on port 80
- [Documentation] Starting endless HTTP session for traffic inspection.
- Start Endless Curl from Docker ${CLIENT_NAME} ${SERVER_IP} ${SERVICE_PORT} sleep=1
-
-On GBPSFC1 Send HTTP req h35_3-h36_4 to GBPSFC2
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC1_CONNECTION
- ${flow} Inspect Classifier Outbound
- ... in_port=5
- ... out_port=${VXLAN_GPE_PORT}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP}
- ... next_hop_ip=${GBPSFC2}
- ... nsi=255
- ... proto=${PROTO}
- ... dst_port=${SERVICE_PORT}
- ${nsp_35_3-nsp_36_4} GET NSP Value From Flow ${flow}
- Set Global Variable ${NSP} ${nsp_35_3-nsp_36_4}
-
-On GBPSFC2 Send HTTP req h35_3-h36_4 to GBPSFC3
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC2_CONNECTION
- Inspect Service Function Forwarder
- ... in_port=${VXLAN_GPE_PORT}
- ... out_port=${VXLAN_GPE_PORT}
- ... outer_src_ip=${GBPSFC1}
- ... outer_dst_ip=${GBPSFC2}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP}
- ... next_hop_ip=${GBPSFC3}
- ... nsp=${NSP}
- ... nsi=255
- ... proto=${PROTO}
-
-On GBPSFC3 Send HTTP req h35_3-h36_4 to GBPSFC2
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC3_CONNECTION
- Inspect Service Function
- ... in_port=${VXLAN_GPE_PORT}
- ... out_port=${VXLAN_GPE_PORT}
- ... outer_src_ip=${GBPSFC2}
- ... outer_dst_ip=${GBPSFC3}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP}
- ... next_hop_ip=${GBPSFC2}
- ... nsp=${NSP}
- ... received_nsi=255
-
-On GBPSFC2 Send HTTP req h35_3-h36_4 to GBPSFC4
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC2_CONNECTION
- Inspect Service Function Forwarder
- ... in_port=${VXLAN_GPE_PORT}
- ... out_port=${VXLAN_GPE_PORT}
- ... outer_src_ip=${GBPSFC3}
- ... outer_dst_ip=${GBPSFC2}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP}
- ... next_hop_ip=${GBPSFC4}
- ... nsp=${NSP}
- ... nsi=254
- ... proto=${PROTO}
-
-On GBPSFC4 Send HTTP req h35_3-h36_4 to GBPSFC5
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC4_CONNECTION
- Inspect Service Function Forwarder
- ... in_port=${VXLAN_GPE_PORT}
- ... out_port=${VXLAN_GPE_PORT}
- ... outer_src_ip=${GBPSFC2}
- ... outer_dst_ip=${GBPSFC4}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP}
- ... next_hop_ip=${GBPSFC5}
- ... nsp=${NSP}
- ... nsi=254
- ... proto=${PROTO}
-
-On GBPSFC5 Send HTTP req h35_3-h36_4 to GBPSFC4
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC5_CONNECTION
- Inspect Service Function
- ... in_port=${VXLAN_GPE_PORT}
- ... out_port=${VXLAN_GPE_PORT}
- ... outer_src_ip=${GBPSFC4}
- ... outer_dst_ip=${GBPSFC5}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP}
- ... next_hop_ip=${GBPSFC4}
- ... nsp=${NSP}
- ... received_nsi=254
-
-On GBPSFC4 Send HTTP req h35_3-h36_4 to GBPSFC6
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC4_CONNECTION
- Inspect Service Function Forwarder
- ... in_port=${VXLAN_GPE_PORT}
- ... out_port=${VXLAN_GPE_PORT}
- ... outer_src_ip=${GBPSFC5}
- ... outer_dst_ip=${GBPSFC4}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP}
- ... next_hop_ip=${GBPSFC6}
- ... nsp=${NSP}
- ... nsi=253
- ... proto=${PROTO}
-
-On GBPSFC6 Send HTTP req h35_3-h36_4 to h36_4
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC6_CONNECTION
- Inspect Classifier Inbound
- ... in_port=${VXLAN_GPE_PORT}
- ... out_port=6
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP}
- ... outer_src_ip=${GBPSFC4}
- ... outer_dst_ip=${GBPSFC6}
- ... nsp=${NSP}
- ... nsi=253
- ... proto=${PROTO}
-
-On GBPSFC6 Send HTTP resp h36_4-h35_3 to GBPSFC1
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC6_CONNECTION
- ${flow} Inspect Classifier Outbound
- ... in_port=6
- ... out_port=${VXLAN_PORT}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${SERVER_IP}
- ... inner_dst_ip=${CLIENT_IP}
- ... next_hop_ip=${GBPSFC1}
- ... proto=${PROTO}
- ... src_port=${SERVICE_PORT}
-
-On GBPSFC1 Send HTTP resp h36_4-h35_3 to h35_3
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC1_CONNECTION
- Inspect Classifier Inbound
- ... in_port=${VXLAN_PORT}
- ... out_port=5
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${SERVER_IP}
- ... inner_dst_ip=${CLIENT_IP}
- ... outer_src_ip=${GBPSFC6}
- ... outer_dst_ip=${GBPSFC1}
- ... proto=${PROTO}
-
-Stop Endless Curl on h36_2 on port 80
- [Documentation] Stopping endless HTTP session after traffic inspection finishes.
- Switch Connection GPSFC1_CONNECTION
- Stop Endless Curl from Docker ${CLIENT_NAME}
-
-Stop HTTP on h36_2 on Port 80
- [Documentation] Stopping HTTP service on the docker container.
- Switch Connection GPSFC6_CONNECTION
- Stop HTTP Service on Docker ${SERVER_NAME}
+++ /dev/null
-*** Settings ***
-Documentation Deep inspection of HTTP traffic on asymmetric chain.
-... Nodes are located on different VMs.
-
-Library SSHLibrary
-Resource ../../../../../libraries/GBP/OpenFlowUtils.robot
-Resource ../../../../../libraries/GBP/ConnUtils.robot
-Resource ../Variables.robot
-Resource ../Connections.robot
-
-
-*** Test Cases ***
-Show GBPSFC1 Status
- [Documentation] Shows flows and configuration of a switch for easier debugging.
- Start Connections
- Switch Connection GPSFC1_CONNECTION
- Show Switch Status sw1
-
-Show GBPSFC2 Status
- [Documentation] Shows flows and configuration of a switch for easier debugging.
- Switch Connection GPSFC2_CONNECTION
- Show Switch Status sw2
-
-Show GBPSFC3 Status
- [Documentation] Shows flows and configuration of a switch for easier debugging.
- Switch Connection GPSFC3_CONNECTION
- Show Switch Status sw3
-
-Show GBPSFC4 Status
- [Documentation] Shows flows and configuration of a switch for easier debugging.
- Switch Connection GPSFC4_CONNECTION
- Show Switch Status sw4
-
-Show GBPSFC5 Status
- [Documentation] Shows flows and configuration of a switch for easier debugging.
- Switch Connection GPSFC5_CONNECTION
- Show Switch Status sw5
-
-Show GBPSFC6 Status
- [Documentation] Shows flows and configuration of a switch for easier debugging.
- Switch Connection GPSFC6_CONNECTION
- Show Switch Status sw6
- Close Connections
-
-Read Tenants Confing From ODL
- [Documentation] Logs ODL data store.
- Create Session
- ... session
- ... http://${ODL_SYSTEM_IP}:${RESTCONFPORT}
- ... auth=${AUTH}
- ... headers=${HEADERS_YANG_JSON}
- ${resp} RequestsLibrary.Get Request session ${GBP_TENANTS_API}
- Log ${resp.content}
-
-Read Tenants Operational From ODL
- ${resp} RequestsLibrary.Get Request session ${OPERATIONAL_GBP_TENANTS_API}
- Log ${resp.content}
-
-Read Nodes Config From ODL
- ${resp} RequestsLibrary.Get Request session ${CONFIG_NODES_API}
- Log ${resp.content}
-
-Read Nodes Operational From ODL
- ${resp} RequestsLibrary.Get Request session ${OPERATIONAL_NODES_API}
- Log ${resp.content}
-
-Read Topology Config From ODL
- ${resp} RequestsLibrary.Get Request session ${CONFIG_TOPO_API}
- Log ${resp.content}
-
-Read Topology Operational From ODL
- ${resp} RequestsLibrary.Get Request session ${OPERATIONAL_TOPO_API}
- Log ${resp.content}
-
-Read Endpoints From ODL
- ${resp} RequestsLibrary.Get Request session ${GBP_ENDPOINTS_API}
- Log ${resp.content}
- Delete All Sessions
+++ /dev/null
-*** Settings ***
-Documentation Test suite for cleaning up / unregister infrastructure constructs like endpoints for demo-asymmetric-chain
-
-Library RequestsLibrary
-Library OperatingSystem
-Library Collections
-Library json
-Variables ../../../../../variables/Variables.py
-Resource ../../../../../libraries/Utils.robot
-Resource ../../../../../libraries/GBP/RestconfUtils.robot
-Resource ../Variables.robot
-
-Suite Setup Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS}
-Suite Teardown Delete All Sessions
-
-
-*** Test Cases ***
-Delete Service Function Paths
- [Documentation] Delete Service Function Paths from ODL
- [Tags] gbpsfctear
- Remove All Elements At URI And Verify ${SFP_PATH}
-
-Delete Service Function Chains
- [Documentation] Delete Service Function Chains from ODL
- [Tags] gbpsfctear
- Remove All Elements At URI And Verify ${SFC_PATH}
-
-Delete Service Functions
- [Documentation] Delete Service Function from ODL
- [Tags] gbpsfctear
- Remove All Elements At URI And Verify ${SF_PATH}
-
-Delete Service Function Forwarders
- [Documentation] Delete Service Function Forwarders from ODL
- [Tags] gbpsfctear
- Remove All Elements At URI And Verify ${SFF_PATH}
-
-Delete Tunnels
- [Documentation] Delete Tunnels from ODL
- [Tags] gbpsfctear
- Remove All Elements At URI And Verify ${TUNNELS_PATH}
-
-Delete Tenant
- [Documentation] Delete Tenant from ODL
- [Tags] gbpsfctear
- Remove All Elements At URI And Verify ${TENANT_PATH}
-
-Unregister Endpoints
- [Documentation] Unregister Endpoints Endpoints from ODL
- [Tags] gbpsfctear
- RestconfUtils.Unregister Endpoints
-
-Delete OVSDB Topology If Present
- [Documentation] Delete OVSDB topology from ODL
- [Tags] gbpsfctear
- ${resp} RequestsLibrary.Get Request session ${TOPOLOGY_PATH}
- IF ${resp.status_code} == 200
- Remove All Elements At URI And Verify ${TOPOLOGY_PATH}
- END
+++ /dev/null
-*** Settings ***
-Library SSHLibrary
-Resource ../../../../../libraries/Utils.robot
-Resource ../../../../../libraries/GBP/ConnUtils.robot
-Variables ../../../../../variables/Variables.py
-Resource ../Variables.robot
-Resource ../GBPSFC_6node.robot
-
-
-*** Variables ***
-${timeout} 10s
-
-
-*** Test Cases ***
-Teardown Suite
- Log Teardown suite in asymetric-chain
- FOR ${GBPSFC} IN @{GBPSFCs}
- GBPSFC_6node.Teardown Node ${GBPSFC} ${CURDIR} timeout=${timeout}
- END
+++ /dev/null
-# Config for switches, tunnelIP is the local IP address.
-switches = [
- {"name": "sw1", "type": "gbp", "dpid": "1"},
- {"name": "sw2", "type": "sff", "dpid": "2"},
- {"name": "sw3", "type": "sf", "dpid": "3"},
- {"name": "sw4", "type": "sff", "dpid": "4"},
- {"name": "sw5", "type": "sf", "dpid": "5"},
- {"name": "sw6", "type": "gbp", "dpid": "6"},
- {"name": "sw7", "type": "none", "dpid": "7"},
- {"name": "sw8", "type": "none", "dpid": "8"},
-]
-
-defaultContainerImage = "alagalah/odlpoc_ovs230"
-
-# Note that tenant name and endpointGroup name come from policy_config.py
-
-hosts = [
- {
- "name": "h35_2",
- "mac": "00:00:00:00:35:02",
- "ip": "10.0.35.2/24",
- "switch": "sw1",
- },
- {
- "name": "h35_3",
- "ip": "10.0.35.3/24",
- "mac": "00:00:00:00:35:03",
- "switch": "sw1",
- },
- {
- "name": "h35_4",
- "ip": "10.0.35.4/24",
- "mac": "00:00:00:00:35:04",
- "switch": "sw6",
- },
- {
- "name": "h35_5",
- "ip": "10.0.35.5/24",
- "mac": "00:00:00:00:35:05",
- "switch": "sw6",
- },
- {
- "name": "h36_2",
- "ip": "10.0.36.2/24",
- "mac": "00:00:00:00:36:02",
- "switch": "sw1",
- },
- {
- "name": "h36_3",
- "ip": "10.0.36.3/24",
- "mac": "00:00:00:00:36:03",
- "switch": "sw1",
- },
- {
- "name": "h36_4",
- "ip": "10.0.36.4/24",
- "mac": "00:00:00:00:36:04",
- "switch": "sw6",
- },
- {
- "name": "h36_5",
- "ip": "10.0.36.5/24",
- "mac": "00:00:00:00:36:05",
- "switch": "sw6",
- },
-]
+++ /dev/null
-#!/usr/bin/env bash
-
-set -e
-
-SFF_IP=$1
-SFF_HEX=$(printf '%02X' ${SFF_IP//./ })
-SFF_HEX=0x$SFF_HEX
-sw=$(sudo ovs-vsctl show | egrep -E 'Bridge.*sw' | awk '{print $2}' | sed -e 's/^"//' -e 's/"$//')
-
-if [ $sw = "sw3" ] || [ $sw = "sw5" ] ; then
- # delete NORMAL, if present
- sudo ovs-ofctl --strict del-flows $sw priority=0
- sudo ovs-ofctl add-flow $sw "priority=1000,nsi=255 actions=move:NXM_NX_NSH_C1[]->NXM_NX_NSH_C1[],move:NXM_NX_NSH_C2[]->NXM_NX_NSH_C2[],move:NXM_NX_TUN_ID[0..31]->NXM_NX_TUN_ID[0..31],load:$SFF_HEX->NXM_NX_TUN_IPV4_DST[],set_nsi:254,IN_PORT" -OOpenFlow13
- sudo ovs-ofctl add-flow $sw "priority=1000,nsi=254 actions=move:NXM_NX_NSH_C1[]->NXM_NX_NSH_C1[],move:NXM_NX_NSH_C2[]->NXM_NX_NSH_C2[],move:NXM_NX_TUN_ID[0..31]->NXM_NX_TUN_ID[0..31],load:$SFF_HEX->NXM_NX_TUN_IPV4_DST[],set_nsi:253,IN_PORT" -OOpenFlow13
-else
- echo "Invalid SF for this demo";
- exit
-fi
+++ /dev/null
-*** Settings ***
-Resource ../Variables.robot
-Resource ../GBPSFC_6node.robot
-
-
-*** Test Cases ***
-Initialize Nodes
- Setup Nodes ${GBPSFCs} ${CURDIR}/init_scripts
+++ /dev/null
-*** Settings ***
-Documentation Waiting for manager and switch connections.
-
-Library SSHLibrary
-Resource ../../../../../libraries/GBP/ConnUtils.robot
-Resource ../../../../../libraries/GBP/OpenFlowUtils.robot
-Resource ../Variables.robot
-Resource ../Connections.robot
-
-Suite Setup Start Connections
-Suite Teardown Close Connections
-
-
-*** Test Cases ***
-Wait For Manager Connected on GBPSFC2
- Switch Connection GPSFC2_CONNECTION
- Wait Until Keyword Succeeds 2 min 3s Manager is Connected
-
-Wait For Manager Connected on GBPSFC4
- Switch Connection GPSFC4_CONNECTION
- Wait Until Keyword Succeeds 4x 5s Manager is Connected
+++ /dev/null
-*** Settings ***
-Documentation Test suite for setting up infrastructure for demo-symmetric-chain
-
-Library RequestsLibrary
-Library OperatingSystem
-Variables ../../../../../variables/Variables.py
-Resource ../../../../../libraries/SSHKeywords.robot
-Resource ../Variables.robot
-Resource ../../../../../libraries/GBP/OpenFlowUtils.robot
-
-Suite Setup Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS}
-Suite Teardown Delete All Sessions
-
-
-*** Test Cases ***
-Put Service Functions
- [Documentation] Register Service Functions to ODL
- ${json_to_edit} OperatingSystem.Get File ${SF_FILE}
- ${edited_json} Replace String ${json_to_edit} _SF1 ${GBPSFC3}
- ${edited_json} Replace String ${edited_json} _SF2 ${GBPSFC5}
- Add Elements To URI And Verify ${SF_PATH} ${edited_json} ${HEADERS_YANG_JSON}
-
-Put Service Function Forwarders
- [Documentation] Register Service Function Forwarders to ODL
- ${json_to_edit} OperatingSystem.Get File ${SFF_FILE}
- ${edited_json} Replace String ${json_to_edit} _SFF1 ${GBPSFC2}
- ${edited_json} Replace String ${edited_json} _SFF2 ${GBPSFC4}
- Add Elements To URI And Verify ${SFF_PATH} ${edited_json} ${HEADERS_YANG_JSON}
-
-Wait For Manager and Switch Connected on GBPSFC2
- [Documentation] Making sure that manager is connected for further processing.
- SSHLibrary.Open Connection ${GBPSFC2}
- SSHKeywords.Flexible Mininet Login
- Wait Until Keyword Succeeds 2min 3s Manager and Switch Connected sw_name=sw2
- SSHLibrary.Close Connection
-
-Wait For Manager and Switch Connected on GBPSFC4
- [Documentation] Making sure that manager is connected for further processing.
- SSHLibrary.Open Connection ${GBPSFC4}
- SSHKeywords.Flexible Mininet Login
- Wait Until Keyword Succeeds 2min 3s Manager and Switch Connected sw_name=sw4
- SSHLibrary.Close Connection
-
-Put Service Function Chains
- [Documentation] Register Service Function Chains to ODL
- Add Elements To URI From File And Verify ${SFC_PATH} ${SFC_SYMM_FILE} ${HEADERS_YANG_JSON}
-
-Put Service Function Paths
- [Documentation] Register Service Function Paths to ODL
- Add Elements To URI From File And Verify ${SFP_PATH} ${SFP_SYMM_FILE} ${HEADERS_YANG_JSON}
-
-Put Tunnels
- [Documentation] Send tunnel augmentation to ODL
- ${json_to_edit} OperatingSystem.Get File ${TUNNELS_FILE}
- ${edited_json} Replace String ${json_to_edit} _CLASSIFIER1 ${GBPSFC1}
- ${edited_json} Replace String ${edited_json} _CLASSIFIER2 ${GBPSFC6}
- Add Elements To URI And Verify ${TUNNELS_PATH} ${edited_json} ${HEADERS_YANG_JSON}
-
-Put Tenant
- [Documentation] Send Tenant Data to ODL
- Add Elements To URI From File And Verify ${TENANT_PATH} ${TENANT_SYMM_FILE} ${HEADERS_YANG_JSON}
-
-Register Endpoints
- [Documentation] Endpoints registration
- @{endpoint_files} OperatingSystem.List Files In Directory ${ENDPOINTS_SYMM_DIR} vethl*.*json absolute
- FOR ${endpoint_file} IN @{endpoint_files}
- Post Elements To URI From File ${ENDPOINT_REG_PATH} ${endpoint_file} ${HEADERS_YANG_JSON}
- END
- ${resp} RequestsLibrary.Get Request session ${ENDPOINTS_OPER_PATH}
- Log ${resp.content}
+++ /dev/null
-*** Settings ***
-Documentation Documentation Waiting for flows to appear on switches.
-
-Library SSHLibrary
-Resource ../../../../../libraries/Utils.robot
-Resource ../../../../../libraries/GBP/ConnUtils.robot
-Resource ../../../../../libraries/GBP/DockerUtils.robot
-Resource ../../../../../libraries/GBP/OpenFlowUtils.robot
-Variables ../../../../../variables/Variables.py
-Resource ../Variables.robot
-Resource ../Connections.robot
-
-Suite Setup Start Connections
-Suite Teardown Close Connections
-
-
-*** Test Cases ***
-Wait For Flows on GBPSFC1
- [Documentation] Waiting for flows to appear on OVS switch.
- Switch Connection GPSFC1_CONNECTION
- Wait For Flows On Switch ${GBPSFC1} sw1
-
-Wait For Flows on GBPSFC2
- [Documentation] Waiting for flows to appear on OVS switch.
- Switch Connection GPSFC2_CONNECTION
- Wait For Flows On Switch ${GBPSFC2} sw2
-
-Wait For Flows on GBPSFC3
- [Documentation] Waiting for flows to appear on OVS switch.
- Switch Connection GPSFC3_CONNECTION
- Wait For Flows On Switch ${GBPSFC3} sw3
-
-Wait For Flows on GBPSFC4
- [Documentation] Waiting for flows to appear on OVS switch.
- Switch Connection GPSFC4_CONNECTION
- Wait For Flows On Switch ${GBPSFC4} sw4
-
-Wait For Flows on GBPSFC5
- [Documentation] Waiting for flows to appear on OVS switch.
- Switch Connection GPSFC5_CONNECTION
- Wait For Flows On Switch ${GBPSFC5} sw5
-
-Wait For Flows on GBPSFC6
- [Documentation] Waiting for flows to appear on OVS switch.
- Switch Connection GPSFC6_CONNECTION
- Wait For Flows On Switch ${GBPSFC6} sw6
+++ /dev/null
-*** Settings ***
-Documentation Deep icmp traffic inspection.
-... Nodes are located on the same VM in different subnets and are members of the same EPG.
-
-Library SSHLibrary
-Resource ../../../../../libraries/GBP/OpenFlowUtils.robot
-Resource ../Variables.robot
-Resource ../Connections.robot
-
-Suite Setup Start Connections
-Suite Teardown Close Connections
-
-
-*** Test Cases ***
-Ping Once from h35_2 to h36_2
- [Documentation] Test icmp request.
- Set Test Variables
- ... client_name=h35_2
- ... client_ip=10.0.35.2
- ... server_name=h36_2
- ... server_ip=10.0.36.2
- ... ether_type=0x0800
- ... proto=1
- Switch Connection GPSFC1_CONNECTION
- Ping from Docker ${CLIENT_NAME} ${SERVER_IP}
-
-Start Endless Ping from h35_2 to h36_2
- [Documentation] Starting of endless pinging for traffic inspection.
- Start Endless Ping from Docker ${CLIENT_NAME} ${SERVER_IP}
-
-Find ICMP Req from h35_2 to h36_2 on GBPSFC6
- [Documentation] Inspecting icmp req on GBPSFC1.
- Switch Connection GPSFC1_CONNECTION
- ${flow} Inspect Classifier Outbound
- ... in_port=4
- ... out_port=6
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP}
- ... proto=${PROTO}
-
-Find ICMP Resp from h36_2 to h35_2 on GBPSFC6
- [Documentation] Inspecting icmp resp on GBPSFC1.
- Switch Connection GPSFC1_CONNECTION
- ${flow} Inspect Classifier Outbound
- ... in_port=6
- ... out_port=4
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${SERVER_IP}
- ... inner_dst_ip=${CLIENT_IP}
- ... proto=${PROTO}
-
-Stop Endless Ping from h35_2 to h36_2
- [Documentation] Stoping of endless pinging after traffic inspection finishes.
- Switch Connection GPSFC1_CONNECTION
- Stop Endless Ping from Docker to Address ${CLIENT_NAME} ${SERVER_IP}
+++ /dev/null
-*** Settings ***
-Documentation Deep icmp traffic inspection.
-... Nodes are located on the same VM in the same subnet and are members of the same EPG.
-
-Library SSHLibrary
-Resource ../../../../../libraries/GBP/OpenFlowUtils.robot
-Resource ../Variables.robot
-Resource ../Connections.robot
-
-Suite Setup Start Connections
-Suite Teardown Close Connections
-
-
-*** Test Cases ***
-Ping Once from h35_2 to h35_3
- [Documentation] Test icmp request.
- Set Test Variables
- ... client_name=h35_2
- ... client_ip=10.0.35.2
- ... server_name=h35_3
- ... server_ip=10.0.35.3
- ... ether_type=0x0800
- ... proto=1
- Switch Connection GPSFC1_CONNECTION
- Ping from Docker ${CLIENT_NAME} ${SERVER_IP}
-
-Start Endless Ping from h35_2 to h35_3
- [Documentation] Starting of endless pinging for traffic inspection.
- Start Endless Ping from Docker ${CLIENT_NAME} ${SERVER_IP}
-
-Find ICMP Req from h35_2 to h35_3 on GBPSFC6
- [Documentation] Inspecting icmp req on GBPSFC1.
- Switch Connection GPSFC1_CONNECTION
- ${flow} Inspect Classifier Outbound
- ... in_port=4
- ... out_port=5
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP}
- ... proto=${PROTO}
-
-Find ICMP Resp from h35_3 to h35_2 on GBPSFC6
- [Documentation] Inspecting icmp resp on GBPSFC1.
- Switch Connection GPSFC1_CONNECTION
- ${flow} Inspect Classifier Outbound
- ... in_port=5
- ... out_port=4
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${SERVER_IP}
- ... inner_dst_ip=${CLIENT_IP}
- ... proto=${PROTO}
-
-Stop Endless Ping from h35_2 to h35_3
- [Documentation] Stoping of endless pinging after traffic inspection finishes.
- Switch Connection GPSFC1_CONNECTION
- Stop Endless Ping from Docker to Address ${CLIENT_NAME} ${SERVER_IP}
+++ /dev/null
-*** Settings ***
-Documentation Deep icmp traffic inspection.
-... Nodes are located on the same VM, in different subnets and are members of the same EPG.
-
-Library SSHLibrary
-Resource ../../../../../libraries/GBP/OpenFlowUtils.robot
-Resource ../Variables.robot
-Resource ../Connections.robot
-
-Suite Setup Start Connections
-Suite Teardown Close Connections
-
-
-*** Test Cases ***
-Ping from h36_4 to h35_4
- [Documentation] Test icmp request.
- Set Test Variables
- ... client_name=h36_4
- ... client_ip=10.0.36.4
- ... server_name=h35_4
- ... server_ip=10.0.35.4
- ... ether_type=0x0800
- ... proto=1
- Switch Connection GPSFC6_CONNECTION
- Ping from Docker ${CLIENT_NAME} ${SERVER_IP}
-
-Start Endless Ping from h36_4 to h35_4
- [Documentation] Starting of endless pinging for traffic inspection.
- Start Endless Ping from Docker ${CLIENT_NAME} ${SERVER_IP}
-
-Find ICMP Req from h36_4 to h35_4 on GBPSFC6
- [Documentation] Inspecting icmp req on GBPSFC6.
- Switch Connection GPSFC6_CONNECTION
- ${flow} Inspect Classifier Outbound
- ... in_port=6
- ... out_port=4
- ... eth_type=0x0800
- ... inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP}
- ... proto=${PROTO}
-
-Find ICMP Resp from h35_4 to h36_4 on GBPSFC6
- [Documentation] Inspecting icmp resp on GBPSFC6.
- Switch Connection GPSFC6_CONNECTION
- ${flow} Inspect Classifier Outbound
- ... in_port=4
- ... out_port=6
- ... eth_type=0x0800
- ... inner_src_ip=${SERVER_IP}
- ... inner_dst_ip=${CLIENT_IP}
- ... proto=${PROTO}
-
-Stop Endless Ping from h36_4 to h35_4
- [Documentation] Stoping of endless pinging after traffic inspection finishes.
- Switch Connection GPSFC6_CONNECTION
- Stop Endless Ping from Docker to Address ${CLIENT_NAME} ${SERVER_IP}
+++ /dev/null
-*** Settings ***
-Documentation Deep icmp traffic inspection.
-... Nodes are located on different VMs in different subnets and are members of different EPGs.
-
-Library SSHLibrary
-Resource ../../../../../libraries/GBP/OpenFlowUtils.robot
-Resource ../Variables.robot
-Resource ../Connections.robot
-
-Suite Setup Start Connections
-Suite Teardown Close Connections
-
-
-*** Test Cases ***
-Ping from h36_5 to h35_2
- [Documentation] Test icmp request.
- Set Test Variables
- ... client_name=h36_5
- ... client_ip=10.0.36.5
- ... server_name=h35_2
- ... server_ip=10.0.35.2
- ... ether_type=0x0800
- ... proto=1
- ... vxlan_port=3
- Switch Connection GPSFC6_CONNECTION
- Ping from Docker ${CLIENT_NAME} ${SERVER_IP}
-
-Start Endless Ping from h36_5 to h35_2
- [Documentation] Starting of endless pinging for traffic inspection.
- Start Endless Ping from Docker ${CLIENT_NAME} ${SERVER_IP}
-
-Find ICMP Req from h36_5 to h35_2 on GBPSFC6
- [Documentation] Inspecting icmp req on GBPSFC6.
- Switch Connection GPSFC6_CONNECTION
- ${flow} Inspect Classifier Outbound
- ... in_port=7
- ... out_port=${VXLAN_PORT}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP}
- ... next_hop_ip=${GBPSFC1}
- ... proto=${PROTO}
-
-Find ICMP Req from h36_5 to h35_2 on GBPSFC1
- [Documentation] Inspecting icmp req on GBPSFC1.
- Switch Connection GPSFC1_CONNECTION
- Inspect Classifier Inbound
- ... in_port=${VXLAN_PORT}
- ... out_port=4
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP}
- ... outer_src_ip=${GBPSFC6}
- ... outer_dst_ip=${GBPSFC1}
- ... proto=${PROTO}
-
-Find ICMP Resp from h35_2 to h36_5 on GBPSFC1
- [Documentation] Inspecting icmp resp on GBPSFC1.
- Switch Connection GPSFC1_CONNECTION
- ${flow} Inspect Classifier Outbound
- ... in_port=4
- ... out_port=${VXLAN_PORT}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${SERVER_IP}
- ... inner_dst_ip=${CLIENT_IP}
- ... next_hop_ip=${GBPSFC6}
- ... proto=${PROTO}
-
-Find ICMP Resp from h35_2 to h36_5 on GBPSFC6
- [Documentation] Inspecting icmp resp on GBPSFC6.
- Switch Connection GPSFC6_CONNECTION
- Inspect Classifier Inbound
- ... in_port=${VXLAN_PORT}
- ... out_port=7
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${SERVER_IP}
- ... inner_dst_ip=${CLIENT_IP}
- ... outer_src_ip=${GBPSFC1}
- ... outer_dst_ip=${GBPSFC6}
- ... proto=${PROTO}
-
-Stop Endless Ping from h36_5 to h35_2
- [Documentation] Stoping of endless pinging after traffic inspection finishes.
- Switch Connection GPSFC6_CONNECTION
- Stop Endless Ping from Docker to Address ${CLIENT_NAME} ${SERVER_IP}
+++ /dev/null
-*** Settings ***
-Documentation Deep inspection of HTTP traffic on symmetric chain.
-... Nodes are located on the same VM.
-
-Library SSHLibrary
-Resource ../../../../../libraries/GBP/OpenFlowUtils.robot
-Resource ../Variables.robot
-Resource ../Connections.robot
-
-Suite Setup Start Connections
-Suite Teardown Close Connections
-
-
-*** Test Cases ***
-Start HTTP on h36_2 on Port 80
- [Documentation] Starting HTTP service on docker container.
- Set Test Variables
- ... client_name=h35_2
- ... client_ip=10.0.35.2
- ... server_name=h36_2
- ... server_ip=10.0.36.2
- ... service_port=80
- ... ether_type=0x0800
- ... proto=6
- ... vxlan_gpe_port=2
- Switch Connection GPSFC1_CONNECTION
- Start HTTP Service on Docker ${SERVER_NAME} ${SERVICE_PORT}
-
-Curl h36_2 from h35_2
- [Documentation] Test HTTP request from a docker container to serving docker container.
- Curl from Docker ${CLIENT_NAME} ${SERVER_IP} service_port=${SERVICE_PORT}
-
-Start Endless Curl on h35_2 on port 80
- [Documentation] Starting endless HTTP session for traffic inspection.
- Start Endless Curl from Docker ${CLIENT_NAME} ${SERVER_IP} ${SERVICE_PORT} sleep=1
-
-On GBPSFC1 Send HTTP req h35_2-h36_2 to GBPSFC2
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC1_CONNECTION
- ${flow} Inspect Classifier Outbound
- ... in_port=4
- ... out_port=${VXLAN_GPE_PORT}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP}
- ... next_hop_ip=${GBPSFC2}
- ... nsi=255
- ... proto=${PROTO}
- ... dst_port=${SERVICE_PORT}
- ${nsp_35_2-nsp_36_2} GET NSP Value From Flow ${flow}
- Set Global Variable ${NSP_path1} ${nsp_35_2-nsp_36_2}
-
-On GBPSFC2 Send HTTP req h35_2-h36_2 to GBPSFC3
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC2_CONNECTION
- Inspect Service Function Forwarder
- ... in_port=${VXLAN_GPE_PORT}
- ... out_port=${VXLAN_GPE_PORT}
- ... outer_src_ip=${GBPSFC1}
- ... outer_dst_ip=${GBPSFC2}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP}
- ... next_hop_ip=${GBPSFC3}
- ... nsp=${NSP_path1}
- ... nsi=255
- ... proto=${PROTO}
-
-On GBPSFC3 Send HTTP req h35_2-h36_2 to GBPSFC2
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC3_CONNECTION
- Inspect Service Function
- ... in_port=${VXLAN_GPE_PORT}
- ... out_port=${VXLAN_GPE_PORT}
- ... outer_src_ip=${GBPSFC2}
- ... outer_dst_ip=${GBPSFC3}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP}
- ... next_hop_ip=${GBPSFC2}
- ... nsp=${NSP_path1}
- ... received_nsi=255
-
-On GBPSFC2 Send HTTP req h35_2-h36_2 to GBPSFC4
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC2_CONNECTION
- Inspect Service Function Forwarder
- ... in_port=${VXLAN_GPE_PORT}
- ... out_port=${VXLAN_GPE_PORT}
- ... outer_src_ip=${GBPSFC3}
- ... outer_dst_ip=${GBPSFC2}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP}
- ... next_hop_ip=${GBPSFC4}
- ... nsp=${NSP_path1}
- ... nsi=254
- ... proto=${PROTO}
-
-On GBPSFC4 Send HTTP req h35_2-h36_2 to GBPSFC5
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC4_CONNECTION
- Inspect Service Function Forwarder
- ... in_port=${VXLAN_GPE_PORT}
- ... out_port=${VXLAN_GPE_PORT}
- ... outer_src_ip=${GBPSFC2}
- ... outer_dst_ip=${GBPSFC4}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP}
- ... next_hop_ip=${GBPSFC5}
- ... nsp=${NSP_path1}
- ... nsi=254
- ... proto=${PROTO}
-
-On GBPSFC5 Send HTTP req h35_2-h36_2 to GBPSFC4
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC5_CONNECTION
- Inspect Service Function
- ... in_port=${VXLAN_GPE_PORT}
- ... out_port=${VXLAN_GPE_PORT}
- ... outer_src_ip=${GBPSFC4}
- ... outer_dst_ip=${GBPSFC5}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP}
- ... next_hop_ip=${GBPSFC4}
- ... nsp=${NSP_path1}
- ... received_nsi=254
-
-On GBPSFC4 Send HTTP req h35_2-h36_2 to GBPSFC1
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC4_CONNECTION
- Inspect Service Function Forwarder
- ... in_port=${VXLAN_GPE_PORT}
- ... out_port=${VXLAN_GPE_PORT}
- ... outer_src_ip=${GBPSFC5}
- ... outer_dst_ip=${GBPSFC4}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP}
- ... next_hop_ip=${GBPSFC1}
- ... nsp=${NSP_path1}
- ... nsi=253
- ... proto=${PROTO}
-
-On GBPSFC1 Send HTTP req h35_2-h36_2 to h36_2
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC1_CONNECTION
- Inspect Classifier Inbound
- ... in_port=${VXLAN_GPE_PORT}
- ... out_port=6
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP}
- ... outer_src_ip=${GBPSFC4}
- ... outer_dst_ip=${GBPSFC1}
- ... nsp=${NSP_path1}
- ... nsi=253
- ... proto=${PROTO}
-
-On GBPSFC1 Send HTTP resp h36_2-h35_2 to GBPSFC4
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC1_CONNECTION
- ${flow} Inspect Classifier Outbound
- ... in_port=6
- ... out_port=${VXLAN_GPE_PORT}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${SERVER_IP}
- ... inner_dst_ip=${CLIENT_IP}
- ... next_hop_ip=${GBPSFC4}
- ... nsi=255
- ... proto=${PROTO}
- ... src_port=${SERVICE_PORT}
- ${nsp_36_2-nsp_35_2} GET NSP Value From Flow ${flow}
- Set Global Variable ${NSP_path2} ${nsp_36_2-nsp_35_2}
-
-On GBPSFC4 Send HTTP resp h36_2-h35_2 to GBPSFC5
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC4_CONNECTION
- Inspect Service Function Forwarder
- ... in_port=${VXLAN_GPE_PORT}
- ... out_port=${VXLAN_GPE_PORT}
- ... outer_src_ip=${GBPSFC1}
- ... outer_dst_ip=${GBPSFC4}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${SERVER_IP}
- ... inner_dst_ip=${CLIENT_IP}
- ... next_hop_ip=${GBPSFC5}
- ... nsp=${NSP_path2}
- ... nsi=255
- ... proto=${PROTO}
-
-On GBPSFC5 Send HTTP resp h36_2-h35_2 to GBPSFC4
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC5_CONNECTION
- Inspect Service Function
- ... in_port=${VXLAN_GPE_PORT}
- ... out_port=${VXLAN_GPE_PORT}
- ... outer_src_ip=${GBPSFC4}
- ... outer_dst_ip=${GBPSFC5}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${SERVER_IP}
- ... inner_dst_ip=${CLIENT_IP}
- ... next_hop_ip=${GBPSFC4}
- ... nsp=${NSP_path2}
- ... received_nsi=255
-
-On GBPSFC4 Send HTTP resp h36_2-h35_2 to GBPSFC2
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC4_CONNECTION
- Inspect Service Function Forwarder
- ... in_port=${VXLAN_GPE_PORT}
- ... out_port=${VXLAN_GPE_PORT}
- ... outer_src_ip=${GBPSFC5}
- ... outer_dst_ip=${GBPSFC4}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${SERVER_IP}
- ... inner_dst_ip=${CLIENT_IP}
- ... next_hop_ip=${GBPSFC2}
- ... nsp=${NSP_path2}
- ... nsi=254
- ... proto=${PROTO}
-
-On GBPSFC2 Send HTTP resp h36_2-h35_2 to GBPSFC3
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC2_CONNECTION
- Inspect Service Function Forwarder
- ... in_port=${VXLAN_GPE_PORT}
- ... out_port=${VXLAN_GPE_PORT}
- ... outer_src_ip=${GBPSFC4}
- ... outer_dst_ip=${GBPSFC2}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${SERVER_IP}
- ... inner_dst_ip=${CLIENT_IP}
- ... next_hop_ip=${GBPSFC3}
- ... nsp=${NSP_path2}
- ... nsi=254
- ... proto=${PROTO}
-
-On GBPSFC3 Send HTTP resp h36_2-h35_2 to GBPSFC2
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC3_CONNECTION
- Inspect Service Function
- ... in_port=${VXLAN_GPE_PORT}
- ... out_port=${VXLAN_GPE_PORT}
- ... outer_src_ip=${GBPSFC2}
- ... outer_dst_ip=${GBPSFC3}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${SERVER_IP}
- ... inner_dst_ip=${CLIENT_IP}
- ... next_hop_ip=${GBPSFC2}
- ... nsp=${NSP_path2}
- ... received_nsi=254
-
-On GBPSFC2 Send HTTP resp h36_2-h35_2 to GBPSFC1
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC2_CONNECTION
- Inspect Service Function Forwarder
- ... in_port=${VXLAN_GPE_PORT}
- ... out_port=${VXLAN_GPE_PORT}
- ... outer_src_ip=${GBPSFC3}
- ... outer_dst_ip=${GBPSFC2}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${SERVER_IP}
- ... inner_dst_ip=${CLIENT_IP}
- ... next_hop_ip=${GBPSFC1}
- ... nsp=${NSP_path2}
- ... nsi=253
- ... proto=${PROTO}
-
-On GBPSFC1 Send HTTP resp h36_2-h35_2 to h35_2
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC1_CONNECTION
- Inspect Classifier Inbound
- ... in_port=${VXLAN_GPE_PORT}
- ... out_port=4
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${SERVER_IP}
- ... inner_dst_ip=${CLIENT_IP}
- ... outer_src_ip=${GBPSFC2}
- ... outer_dst_ip=${GBPSFC1}
- ... nsp=${NSP_path2}
- ... nsi=253
- ... proto=${PROTO}
-
-Compare NSPs
- [Documentation] Verifying that different paths were taken.
- Should Not Be Equal As Numbers ${NSP_path1} ${NSP_path2}
-
-Stop Endless Curl on h35_2 on port 80
- [Documentation] Stopping endless HTTP session after traffic inspection finishes.
- Switch Connection GPSFC1_CONNECTION
- Stop Endless Curl from Docker ${CLIENT_NAME}
-
-Stop HTTP on h36_2 on Port 80
- [Documentation] Stopping HTTP service on the docker container.
- Stop HTTP Service on Docker ${SERVER_NAME}
+++ /dev/null
-*** Settings ***
-Documentation Deep inspection of HTTP traffic on symmetric chain.
-... Nodes are located on different VMs.
-
-Library SSHLibrary
-Resource ../../../../../libraries/GBP/OpenFlowUtils.robot
-Resource ../Variables.robot
-Resource ../Connections.robot
-
-Suite Setup Start Connections
-Suite Teardown Close Connections
-
-
-*** Test Cases ***
-Start HTTP on h36_4 on Port 80
- [Documentation] Starting HTTP service on docker container.
- Set Test Variables
- ... client_name=h35_3
- ... client_ip=10.0.35.3
- ... server_name=h36_4
- ... server_ip=10.0.36.4
- ... service_port=80
- ... ether_type=0x0800
- ... proto=6
- ... vxlan_gpe_port=2
- Switch Connection GPSFC6_CONNECTION
- Start HTTP Service on Docker ${SERVER_NAME} ${SERVICE_PORT}
-
-Curl h36_4 from h35_3
- [Documentation] Test HTTP request from a docker container to serving docker container.
- Switch Connection GPSFC1_CONNECTION
- Curl from Docker ${CLIENT_NAME} ${SERVER_IP} service_port=${SERVICE_PORT}
-
-Start Endless Curl on h35_3 on port 80
- [Documentation] Starting endless HTTP session for traffic inspection.
- Start Endless Curl from Docker ${CLIENT_NAME} ${SERVER_IP} ${SERVICE_PORT} sleep=1
-
-On GBPSFC1 Send HTTP req h35_3-h36_4 to GBPSFC2
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC1_CONNECTION
- ${flow} Inspect Classifier Outbound
- ... in_port=5
- ... out_port=${VXLAN_GPE_PORT}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP}
- ... next_hop_ip=${GBPSFC2}
- ... nsi=255
- ... proto=${PROTO}
- ... dst_port=${SERVICE_PORT}
- ${nsp_35_3-nsp_36_4} GET NSP Value From Flow ${flow}
- Set Global Variable ${NSP_path1} ${nsp_35_3-nsp_36_4}
-
-On GBPSFC2 Send HTTP req h35_3-h36_4 to GBPSFC3
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC2_CONNECTION
- Inspect Service Function Forwarder
- ... in_port=${VXLAN_GPE_PORT}
- ... out_port=${VXLAN_GPE_PORT}
- ... outer_src_ip=${GBPSFC1}
- ... outer_dst_ip=${GBPSFC2}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP}
- ... next_hop_ip=${GBPSFC3}
- ... nsp=${NSP_path1}
- ... nsi=255
- ... proto=${PROTO}
-
-On GBPSFC3 Send HTTP req h35_3-h36_4 to GBPSFC2
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC3_CONNECTION
- Inspect Service Function
- ... in_port=${VXLAN_GPE_PORT}
- ... out_port=${VXLAN_GPE_PORT}
- ... outer_src_ip=${GBPSFC2}
- ... outer_dst_ip=${GBPSFC3}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP}
- ... next_hop_ip=${GBPSFC2}
- ... nsp=${NSP_path1}
- ... received_nsi=255
-
-On GBPSFC2 Send HTTP req h35_3-h36_4 to GBPSFC4
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC2_CONNECTION
- Inspect Service Function Forwarder
- ... in_port=${VXLAN_GPE_PORT}
- ... out_port=${VXLAN_GPE_PORT}
- ... outer_src_ip=${GBPSFC3}
- ... outer_dst_ip=${GBPSFC2}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP}
- ... next_hop_ip=${GBPSFC4}
- ... nsp=${NSP_path1}
- ... nsi=254
- ... proto=${PROTO}
-
-On GBPSFC4 Send HTTP req h35_3-h36_4 to GBPSFC5
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC4_CONNECTION
- Inspect Service Function Forwarder
- ... in_port=${VXLAN_GPE_PORT}
- ... out_port=${VXLAN_GPE_PORT}
- ... outer_src_ip=${GBPSFC2}
- ... outer_dst_ip=${GBPSFC4}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP}
- ... next_hop_ip=${GBPSFC5}
- ... nsp=${NSP_path1}
- ... nsi=254
- ... proto=${PROTO}
-
-On GBPSFC5 Send HTTP req h35_3-h36_4 to GBPSFC4
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC5_CONNECTION
- Inspect Service Function
- ... in_port=${VXLAN_GPE_PORT}
- ... out_port=${VXLAN_GPE_PORT}
- ... outer_src_ip=${GBPSFC4}
- ... outer_dst_ip=${GBPSFC5}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP}
- ... next_hop_ip=${GBPSFC4}
- ... nsp=${NSP_path1}
- ... received_nsi=254
-
-On GBPSFC4 Send HTTP req h35_3-h36_4 to GBPSFC6
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC4_CONNECTION
- Inspect Service Function Forwarder
- ... in_port=${VXLAN_GPE_PORT}
- ... out_port=${VXLAN_GPE_PORT}
- ... outer_src_ip=${GBPSFC5}
- ... outer_dst_ip=${GBPSFC4}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP}
- ... next_hop_ip=${GBPSFC6}
- ... nsp=${NSP_path1}
- ... nsi=253
- ... proto=${PROTO}
-
-On GBPSFC6 Send HTTP req h35_3-h36_4 to h36_4
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC6_CONNECTION
- Inspect Classifier Inbound
- ... in_port=${VXLAN_GPE_PORT}
- ... out_port=6
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${CLIENT_IP}
- ... inner_dst_ip=${SERVER_IP}
- ... outer_src_ip=${GBPSFC4}
- ... outer_dst_ip=${GBPSFC6}
- ... nsp=${NSP_path1}
- ... nsi=253
- ... proto=${PROTO}
-
-On GBPSFC6 Send HTTP resp h36_4-h35_3 to GBPSFC4
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC6_CONNECTION
- ${flow} Inspect Classifier Outbound
- ... in_port=6
- ... out_port=${VXLAN_GPE_PORT}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${SERVER_IP}
- ... inner_dst_ip=${CLIENT_IP}
- ... next_hop_ip=${GBPSFC4}
- ... nsi=255
- ... proto=${PROTO}
- ... src_port=${SERVICE_PORT}
- ${nsp_36_4-nsp_35_3} GET NSP Value From Flow ${flow}
- Set Global Variable ${NSP_path2} ${nsp_36_4-nsp_35_3}
-
-On GBPSFC4 Send HTTP resp h36_4-h35_3 to GBPSFC5
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC4_CONNECTION
- Inspect Service Function Forwarder
- ... in_port=${VXLAN_GPE_PORT}
- ... out_port=${VXLAN_GPE_PORT}
- ... outer_src_ip=${GBPSFC6}
- ... outer_dst_ip=${GBPSFC4}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${SERVER_IP}
- ... inner_dst_ip=${CLIENT_IP}
- ... next_hop_ip=${GBPSFC5}
- ... nsp=${NSP_path2}
- ... nsi=255
- ... proto=${PROTO}
-
-On GBPSFC5 Send HTTP resp h36_4-h35_3 to GBPSFC4
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC5_CONNECTION
- Inspect Service Function
- ... in_port=${VXLAN_GPE_PORT}
- ... out_port=${VXLAN_GPE_PORT}
- ... outer_src_ip=${GBPSFC4}
- ... outer_dst_ip=${GBPSFC5}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${SERVER_IP}
- ... inner_dst_ip=${CLIENT_IP}
- ... next_hop_ip=${GBPSFC4}
- ... nsp=${NSP_path2}
- ... received_nsi=255
-
-On GBPSFC4 Send HTTP resp h36_4-h35_3 to GBPSFC2
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC4_CONNECTION
- Inspect Service Function Forwarder
- ... in_port=${VXLAN_GPE_PORT}
- ... out_port=${VXLAN_GPE_PORT}
- ... outer_src_ip=${GBPSFC5}
- ... outer_dst_ip=${GBPSFC4}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${SERVER_IP}
- ... inner_dst_ip=${CLIENT_IP}
- ... next_hop_ip=${GBPSFC2}
- ... nsp=${NSP_path2}
- ... nsi=254
- ... proto=${PROTO}
-
-On GBPSFC2 Send HTTP resp h36_4-h35_3 to GBPSFC3
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC2_CONNECTION
- Inspect Service Function Forwarder
- ... in_port=${VXLAN_GPE_PORT}
- ... out_port=${VXLAN_GPE_PORT}
- ... outer_src_ip=${GBPSFC4}
- ... outer_dst_ip=${GBPSFC2}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${SERVER_IP}
- ... inner_dst_ip=${CLIENT_IP}
- ... next_hop_ip=${GBPSFC3}
- ... nsp=${NSP_path2}
- ... nsi=254
- ... proto=${PROTO}
-
-On GBPSFC3 Send HTTP resp h36_4-h35_3 to GBPSFC2
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC3_CONNECTION
- Inspect Service Function
- ... in_port=${VXLAN_GPE_PORT}
- ... out_port=${VXLAN_GPE_PORT}
- ... outer_src_ip=${GBPSFC2}
- ... outer_dst_ip=${GBPSFC3}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${SERVER_IP}
- ... inner_dst_ip=${CLIENT_IP}
- ... next_hop_ip=${GBPSFC2}
- ... nsp=${NSP_path2}
- ... received_nsi=254
-
-On GBPSFC2 Send HTTP resp h36_4-h35_3 to GBPSFC1
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC2_CONNECTION
- Inspect Service Function Forwarder
- ... in_port=${VXLAN_GPE_PORT}
- ... out_port=${VXLAN_GPE_PORT}
- ... outer_src_ip=${GBPSFC3}
- ... outer_dst_ip=${GBPSFC2}
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${SERVER_IP}
- ... inner_dst_ip=${CLIENT_IP}
- ... next_hop_ip=${GBPSFC1}
- ... nsp=${NSP_path2}
- ... nsi=253
- ... proto=${PROTO}
-
-On GBPSFC1 Send HTTP resp h36_4-h35_3 to h35_3
- [Documentation] HTTP traffic inspection.
- Switch Connection GPSFC1_CONNECTION
- Inspect Classifier Inbound
- ... in_port=${VXLAN_GPE_PORT}
- ... out_port=5
- ... eth_type=${ETHER_TYPE}
- ... inner_src_ip=${SERVER_IP}
- ... inner_dst_ip=${CLIENT_IP}
- ... outer_src_ip=${GBPSFC2}
- ... outer_dst_ip=${GBPSFC1}
- ... nsp=${NSP_path2}
- ... nsi=253
- ... proto=${PROTO}
-
-Compare NSPs
- [Documentation] Verifying that different paths were taken.
- Should Not Be Equal As Numbers ${NSP_path1} ${NSP_path2}
-
-Stop Endless Curl on h35_3 on port 80
- [Documentation] Stopping endless HTTP session after traffic inspection finishes.
- Switch Connection GPSFC1_CONNECTION
- Stop Endless Curl from Docker ${CLIENT_NAME}
-
-Stop HTTP on h36_4 on Port 80
- [Documentation] Stopping HTTP service on the docker container.
- Switch Connection GPSFC6_CONNECTION
- Stop HTTP Service on Docker ${SERVER_NAME}
+++ /dev/null
-*** Settings ***
-Documentation Deep inspection of HTTP traffic on asymmetric chain.
-... Nodes are located on different VMs.
-
-Library SSHLibrary
-Resource ../../../../../libraries/GBP/OpenFlowUtils.robot
-Resource ../../../../../libraries/GBP/ConnUtils.robot
-Resource ../Variables.robot
-Resource ../Connections.robot
-
-
-*** Test Cases ***
-Show GBPSFC1 Status
- [Documentation] Shows flows and configuration of a switch for easier debugging.
- Start Connections
- Switch Connection GPSFC1_CONNECTION
- Show Switch Status sw1
-
-Show GBPSFC2 Status
- [Documentation] Shows flows and configuration of a switch for easier debugging.
- Switch Connection GPSFC2_CONNECTION
- Show Switch Status sw2
-
-Show GBPSFC3 Status
- [Documentation] Shows flows and configuration of a switch for easier debugging.
- Switch Connection GPSFC3_CONNECTION
- Show Switch Status sw3
-
-Show GBPSFC4 Status
- [Documentation] Shows flows and configuration of a switch for easier debugging.
- Switch Connection GPSFC4_CONNECTION
- Show Switch Status sw4
-
-Show GBPSFC5 Status
- [Documentation] Shows flows and configuration of a switch for easier debugging.
- Switch Connection GPSFC5_CONNECTION
- Show Switch Status sw5
-
-Show GBPSFC6 Status
- [Documentation] Shows flows and configuration of a switch for easier debugging.
- Switch Connection GPSFC6_CONNECTION
- Show Switch Status sw6
- Close Connections
-
-Read Tenants Confing From ODL
- [Documentation] Logs ODL data store.
- Create Session
- ... session
- ... http://${ODL_SYSTEM_IP}:${RESTCONFPORT}
- ... auth=${AUTH}
- ... headers=${HEADERS_YANG_JSON}
- ${resp} RequestsLibrary.Get Request session ${GBP_TENANTS_API}
- Log ${resp.content}
-
-Read Tenants Operational From ODL
- ${resp} RequestsLibrary.Get Request session ${OPERATIONAL_GBP_TENANTS_API}
- Log ${resp.content}
-
-Read Nodes Config From ODL
- ${resp} RequestsLibrary.Get Request session ${CONFIG_NODES_API}
- Log ${resp.content}
-
-Read Nodes Operational From ODL
- ${resp} RequestsLibrary.Get Request session ${OPERATIONAL_NODES_API}
- Log ${resp.content}
-
-Read Topology Config From ODL
- ${resp} RequestsLibrary.Get Request session ${CONFIG_TOPO_API}
- Log ${resp.content}
-
-Read Topology Operational From ODL
- ${resp} RequestsLibrary.Get Request session ${OPERATIONAL_TOPO_API}
- Log ${resp.content}
-
-Read Endpoints From ODL
- ${resp} RequestsLibrary.Get Request session ${GBP_ENDPOINTS_API}
- Log ${resp.content}
- Delete All Sessions
+++ /dev/null
-*** Settings ***
-Documentation Test suite for cleaning up / unregister infrastructure constructs like endpoints for demo-symmetric-chain
-
-Library RequestsLibrary
-Library OperatingSystem
-Library Collections
-Library json
-Variables ../../../../../variables/Variables.py
-Resource ../../../../../libraries/Utils.robot
-Resource ../../../../../libraries/GBP/RestconfUtils.robot
-Resource ../Variables.robot
-
-Suite Setup Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS}
-Suite Teardown Delete All Sessions
-
-
-*** Test Cases ***
-Delete Service Function Paths
- [Documentation] Delete Service Function Paths from ODL
- [Tags] gbpsfctear
- Remove All Elements At URI And Verify ${SFP_PATH}
-
-Delete Service Function Chains
- [Documentation] Delete Service Function Chains from ODL
- [Tags] gbpsfctear
- Remove All Elements At URI And Verify ${SFC_PATH}
-
-Delete Service Functions
- [Documentation] Delete Service Function from ODL
- [Tags] gbpsfctear
- Remove All Elements At URI And Verify ${SF_PATH}
-
-Delete Service Function Forwarders
- [Documentation] Delete Service Function Forwarders from ODL
- [Tags] gbpsfctear
- Remove All Elements At URI And Verify ${SFF_PATH}
-
-Delete Tunnels
- [Documentation] Delete Tenant from ODL
- [Tags] gbpsfctear
- Remove All Elements At URI And Verify ${TUNNELS_PATH}
-
-Delete Tenant
- [Documentation] Delete Tenant from ODL
- [Tags] gbpsfctear
- Remove All Elements At URI And Verify ${TENANT_PATH}
-
-Unregister Endpoints
- [Documentation] Unregister Endpoints Endpoints from ODL
- [Tags] gbpsfctear
- RestconfUtils.Unregister Endpoints
-
-Delete OVSDB Topology If Present
- [Documentation] Delete OVSDB topology from ODL
- [Tags] gbpsfctear
- ${resp} RequestsLibrary.Get Request session ${TOPOLOGY_PATH}
- IF ${resp.status_code} == 200
- Remove All Elements At URI And Verify ${TOPOLOGY_PATH}
- END
+++ /dev/null
-*** Settings ***
-Library SSHLibrary
-Resource ../../../../../libraries/Utils.robot
-Resource ../../../../../libraries/GBP/ConnUtils.robot
-Variables ../../../../../variables/Variables.py
-Resource ../Variables.robot
-Resource ../GBPSFC_6node.robot
-
-
-*** Variables ***
-${timeout} 10s
-
-
-*** Test Cases ***
-Teardown Suite
- Log Teardown suite in symetric-chain
- FOR ${GBPSFC} IN @{GBPSFCs}
- GBPSFC_6node.Teardown Node ${GBPSFC} ${CURDIR} timeout=${timeout}
- END
+++ /dev/null
-# Config for switches, tunnelIP is the local IP address.
-switches = [
- {"name": "sw1", "type": "gbp", "dpid": "1"},
- {"name": "sw2", "type": "sff", "dpid": "2"},
- {"name": "sw3", "type": "sf", "dpid": "3"},
- {"name": "sw4", "type": "sff", "dpid": "4"},
- {"name": "sw5", "type": "sf", "dpid": "5"},
- {"name": "sw6", "type": "gbp", "dpid": "6"},
- {"name": "sw7", "type": "none", "dpid": "7"},
- {"name": "sw8", "type": "none", "dpid": "8"},
-]
-
-defaultContainerImage = "alagalah/odlpoc_ovs230"
-
-# Note that tenant name and endpointGroup name come from policy_config.py
-
-hosts = [
- {
- "name": "h35_2",
- "mac": "00:00:00:00:35:02",
- "ip": "10.0.35.2/24",
- "switch": "sw1",
- },
- {
- "name": "h35_3",
- "ip": "10.0.35.3/24",
- "mac": "00:00:00:00:35:03",
- "switch": "sw1",
- },
- {
- "name": "h35_4",
- "ip": "10.0.35.4/24",
- "mac": "00:00:00:00:35:04",
- "switch": "sw6",
- },
- {
- "name": "h35_5",
- "ip": "10.0.35.5/24",
- "mac": "00:00:00:00:35:05",
- "switch": "sw6",
- },
- {
- "name": "h36_2",
- "ip": "10.0.36.2/24",
- "mac": "00:00:00:00:36:02",
- "switch": "sw1",
- },
- {
- "name": "h36_3",
- "ip": "10.0.36.3/24",
- "mac": "00:00:00:00:36:03",
- "switch": "sw1",
- },
- {
- "name": "h36_4",
- "ip": "10.0.36.4/24",
- "mac": "00:00:00:00:36:04",
- "switch": "sw6",
- },
- {
- "name": "h36_5",
- "ip": "10.0.36.5/24",
- "mac": "00:00:00:00:36:05",
- "switch": "sw6",
- },
-]
+++ /dev/null
-#!/usr/bin/env bash
-
-set -e
-
-SFF_IP=$1
-SFF_HEX=$(printf '%02X' ${SFF_IP//./ })
-SFF_HEX=0x$SFF_HEX
-sw=$(sudo ovs-vsctl show | egrep -E 'Bridge.*sw' | awk '{print $2}' | sed -e 's/^"//' -e 's/"$//')
-
-if [ $sw = "sw3" ] || [ $sw = "sw5" ] ; then
- # delete NORMAL, if present
- sudo ovs-ofctl --strict del-flows $sw priority=0
- sudo ovs-ofctl add-flow $sw "priority=1000,nsi=255 actions=move:NXM_NX_NSH_C1[]->NXM_NX_NSH_C1[],move:NXM_NX_NSH_C2[]->NXM_NX_NSH_C2[],move:NXM_NX_TUN_ID[0..31]->NXM_NX_TUN_ID[0..31],load:$SFF_HEX->NXM_NX_TUN_IPV4_DST[],set_nsi:254,IN_PORT" -OOpenFlow13
- sudo ovs-ofctl add-flow $sw "priority=1000,nsi=254 actions=move:NXM_NX_NSH_C1[]->NXM_NX_NSH_C1[],move:NXM_NX_NSH_C2[]->NXM_NX_NSH_C2[],move:NXM_NX_TUN_ID[0..31]->NXM_NX_TUN_ID[0..31],load:$SFF_HEX->NXM_NX_TUN_IPV4_DST[],set_nsi:253,IN_PORT" -OOpenFlow13
-else
- echo "Invalid SF for this demo";
- exit
-fi
+++ /dev/null
-*** Settings ***
-Documentation Test suite for Group Based Policy, sxp-ep-provider component.
-
-Library OperatingSystem WITH NAME os
-Library RequestsLibrary
-Library SSHLibrary
-Library ../../../libraries/GbpSxp.py WITH NAME gbpsxp
-Resource ../../../variables/Variables.robot
-Resource ../../../libraries/Utils.robot
-Resource ../../../libraries/TemplatedRequests.robot
-Resource ${CURDIR}/../../../libraries/KarafKeywords.robot
-Resource ../../../libraries/GbpSxp.robot
-
-Suite Setup Suite_Startup
-Suite Teardown Suite_Cleanup
-Test Setup GbpSxp.Prepare_Ssh_Tooling
-Test Teardown Wipe_Clean_Ep_Templates_And_Sxp_Node
-
-
-*** Variables ***
-${EP_PROVIDER_TEMPLATES_FILE} ${CURDIR}/../../../variables/gbp/gbpsxp-ep-provider-templates
-${SXP_NODE_CONFIG_FILE} ${CURDIR}/../../../variables/gbp/gbpsxp-node.json
-${SXP_NODE_ADD_ENTRY_FILE} ${CURDIR}/../../../variables/gbp/gbpsxp-node-add-entry.json
-${GBP_RPC_UNREGISTER_ENDPOINT_FILE} ${CURDIR}/../../../variables/gbp/gbpsxp-rpc-unregister-endpoint.json
-${GBP_EXPECTED_ENDPOINTS_FILE} ${CURDIR}/../../../variables/gbp/gbpsxp-endpoint
-${ISE_MOCK_SERVER_API_FOLDER} mock-server-tc010
-${CONFIGURE_ISE_SOURCE_FILE} ${CURDIR}/../../../variables/gbp/gbpsxp-ise-source.json
-${SXP_NODE_NAME} 1.1.1.1
-
-
-*** Test Cases ***
-Register_EP_Using_Manual_Inputs
- [Documentation] Elicit endpoint registration by providing ep-policy-template, ep-forwarding-template and ip-sgt binding
- Utils.Add_Elements_To_URI_From_File ${SXP_EP_PROVIDER_CONFIG_URI} ${EP_PROVIDER_TEMPLATES_FILE}-2.1.json
- Create_sxp_node session ${SXP_NODE_CONFIG_FILE} 1.1.1.1
- Utils.Post_Elements_To_URI_From_File ${SXP_NODE_RPC_ADD_ENTRY_URI} ${SXP_NODE_ADD_ENTRY_FILE}
- ${expected_endpoints} os.Get_File ${GBP_EXPECTED_ENDPOINTS_FILE}-2.1.json
- Wait_For_Endpoint_And_Check session ${expected_endpoints}
-
-Register_EP_Using_Manual_Inputs_And_Ise
- [Documentation] Elicit endpoint registration by providing ep-forwarding-template and ip-sgt binding (ep-policy-template will loaded from ise-API)
- Utils.Add_Elements_To_URI_From_File ${SXP_EP_PROVIDER_CONFIG_URI} ${EP_PROVIDER_TEMPLATES_FILE}-2.2.json
- gbpsxp.Deploy_Ise_Mock_Server ${ISE_MOCK_SERVER_API_FOLDER} ${ISE_REST_PORT}
- ${ise_harvest_status_json} gbpsxp.Configure_Ise_Source_And_Gain_Harvest_Status
- ... session
- ... ${CONFIGURE_ISE_SOURCE_FILE}
- ... http://${TOOLS_SYSTEM_IP}:${ISE_REST_PORT}
- gbpsxp.Check_Ise_Harvest_Status ${ise_harvest_status_json} 5
- Create_sxp_node session ${SXP_NODE_CONFIG_FILE} ${SXP_NODE_NAME}
- Utils.Post_Elements_To_URI_From_File ${SXP_NODE_RPC_ADD_ENTRY_URI} ${SXP_NODE_ADD_ENTRY_FILE}
- ${expected_endpoints} os.Get_File ${GBP_EXPECTED_ENDPOINTS_FILE}-2.2.json
- Wait_For_Endpoint_And_Check session ${expected_endpoints}
- gbpsxp.Clean_ise_source_config
- gbpsxp.Teardown_Ise_Mock_Server ${ISE_MOCK_SERVER_API_FOLDER}
-
-
-*** Keywords ***
-Suite_Startup
- [Documentation] Setup session and set karaf log levels
- RequestsLibrary.Create_Session
- ... session
- ... http://${ODL_SYSTEM_IP}:${RESTCONFPORT}
- ... auth=${AUTH}
- ... headers=${HEADERS}
- KarafKeywords.Setup_Karaf_Keywords
- ${karaf_debug_enabled} BuiltIn.Get_Variable_Value ${KARAF_DEBUG} ${False}
- IF ${karaf_debug_enabled}
- KarafKeywords.Execute_Controller_Karaf_Command_On_Background log:set DEBUG org.opendaylight.sxp
- END
- IF ${karaf_debug_enabled}
- KarafKeywords.Execute_Controller_Karaf_Command_On_Background
- ... log:set DEBUG org.opendaylight.groupbasedpolicy.renderer
- END
- IF ${karaf_debug_enabled}
- KarafKeywords.Execute_Controller_Karaf_Command_On_Background
- ... log:set DEBUG org.opendaylight.groupbasedpolicy.sxp
- END
- IF ${karaf_debug_enabled}
- KarafKeywords.Execute_Controller_Karaf_Command_On_Background
- ... log:set DEBUG org.opendaylight.groupbasedpolicy.sxp_ep_provider
- END
-
-Suite_Cleanup
- [Documentation] Cleanup session and set karaf log levels to default
- ${karaf_debug_enabled} BuiltIn.Get_Variable_Value ${KARAF_DEBUG} ${False}
- IF ${karaf_debug_enabled}
- KarafKeywords.Execute_Controller_Karaf_Command_On_Background log:set INFO org.opendaylight.sxp
- END
- IF ${karaf_debug_enabled}
- KarafKeywords.Execute_Controller_Karaf_Command_On_Background
- ... log:set INFO org.opendaylight.groupbasedpolicy.renderer
- END
- IF ${karaf_debug_enabled}
- KarafKeywords.Execute_Controller_Karaf_Command_On_Background
- ... log:set INFO org.opendaylight.groupbasedpolicy.sxp
- END
- IF ${karaf_debug_enabled}
- KarafKeywords.Execute_Controller_Karaf_Command_On_Background
- ... log:set INFO org.opendaylight.groupbasedpolicy.sxp_ep_provider
- END
- RequestsLibrary.Delete_All_Sessions
-
-Wipe_Clean_Ep_Templates_And_Sxp_Node
- [Documentation] Delete sxp-ep-provider templates and sxp node
- BuiltIn.Run_Keyword_And_Ignore_Error Utils.Remove_All_Elements_If_Exist ${SXP_EP_PROVIDER_CONFIG_URI}
- BuiltIn.Run_Keyword_And_Ignore_Error
- ... Utils.Remove_All_Elements_If_Exist
- ... ${SXP_TOPOLOGY_NODE_CONFIG_URI}/node/${SXP_NODE_NAME}
- BuiltIn.Run_Keyword_And_Ignore_Error Utils.Remove_All_Elements_If_Exist ${GBP_TENANT_CONFIG_URI}
- Utils.Post_Elements_To_URI_From_File ${GBP_RPC_UNREGISTER_ENDPOINT_URI} ${GBP_RPC_UNREGISTER_ENDPOINT_FILE}
- BuiltIn.Wait_Until_Keyword_Succeeds 5 1 Check_For_Clean_Endpoints session
- gbpsxp.Teardown_Ssh_Tooling
-
-Check_For_Clean_Endpoints
- [Documentation] Ensure that there are no endpoints in the system
- [Arguments] ${session_arg}
- ${actual_endpoints} Utils.Get_Data_From_URI ${session_arg} ${GBP_ENDPOINTS_URI}
- ${actual_endpoints_json} Utils.Json_Parse_From_String ${actual_endpoints}
- BuiltIn.Should_Be_Empty ${actual_endpoints_json['endpoints']['address-endpoints']}
-
-Wait_For_Endpoint_And_Check
- [Documentation] Wait for endpoint to appear in DS/operational and compare to expected endpoint
- [Arguments] ${session_arg} ${expected_endpoints}
- ${actual_endpoints_no_timestamp} BuiltIn.Wait_Until_Keyword_Succeeds
- ... 5
- ... 1
- ... Get_Endpoints_And_Clean_Timestamp
- ... ${session_arg}
- TemplatedRequests.Normalize_Jsons_And_Compare ${expected_endpoints} ${actual_endpoints_no_timestamp}
-
-Get_Endpoints_And_Clean_Timestamp
- [Documentation] Read endpoints from DS/operational and clean timestamp for simple comparison
- [Arguments] ${session_arg}
- ${actual_endpoints} Utils.Get_Data_From_URI ${session_arg} ${GBP_ENDPOINTS_URI}
- ${actual_endpoints_json} Utils.Json_Parse_From_String ${actual_endpoints}
- ${actual_endpoints_no_timestamp} gbpsxp.Remove_Endpoint_Timestamp ${actual_endpoints_json}
- RETURN ${actual_endpoints_no_timestamp}
-
-Create_sxp_node
- [Documentation] Create sxp node and wait till it appears in DS/operational
- [Arguments] ${session_arg} ${sxp_node_config_file} ${sxp_node_id}
- ${previous_topology_config} BuiltIn.Run_Keyword_And_Ignore_Error
- ... Utils.Get_Data_From_URI
- ... ${session_arg}
- ... ${SXP_TOPOLOGY_NODE_CONFIG_URI}
- BuiltIn.Log ${previous_topology_config}
- Utils.Add_Elements_To_URI_From_File_And_Verify
- ... ${SXP_TOPOLOGY_NODE_CONFIG_URI}/node/${sxp_node_id}
- ... ${sxp_node_config_file}
- ${sxp_node_config_readback} Utils.Get_Data_From_URI
- ... ${session_arg}
- ... ${SXP_TOPOLOGY_NODE_CONFIG_URI}/node/${sxp_node_id}
- BuiltIn.Wait_Until_Keyword_Succeeds
- ... 20
- ... 2
- ... Check_If_Sxp_Node_Is_Enabled
- ... ${session_arg}
- ... ${SXP_TOPOLOGY_NODE_OPERATIONAL_URI}/node/${sxp_node_id}
-
-Check_If_Sxp_Node_Is_Enabled
- [Documentation] Read node enabled leaf and check if it is true
- [Arguments] ${session_arg} ${node_uri}
- ${sxp_node} Utils.Get_Data_From_URI ${session_arg} ${node_uri}
- ${sxp_node_json} Utils.Json_Parse_From_String ${sxp_node}
- ${sxp_node_enabled} gbpsxp.Resolve_sxp_node_is_enabled ${sxp_node_json}
- BuiltIn.Should_Be_Equal_As_Strings True ${sxp_node_enabled}
+++ /dev/null
-*** Settings ***
-Documentation Test suite for Group Based Policy, sxp-ep-provider component.
-
-Library OperatingSystem WITH NAME os
-Library RequestsLibrary WITH NAME reqLib
-Library SSHLibrary
-Library ../../../libraries/GbpSxp.py WITH NAME gbpsxp
-Resource ../../../variables/Variables.robot
-Resource ../../../variables/sfc/Variables.robot
-Resource ../../../libraries/Utils.robot
-Resource ../../../libraries/TemplatedRequests.robot
-Resource ../../../libraries/NetconfKeywords.robot
-Resource ../../../libraries/GbpSxp.robot
-
-Suite Setup Setup_Http_And_Netconf
-Suite Teardown Teardown_Http_And_Netconf
-Test Setup Prepare_Renderer_Prerequisities
-Test Teardown Wipe_Clean_Renderer_Policy_Cohort
-
-
-*** Variables ***
-${EP_PROVIDER_TEMPLATES_FILE} ${CURDIR}/../../../variables/gbp/gbpsxp-ep-policy-templates
-${IOS_XE_SCHEMAS_FOLDER} ${CURDIR}/../../../variables/gbp/ios-xe-schemas
-${GBP_RENDERER_POLICY_FILE} ${CURDIR}/../../../variables/gbp/gbpsxp-renderer-policy.json
-# netconf
-@{IOS_XE_IP} ${TOOLS_SYSTEM_IP} ${TOOLS_SYSTEM_2_IP}
-@{IOS_XE_NODE_NAMES} ios-xe-mock-1 ios-xe-mock-2
-${NETCONF_CONFIG_IOSXE_NODE_FILE} ${CURDIR}/../../../variables/gbp/ios-xe-netconf-node.json
-# sfc configuration
-${SFC_SERVICE_FUNCTIONS_FILE} ${CURDIR}/../../../variables/gbp/sfc/service-functions.json
-${SFC_SF_FORWARDERS_FILE} ${CURDIR}/../../../variables/gbp/sfc/service-function-forwarders.json
-${SFC_SF_CHAINS_FILE} ${CURDIR}/../../../variables/gbp/sfc/service-function-chains.json
-${SFC_SF_PATHS_FILE} ${CURDIR}/../../../variables/gbp/sfc/service-function-paths.json
-
-
-*** Test Cases ***
-Configure_Sfc_And_Ios_Xe_Renderer_Using_Generated_Sgt
- [Documentation] Elicit netconf device configuration by providing sfc configurations and ios-xe renderer policy
- ${renderer_policy} ${next_version} Provision_renderer_policy session ${GBP_RENDERER_POLICY_FILE}
- Utils.Add_Elements_To_URI_And_Verify ${GBP_RENDERER_CONFIG_URI}/renderer-policy ${renderer_policy}
- BuiltIn.Wait_Until_Keyword_Succeeds
- ... 30
- ... 2
- ... Check_Renderer_Policy_Status_Version
- ... session
- ... ${next_version}
- ${security_group_json} BuiltIn.Wait_Until_Keyword_Succeeds
- ... 20
- ... 2
- ... Seek_Security_Group
- ... session
- ... ${NETCONF_CONFIG_URI}/node/${IOS_XE_NODE_NAMES[1]}/${MOUNTPOINT_IOSXE_SUFFIX}
- BuiltIn.Log ${security_group_json['source']['tag']} level=DEBUG
- BuiltIn.Log ${security_group_json['destination']['tag']} level=DEBUG
- BuiltIn.Should_Be_Equal_As_Integers 100 ${security_group_json['source']['tag']}
- BuiltIn.Should_Be_Equal_As_Integers 101 ${security_group_json['destination']['tag']}
- ${expected_templates} os.Get_File ${EP_PROVIDER_TEMPLATES_FILE}-3.1.json
- ${actual_templates} Utils.Get_Data_From_URI session ${SXP_EP_PROVIDER_CONFIG_URI}
- TemplatedRequests.Normalize_Jsons_And_Compare ${expected_templates} ${actual_templates}
-
-Configure_Sfc_And_Ios_Xe_Renderer_Using_Existing_Sgt
- [Documentation] Elicit netconf device configuration by providing sfc configurations and ios-xe renderer policy and ep-policy-templates
- Utils.Add_Elements_To_URI_From_File ${SXP_EP_PROVIDER_CONFIG_URI} ${EP_PROVIDER_TEMPLATES_FILE}-3.2.json
- ${renderer_policy} ${next_version} Provision_renderer_policy session ${GBP_RENDERER_POLICY_FILE}
- Utils.Add_Elements_To_URI_And_Verify ${GBP_RENDERER_CONFIG_URI}/renderer-policy ${renderer_policy}
- BuiltIn.Wait_Until_Keyword_Succeeds
- ... 30
- ... 2
- ... Check_Renderer_Policy_Status_Version
- ... session
- ... ${next_version}
- ${security_group_json} BuiltIn.Wait_Until_Keyword_Succeeds
- ... 20
- ... 2
- ... Seek_Security_Group
- ... session
- ... ${NETCONF_CONFIG_URI}/node/${IOS_XE_NODE_NAMES[1]}/${MOUNTPOINT_IOSXE_SUFFIX}
- BuiltIn.Log ${security_group_json['source']['tag']} level=DEBUG
- BuiltIn.Log ${security_group_json['destination']['tag']} level=DEBUG
- BuiltIn.Should_Be_Equal_As_Integers 43 ${security_group_json['source']['tag']}
- BuiltIn.Should_Be_Equal_As_Integers 42 ${security_group_json['destination']['tag']}
-
-
-*** Keywords ***
-Setup_Http_And_Netconf
- [Documentation] Setup http session, setup ssh session to tools, deploy netconf-testtool (with ios-xe schemas) and start
- reqLib.Create_Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS}
- ${tools_1_session} GbpSxp.Prepare_Ssh_Tooling ${TOOLS_SYSTEM_IP}
- ${tools_2_session} GbpSxp.Prepare_Ssh_Tooling ${TOOLS_SYSTEM_2_IP}
- @{tools_sessions} BuiltIn.Create_List ${tools_1_session} ${tools_2_session}
- BuiltIn.Set_Suite_Variable ${TOOLS_SESSIONS} ${tools_sessions}
- NetconfKeywords.Setup_NetconfKeywords
- ${run_netconf_testtool_manually} BuiltIn.Get_Variable_Value ${run_netconf_testtool_manually} ${False}
- ${logfile} Utils.Get_Log_File_Name testtool
- IF ${run_netconf_testtool_manually}
- BuiltIn.Set_Suite_Variable ${testtool_log} ${logfile}
- END
- FOR ${ssh_session} IN @{TOOLS_SESSIONS}
- SSHKeywords.Restore_Current_Ssh_Connection_From_Index ${ssh_session}
- IF not ${run_netconf_testtool_manually}
- Install_And_Start_Testtool
- ... device-count=1
- ... debug=false
- ... schemas=${IOS_XE_SCHEMAS_FOLDER}
- ... mdsal=true
- END
- END
-
-Teardown_Http_And_Netconf
- [Documentation] Close http session, close ssh session to tools, stop netconf-testtool
- FOR ${ssh_session} IN @{TOOLS_SESSIONS}
- BuiltIn.Log ${ssh_session}
- SSHKeywords.Restore_Current_Ssh_Connection_From_Index ${ssh_session}
- Stop_Testtool
- END
- gbpsxp.Teardown_Ssh_Tooling ${TOOLS_SESSIONS}
- RequestsLibrary.Delete_All_Sessions
-
-Prepare_Renderer_Prerequisities
- [Documentation] Prepare sfc configurations, connect netconf device
- FOR ${INDEX} IN RANGE 0 2
- BuiltIn.Log ${INDEX}
- ${netconf_node_configuration_json} Utils.Json_Parse_From_File ${NETCONF_CONFIG_IOSXE_NODE_FILE}
- ${netconf_node_configuration} gbpsxp.Replace_Netconf_Node_Host
- ... ${netconf_node_configuration_json}
- ... ${IOS_XE_NODE_NAMES[${INDEX}]}
- ... ${IOS_XE_IP[${INDEX}]}
- BuiltIn.Log ${netconf_node_configuration} level=DEBUG
- Utils.Add_Elements_To_URI_And_Verify
- ... ${NETCONF_CONFIG_URI}/node/${IOS_XE_NODE_NAMES[${INDEX}]}
- ... ${netconf_node_configuration}
- END
- FOR ${INDEX} IN RANGE 0 2
- BuiltIn.Log ${INDEX}
- BuiltIn.Wait_Until_Keyword_Succeeds
- ... 30
- ... 2
- ... Check_Netconf_Node_Status
- ... session
- ... ${NETCONF_OPERATIONAL_URI}/node/${IOS_XE_NODE_NAMES[${INDEX}]}
- BuiltIn.Wait_Until_Keyword_Succeeds
- ... 10x
- ... 3s
- ... TemplatedRequests.Get_From_Uri
- ... ${NETCONF_CONFIG_URI}/node/${IOS_XE_NODE_NAMES[${INDEX}]}/yang-ext:mount
- ... session=session
- END
- Utils.Add_Elements_To_URI_From_File ${SERVICE_FUNCTIONS_URI} ${SFC_SERVICE_FUNCTIONS_FILE}
- &{ip_mgmt_map} BuiltIn.Create_Dictionary SFF1=${TOOLS_SYSTEM_2_IP} SFF2=${TOOLS_SYSTEM_IP}
- ${sfc_sf_forwarders_json} Utils.Json_Parse_From_File ${SFC_SF_FORWARDERS_FILE}
- ${sfc_sf_forwarders} gbpsxp.Replace_Ip_Mgmt_Address_In_Forwarder ${sfc_sf_forwarders_json} ${ip_mgmt_map}
- Utils.Add_Elements_To_URI_And_Verify ${SERVICE_FORWARDERS_URI} ${sfc_sf_forwarders}
- Utils.Add_Elements_To_URI_From_File ${SERVICE_CHAINS_URI} ${SFC_SF_CHAINS_FILE}
- Utils.Add_Elements_To_URI_From_File ${SERVICE_FUNCTION_PATHS_URI} ${SFC_SF_PATHS_FILE}
-
-Check_Netconf_Node_Status
- [Documentation] Check if connection status of given node is 'connected'
- [Arguments] ${session_arg} ${node_operational_uri}
- ${node_content} Utils.Get_Data_From_URI ${session_arg} ${node_operational_uri}
- ${node_content_json} Utils.Json_Parse_From_String ${node_content}
- BuiltIn.Should_Be_Equal_As_Strings
- ... connected
- ... ${node_content_json['node'][0]['netconf-node-topology:connection-status']}
-
-Wipe_Clean_Renderer_Policy_Cohort
- [Documentation] Delete ep-policy-templates, renderer-policy, sfc configuraions, netconf-device config
- BuiltIn.Run_Keyword_And_Ignore_Error Utils.Remove_All_Elements_If_Exist ${SERVICE_FUNCTIONS_URI}
- BuiltIn.Run_Keyword_And_Ignore_Error Utils.Remove_All_Elements_If_Exist ${SERVICE_FORWARDERS_URI}
- BuiltIn.Run_Keyword_And_Ignore_Error Utils.Remove_All_Elements_If_Exist ${SERVICE_CHAINS_URI}
- BuiltIn.Run_Keyword_And_Ignore_Error Utils.Remove_All_Elements_If_Exist ${SERVICE_FUNCTION_PATHS_URI}
- BuiltIn.Run_Keyword_And_Ignore_Error Utils.Remove_All_Elements_If_Exist ${GBP_RENDERER_CONFIG_URI}
- # clean netconf-device config (behind mountpoint) and disconnect by removing it from DS/config
- FOR ${ios_xe_node_name} IN @{IOS_XE_NODE_NAMES}
- BuiltIn.Run_Keyword_And_Ignore_Error
- ... Utils.Remove_All_Elements_If_Exist
- ... ${NETCONF_CONFIG_URI}/node/${ios_xe_node_name}/${MOUNTPOINT_IOSXE_SUFFIX}
- BuiltIn.Run_Keyword_And_Ignore_Error
- ... Utils.Remove_All_Elements_If_Exist
- ... ${NETCONF_CONFIG_URI}/node/${ios_xe_node_name}
- END
- FOR ${ios_xe_node_name} IN @{IOS_XE_NODE_NAMES}
- BuiltIn.Wait_Until_Keyword_Succeeds
- ... 5
- ... 1
- ... Utils.No_Content_From_URI
- ... session
- ... ${NETCONF_OPERATIONAL_URI}/node/${ios_xe_node_name}
- END
- BuiltIn.Run_Keyword_And_Ignore_Error Utils.Remove_All_Elements_If_Exist ${SXP_EP_PROVIDER_CONFIG_URI}
- BuiltIn.Run_Keyword_And_Ignore_Error Utils.Remove_All_Elements_If_Exist ${GBP_TENANT_CONFIG_URI}
-
-Seek_Security_Group
- [Documentation] Read given DS and seek CONFIG['native']['class-map'][0]['match']['security-group']
- [Arguments] ${session_arg} ${config_uri}
- ${device_ds_config} Utils.Get_Data_From_URI ${session_arg} ${config_uri}
- ${device_ds_config_json} Utils.Json_Parse_From_String ${device_ds_config}
- RETURN ${device_ds_config_json['native']['class-map'][0]['match']['security-group']}
-
-Propose_Renderer_Configuration_Next_Version
- [Documentation] Read current renderer configuration status and compute next version or use 0 if status absents
- [Arguments] ${session_arg}
- ${renderer_policy} BuiltIn.Run_Keyword_And_Ignore_Error
- ... Utils.Get_Data_From_URI
- ... ${session_arg}
- ... ${GBP_RENDERER_POLICY_OPERATIONAL_URI}
- IF '${renderer_policy[0]}' != 'PASS' RETURN 0
- ${renderer_policy_json} Utils.Json_Parse_From_String ${renderer_policy[1]}
- ${current_version} BuiltIn.Convert_To_Integer ${renderer_policy_json['renderer-policy']['version']}
- RETURN ${current_version + 1}
-
-Provision_renderer_policy
- [Documentation] Replace version number in given renderer-policy in order to be the next expected value
- [Arguments] ${session_arg} ${renderer_policy_file}
- ${renderer_policy_json} Utils.Json_Parse_From_File ${renderer_policy_file}
- ${next_version} Propose_Renderer_Configuration_Next_Version ${session_arg}
- ${renderer_policy_updated} gbpsxp.Replace_Renderer_Policy_Version ${renderer_policy_json} ${next_version}
- RETURN ${renderer_policy_updated} ${next_version}
-
-Check_Renderer_Policy_Status_Version
- [Documentation] Read current renderer policy version and compare it to expected version
- [Arguments] ${session_arg} ${expected_version}
- ${renderer_policy} Utils.Get_Data_From_URI ${session_arg} ${GBP_RENDERER_POLICY_OPERATIONAL_URI}
- ${renderer_policy_json} Utils.Json_Parse_From_String ${renderer_policy}
- BuiltIn.Should_Be_Equal_As_Integers ${renderer_policy_json['renderer-policy']['version']} ${expected_version}
+++ /dev/null
-*** Settings ***
-Documentation Test suite for Group Based Policy, sxp-ise-adapter component.
-
-Library OperatingSystem WITH NAME os
-Library SSHLibrary
-Library RequestsLibrary
-Library DateTime
-Library ../../../libraries/GbpSxp.py WITH NAME gbpsxp
-Resource ../../../variables/Variables.robot
-Resource ../../../libraries/Utils.robot
-Resource ../../../libraries/TemplatedRequests.robot
-Resource ../../../libraries/GbpSxp.robot
-
-Suite Setup Setup_Ise_Cohort
-Suite Teardown Wipe_Clean_Ise_Source_Cohort
-
-
-*** Variables ***
-${CONFIGURE_ISE_SOURCE_FILE} ${CURDIR}/../../../variables/gbp/gbpsxp-ise-source.json
-${EXPECTED_EP_POLICY_TEMPLATES_FILE} ${CURDIR}/../../../variables/gbp/gbpsxp-ep-policy-templates.json
-${EXPECTED_TENANT_FILE} ${CURDIR}/../../../variables/gbp/gbpsxp-tenant.json
-${ISE_API_DIR} ${CURDIR}/../../../variables/gbp/ise-mock-server-api
-${ISE_MOCK_SERVER_API_FOLDER} mock-server-tc010
-
-
-*** Test Cases ***
-Configure_Ise_Source_And_Check_Results
- [Documentation] Configure ise source using JSON file,
- ... read status of ise-source harvest action (DS/operational/ise-source),
- ... read+check ep-templates and endpoint-groups
- ${ise_harvest_status_json} gbpsxp.Configure_Ise_Source_And_Gain_Harvest_Status
- ... session
- ... ${CONFIGURE_ISE_SOURCE_FILE}
- ... http://${TOOLS_SYSTEM_IP}:${ISE_REST_PORT}
- gbpsxp.Check_Ise_Harvest_Status ${ise_harvest_status_json} 5
- ${expected_templates} os.Get_File ${EXPECTED_EP_POLICY_TEMPLATES_FILE}
- ${actual_templates} Utils.Get_Data_From_URI session ${GBP_EP_TEMPLATES_CONFIG_URI}
- TemplatedRequests.Normalize_Jsons_And_Compare ${expected_templates} ${actual_templates}
- ${expected_tenant} os.Get_File ${EXPECTED_TENANT_FILE}
- ${actual_tenant} Utils.Get_Data_From_URI session ${GBP_TENANT_CONFIG_URI}
- TemplatedRequests.Normalize_Jsons_And_Compare ${expected_tenant} ${actual_tenant}
-
-
-*** Keywords ***
-Setup_Ise_Cohort
- [Documentation] Start ise mock and prepare restconf session
- RequestsLibrary.Create_Session
- ... session
- ... http://${ODL_SYSTEM_IP}:${RESTCONFPORT}
- ... auth=${AUTH}
- ... headers=${HEADERS}
- GbpSxp.Prepare_Ssh_Tooling
- gbpsxp.Deploy_Ise_Mock_Server ${ISE_MOCK_SERVER_API_FOLDER} ${ISE_REST_PORT}
-
-Wipe_Clean_Ise_Source_Cohort
- [Documentation] Delete ise-source config, all ep-policy-templates, all endpoint-groups
- gbpsxp.Clean_ise_source_config
- BuiltIn.Run_Keyword_And_Ignore_Error Utils.Remove_All_Elements_If_Exist ${GBP_EP_TEMPLATES_CONFIG_URI}
- BuiltIn.Run_Keyword_And_Ignore_Error Utils.Remove_All_Elements_If_Exist ${GBP_TENANT_CONFIG_URI}
- gbpsxp.Teardown_Ise_Mock_Server ${ISE_MOCK_SERVER_API_FOLDER}
- gbpsxp.Teardown_Ssh_Tooling
- RequestsLibrary.Delete_All_Sessions
+++ /dev/null
-*** Settings ***
-Documentation Test suite for Group Based Policy, Operates functions from Restconf APIs.
-
-Library SSHLibrary
-Library Collections
-Library OperatingSystem
-Library RequestsLibrary
-Variables ../../../variables/Variables.py
-Resource ../../../libraries/Utils.robot
-
-Suite Setup Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS}
-Suite Teardown Delete All Sessions
-
-
-*** Variables ***
-${REGISTER_ENDPOINT_FILE} ../../../variables/gbp/register-endpoint.json
-${UNREGISTER_ENDPOINT_FILE} ../../../variables/gbp/unregister-endpoint.json
-
-
-*** Test Cases ***
-Register and Unregister Endpoint
- [Documentation] Register and Unregister Endpoint from JSON file
- Post Elements To URI From File ${GBP_REGEP_API} ${REGISTER_ENDPOINT_FILE}
- Post Elements To URI From File ${GBP_UNREGEP_API} ${UNREGISTER_ENDPOINT_FILE}
+++ /dev/null
-*** Settings ***
-Documentation Test suite for GBP Tenants, Operates functions from Restconf APIs.
-
-Library SSHLibrary
-Library Collections
-Library OperatingSystem
-Library RequestsLibrary
-Variables ../../../variables/Variables.py
-Resource ../../../libraries/CompareStream.robot
-Resource ../../../libraries/Utils.robot
-
-Suite Setup Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS}
-Suite Teardown Delete All Sessions
-
-
-*** Test Cases ***
-Init Variables
- [Documentation] Initialize ODL version specific variables using resource CompareStream.
- Init Variables Master
-
-Add Tenants
- [Documentation] Add Tenants from JSON file
- Add Elements To URI From File ${GBP_TENANTS_API} ${GBP_TENANTS_FILE}
- ${body} OperatingSystem.Get File ${GBP_TENANTS_FILE}
- ${jsonbody} To Json ${body}
- ${resp} RequestsLibrary.Get Request session ${GBP_TENANTS_API}
- Should Be Equal As Strings ${resp.status_code} 200
- ${result} To JSON ${resp.content}
- Lists Should be Equal ${jsonbody} ${result}
-
-Delete All Tenants
- [Documentation] Delete all Tenants
- Add Elements To URI From File ${GBP_TENANTS_API} ${GBP_TENANTS_FILE}
- ${body} OperatingSystem.Get File ${GBP_TENANTS_FILE}
- ${jsonbody} To Json ${body}
- ${resp} RequestsLibrary.Get Request session ${GBP_TENANTS_API}
- Should Be Equal As Strings ${resp.status_code} 200
- Remove All Elements At URI ${GBP_TENANTS_API}
- ${resp} RequestsLibrary.Get Request session ${GBP_TENANTS_API}
- Should Be Equal As Strings ${resp.status_code} 404
-
-Add one Tenant
- [Documentation] Add one Tenant from JSON file
- Add Elements To URI From File ${GBP_TENANT1_API} ${GBP_TENANT1_FILE}
- ${body} OperatingSystem.Get File ${GBP_TENANT1_FILE}
- ${jsonbody} To Json ${body}
- ${resp} RequestsLibrary.Get Request session ${GBP_TENANT1_API}
- Should Be Equal As Strings ${resp.status_code} 200
- ${result} To JSON ${resp.content}
- Lists Should be Equal ${result} ${jsonbody}
-
-Get A Non-existing Tenant
- [Documentation] Get A Non-existing Tenant
- Remove All Elements At URI ${GBP_TENANTS_API}
- ${resp} RequestsLibrary.Get Request session ${GBP_TENANT1_API}
- Should Be Equal As Strings ${resp.status_code} 404
-
-Delete one Tenant
- [Documentation] Delete one Tenant
- Remove All Elements At URI ${GBP_TENANTS_API}
- Add Elements To URI From File ${GBP_TENANT1_API} ${GBP_TENANT1_FILE}
- Remove All Elements At URI ${GBP_TENANT1_API}
- ${resp} RequestsLibrary.Get Request session ${GBP_TENANTS_API}
- Should Be Equal As Strings ${resp.status_code} 200
- Should Not Contain ${resp.content} ${GBP_TENANT_ID}
-
-Clean Datastore After Tests
- [Documentation] Clean All Tenants In Datastore After Tests
- Remove All Elements At URI ${GBP_TENANTS_API}
-
-
-*** Keywords ***
-Init Variables Master
- [Documentation] Sets variables specific to latest(master) version
- Set Suite Variable ${GBP_TENANT_ID} tenant-red
- Set Suite Variable ${GBP_TENANT1_API} /restconf/config/policy:tenants/policy:tenant/${GBP_TENANT_ID}
- Set Suite Variable ${GBP_TENANTS_FILE} ${CURDIR}../../../variables/gbp/master/tenants.json
- Set Suite Variable ${GBP_TENANT1_FILE} ${CURDIR}../../../variables/gbp/master/tenant1.json
+++ /dev/null
-*** Settings ***
-Documentation Test suite for GBP Tunnels, Operates functions from Restconf APIs.
-
-Library SSHLibrary
-Library Collections
-Library OperatingSystem
-Library RequestsLibrary
-Variables ../../../variables/Variables.py
-Resource ../../../libraries/Utils.robot
-
-Suite Setup Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS}
-Suite Teardown Delete All Sessions
-
-
-*** Variables ***
-${GBP_TUNNELS_FILE} ../../../variables/gbp/tunnels.json
-${GBP_TUNNEL_ID} openflow:1
-${GBP_TUNNEL1_URL} /restconf/config/opendaylight-inventory:nodes/opendaylight-inventory:node/${GBP_TUNNEL_ID}
-${GBP_TUNNEL1_FILE} ../../../variables/gbp/tunnel1.json
-
-
-*** Test Cases ***
-Add Tunnels
- [Documentation] Add Tunnels from JSON file
- Add Elements To URI From File ${GBP_TUNNELS_API} ${GBP_TUNNELS_FILE}
- ${body} OperatingSystem.Get File ${GBP_TUNNELS_FILE}
- ${jsonbody} To Json ${body}
- ${resp} RequestsLibrary.Get Request session ${GBP_TUNNELS_API}
- Should Be Equal As Strings ${resp.status_code} 200
- ${result} To JSON ${resp.content}
- Lists Should be Equal ${jsonbody} ${result}
-
-Delete All Tunnels
- [Documentation] Delete all Tunnels
- Add Elements To URI From File ${GBP_TUNNELS_API} ${GBP_TUNNELS_FILE}
- ${body} OperatingSystem.Get File ${GBP_TUNNELS_FILE}
- ${jsonbody} To Json ${body}
- ${resp} RequestsLibrary.Get Request session ${GBP_TUNNELS_API}
- Should Be Equal As Strings ${resp.status_code} 200
- Remove All Elements At URI ${GBP_TUNNELS_API}
- ${resp} RequestsLibrary.Get Request session ${GBP_TUNNELS_API}
- Should Be Equal As Strings ${resp.status_code} 404
-
-Add one Tunnel
- [Documentation] Add one Tunnel from JSON file
- Add Elements To URI From File ${GBP_TUNNEL1_URL} ${GBP_TUNNEL1_FILE}
- ${body} OperatingSystem.Get File ${GBP_TUNNEL1_FILE}
- ${jsonbody} To Json ${body}
- ${resp} RequestsLibrary.Get Request session ${GBP_TUNNEL1_URL}
- Should Be Equal As Strings ${resp.status_code} 200
- ${result} To JSON ${resp.content}
- Lists Should be Equal ${result} ${jsonbody}
-
-Get A Non-existing Tunnel
- [Documentation] Get A Non-existing Tunnel
- Remove All Elements At URI ${GBP_TUNNELS_API}
- ${resp} RequestsLibrary.Get Request session ${GBP_TUNNEL1_URL}
- Should Be Equal As Strings ${resp.status_code} 404
-
-Delete one Tunnel
- [Documentation] Delete one Tunnel
- Remove All Elements At URI ${GBP_TUNNELS_API}
- Add Elements To URI From File ${GBP_TUNNEL1_URL} ${GBP_TUNNEL1_FILE}
- Remove All Elements At URI ${GBP_TUNNEL1_URL}
- ${resp} RequestsLibrary.Get Request session ${GBP_TUNNELS_API}
- Should Be Equal As Strings ${resp.status_code} 200
- Should Not Contain ${resp.content} ${GBP_TUNNEL_ID}
-
-Clean Datastore After Tests
- [Documentation] Clean All Tunnels In Datastore After Tests
- Remove All Elements At URI ${GBP_TUNNELS_API}
+++ /dev/null
-#!/usr/bin/env bash
-
-set -e
-
-sw=$(sudo ovs-vsctl show | egrep -E 'Bridge.*sw' | awk '{print $2}' | sed -e 's/^"//' -e 's/"$//')
-if [ "$sw" ]
-then
- sudo ovs-vsctl del-br $sw
-fi
-sudo ovs-vsctl del-manager;
-
-docker stop -t=1 $(docker ps -a -q) > /dev/null 2>&1
-docker rm $(docker ps -a -q) > /dev/null 2>&1
-
-sudo /etc/init.d/openvswitch-switch stop > /dev/null
-sudo rm /etc/openvswitch/conf.db > /dev/null
-sudo /etc/init.d/openvswitch-switch start > /dev/null
\ No newline at end of file
+++ /dev/null
-#!/usr/bin/python
-
-from subprocess import check_output
-
-
-def call_dpctl():
- cmd = "ovs-dpctl dump-flows"
- listcmd = cmd.split()
- return check_output(listcmd)
-
-
-if __name__ == "__main__":
- flows = call_dpctl().split("recirc_id")
- for flow in flows:
- print(flow)
+++ /dev/null
-#!/usr/bin/env bash
-
-set -e
-hostnum=${HOSTNAME#"gbpsfc"}
-sw="sw$hostnum"
-
-TABLE=$1
-
-clear
-ovs-ofctl dump-groups $sw -OOpenFlow13
-if [ "$TABLE" ]
-then
- ovs-ofctl dump-flows $sw -OOpenFlow13 table=$TABLE
-else
- ovs-ofctl dump-flows $sw -OOpenFlow13
-fi
-
+++ /dev/null
-#!/usr/bin/env bash
-
-: ' Returns ovs-ofctl dump-flows command output for a table
- specified in argument by table ID and ovs-ofctl dump-groups
- output. If no table specified in args, the sum of flows for
- each table is returned in the output.
-'
-
-set -e
-
-sw=$(sudo ovs-vsctl show | egrep -E 'Bridge.*sw' | awk '{print $2}' | sed -e 's/"//g')
-if [ "$1" ]
-then
- echo "GROUPS:";
- ovs-ofctl dump-groups $sw -OOpenFlow13;
- echo;echo "FLOWS:";ovs-ofctl dump-flows $sw -OOpenFlow13 table=$1 --rsort=priority
- echo
- printf "Flow count: "
- echo $(($(ovs-ofctl dump-flows $sw -OOpenFlow13 table=$1 | wc -l)-1))
-else
- printf "No table entered. $sw flow count: ";
- echo $(($(ovs-ofctl dump-flows $sw -OOpenFlow13 | wc -l)-1))
- printf "\nTable0: PortSecurity: "; echo $(($(ovs-ofctl dump-flows $sw -OOpenFlow13 table=0| wc -l)-1))
- printf "\nTable1: IngressNat: "; echo $(($(ovs-ofctl dump-flows $sw -OOpenFlow13 table=1| wc -l)-1))
- printf "\nTable2: SourceMapper: "; echo $(($(ovs-ofctl dump-flows $sw -OOpenFlow13 table=2| wc -l)-1))
- printf "\nTable3: DestMapper: "; echo $(($(ovs-ofctl dump-flows $sw -OOpenFlow13 table=3| wc -l)-1))
- printf "\nTable4: PolicyEnforcer:"; echo $(($(ovs-ofctl dump-flows $sw -OOpenFlow13 table=4| wc -l)-1))
- printf "\nTable5: EgressNAT: "; echo $(($(ovs-ofctl dump-flows $sw -OOpenFlow13 table=5| wc -l)-1))
- printf "\nTable6: External: "; echo $(($(ovs-ofctl dump-flows $sw -OOpenFlow13 table=6| wc -l)-1))
-fi
-
+++ /dev/null
-#!/usr/bin/python
-
-"""
-Spin-up script for Opendaylight GBP and GBPSFC sample concept demonstrations.
-
-This script has to be run from the environment on which OVS switches and Docker
-containers are located. This script works together with infrastructure_config.py
-configuration script where the entire topology for specific scenario is configured. This
-file defines to which already existing switch docker containers have to be connected.
-OVS switch have to be created on the same hosting environment as this script is executed
-from. Local switch name should match one of the names specified in configuration file so that
-docker containers are created and connected to it.
-
-Updated: 22.10.2015
-
-"""
-
-import socket
-import os
-import sys
-import ipaddr
-from subprocess import call
-from subprocess import check_output
-from infrastructure_config import switches
-from infrastructure_config import hosts
-from infrastructure_config import defaultContainerImage
-
-
-def add_controller(sw, ip):
- """Connects OVS switch to a controller. The switch is specified
- by it's name and the controller by it's IP address.
-
- Args:
- :param sw: name of a switch on which controller is set
-
- :param ip: IP address of controller
-
- NOTE:
- :Required controller should listen on TCP port 6653.
- """
-
- try:
- socket.inet_aton(ip)
- except socket.error:
- print("Error: %s is not a valid IPv4 address of controller!" % (ip))
- os.exit(2)
-
- call(["sudo", "ovs-vsctl", "set-controller", sw, "tcp:%s:6653" % ip])
-
-
-def add_manager(ip):
- """Sets OVSDB manager for OVS instance.
-
- Args:
- :param ip: IP address of specified manager
-
- NOTE:
- :Required manager should listen on TCP port 6640.
- """
-
- try:
- socket.inet_aton(ip)
- except socket.error:
- print("Error: %s is not a valid IPv4 address of manager!" % (ip))
- os.exit(2)
-
- cmd = ["sudo", "ovs-vsctl", "set-manager", "tcp:%s:6640" % ip]
- call(cmd)
-
-
-def add_switch(name, dpid=None):
- """Adds switch to OVS instance and sets it's DataPath ID
- if specified.
-
- Args:
- :param ip: name of new switch
-
- :param dpid: DataPath ID of new switch
- """
-
- call(["sudo", "ovs-vsctl", "add-br", name]) # Add bridge
- if dpid:
- if len(dpid) < 16: # DPID must be 16-bytes in later versions of OVS
- filler = "0000000000000000"
- # prepending zeros to match 16-byt length, e.g. 123 -> 0000000000000123
- dpid = filler[: len(filler) - len(dpid)] + dpid
- elif len(dpid) > 16:
- print("DPID: %s is too long" % dpid)
- sys.exit(3)
- call(
- [
- "sudo",
- "ovs-vsctl",
- "set",
- "bridge",
- name,
- "other-config:datapath-id=%s" % dpid,
- ]
- )
-
-
-def set_of_version(sw, version="OpenFlow13,OpenFlow12,OpenFlow10"):
- """Sets OpenFlow protocol versions on OVS switch
-
- Args:
- :param sw: name of switch
-
- :param sw: OpenFlow versions to support on switch
- """
-
- call(["sudo", "ovs-vsctl", "set", "bridge", sw, "protocols={}".format(version)])
-
-
-def add_vxlan_tunnel(sw):
- """Adds VXLAN tunnel to OVS switch.
-
- Args:
- :param sw: name of switch
-
- NOTE:
- :Remote IP is read from flows.
- """
- ifaceName = "{}-vxlan-0".format(sw)
- cmd = [
- "sudo",
- "ovs-vsctl",
- "add-port",
- sw,
- ifaceName,
- "--",
- "set",
- "Interface",
- ifaceName,
- "type=vxlan",
- "options:remote_ip=flow",
- "options:key=flow",
- ]
- call(cmd)
-
-
-def add_gpe_tunnel(sw):
- """Adds GPE tunnel to OVS switch.
-
- Args:
- :param sw: name of switch
-
- :param dpid: DataPath ID of new switches
-
- NOTE:
- :Remote IP is read from flows.
- """
-
- ifaceName = "{}-vxlangpe-0".format(sw)
- cmd = [
- "sudo",
- "ovs-vsctl",
- "add-port",
- sw,
- ifaceName,
- "--",
- "set",
- "Interface",
- ifaceName,
- "type=vxlan",
- "options:remote_ip=flow",
- "options:dst_port=6633",
- "options:nshc1=flow",
- "options:nshc2=flow",
- "options:nshc3=flow",
- "options:nshc4=flow",
- "options:nsp=flow",
- "options:nsi=flow",
- "options:key=flow",
- ]
- call(cmd)
-
-
-def launch_container(host, containerImage):
- # TODO use Docker.py
- """Runs docker container in background.
-
- Args:
- :param host: container host name
-
- :param dpid: DataPath ID of new switch
-
- Returns:
- :returns string: container ID
-
- NOTE:
- :No networking set.
-
- """
-
- containerID = check_output(
- [
- "docker",
- "run",
- "-d",
- "--net=none",
- "--name=%s" % host["name"],
- "-h",
- host["name"],
- "-t",
- "-i",
- "--privileged=True",
- containerImage,
- "/bin/bash",
- ]
- )
- return containerID[:-1] # Remove extraneous \n from output of above
-
-
-def connect_container_to_switch(sw, host, containerID):
- """Connects docker to OVS switch.
-
- Args:
- :param sw: name of switch
-
- :param host: host object to process.
- Here is an example of such as object
- {'name': 'h35_2',
- 'mac': '00:00:00:00:35:02',
- 'ip': '10.0.35.2/24',
- 'switch': 'sw1'}
- Note: 'switch' - name of OVS switch to
- which the host will be connected
-
- :param containerID: ID of docker container
- """
-
- hostIP = host["ip"]
- mac = host["mac"]
- nw = ipaddr.IPv4Network(hostIP)
- broadcast = "{}".format(nw.broadcast)
- router = "{}".format(nw.network + 1)
- ovswork_path = os.path.dirname(os.path.realpath(__file__)) + "/ovswork.sh"
- cmd = [ovswork_path, sw, containerID, hostIP, broadcast, router, mac, host["name"]]
- if ("vlan") in host:
- cmd.append(host["vlan"])
- call(cmd)
-
-
-def launch(switches, hosts, odl_ip="127.0.0.1"):
- """Connects hosts to switches. Arguments are
- tied to underlying configuration file. Processing runs
- for switch, that is present on local environment and
- for hosts configured to be connected to the switch.
-
- Args:
- :param switches: switches to connect to
- Example of switch object
- {'name': 'sw1',
- 'dpid': '1'}
-
- :param hosts: hosts to connect
- Example of host object
- {'name': 'h35_2',
- 'mac': '00:00:00:00:35:02',
- 'ip': '10.0.35.2/24',
- 'switch': 'sw1'}
- Note: 'switch' - name of OVS switch to
- which the host will be connected
-
- :param odl_ip: IP address of ODL, acting as
- both - manager and controller.
- Default value is '127.0.0.1'
- """
-
- for sw in switches:
- add_manager(odl_ip)
- ports = 0
- first_host = True
- for host in hosts:
- if host["switch"] == sw["name"]:
- if first_host:
- add_switch(sw["name"], sw["dpid"])
- set_of_version(sw["name"])
- add_controller(sw["name"], odl_ip)
- add_gpe_tunnel(sw["name"])
- add_vxlan_tunnel(sw["name"])
- first_host = False
- containerImage = defaultContainerImage # from Config
- if ("container_image") in host: # from Config
- containerImage = host["container_image"]
- containerID = launch_container(host, containerImage)
- ports += 1
- connect_container_to_switch(sw["name"], host, containerID)
- host["port-name"] = "vethl-" + host["name"]
- print(
- "Created container: %s with IP: %s. Connect using docker attach %s,"
- "disconnect with 'ctrl-p-q'."
- % (host["name"], host["ip"], host["name"])
- )
-
-
-if __name__ == "__main__":
- if len(sys.argv) < 2 or len(sys.argv) > 3:
- print("Please, specify IP of ODL and switch index in arguments.")
- print("usage: ./infrastructure_launch.py ODL_IP SWITCH_INDEX")
- sys.exit(2)
-
- controller = sys.argv[1]
- try:
- socket.inet_aton(controller)
- except socket.error:
- print("Error: %s is not a valid IPv4 address!" % (controller))
- sys.exit(2)
-
- sw_index = int(sys.argv[2])
- print(sw_index)
- print(switches[sw_index])
- if sw_index not in range(0, len(switches) + 1):
- print(len(switches) + 1)
- print("Error: %s is not a valid switch index!" % (sw_index))
- sys.exit(2)
-
- sw_type = switches[sw_index]["type"]
- sw_name = switches[sw_index]["name"]
- if sw_type == "gbp":
- print("*****************************")
- print("Configuring %s as a GBP node." % (sw_name))
- print("*****************************")
- print
- launch([switches[sw_index]], hosts, controller)
- print("*****************************")
- print("OVS status:")
- print("-----------")
- print
- call(["sudo", "ovs-vsctl", "show"])
- print
- print("Docker containers:")
- print("------------------")
- call(["docker", "ps"])
- print("*****************************")
- elif sw_type == "sff":
- print("*****************************")
- print("Configuring %s as an SFF." % (sw_name))
- print("*****************************")
- call(["sudo", "ovs-vsctl", "set-manager", "tcp:%s:6640" % controller])
- print
- elif sw_type == "sf":
- print("*****************************")
- print("Configuring %s as an SF." % (sw_name))
- print("*****************************")
- call(
- [
- "%s/sf-config.sh" % os.path.dirname(os.path.realpath(__file__)),
- "%s" % sw_name,
- ]
- )
+++ /dev/null
-#!/usr/bin/env bash
-set -e
-
-BRIDGE=$1
-GUEST_ID=$2
-IPADDR=$3
-BROADCAST=$4
-GWADDR=$5
-MAC=$6
-GUESTNAME=$7
-VLANTAG=$8
-
-[ "$IPADDR" ] || {
- echo "Syntax:"
- echo "pipework <bridge> <guest-id> <ipaddr>/<subnet> <broadcast> <gateway> <mac> <guestname> [vlan tag]"
- exit 1
-}
-
-# Step 1: Find the guest (for now, we only support LXC containers)
-while read dev mnt fstype options dump fsck
-do
- [ "$fstype" != "cgroup" ] && continue
- echo $options | grep -qw devices || continue
- CGROUPMNT=$mnt
-done < /proc/mounts
-
-[ "$CGROUPMNT" ] || {
- echo "Could not locate cgroup mount point."
- exit 1
-}
-
-N=$(find "$CGROUPMNT" -name "$GUEST_ID*" | wc -l)
-case "$N" in
- 0)
- echo "Could not find any container matching $GUEST_ID"
- exit 1
- ;;
- 1)
- true
- ;;
- *)
- echo "Found more than one container matching $GUEST_ID"
- exit 1
- ;;
-esac
-
-NSPID=$(head -n 1 $(find "$CGROUPMNT" -name "$GUEST_ID*" | head -n 1)/tasks)
-[ "$NSPID" ] || {
- echo "Could not find a process inside container $GUEST_ID"
- exit 1
-}
-
-# Step 2: Prepare the working directory
-sudo mkdir -p /var/run/netns
-sudo rm -f /var/run/netns/$NSPID
-sudo ln -s /proc/$NSPID/ns/net /var/run/netns/$NSPID
-
-# Step 3: Creating virtual interfaces
-LOCAL_IFNAME=vethl-$GUESTNAME #$NSPID
-GUEST_IFNAME=vethg-$GUESTNAME #$NSPID
-sudo ip link add name $LOCAL_IFNAME type veth peer name $GUEST_IFNAME
-sudo ip link set $LOCAL_IFNAME up
-
-# Step 4: Adding the virtual interface to the bridge
-sudo ip link set $GUEST_IFNAME netns $NSPID
-if [ "$VLANTAG" ]
-then
- sudo ovs-vsctl add-port $BRIDGE $LOCAL_IFNAME tag=$VLANTAG
- echo $LOCAL_IFNAME
-else
- sudo ovs-vsctl add-port $BRIDGE $LOCAL_IFNAME
- echo $LOCAL_IFNAME
-fi
-
-# Step 5: Configure networking within the container
-sudo ip netns exec $NSPID ip link set $GUEST_IFNAME name eth0
-sudo ip netns exec $NSPID ip addr add $IPADDR broadcast $BROADCAST dev eth0
-sudo ip netns exec $NSPID ifconfig eth0 hw ether $MAC
-sudo ip netns exec $NSPID ip addr add 127.0.0.1 dev lo
-sudo ip netns exec $NSPID ip link set eth0 up
-sudo ip netns exec $NSPID ip link set lo up
-sudo ip netns exec $NSPID ip route add default via $GWADDR
-
+++ /dev/null
-#!/usr/bin/env bash
-TABLE=$1
-watch -n 1 -d "flowCount.sh $1"
-
+++ /dev/null
-hostnum=${HOSTNAME#"gbpsfc"}
-sw="sw$hostnum"
-echo "Deleting controller for $sw"
-ovs-vsctl del-controller $sw;
-if [[ $? -ne 0 ]] ; then
- exit 1
-fi
-echo "Sleeping for 6sec..."
-sleep 6
-echo "Setting controller to $ODL"
-ovs-vsctl set-controller $sw tcp:$ODL:6653
+++ /dev/null
-#!/usr/bin/env bash
-
-set -e
-
-sw=$1
-
-sudo ovs-vsctl add-br $sw
-sudo ovs-vsctl add-port $sw $sw-vxlangpe-0 -- set interface $sw-vxlangpe-0 type=vxlan options:remote_ip=flow options:dst_port=6633 options:nshc1=flow options:nshc2=flow options:nshc3=flow options:nshc4=flow options:nsp=flow options:nsi=flow options:key=flow
+++ /dev/null
-ovs-appctl ofproto/trace $1