X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=csit%2Flibraries%2FTopoprocessingKeywords.robot;h=6f60263945ac97ec707791ae27864bfcd4f7c5c1;hb=5e0db03559ff014b9edcf705995e0c862fe363ca;hp=bc4afa4ff9740a5327a6d22a85ea58b4ec2f0428;hpb=2f664e77c535f11950e108d3aafe3582e8db9762;p=integration%2Ftest.git diff --git a/csit/libraries/TopoprocessingKeywords.robot b/csit/libraries/TopoprocessingKeywords.robot index bc4afa4ff9..6f60263945 100644 --- a/csit/libraries/TopoprocessingKeywords.robot +++ b/csit/libraries/TopoprocessingKeywords.robot @@ -1,24 +1,31 @@ *** Settings *** -Variables ../variables/Variables.py -Variables ../variables/topoprocessing/Topologies.py -Variables ../variables/topoprocessing/TopologyRequests.py -Library RequestsLibrary -Library SSHLibrary -Library XML -Resource KarafKeywords.robot -Resource Utils.robot +Variables ../variables/Variables.py +Variables ../variables/topoprocessing/Topologies.py +Variables ../variables/topoprocessing/TopologyRequests.py +Library RequestsLibrary +Library SSHLibrary +Library XML +Resource CompareStream.robot +Resource KarafKeywords.robot +Resource SetupUtils.robot +Resource Utils.robot + *** Variables *** ${CONFIGURATION_XML} ${CURDIR}/../suites/topoprocessing/configuration.xml -${OPERATIONAL_XML} ${CURDIR}/../suites/topoprocessing/operational.xml -${REMOTE_FILE} ${WORKSPACE}/${BUNDLEFOLDER}/etc/opendaylight/karaf/80-topoprocessing-config.xml -${OUTPUT_TOPO_NAME} topo:1 -${OVERLAY_TOPO_URL} ${TOPOLOGY_URL}/${OUTPUT_TOPO_NAME} +${OPERATIONAL_XML} ${CURDIR}/../suites/topoprocessing/operational.xml +${CONFIGURATION_CFG} ${CURDIR}/../suites/topoprocessing/configuration.cfg +${OPERATIONAL_CFG} ${CURDIR}/../suites/topoprocessing/operational.cfg +${REMOTE_XML_FILE} ${WORKSPACE}/${BUNDLEFOLDER}/etc/opendaylight/karaf/80-topoprocessing-config.xml +${REMOTE_CFG_FILE} ${WORKSPACE}/${BUNDLEFOLDER}/etc/org.opendaylight.topoprocessing.cfg +${OUTPUT_TOPO_NAME} topo:1 +${OVERLAY_TOPO_URL} ${TOPOLOGY_URL}/${OUTPUT_TOPO_NAME} + *** Keywords *** Basic Request Put - [Arguments] ${request} ${overlay_topology_url} [Documentation] Send a simple HTTP PUT request to Configurational datastore + [Arguments] ${request} ${overlay_topology_url} ${resp} Put Request session ${CONFIG_API}/${overlay_topology_url} data=${request} Log ${CONFIG_API}/${overlay_topology_url} Should Match "${resp.status_code}" "20?" @@ -26,80 +33,90 @@ Basic Request Put Wait For Karaf Log Transaction successfully written Basic Request Get - [Arguments] ${overlay_topology_url} [Documentation] Send a simple HTTP GET request to a given URL + [Arguments] ${overlay_topology_url} ${resp} Get Request session ${OPERATIONAL_API}/${overlay_topology_url} Should Be Equal As Strings ${resp.status_code} 200 - [Return] ${resp} + RETURN ${resp} Send Basic Delete Request - [Arguments] ${url} [Documentation] Sends a HTTP/DELETE request to a given URL + [Arguments] ${url} ${resp} Delete Request session ${CONFIG_API}/${url} Log Deleting ${CONFIG_API}/${url} - [Return] ${resp} + RETURN ${resp} Delete Underlay Node - [Arguments] ${topology-id} ${node-id} [Documentation] Deletes a node from an underlay topology + [Arguments] ${topology-id} ${node-id} ${resp} Send Basic Delete Request ${TOPOLOGY_URL}/${topology-id}/node/${node-id} - [Return] ${resp} + RETURN ${resp} Delete Underlay Termination Point - [Arguments] ${topology-id} ${node-id} ${tp-id} [Documentation] Deletes a termination point from an underlay topology + [Arguments] ${topology-id} ${node-id} ${tp-id} ${resp} Send Basic Delete Request ${TOPOLOGY_URL}/${topology-id}/node/${node-id}/termination-point/${tp-id} - [Return] ${resp} + RETURN ${resp} Delete Underlay Link - [Arguments] ${topology-id} ${link-id} [Documentation] Deletes a link from an underlay topology + [Arguments] ${topology-id} ${link-id} ${resp} Send Basic Delete Request ${TOPOLOGY_URL}/${topology-id}/link/${link-id} - [Return] ${resp} + RETURN ${resp} Setup Environment [Documentation] Setup karaf enviroment for following tests Log ---- Setup Environment ---- + SetupUtils.Setup_Utils_For_Setup_And_Teardown Open Connection ${ODL_SYSTEM_IP} Flexible Controller Login - Put File ${CONFIGURATION_XML} ${REMOTE_FILE} + Put File ${CONFIGURATION_CFG} ${REMOTE_CFG_FILE} Close Connection - Issue Command On Karaf Console log:set DEBUG org.opendaylight.topoprocessing - Install a Feature odl-restconf-noauth timeout=30 - Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${SEND_ACCEPT_XML_HEADERS} - Install Features odl-openflowplugin-nsf-model odl-topoprocessing-framework odl-topoprocessing-network-topology odl-topoprocessing-inventory odl-mdsal-models odl-ovsdb-southbound-impl + Wait Until Keyword Succeeds + ... 2x + ... 2s + ... Issue Command On Karaf Console + ... log:set DEBUG org.opendaylight.topoprocessing + Create Session + ... session + ... http://${ODL_SYSTEM_IP}:${RESTCONFPORT} + ... auth=${AUTH} + ... headers=${SEND_ACCEPT_XML_HEADERS} Prepare New Feature Installation Insert Underlay topologies Install Features - [Arguments] ${features} ${timeout}=180 [Documentation] Install features according to tested distribution - Run Keyword If '${ODL_STREAM}' == 'beryllium' Install Features for Beryllium Distribution ${features} ${timeout} - ... ELSE Install Features for Other Distributions ${features} ${timeout} + [Arguments] ${features} ${timeout}=180 + Install Features for Other Distributions ${features} ${timeout} Install Features for Beryllium Distribution - [Arguments] ${features} ${timeout} [Documentation] Will wait for features to install only once per run + [Arguments] ${features} ${timeout} Install a Feature ${features} timeout=${timeout} Set Global Variable If It Does Not Exist \${WAIT_FOR_FEATURES_TO_INSTALL} ${TRUE} - Run Keyword If ${WAIT_FOR_FEATURES_TO_INSTALL} Run Keywords Wait For Karaf Log Registering Topology Request Listener ${timeout} - ... AND Set Global Variable \${WAIT_FOR_FEATURES_TO_INSTALL} ${FALSE} + IF ${WAIT_FOR_FEATURES_TO_INSTALL} + Wait For Karaf Log Registering Topology Request Listener ${timeout} + Set Global Variable \${WAIT_FOR_FEATURES_TO_INSTALL} ${FALSE} + END Install Features for Other Distributions - [Arguments] ${features} ${timeout} [Documentation] Will wait for features to install only if no topoprocessing feature was installed + [Arguments] ${features} ${timeout} ${installed_features} Issue Command On Karaf Console feature:list -i ${lines} Get Lines Containing String ${installed_features} odl-topoprocessing-framework ${length} Get Length ${lines} Install a Feature ${features} timeout=${timeout} - Run Keyword If ${length} == 0 Wait For Karaf Log Registering Topology Request Listener ${timeout} + IF ${length} == 0 + Wait For Karaf Log Registering Topology Request Listener ${timeout} + END Clean Environment [Documentation] Revert startup changes Log ---- Clean Environment ---- Open Connection ${ODL_SYSTEM_IP} Flexible Controller Login - Put File ${OPERATIONAL_XML} ${REMOTE_FILE} + Put File ${OPERATIONAL_CFG} ${REMOTE_CFG_FILE} Close Connection Delete All Sessions @@ -116,7 +133,7 @@ Print Output Topo Log ---- Output Topo Dump After Cooldown---- Sleep 2s ${resp} Wait Until Keyword Succeeds 5x 250ms Basic Request Get ${OVERLAY_TOPO_URL} - Log ${resp.content} + Log ${resp.text} Refresh Underlay Topologies And Delete Overlay Topology [Documentation] Deletes given overlay topology from datastore and overwrites the underlaying ones with initial topologies @@ -133,227 +150,390 @@ Insert Underlay Topologies [Documentation] Insert underlay topologies used by following tests Log Inserting underlay topologies # Network underlay topologies - : FOR ${index} IN RANGE 1 7 - \ ${resp} Put Request session ${CONFIG_API}/${TOPOLOGY_URL}/network-topo:${index} data=${NETWORK_UNDERLAY_TOPOLOGY_${index}} - \ Log ${resp.content} - \ Should Match "${resp.status_code}" "20?" - # Openflow underlay nodes + FOR ${index} IN RANGE 1 7 + ${resp} Put Request + ... session + ... ${CONFIG_API}/${TOPOLOGY_URL}/network-topo:${index} + ... data=${NETWORK_UNDERLAY_TOPOLOGY_${index}} + Log ${resp.text} + Should Match "${resp.status_code}" "20?" + # Openflow underlay nodes + END ${resp} Put Request session ${CONFIG_API}/opendaylight-inventory:nodes data=${OPENFLOW_UNDERLAY_NODES} - Log ${resp.content} + Log ${resp.text} Should Match "${resp.status_code}" "20?" # Openflow underlay topologies - : FOR ${index} IN RANGE 1 7 - \ ${resp} Put Request session ${CONFIG_API}/${TOPOLOGY_URL}/openflow-topo:${index} data=${OPENFLOW_UNDERLAY_TOPOLOGY_${index}} - \ Log ${resp.content} - \ Should Match "${resp.status_code}" "20?" + FOR ${index} IN RANGE 1 7 + ${resp} Put Request + ... session + ... ${CONFIG_API}/${TOPOLOGY_URL}/openflow-topo:${index} + ... data=${OPENFLOW_UNDERLAY_TOPOLOGY_${index}} + Log ${resp.text} + Should Match "${resp.status_code}" "20?" + END Issue Command On Karaf Console log:clear - Log ${resp.content} + Log ${resp.text} Prepare Unification Inside Topology Request - [Arguments] ${request_template} ${model} ${correlation_item} ${underlay_topo1} [Documentation] Prepare topology request for unification inside from template + [Arguments] ${request_template} ${model} ${correlation_item} ${underlay_topo1} ${request_template} Set Element Text ${request_template} ${model} xpath=.//correlations/output-model - ${request_template} Set Element Text ${request_template} aggregation-only xpath=.//correlations/correlation/type - ${request_template} Set Element Text ${request_template} ${correlation_item} xpath=.//correlation/correlation-item - ${request_template} Set Element Text ${request_template} unification xpath=.//correlation/aggregation/aggregation-type - ${request_template} Set Element Text ${request_template} ${model} xpath=.//correlation/aggregation/mapping[1]/input-model - ${request_template} Set Element Text ${request_template} ${underlay_topo1} xpath=.//correlation/aggregation/mapping[1]/underlay-topology + ${request_template} Set Element Text + ... ${request_template} + ... aggregation-only + ... xpath=.//correlations/correlation/type + ${request_template} Set Element Text + ... ${request_template} + ... ${correlation_item} + ... xpath=.//correlation/correlation-item + ${request_template} Set Element Text + ... ${request_template} + ... unification + ... xpath=.//correlation/aggregation/aggregation-type + ${request_template} Set Element Text + ... ${request_template} + ... ${model} + ... xpath=.//correlation/aggregation/mapping[1]/input-model + ${request_template} Set Element Text + ... ${request_template} + ... ${underlay_topo1} + ... xpath=.//correlation/aggregation/mapping[1]/underlay-topology ${request_template} Element to String ${request_template} - [Return] ${request_template} + RETURN ${request_template} Prepare Unification Topology Request - [Arguments] ${request_template} ${model} ${correlation_item} ${underlay_topo1} ${underlay_topo2} [Documentation] Prepare topology request for unification on two topologies from template - ${request_template} Prepare Unification Inside Topology Request ${request_template} ${model} ${correlation_item} ${underlay_topo1} - ${request_template} Set Element Text ${request_template} ${underlay_topo2} xpath=.//correlation/aggregation/mapping[2]/underlay-topology - ${request_template} Set Element Text ${request_template} ${model} xpath=.//correlation/aggregation/mapping[2]/input-model + [Arguments] ${request_template} ${model} ${correlation_item} ${underlay_topo1} ${underlay_topo2} + ${request_template} Prepare Unification Inside Topology Request + ... ${request_template} + ... ${model} + ... ${correlation_item} + ... ${underlay_topo1} + ${request_template} Set Element Text + ... ${request_template} + ... ${underlay_topo2} + ... xpath=.//correlation/aggregation/mapping[2]/underlay-topology + ${request_template} Set Element Text + ... ${request_template} + ... ${model} + ... xpath=.//correlation/aggregation/mapping[2]/input-model ${request_template} Element to String ${request_template} - [Return] ${request_template} + RETURN ${request_template} Prepare Unification Filtration Topology Request + [Documentation] Prepare topology request for unification on two topologies from template [Arguments] ${request_template} ${model} ${correlation_item} ${target_field1} ${underlay_topo1} ${target_field2} ... ${underlay_topo2} - [Documentation] Prepare topology request for unification on two topologies from template - ${request_template} Prepare Unification Filtration Inside Topology Request ${request_template} ${model} ${correlation_item} ${target_field1} ${underlay_topo1} - ${request_template} Set Element Text ${request_template} ${underlay_topo2} xpath=.//correlation/aggregation/mapping[2]/underlay-topology + ${request_template} Prepare Unification Filtration Inside Topology Request + ... ${request_template} + ... ${model} + ... ${correlation_item} + ... ${target_field1} + ... ${underlay_topo1} + ${request_template} Set Element Text + ... ${request_template} + ... ${underlay_topo2} + ... xpath=.//correlation/aggregation/mapping[2]/underlay-topology Insert Target Field ${request_template} 2 ${target_field2} 1 - ${request_template} Set Element Text ${request_template} ${model} xpath=.//correlation/aggregation/mapping[2]/input-model + ${request_template} Set Element Text + ... ${request_template} + ... ${model} + ... xpath=.//correlation/aggregation/mapping[2]/input-model ${request_template} Element to String ${request_template} - [Return] ${request_template} + RETURN ${request_template} Prepare Unification Filtration Inside Topology Request - [Arguments] ${request_template} ${model} ${correlation_item} ${target-field} ${underlay_topo} [Documentation] Prepare topology request for unification filtration inside from template + [Arguments] ${request_template} ${model} ${correlation_item} ${target-field} ${underlay_topo} ${request_template} Set Element Text ${request_template} ${model} xpath=.//correlations/output-model - ${request_template} Set Element Text ${request_template} filtration-aggregation xpath=.//correlations/correlation/type - ${request_template} Set Element Text ${request_template} ${correlation_item} xpath=.//correlation/correlation-item - ${request_template} Set Element Text ${request_template} unification xpath=.//correlation/aggregation/aggregation-type - ${request_template} Set Element Text ${request_template} ${model} xpath=.//correlation/aggregation/mapping[1]/input-model - ${request_template} Set Element Text ${request_template} ${underlay_topo} xpath=.//correlation/aggregation/mapping[1]/underlay-topology + ${request_template} Set Element Text + ... ${request_template} + ... filtration-aggregation + ... xpath=.//correlations/correlation/type + ${request_template} Set Element Text + ... ${request_template} + ... ${correlation_item} + ... xpath=.//correlation/correlation-item + ${request_template} Set Element Text + ... ${request_template} + ... unification + ... xpath=.//correlation/aggregation/aggregation-type + ${request_template} Set Element Text + ... ${request_template} + ... ${model} + ... xpath=.//correlation/aggregation/mapping[1]/input-model + ${request_template} Set Element Text + ... ${request_template} + ... ${underlay_topo} + ... xpath=.//correlation/aggregation/mapping[1]/underlay-topology Insert Target Field ${request_template} 1 ${target-field} 1 - ${request_template} Set Element Text ${request_template} ${underlay_topo} xpath=.//correlation/filtration/underlay-topology + ${request_template} Set Element Text + ... ${request_template} + ... ${underlay_topo} + ... xpath=.//correlation/filtration/underlay-topology ${request_template} Element to String ${request_template} - [Return] ${request_template} + RETURN ${request_template} Insert Apply Filters [Arguments] ${request_template} ${mapping} ${filter_id} - ${request_template} Add Element ${request_template} ${APPLY_FILTERS} xpath=.//correlation/aggregation/mapping[${mapping}] - ${request_template} Set Element Text ${request_template} ${filter_id} xpath=.//correlation/aggregation/mapping[${mapping}]/apply-filters - [Return] ${request_template} + ${request_template} Add Element + ... ${request_template} + ... ${APPLY_FILTERS} + ... xpath=.//correlation/aggregation/mapping[${mapping}] + ${request_template} Set Element Text + ... ${request_template} + ... ${filter_id} + ... xpath=.//correlation/aggregation/mapping[${mapping}]/apply-filters + RETURN ${request_template} Prepare Filtration Topology Request - [Arguments] ${request_template} ${model} ${correlation_item} ${underlay_topo} [Documentation] Prepare topology request for filtration from template + [Arguments] ${request_template} ${model} ${correlation_item} ${underlay_topo} ${request_template} Set Element Text ${request_template} ${model} xpath=.//correlations/output-model - ${request_template} Set Element Text ${request_template} ${correlation_item} xpath=.//correlation/correlation-item - ${request_template} Set Element Text ${request_template} ${underlay_topo} xpath=.//correlation/filtration/underlay-topology - [Return] ${request_template} + ${request_template} Set Element Text + ... ${request_template} + ... ${correlation_item} + ... xpath=.//correlation/correlation-item + ${request_template} Set Element Text + ... ${request_template} + ... ${underlay_topo} + ... xpath=.//correlation/filtration/underlay-topology + RETURN ${request_template} Insert Target Field - [Arguments] ${request_template} ${mapping_index} ${target_field_path} ${matching_key} [Documentation] Add target field to request - ${target_field_template} Set Element Text ${TARGET_FIELD} ${target_field_path} xpath=.//target-field-path - ${target_field_template} Set Element Text ${target_field_template} ${matching_key} xpath=.//matching-key - ${request_template} Add Element ${request_template} ${target_field_template} xpath=.//correlation/aggregation/mapping[${mapping_index}] + [Arguments] ${request_template} ${mapping_index} ${target_field_path} ${matching_key} + ${target_field_template} Set Element Text + ... ${TARGET_FIELD} + ... ${target_field_path} + ... xpath=.//target-field-path + ${target_field_template} Set Element Text + ... ${target_field_template} + ... ${matching_key} + ... xpath=.//matching-key + ${request_template} Add Element + ... ${request_template} + ... ${target_field_template} + ... xpath=.//correlation/aggregation/mapping[${mapping_index}] ${request_template} Element to String ${request_template} - [Return] ${request_template} + RETURN ${request_template} Insert Filter - [Arguments] ${request_template} ${filter_template} ${target_field} [Documentation] Add filter to filtration + [Arguments] ${request_template} ${filter_template} ${target_field} ${request_template} Add Element ${request_template} ${filter_template} xpath=.//correlation/filtration ${model} Get Element Text ${request_template} xpath=.//correlations/output-model - ${request_template} Set Element Text ${request_template} ${model} xpath=.//correlation/filtration/filter/input-model - ${request_template} Set Element Text ${request_template} ${target_field} xpath=.//correlation/filtration/filter/target-field - [Return] ${request_template} + ${request_template} Set Element Text + ... ${request_template} + ... ${model} + ... xpath=.//correlation/filtration/filter/input-model + ${request_template} Set Element Text + ... ${request_template} + ... ${target_field} + ... xpath=.//correlation/filtration/filter/target-field + RETURN ${request_template} Insert Filter With ID - [Arguments] ${request_template} ${filter_template} ${target_field} ${filter_id} [Documentation] Add filter to filtration with specified id + [Arguments] ${request_template} ${filter_template} ${target_field} ${filter_id} ${request_template} Insert Filter ${request_template} ${filter_template} ${target_field} - ${request_template} Set Element Text ${request_template} ${filter_id} xpath=.//correlation/filtration/filter/filter-id - [Return] ${request_template} + ${request_template} Set Element Text + ... ${request_template} + ... ${filter_id} + ... xpath=.//correlation/filtration/filter/filter-id + RETURN ${request_template} Set IPV4 Filter - [Arguments] ${request_template} ${ip_address} [Documentation] Set filter ipv4 address - ${request_template} Set Element Text ${request_template} ${ip_address} xpath=.//correlation/filtration/filter/ipv4-address-filter/ipv4-address + [Arguments] ${request_template} ${ip_address} + ${request_template} Set Element Text + ... ${request_template} + ... ${ip_address} + ... xpath=.//correlation/filtration/filter/ipv4-address-filter/ipv4-address ${request_template} Element to String ${request_template} - [Return] ${request_template} + RETURN ${request_template} Set Range Number Filter - [Arguments] ${request_template} ${min_number} ${max_number} [Documentation] Set filter minimum and maximum number values - ${request_template} Set Element Text ${request_template} ${min_number} xpath=.//correlation/filtration/filter/range-number-filter/min-number-value - ${request_template} Set Element Text ${request_template} ${max_number} xpath=.//correlation/filtration/filter/range-number-filter/max-number-value + [Arguments] ${request_template} ${min_number} ${max_number} + ${request_template} Set Element Text + ... ${request_template} + ... ${min_number} + ... xpath=.//correlation/filtration/filter/range-number-filter/min-number-value + ${request_template} Set Element Text + ... ${request_template} + ... ${max_number} + ... xpath=.//correlation/filtration/filter/range-number-filter/max-number-value ${request_template} Element to String ${request_template} - [Return] ${request_template} + RETURN ${request_template} Set Range String Filter - [Arguments] ${request_template} ${min_value} ${max_value} [Documentation] Set filter minimum and maximum string values - ${request_template} Set Element Text ${request_template} ${min_value} xpath=.//correlation/filtration/filter/range-string-filter/min-string-value - ${request_template} Set Element Text ${request_template} ${max_value} xpath=.//correlation/filtration/filter/range-string-filter/max-string-value + [Arguments] ${request_template} ${min_value} ${max_value} + ${request_template} Set Element Text + ... ${request_template} + ... ${min_value} + ... xpath=.//correlation/filtration/filter/range-string-filter/min-string-value + ${request_template} Set Element Text + ... ${request_template} + ... ${max_value} + ... xpath=.//correlation/filtration/filter/range-string-filter/max-string-value ${request_template} Element to String ${request_template} - [Return] ${request_template} + RETURN ${request_template} Set Specific Number Filter - [Arguments] ${request_template} ${number} [Documentation] Set filter number value - ${request_template} Set Element Text ${request_template} ${number} xpath=.//correlation/filtration/filter/specific-number-filter/specific-number + [Arguments] ${request_template} ${number} + ${request_template} Set Element Text + ... ${request_template} + ... ${number} + ... xpath=.//correlation/filtration/filter/specific-number-filter/specific-number ${request_template} Element to String ${request_template} - [Return] ${request_template} + RETURN ${request_template} Set Specific String Filter - [Arguments] ${request_template} ${string_value} [Documentation] Set filter string value - ${request_template} Set Element Text ${request_template} ${string_value} xpath=.//correlation/filtration/filter/specific-string-filter/specific-string + [Arguments] ${request_template} ${string_value} + ${request_template} Set Element Text + ... ${request_template} + ... ${string_value} + ... xpath=.//correlation/filtration/filter/specific-string-filter/specific-string ${request_template} Element to String ${request_template} - [Return] ${request_template} + RETURN ${request_template} Set IPV6 Filter - [Arguments] ${request_template} ${ip_address} [Documentation] Set filter ipv6 address - ${request_template} Set Element Text ${request_template} ${ip_address} xpath=.//correlation/filtration/filter/ipv6-address-filter/ipv6-address + [Arguments] ${request_template} ${ip_address} + ${request_template} Set Element Text + ... ${request_template} + ... ${ip_address} + ... xpath=.//correlation/filtration/filter/ipv6-address-filter/ipv6-address ${request_template} Element to String ${request_template} - [Return] ${request_template} + RETURN ${request_template} Set Script Filter - [Arguments] ${request_template} ${script_language} ${script} [Documentation] Set filter script - ${request_template} Set Element Text ${request_template} ${script_language} xpath=.//correlation/filtration/filter/script-filter/scripting/language - ${request_template} Set Element Text ${request_template} ${script} xpath=.//correlation/filtration/filter/script-filter/scripting/script + [Arguments] ${request_template} ${script_language} ${script} + ${request_template} Set Element Text + ... ${request_template} + ... ${script_language} + ... xpath=.//correlation/filtration/filter/script-filter/scripting/language + ${request_template} Set Element Text + ... ${request_template} + ... ${script} + ... xpath=.//correlation/filtration/filter/script-filter/scripting/script ${request_template} Element to String ${request_template} - [Return] ${request_template} + RETURN ${request_template} Insert Link Computation Inside - [Arguments] ${request_template} ${link_computation_template} ${input_model} ${underlay_topology} [Documentation] Add link computation to request + [Arguments] ${request_template} ${link_computation_template} ${input_model} ${underlay_topology} ${request_template} Add Element ${request_template} ${link_computation_template} xpath=. - ${request_template} Set Element Text ${request_template} ${input_model} xpath=.//link-computation/node-info/input-model - ${request_template} Set Element Text ${request_template} ${input_model} xpath=.//link-computation/link-info/input-model - ${request_template} Set Element Text ${request_template} ${input_model} xpath=.//link-computation/output-model - ${request_template} Set Element Text ${request_template} ${underlay_topology} xpath=.//link-computation/link-info/link-topology - ${request_template} Set Element Attribute ${request_template} xmlns:n urn:opendaylight:topology:correlation xpath=./link-computation + ${request_template} Set Element Text + ... ${request_template} + ... ${input_model} + ... xpath=.//link-computation/node-info/input-model + ${request_template} Set Element Text + ... ${request_template} + ... ${input_model} + ... xpath=.//link-computation/link-info/input-model + ${request_template} Set Element Text + ... ${request_template} + ... ${input_model} + ... xpath=.//link-computation/output-model + ${request_template} Set Element Text + ... ${request_template} + ... ${underlay_topology} + ... xpath=.//link-computation/link-info/link-topology + ${request_template} Set Element Attribute + ... ${request_template} + ... xmlns:n + ... urn:opendaylight:topology:correlation + ... xpath=./link-computation ${request_template} Element to String ${request_template} - [Return] ${request_template} + RETURN ${request_template} Insert Link Computation - [Arguments] ${request_template} ${link_computation_template} ${input_model} ${underlay_topology_1} ${underlay_topology_2} [Documentation] Add link computation to request + [Arguments] ${request_template} ${link_computation_template} ${input_model} ${underlay_topology_1} ${underlay_topology_2} ${request_template} Add Element ${request_template} ${link_computation_template} xpath=. - ${request_template} Set Element Text ${request_template} ${input_model} xpath=.//link-computation/node-info/input-model - ${request_template} Set Element Text ${request_template} ${input_model} xpath=.//link-computation/link-info[1]/input-model - ${request_template} Set Element Text ${request_template} ${input_model} xpath=.//link-computation/link-info[2]/input-model - ${request_template} Set Element Text ${request_template} ${input_model} xpath=.//link-computation/output-model - ${request_template} Set Element Text ${request_template} ${underlay_topology_1} xpath=.//link-computation/link-info[1]/link-topology - ${request_template} Set Element Text ${request_template} ${underlay_topology_2} xpath=.//link-computation/link-info[2]/link-topology - ${request_template} Set Element Attribute ${request_template} xmlns:n urn:opendaylight:topology:correlation xpath=./link-computation + ${request_template} Set Element Text + ... ${request_template} + ... ${input_model} + ... xpath=.//link-computation/node-info/input-model + ${request_template} Set Element Text + ... ${request_template} + ... ${input_model} + ... xpath=.//link-computation/link-info[1]/input-model + ${request_template} Set Element Text + ... ${request_template} + ... ${input_model} + ... xpath=.//link-computation/link-info[2]/input-model + ${request_template} Set Element Text + ... ${request_template} + ... ${input_model} + ... xpath=.//link-computation/output-model + ${request_template} Set Element Text + ... ${request_template} + ... ${underlay_topology_1} + ... xpath=.//link-computation/link-info[1]/link-topology + ${request_template} Set Element Text + ... ${request_template} + ... ${underlay_topology_2} + ... xpath=.//link-computation/link-info[2]/link-topology + ${request_template} Set Element Attribute + ... ${request_template} + ... xmlns:n + ... urn:opendaylight:topology:correlation + ... xpath=./link-computation ${request_template} Element to String ${request_template} - [Return] ${request_template} + RETURN ${request_template} Insert Scripting into Request - [Arguments] ${request} ${language} ${script} [Documentation] Insert Scripting into Request under aggregation node + [Arguments] ${request} ${language} ${script} ${request} Add Element ${request} ${SCRIPTING} xpath=.//correlation/aggregation ${request} Set Element Text ${request} ${script} xpath=.//correlation/aggregation/scripting/script ${request} Set Element Text ${request} ${language} xpath=.//correlation/aggregation/scripting/language ${request} Element to String ${request} - [Return] ${request} + RETURN ${request} Create Isis Node - [Arguments] ${node-id} ${ovs-version}=23 ${router-id-ipv4}=10.0.0.1 [Documentation] Create an isis node element with id and ip + [Arguments] ${node-id} ${ovs-version}=23 ${router-id-ipv4}=10.0.0.1 ${request} Set Element Text ${NODE_ISIS} ${node-id} xpath=.//node-id ${request} Set Element Text ${request} ${ovs-version} xpath=.//ovs-version - ${request} Set Element Text ${request} ${router-id-ipv4} xpath=.//igp-node-attributes/isis-node-attributes/ted/te-router-id-ipv4 + ${request} Set Element Text + ... ${request} + ... ${router-id-ipv4} + ... xpath=.//igp-node-attributes/isis-node-attributes/ted/te-router-id-ipv4 ${request} Element to String ${request} - [Return] ${request} + RETURN ${request} Create Openflow Node - [Arguments] ${node-id} ${ip-address}=10.0.0.1 ${serial-number}=27 [Documentation] Create an Openflow node element with id and ip + [Arguments] ${node-id} ${ip-address}=10.0.0.1 ${serial-number}=27 ${request} Set Element Text ${NODE_OPENFLOW} ${node-id} xpath=.//id ${request} Set Element Text ${request} ${ip-address} xpath=.//ip-address ${request} Set Element Text ${request} ${serial-number} xpath=.//serial-number ${request} Element to String ${request} - [Return] ${request} + RETURN ${request} Create OVSDB Termination Point - [Arguments] ${tp-id} ${ofport} [Documentation] Create an OVSDB termination point element with id and port + [Arguments] ${tp-id} ${ofport} ${request} Set Element Text ${TERMINATION_POINT_OVSDB} ${tp-id} xpath=.//tp-id ${request} Set Element Text ${request} ${ofport} xpath=.//ofport ${request} Element to String ${request} - [Return] ${request} + RETURN ${request} Create Openflow Node Connector - [Arguments] ${nc-id} ${port-number} [Documentation] Create an Openflow node connector element with id and port number + [Arguments] ${nc-id} ${port-number} ${request} Set Element Text ${NODE_CONNECTOR_OPENFLOW} ${nc-id} xpath=.//id ${request} Set Element Text ${request} ${port-number} xpath=.//port-number ${request} Element to String ${request} - [Return] ${request} + RETURN ${request} Create Link [Arguments] ${link-id} ${source-node} ${dest-node} ${name} ${metric} @@ -363,42 +543,50 @@ Create Link ${request} Set Element Text ${request} ${name} xpath=.//igp-link-attributes/name ${request} Set Element Text ${request} ${metric} xpath=.//igp-link-attributes/metric ${request} Element to String ${request} - [Return] ${request} + RETURN ${request} Extract Node from Topology - [Arguments] ${topology} ${supp_node_id} [Documentation] Returns node that contains supporting node with ID specified in argument supp_node_id + [Arguments] ${topology} ${supp_node_id} ${xpath} Set Variable .//node/supporting-node[node-ref='${supp_node_id}']/.. ${node} Get Element ${topology} xpath=${xpath} ${node} Element to String ${node} - [Return] ${node} + RETURN ${node} Extract Termination Point from Topology - [Arguments] ${model} ${topology} ${topo_id} ${node_id} ${tp_id} [Documentation] Returns termination point that contains supporting termination point from specified topology, node and with specified id + [Arguments] ${model} ${topology} ${topo_id} ${node_id} ${tp_id} Check Supported Model ${model} - ${xpath} Set Variable If '${model}' == 'network-topology-model' or '${model}' == 'opendaylight-inventory-model' .//termination-point[tp-ref='/network-topology:network-topology/topology/${topo_id}/node/${node_id}/termination-point/${tp_id}'] .//termination-point/supporting-termination-point[tp-ref='${tp_id}']/.. + ${xpath} Set Variable If + ... '${model}' == 'network-topology-model' or '${model}' == 'opendaylight-inventory-model' + ... .//termination-point[tp-ref='/network-topology:network-topology/topology/${topo_id}/node/${node_id}/termination-point/${tp_id}'] + ... .//termination-point/supporting-termination-point[tp-ref='${tp_id}']/.. ${tp} Get Element ${topology} xpath=${xpath} ${tp} Element to String ${tp} - [Return] ${tp} + RETURN ${tp} Extract Link from Topology - [Arguments] ${model} ${topology} ${topo_id} ${link_id} [Documentation] Returns link that contains supporting link + [Arguments] ${model} ${topology} ${topo_id} ${link_id} Check Supported Model ${model} - ${xpath} Set Variable If '${model}' == 'network-topology-model' or '${model}' == 'opendaylight-inventory-model' .//link/supporting-link[link-ref='/network-topology/topology/${topo_id}/link/${link_id}']/.. .//link/supporting-link[tp-ref='${tp_id}']/.. + ${xpath} Set Variable If + ... '${model}' == 'network-topology-model' or '${model}' == 'opendaylight-inventory-model' + ... .//link/supporting-link[link-ref='/network-topology/topology/${topo_id}/link/${link_id}']/.. + ... .//link/supporting-link[tp-ref='${tp_id}']/.. ${link} Get Element ${topology} xpath=${xpath} ${link} Element to String ${link} - [Return] ${link} + RETURN ${link} Check Supported Model - [Arguments] ${model} [Documentation] Checks if model is supported. - Run Keyword If '${model}' != 'network-topology-model' and '${model}' != 'i2rs-model' and '${model}' != 'opendaylight-inventory-model' Fail Not supported model + [Arguments] ${model} + IF '${model}' != 'network-topology-model' and '${model}' != 'i2rs-model' and '${model}' != 'opendaylight-inventory-model' + Fail Not supported model + END Check Aggregated Node in Topology - [Arguments] ${model} ${topology} ${tp_count} @{supp_node_ids} [Documentation] Checks number of termination points and concrete supporting nodes in aggregated node and returns overlay node id. Model should be 'network-topology-model', 'opendaylight-inventory-model' or 'i2rs-model'. + [Arguments] ${model} ${topology} ${tp_count} @{supp_node_ids} Check Supported Model ${model} ${node_id} Get From List ${supp_node_ids} 0 ${aggregated_node} Extract Node from Topology ${topology} ${node_id} @@ -406,47 +594,63 @@ Check Aggregated Node in Topology Should Contain X Times ${aggregated_node} ${supp_node_count} Should Contain X Times ${aggregated_node} ${tp_count} Should Contain X Times ${aggregated_node} ${tp_count} - : FOR ${supp_node_id} IN @{supp_node_ids} - \ Element Text Should Be ${aggregated_node} ${supp_node_id} xpath=.//supporting-node[node-ref='${supp_node_id}']/node-ref + FOR ${supp_node_id} IN @{supp_node_ids} + Element Text Should Be + ... ${aggregated_node} + ... ${supp_node_id} + ... xpath=.//supporting-node[node-ref='${supp_node_id}']/node-ref + END ${overlay_node_id} Get Element Text ${aggregated_node} xpath=./node-id - [Return] ${overlay_node_id} + RETURN ${overlay_node_id} Check Aggregated Termination Point in Node - [Arguments] ${model} ${topology} ${topology_id} ${node_id} ${tp_id} @{supp_tp_ids} [Documentation] Checks supporting termination points in aggregated termination point. Model should be 'network-topology-model', 'opendaylight-inventory-model' or 'i2rs-model'. + [Arguments] ${model} ${topology} ${topology_id} ${node_id} ${tp_id} @{supp_tp_ids} Check Supported Model ${model} - ${tp} Extract Termination Point from Topology ${model} ${topology} ${topology_id} ${node_id} ${tp_id} + ${tp} Extract Termination Point from Topology + ... ${model} + ... ${topology} + ... ${topology_id} + ... ${node_id} + ... ${tp_id} ${supp_tp_count} Get Length ${supp_tp_ids} Should Contain X Times ${tp} ${supp_tp_count} - : FOR ${supp_tp_id} IN @{supp_tp_ids} - \ Should Contain X Times ${tp} ${supp_tp_id} 1 + FOR ${supp_tp_id} IN @{supp_tp_ids} + Should Contain X Times ${tp} ${supp_tp_id} 1 + END Check Filtered Nodes in Topology - [Arguments] ${topology} ${tp_count} @{node_ids} [Documentation] Checks nodes in filtered topology - : FOR ${node_id} IN @{node_ids} - \ Element Text Should Be ${topology} ${node_id} xpath=.//node/supporting-node[node-ref='${node_id}']/node-ref + [Arguments] ${topology} ${tp_count} @{node_ids} + FOR ${node_id} IN @{node_ids} + Element Text Should Be + ... ${topology} + ... ${node_id} + ... xpath=.//node/supporting-node[node-ref='${node_id}']/node-ref + END Check Filtered Termination Points in Node - [Arguments] ${topology} ${supp_node_id} @{supp_tp_ids} [Documentation] Checks termination points in filtered topology + [Arguments] ${topology} ${supp_node_id} @{supp_tp_ids} ${node} Extract Node from Topology ${topology} ${supp_node_id} ${supp_tp_count} Get Length ${supp_tp_ids} Should Contain X Times ${node} 1 Should Contain X Times ${node} ${supp_tp_count} Should Contain X Times ${node} ${supp_tp_count} - : FOR ${supp_tp_id} IN @{supp_tp_ids} - \ Should Contain X Times ${node} ${supp_tp_id} 1 + FOR ${supp_tp_id} IN @{supp_tp_ids} + Should Contain X Times ${node} ${supp_tp_id} 1 + END Check Filtered Links In Topology - [Arguments] ${topology} @{supp_link_ids} [Documentation] Checks links in filtered topology - : FOR ${supp_link_id} IN @{supp_link_ids} - \ Should Contain X Times ${topology} ${supp_link_id} 1 + [Arguments] ${topology} @{supp_link_ids} + FOR ${supp_link_id} IN @{supp_link_ids} + Should Contain X Times ${topology} ${supp_link_id} 1 + END Check Overlay Link Source And Destination - [Arguments] ${model} ${topology} ${topo_id} ${link_id} ${expected_source} ${expected_destination} [Documentation] Checks if the overlay link's source and destination specified by a supporting link ref matches given source and destination + [Arguments] ${model} ${topology} ${topo_id} ${link_id} ${expected_source} ${expected_destination} ${link} Extract Link from Topology ${model} ${topology} ${topo_id} ${link_id} ${link_source} Get Element Text ${link} xpath=.//source-node ${link_destination} Get Element Text ${link} xpath=.//dest-node @@ -454,23 +658,37 @@ Check Overlay Link Source And Destination Should Be Equal As Strings ${link_destination} ${expected_destination} Output Topo Should Be Complete + [Documentation] Verifies that the output topology contains the expected amount of essential elements [Arguments] ${node_count}=-1 ${supporting-node_count}=-1 ${node-ref_count}=-1 ${tp_count}=-1 ${tp-ref_count}=-1 ${link_count}=-1 ... ${link-ref_count}=-1 - [Documentation] Verifies that the output topology contains the expected amount of essential elements ${resp} Wait Until Keyword Succeeds 5x 250ms Basic Request Get ${OVERLAY_TOPO_URL} - Should Contain ${resp.content} ${OUTPUT_TOPO_NAME} - Run Keyword If ${node_count}>-1 Should Contain X Times ${resp.content} ${node_count} - Run Keyword If ${supporting-node_count}>-1 Should Contain X Times ${resp.content} ${supporting-node_count} - Run Keyword If ${node-ref_count}>-1 Should Contain X Times ${resp.content} ${node-ref_count} - Run Keyword If ${link_count}>-1 Should Contain X Times ${resp.content} ${link_count} - Run Keyword If ${link-ref_count}>-1 Should Contain X Times ${resp.content} ${link-ref_count} - Run Keyword If ${tp_count}>-1 Should Contain X Times ${resp.content} ${tp_count} - Run Keyword If ${tp-ref_count}>-1 Should Contain X Times ${resp.content} ${tp-ref_count} + Should Contain ${resp.text} ${OUTPUT_TOPO_NAME} + IF ${node_count}>-1 + Should Contain X Times ${resp.text} ${node_count} + END + IF ${supporting-node_count}>-1 + Should Contain X Times ${resp.text} ${supporting-node_count} + END + IF ${node-ref_count}>-1 + Should Contain X Times ${resp.text} ${node-ref_count} + END + IF ${link_count}>-1 + Should Contain X Times ${resp.text} ${link_count} + END + IF ${link-ref_count}>-1 + Should Contain X Times ${resp.text} ${link-ref_count} + END + IF ${tp_count}>-1 + Should Contain X Times ${resp.text} ${tp_count} + END + IF ${tp-ref_count}>-1 + Should Contain X Times ${resp.text} ${tp-ref_count} + END Log ---- Output Topo ---- - Log ${resp.content} - [Return] ${resp} + Log ${resp.text} + RETURN ${resp} Set Global Variable If It Does Not Exist [Arguments] ${name} ${value} - ${status} ${message} = Run Keyword And Ignore Error Variable Should Exist ${name} - Run Keyword If "${status}" == "FAIL" Set Global Variable ${name} ${value} + ${status} ${message} Run Keyword And Ignore Error Variable Should Exist ${name} + IF "${status}" == "FAIL" Set Global Variable ${name} ${value}