From 48a4038b810bd7b3cf4bab08d2d4b2f8f0b236c8 Mon Sep 17 00:00:00 2001 From: Johnson Li Date: Thu, 21 May 2015 13:08:13 +0800 Subject: [PATCH] Add basic test case for SFC, mainly Restconf Operations Add Some integration test cases for the Service Function Chain Project. These cases mainly verify the Restconf APIs works well or not. Change Log: Manually rebase, fix conflicts in Utils.txt Add new Keywords to Utils.txt and use these words Rename *.txt to *.robot and remove __init__.txt Use Keywords from Library Utils.txt Use Public RequestsLibrary to send requests Add Test Cases for SFP and RSP Signed-off-by: Johnson Li --- test/csit/libraries/Utils.txt | 11 + .../010__sfc_service_functions.robot | 125 ++++++++ .../020__sfc_service_forwarders.robot | 285 ++++++++++++++++++ .../SFC_Basic/030__sfc_service_nodes.robot | 87 ++++++ .../SFC_Basic/040__sfc_service_chains.robot | 133 ++++++++ .../050__sfc_service_schedule_types.robot | 86 ++++++ .../SFC_Basic/060__sfc_service_paths.robot | 93 ++++++ .../070__sfc_rendered_service_paths.robot | 261 ++++++++++++++++ .../sfc/service-function-chains.json | 41 +++ .../sfc/service-function-forwarders.json | 90 ++++++ .../variables/sfc/service-function-paths.json | 26 ++ .../csit/variables/sfc/service-functions.json | 141 +++++++++ .../service-loadbalance-schedule-type.json | 9 + test/csit/variables/sfc/service-nodes.json | 39 +++ .../sfc/service-random-schedule-type.json | 9 + .../sfc/service-roundrobin-schedule-type.json | 9 + .../variables/sfc/service-schedule-types.json | 27 ++ .../service-shortestpath-schedule-type.json | 9 + .../sfc/service-wsp-schedule-type.json | 9 + test/csit/variables/sfc/sf_dpi_102_100.json | 19 ++ test/csit/variables/sfc/sf_dpl_101.json | 10 + test/csit/variables/sfc/sfc_chain_100.json | 24 ++ .../variables/sfc/sfc_chain_100_sfids.json | 9 + test/csit/variables/sfc/sff_csd_locator.json | 6 + test/csit/variables/sfc/sff_csd_sff100.json | 17 ++ test/csit/variables/sfc/sff_dpl_101.json | 12 + test/csit/variables/sfc/sff_dpl_locator.json | 7 + test/csit/variables/sfc/sff_ovs_100.json | 29 ++ test/csit/variables/sfc/sff_sfd_locator.json | 6 + test/csit/variables/sfc/sff_sfd_sf100.json | 12 + test/csit/variables/sfc/sfp_sfc1_path400.json | 8 + test/csit/variables/sfc/sn_node_100.json | 12 + 32 files changed, 1661 insertions(+) create mode 100644 test/csit/suites/sfc/SFC_Basic/010__sfc_service_functions.robot create mode 100644 test/csit/suites/sfc/SFC_Basic/020__sfc_service_forwarders.robot create mode 100644 test/csit/suites/sfc/SFC_Basic/030__sfc_service_nodes.robot create mode 100644 test/csit/suites/sfc/SFC_Basic/040__sfc_service_chains.robot create mode 100644 test/csit/suites/sfc/SFC_Basic/050__sfc_service_schedule_types.robot create mode 100644 test/csit/suites/sfc/SFC_Basic/060__sfc_service_paths.robot create mode 100644 test/csit/suites/sfc/SFC_Basic/070__sfc_rendered_service_paths.robot create mode 100644 test/csit/variables/sfc/service-function-chains.json create mode 100644 test/csit/variables/sfc/service-function-forwarders.json create mode 100644 test/csit/variables/sfc/service-function-paths.json create mode 100644 test/csit/variables/sfc/service-functions.json create mode 100644 test/csit/variables/sfc/service-loadbalance-schedule-type.json create mode 100644 test/csit/variables/sfc/service-nodes.json create mode 100644 test/csit/variables/sfc/service-random-schedule-type.json create mode 100644 test/csit/variables/sfc/service-roundrobin-schedule-type.json create mode 100644 test/csit/variables/sfc/service-schedule-types.json create mode 100644 test/csit/variables/sfc/service-shortestpath-schedule-type.json create mode 100644 test/csit/variables/sfc/service-wsp-schedule-type.json create mode 100644 test/csit/variables/sfc/sf_dpi_102_100.json create mode 100644 test/csit/variables/sfc/sf_dpl_101.json create mode 100644 test/csit/variables/sfc/sfc_chain_100.json create mode 100644 test/csit/variables/sfc/sfc_chain_100_sfids.json create mode 100644 test/csit/variables/sfc/sff_csd_locator.json create mode 100644 test/csit/variables/sfc/sff_csd_sff100.json create mode 100644 test/csit/variables/sfc/sff_dpl_101.json create mode 100644 test/csit/variables/sfc/sff_dpl_locator.json create mode 100644 test/csit/variables/sfc/sff_ovs_100.json create mode 100644 test/csit/variables/sfc/sff_sfd_locator.json create mode 100644 test/csit/variables/sfc/sff_sfd_sf100.json create mode 100644 test/csit/variables/sfc/sfp_sfc1_path400.json create mode 100644 test/csit/variables/sfc/sn_node_100.json diff --git a/test/csit/libraries/Utils.txt b/test/csit/libraries/Utils.txt index 204330f4a1..38f284c334 100644 --- a/test/csit/libraries/Utils.txt +++ b/test/csit/libraries/Utils.txt @@ -184,3 +184,14 @@ Concatenate the String ${str2}= Convert to String ${str2} ${output}= Catenate ${str1} ${str2} [Return] ${output} + +Remove All Elements At URI + [Arguments] ${uri} + ${resp} RequestsLibrary.Delete session ${uri} + Should Be Equal As Strings ${resp.status_code} 200 + +Add Elements To URI From File + [Arguments] ${dest_uri} ${data_file} + ${body} OperatingSystem.Get File ${data_file} + ${resp} RequestsLibrary.Put session ${dest_uri} data=${body} headers=${headers} + Should Be Equal As Strings ${resp.status_code} 200 diff --git a/test/csit/suites/sfc/SFC_Basic/010__sfc_service_functions.robot b/test/csit/suites/sfc/SFC_Basic/010__sfc_service_functions.robot new file mode 100644 index 0000000000..08f9304e5c --- /dev/null +++ b/test/csit/suites/sfc/SFC_Basic/010__sfc_service_functions.robot @@ -0,0 +1,125 @@ +*** Settings *** +Documentation Test suite for SFC Service Functions, Operates functions from Restconf APIs. +Suite Setup Create Session session http://${CONTROLLER}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS} +Suite Teardown Delete All Sessions +Library SSHLibrary +Library Collections +Library OperatingSystem +Library RequestsLibrary +Variables ../../../variables/Variables.py +Resource ../../../libraries/Utils.txt + +*** Variables *** +${SERVICE_FUNCTIONS_URI} /restconf/config/service-function:service-functions/ +${SERVICE_FUNCTIONS_FILE} ../../../variables/sfc/service-functions.json +${SF_DPI102100_URI} /restconf/config/service-function:service-functions/service-function/dpi-102-100/ +${SF_DPI102100_FILE} ../../../variables/sfc/sf_dpi_102_100.json +${SF_DPL101_FILE} ../../../variables/sfc/sf_dpl_101.json + +*** Test Cases *** +Add Service Functions + [Documentation] Add Service Functions from JSON file + Add Elements To URI From File ${SERVICE_FUNCTIONS_URI} ${SERVICE_FUNCTIONS_FILE} + ${body} OperatingSystem.Get File ${SERVICE_FUNCTIONS_FILE} + ${jsonbody} To Json ${body} + ${functions} Get From Dictionary ${jsonbody} service-functions + ${resp} RequestsLibrary.Get session ${SERVICE_FUNCTIONS_URI} + Should Be Equal As Strings ${resp.status_code} 200 + ${result} To JSON ${resp.content} + ${function} Get From Dictionary ${result} service-functions + Lists Should be Equal ${function} ${functions} + +Delete All Service Functions + [Documentation] Delete all Service Functions + ${body} OperatingSystem.Get File ${SERVICE_FUNCTIONS_FILE} + Add Elements To URI From File ${SERVICE_FUNCTIONS_URI} ${SERVICE_FUNCTIONS_FILE} + ${resp} RequestsLibrary.Get session ${SERVICE_FUNCTIONS_URI} + Should Be Equal As Strings ${resp.status_code} 200 + Remove All Elements At URI ${SERVICE_FUNCTIONS_URI} + ${resp} RequestsLibrary.Get session ${SERVICE_FUNCTIONS_URI} + Should Be Equal As Strings ${resp.status_code} 404 + +Get one Service Function + [Documentation] Get one Service Function + Remove All Elements At URI ${SERVICE_FUNCTIONS_URI} + Add Elements To URI From File ${SERVICE_FUNCTIONS_URI} ${SERVICE_FUNCTIONS_FILE} + ${elements}= Create List dpi-102-1 service-function-type:dpi + Check For Elements At URI ${SERVICE_FUNCTIONS_URI}service-function/dpi-102-1 ${elements} + +Get A Non-existing Service Function + [Documentation] Get A Non-existing Service Function + Remove All Elements At URI ${SERVICE_FUNCTIONS_URI} + Add Elements To URI From File ${SERVICE_FUNCTIONS_URI} ${SERVICE_FUNCTIONS_FILE} + ${resp} RequestsLibrary.Get session ${SERVICE_FUNCTIONS_URI}service-function/non-existing-sf + Should Be Equal As Strings ${resp.status_code} 404 + +Delete A Service Function + [Documentation] Delete A Service Function + Remove All Elements At URI ${SERVICE_FUNCTIONS_URI} + Add Elements To URI From File ${SERVICE_FUNCTIONS_URI} ${SERVICE_FUNCTIONS_FILE} + Remove All Elements At URI ${SERVICE_FUNCTIONS_URI}service-function/dpi-102-1 + ${resp} RequestsLibrary.Get session ${SERVICE_FUNCTIONS_URI} + Should Be Equal As Strings ${resp.status_code} 200 + Should Not Contain ${resp.content} dpi-102-1 + +Delete A Non-existing Empty Service Function + [Documentation] Delete A Non existing Service Function + Remove All Elements At URI ${SERVICE_FUNCTIONS_URI} + Add Elements To URI From File ${SERVICE_FUNCTIONS_URI} ${SERVICE_FUNCTIONS_FILE} + ${body} OperatingSystem.Get File ${SERVICE_FUNCTIONS_FILE} + ${jsonbody} To Json ${body} + ${functions} Get From Dictionary ${jsonbody} service-functions + Remove All Elements At URI ${SERVICE_FUNCTIONS_URI}service-function/non-existing-sf + ${resp} RequestsLibrary.Get session ${SERVICE_FUNCTIONS_URI} + Should Be Equal As Strings ${resp.status_code} 200 + ${result} To JSON ${resp.content} + ${function} Get From Dictionary ${result} service-functions + Lists Should be Equal ${function} ${functions} + +Put one Service Function + [Documentation] Put one Service Function + Remove All Elements At URI ${SERVICE_FUNCTIONS_URI} + Add Elements To URI From File ${SF_DPI102100_URI} ${SF_DPI102100_FILE} + ${elements}= Create List dpi-102-100 service-function-type:dpi + Check For Elements At URI ${SF_DPI102100_URI} ${elements} + Check For Elements At URI ${SERVICE_FUNCTIONS_URI} ${elements} + +Get Service Function DPL + [Documentation] Get Service Function Data Plane Locator + Remove All Elements At URI ${SERVICE_FUNCTIONS_URI} + Add Elements To URI From File ${SF_DPI102100_URI} ${SF_DPI102100_FILE} + ${elements}= Create List 100 10100 + Check For Elements At URI ${SF_DPI102100_URI}sf-data-plane-locator/dpl-100 ${elements} + +Put Service Function DPL + [Documentation] Put Service Function Data Plane Locator + Remove All Elements At URI ${SERVICE_FUNCTIONS_URI} + Add Elements To URI From File ${SF_DPI102100_URI} ${SF_DPI102100_FILE} + Add Elements To URI From File ${SF_DPI102100_URI}sf-data-plane-locator/dpl-101 ${SF_DPL101_FILE} + ${elements}= Create List dpl-101 10101 + Check For Elements At URI ${SF_DPI102100_URI}sf-data-plane-locator/dpl-101 ${elements} + Check For Elements At URI ${SF_DPI102100_URI} ${elements} + +Put Service Function DPL to a Non-existing Service Function + [Documentation] Put Service Function DPL to a Non-existing Service Function + Remove All Elements At URI ${SERVICE_FUNCTIONS_URI} + Add Elements To URI From File ${SF_DPI102100_URI}sf-data-plane-locator/dpl-101 ${SF_DPL101_FILE} + ${resp} RequestsLibrary.Get session ${SERVICE_FUNCTIONS_URI} + Should Be Equal As Strings ${resp.status_code} 200 + Should Contain ${resp.content} dpi-102-100 + ${elements}= Create List dpl-101 10101 + Check For Elements At URI ${SF_DPI102100_URI}sf-data-plane-locator/dpl-101 ${elements} + Check For Elements At URI ${SF_DPI102100_URI} ${elements} + +Delete Service Function DPL + [Documentation] Delete Service Function Data Plane Locator + Remove All Elements At URI ${SERVICE_FUNCTIONS_URI} + Add Elements To URI From File ${SF_DPI102100_URI} ${SF_DPI102100_FILE} + Remove All Elements At URI ${SF_DPI102100_URI}sf-data-plane-locator/dpl-100 + ${resp} RequestsLibrary.Get session ${SF_DPI102100_URI} + Should Be Equal As Strings ${resp.status_code} 200 + Should Not Contain ${resp.content} dpl-100 + +Clean Datastore After Tests + [Documentation] Clean All Service Functions In Datastore After Tests + Remove All Elements At URI ${SERVICE_FUNCTIONS_URI} diff --git a/test/csit/suites/sfc/SFC_Basic/020__sfc_service_forwarders.robot b/test/csit/suites/sfc/SFC_Basic/020__sfc_service_forwarders.robot new file mode 100644 index 0000000000..abf501a32d --- /dev/null +++ b/test/csit/suites/sfc/SFC_Basic/020__sfc_service_forwarders.robot @@ -0,0 +1,285 @@ +*** Settings *** +Documentation Test suite for SFC Service Function Forwarders, Operates SFFs from Restconf APIs. +Suite Setup Create Session session http://${CONTROLLER}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS} +Suite Teardown Delete All Sessions +Library SSHLibrary +Library Collections +Library OperatingSystem +Library RequestsLibrary +Variables ../../../variables/Variables.py +Resource ../../../libraries/Utils.txt + +*** Variables *** +${SERVICE_FORWARDERS_URI} /restconf/config/service-function-forwarder:service-function-forwarders/ +${SERVICE_FORWARDERS_FILE} ../../../variables/sfc/service-function-forwarders.json +${SFF_OVS100_URI} /restconf/config/service-function-forwarder:service-function-forwarders/service-function-forwarder/ovs-100/ +${SFF_OVS100_FILE} ../../../variables/sfc/sff_ovs_100.json +${SFF_DPL101_FILE} ../../../variables/sfc/sff_dpl_101.json +${SFF_DPL_LOCATOR_FILE} ../../../variables/sfc/sff_dpl_locator.json +${SFF_SFD_SF100_FILE} ../../../variables/sfc/sff_sfd_sf100.json +${SFF_SFD_LOCATOR_FILE} ../../../variables/sfc/sff_sfd_locator.json +${SFF_CSD_SFF100_FILE} ../../../variables/sfc/sff_csd_sff100.json +${SFF_CSD_LOCATOR_FILE} ../../../variables/sfc/sff_csd_locator.json + +*** Test Cases *** +Put Service Function Forwarders + [Documentation] Add Service Function Forwarders from JSON file + Add Elements To URI From File ${SERVICE_FORWARDERS_URI} ${SERVICE_FORWARDERS_FILE} + ${body} OperatingSystem.Get File ${SERVICE_FORWARDERS_FILE} + ${jsonbody} To Json ${body} + ${forwarders} Get From Dictionary ${jsonbody} service-function-forwarders + ${resp} RequestsLibrary.Get session ${SERVICE_FORWARDERS_URI} + Should Be Equal As Strings ${resp.status_code} 200 + ${result} To JSON ${resp.content} + ${forwarder} Get From Dictionary ${result} service-function-forwarders + Lists Should be Equal ${forwarder} ${forwarders} + +Delete All Service Function Forwarders + [Documentation] Delete all Service Function Forwarders + ${resp} RequestsLibrary.Get session ${SERVICE_FORWARDERS_URI} + Should Be Equal As Strings ${resp.status_code} 200 + Remove All Elements At URI ${SERVICE_FORWARDERS_URI} + ${resp} RequestsLibrary.Get session ${SERVICE_FORWARDERS_URI} + Should Be Equal As Strings ${resp.status_code} 404 + +Get one Service Function Forwarder + [Documentation] Get one Service Function Forwarder + Remove All Elements At URI ${SERVICE_FORWARDERS_URI} + Add Elements To URI From File ${SERVICE_FORWARDERS_URI} ${SERVICE_FORWARDERS_FILE} + ${elements}= Create List SFF-bootstrap service-locator:vxlan-gpe SF1 + Check For Elements At URI ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap ${elements} + +Get A Non-existing Service Function Forwarder + [Documentation] Get A Non-existing Service Function Forwarder + Remove All Elements At URI ${SERVICE_FORWARDERS_URI} + Add Elements To URI From File ${SERVICE_FORWARDERS_URI} ${SERVICE_FORWARDERS_FILE} + ${resp} RequestsLibrary.Get session ${SERVICE_FORWARDERS_URI}service-function-forwarder/non-existing-sff + Should Be Equal As Strings ${resp.status_code} 404 + +Delete A Service Function Forwarder + [Documentation] Delete A Service Function Forwarder + Remove All Elements At URI ${SERVICE_FORWARDERS_URI} + Add Elements To URI From File ${SERVICE_FORWARDERS_URI} ${SERVICE_FORWARDERS_FILE} + ${resp} RequestsLibrary.Get session ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap + Should Be Equal As Strings ${resp.status_code} 200 + Remove All Elements At URI ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap + ${resp} RequestsLibrary.Get session ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap + Should Be Equal As Strings ${resp.status_code} 404 + ${resp} RequestsLibrary.Get session ${SERVICE_FORWARDERS_URI} + Should Be Equal As Strings ${resp.status_code} 200 + Should Not Contain ${resp.content} SF1 + +Delete A Non-existing Service Function Forwarder + [Documentation] Delete A Non existing Service Function + Remove All Elements At URI ${SERVICE_FORWARDERS_URI} + Add Elements To URI From File ${SERVICE_FORWARDERS_URI} ${SERVICE_FORWARDERS_FILE} + ${body} OperatingSystem.Get File ${SERVICE_FORWARDERS_FILE} + ${jsonbody} To Json ${body} + ${forwarders} Get From Dictionary ${jsonbody} service-function-forwarders + Remove All Elements At URI ${SERVICE_FORWARDERS_URI}service-function-forwarder/non-existing-sff + ${resp} RequestsLibrary.Get session ${SERVICE_FORWARDERS_URI} + Should Be Equal As Strings ${resp.status_code} 200 + ${result} To JSON ${resp.content} + ${forwarder} Get From Dictionary ${result} service-function-forwarders + Lists Should be Equal ${forwarder} ${forwarders} + +Put one Service Function Forwarder + [Documentation] Put one Service Function Forwarder + Remove All Elements At URI ${SERVICE_FORWARDERS_URI} + Add Elements To URI From File ${SFF_OVS100_URI} ${SFF_OVS100_FILE} + ${resp} RequestsLibrary.Get session ${SFF_OVS100_URI} + Should Be Equal As Strings ${resp.status_code} 200 + ${elements}= Create List ovs-100 SF7 + Check For Elements At URI ${SFF_OVS100_URI} ${elements} + Check For Elements At URI ${SERVICE_FORWARDERS_URI} ${elements} + +Get Service Function Forwarder DPL + [Documentation] Get Service Function Data Plane Locator + Remove All Elements At URI ${SERVICE_FORWARDERS_URI} + Add Elements To URI From File ${SFF_OVS100_URI} ${SFF_OVS100_FILE} + ${elements}= Create List eth0 service-locator:vxlan-gpe + Check For Elements At URI ${SFF_OVS100_URI}sff-data-plane-locator/eth0 ${elements} + +Put Service Function Forwarder DPL + [Documentation] Put Service Function Forwarder Data Plane Locator + Remove All Elements At URI ${SERVICE_FORWARDERS_URI} + Add Elements To URI From File ${SFF_OVS100_URI} ${SFF_OVS100_FILE} + Add Elements To URI From File ${SFF_OVS100_URI}sff-data-plane-locator/dpl-101 ${SFF_DPL101_FILE} + ${elements}= Create List dpl-101 6101 + Check For Elements At URI ${SFF_OVS100_URI}sff-data-plane-locator/dpl-101 ${elements} + Check For Elements At URI ${SFF_OVS100_URI} ${elements} + +Put DPL to a Non-existing Service Function Forwarder + [Documentation] Put Service Function DPL to a Non-existing Service Function + Remove All Elements At URI ${SERVICE_FORWARDERS_URI} + Add Elements To URI From File ${SFF_OVS100_URI}sff-data-plane-locator/dpl-101 ${SFF_DPL101_FILE} + ${resp} RequestsLibrary.Get session ${SERVICE_FORWARDERS_URI} + Should Be Equal As Strings ${resp.status_code} 200 + Should Contain ${resp.content} ovs-100 + ${elements}= Create List dpl-101 6101 + Check For Elements At URI ${SFF_OVS100_URI}sff-data-plane-locator/dpl-101 ${elements} + Check For Elements At URI ${SFF_OVS100_URI} ${elements} + +Delete Service Function Forwarder DPL + [Documentation] Delete Service Function Forwarder Data Plane Locator + Remove All Elements At URI ${SERVICE_FORWARDERS_URI} + Add Elements To URI From File ${SFF_OVS100_URI} ${SFF_OVS100_FILE} + Remove All Elements At URI ${SFF_OVS100_URI}sff-data-plane-locator/eth0 + ${resp} RequestsLibrary.Get session ${SFF_OVS100_URI} + Should Be Equal As Strings ${resp.status_code} 200 + Should Not Contain ${resp.content} eth0 + +Get Service Function Forwarder DPL's Locator + [Documentation] Get Service Function Data Plane Locator + Remove All Elements At URI ${SERVICE_FORWARDERS_URI} + Add Elements To URI From File ${SFF_OVS100_URI} ${SFF_OVS100_FILE} + ${elements}= Create List 6000 service-locator:vxlan-gpe + Check For Elements At URI ${SFF_OVS100_URI}sff-data-plane-locator/eth0/data-plane-locator/ ${elements} + +Put Service Function Forwarder DPL's Locator + [Documentation] Put Service Function Forwarder Data Plane Locator + Remove All Elements At URI ${SERVICE_FORWARDERS_URI} + Add Elements To URI From File ${SFF_OVS100_URI} ${SFF_OVS100_FILE} + Add Elements To URI From File ${SFF_OVS100_URI}sff-data-plane-locator/dpl-101 ${SFF_DPL101_FILE} + Add Elements To URI From File ${SFF_OVS100_URI}sff-data-plane-locator/dpl-101/data-plane-locator/ ${SFF_DPL_LOCATOR_FILE} + ${elements}= Create List 5000 service-locator:vxlan-gpe + Check For Elements At URI ${SFF_OVS100_URI}sff-data-plane-locator/dpl-101/data-plane-locator ${elements} + ${elements}= Create List dpl-101 5000 service-locator:vxlan-gpe + Check For Elements At URI ${SFF_OVS100_URI}sff-data-plane-locator/dpl-101 ${elements} + Check For Elements At URI ${SFF_OVS100_URI} ${elements} + +Delete Service Function Forwarder DPL's Locator + [Documentation] Delete Service Function Forwarder Data Plane Locator + Remove All Elements At URI ${SERVICE_FORWARDERS_URI} + Add Elements To URI From File ${SFF_OVS100_URI} ${SFF_OVS100_FILE} + Add Elements To URI From File ${SFF_OVS100_URI}sff-data-plane-locator/dpl-101 ${SFF_DPL101_FILE} + Add Elements To URI From File ${SFF_OVS100_URI}sff-data-plane-locator/dpl-101/data-plane-locator/ ${SFF_DPL_LOCATOR_FILE} + Remove All Elements At URI ${SFF_OVS100_URI}sff-data-plane-locator/dpl-101/data-plane-locator + ${resp} RequestsLibrary.Get session ${SFF_OVS100_URI}sff-data-plane-locator/dpl-101 + Should Be Equal As Strings ${resp.status_code} 200 + Should Contain ${resp.content} dpl-101 + Should Not Contain ${resp.content} 6101 + Should Not Contain ${resp.content} service-locator:vxlan-gpe + ${resp} RequestsLibrary.Get session ${SFF_OVS100_URI} + Should Be Equal As Strings ${resp.status_code} 200 + Should Contain ${resp.content} dpl-101 + Should Not Contain ${resp.content} 6101 + +Get Service Function Dictionary From SFF + [Documentation] Get Service Function Dictionary From SFF + Remove All Elements At URI ${SERVICE_FORWARDERS_URI} + Add Elements To URI From File ${SERVICE_FORWARDERS_URI} ${SERVICE_FORWARDERS_FILE} + ${elements}= Create List service-function-dictionary service-function-type:dpi SF1 + Check For Elements At URI ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/service-function-dictionary/SF1 ${elements} + +Delete Service Function Dictionary From SFF + [Documentation] Delete Service Function Dictionary From SFF + Remove All Elements At URI ${SERVICE_FORWARDERS_URI} + Add Elements To URI From File ${SERVICE_FORWARDERS_URI} ${SERVICE_FORWARDERS_FILE} + ${resp} RequestsLibrary.Get session ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/service-function-dictionary/SF1 + Should Be Equal As Strings ${resp.status_code} 200 + Remove All Elements At URI ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/service-function-dictionary/SF1 + ${resp} RequestsLibrary.Get session ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/service-function-dictionary/SF1 + Should Be Equal As Strings ${resp.status_code} 404 + ${resp} RequestsLibrary.Get session ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/ + Should Be Equal As Strings ${resp.status_code} 200 + Should Contain ${resp.content} service-function-dictionary + Should Not Contain ${resp.content} SF1 + +Put Service Function Dictionary to SFF + [Documentation] Put Service Function Dictionary to SFF + Remove All Elements At URI ${SERVICE_FORWARDERS_URI} + Add Elements To URI From File ${SERVICE_FORWARDERS_URI} ${SERVICE_FORWARDERS_FILE} + Add Elements To URI From File ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/service-function-dictionary/SF100 ${SFF_SFD_SF100_FILE} + ${elements}= Create List service-function-type:napt44 SF100 + Check For Elements At URI ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/service-function-dictionary/SF100 ${elements} + ${elements}= create list service-function-dictionary service-function-type:napt44 SF100 + Check For Elements At URI ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/ ${elements} + +Get Service Function Dictionary's DPL From SFF + [Documentation] Get Service Function Dictionary From SFF + Remove All Elements At URI ${SERVICE_FORWARDERS_URI} + Add Elements To URI From File ${SERVICE_FORWARDERS_URI} ${SERVICE_FORWARDERS_FILE} + ${elements}= create list sff-sf-data-plane-locator 5000 10.1.1.1 + Check For Elements At URI ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/service-function-dictionary/SF1/sff-sf-data-plane-locator/ ${elements} + +Delete Service Function Dictionary's DPL From SFF + [Documentation] Delete Service Function Dictionary From SFF + Remove All Elements At URI ${SERVICE_FORWARDERS_URI} + Add Elements To URI From File ${SERVICE_FORWARDERS_URI} ${SERVICE_FORWARDERS_FILE} + ${resp} RequestsLibrary.Get session ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/service-function-dictionary/SF1/sff-sf-data-plane-locator/ + Should Be Equal As Strings ${resp.status_code} 200 + Remove All Elements At URI ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/service-function-dictionary/SF1/sff-sf-data-plane-locator/ + ${resp} RequestsLibrary.Get session ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/service-function-dictionary/SF1/sff-sf-data-plane-locator/ + Should Be Equal As Strings ${resp.status_code} 404 + +Put DPL of Service Function Dictionary to SFF + [Documentation] Put DPL of Service Function Dictionary to SFF + Remove All Elements At URI ${SERVICE_FORWARDERS_URI} + Add Elements To URI From File ${SERVICE_FORWARDERS_URI} ${SERVICE_FORWARDERS_FILE} + Add Elements To URI From File ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/service-function-dictionary/SF1/sff-sf-data-plane-locator/ ${SFF_SFD_LOCATOR_FILE} + ${elements}= create list sff-sf-data-plane-locator 6000 10.1.1.1 + Check For Elements At URI ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/service-function-dictionary/SF1/sff-sf-data-plane-locator/ ${elements} + Check For Elements At URI ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/service-function-dictionary/SF1/ ${elements} + +Get Connected SFF Dictionary From SFF + [Documentation] Get Connected SFF Dictionary Dictionary From SFF + Remove All Elements At URI ${SERVICE_FORWARDERS_URI} + Add Elements To URI From File ${SERVICE_FORWARDERS_URI} ${SERVICE_FORWARDERS_FILE} + ${elements}= create list connected-sff-dictionary br-int-ovs-2 sff-sff-data-plane-locator + Check For Elements At URI ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/connected-sff-dictionary/br-int-ovs-2 ${elements} + ${resp} RequestsLibrary.Get session ${SERVICE_FORWARDERS_URI}service-function-forwarder/br-int-ovs-2/connected-sff-dictionary/SFF-bootstrap + Should Be Equal As Strings ${resp.status_code} 200 + Should Contain ${resp.content} SFF-bootstrap + +Delete Connected SFF Dictionary From SFF + [Documentation] Delete Connected SFF Dictionary From SFF + Remove All Elements At URI ${SERVICE_FORWARDERS_URI} + Add Elements To URI From File ${SERVICE_FORWARDERS_URI} ${SERVICE_FORWARDERS_FILE} + ${resp} RequestsLibrary.Get session ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/connected-sff-dictionary/br-int-ovs-2 + Should Be Equal As Strings ${resp.status_code} 200 + Remove All Elements At URI ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/connected-sff-dictionary/br-int-ovs-2 + ${resp} RequestsLibrary.Get session ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/connected-sff-dictionary/br-int-ovs-2 + Should Be Equal As Strings ${resp.status_code} 404 + ${resp} RequestsLibrary.Get session ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/ + Should Be Equal As Strings ${resp.status_code} 200 + Should Not Contain ${resp.content} br-int-ovs-2 + +Put Connected SFF Dictionary to SFF + [Documentation] Put Connected SFF Dictionary to SFF + Remove All Elements At URI ${SERVICE_FORWARDERS_URI} + Add Elements To URI From File ${SERVICE_FORWARDERS_URI} ${SERVICE_FORWARDERS_FILE} + Add Elements To URI From File ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/connected-sff-dictionary/SFF100 ${SFF_CSD_SFF100_FILE} + ${elements}= create list SFF100 service-function-forwarder:open + Check For Elements At URI ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/connected-sff-dictionary/SFF100 ${elements} + Check For Elements At URI ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/ ${elements} + +Get Connected SFF Dictionary's DPL From SFF + [Documentation] Get Connected SFF Dictionary's DPL From SFF + Remove All Elements At URI ${SERVICE_FORWARDERS_URI} + Add Elements To URI From File ${SERVICE_FORWARDERS_URI} ${SERVICE_FORWARDERS_FILE} + ${elements}= create list sff-sff-data-plane-locator 5000 192.168.1.2 + Check For Elements At URI ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/connected-sff-dictionary/br-int-ovs-2/sff-sff-data-plane-locator/ ${elements} + +Delete Connected SFF Dictionary's DPL From SFF + [Documentation] Connected SFF Dictionary's DPL From SFF + Remove All Elements At URI ${SERVICE_FORWARDERS_URI} + Add Elements To URI From File ${SERVICE_FORWARDERS_URI} ${SERVICE_FORWARDERS_FILE} + ${resp} RequestsLibrary.Get session ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/connected-sff-dictionary/br-int-ovs-2/sff-sff-data-plane-locator/ + Should Be Equal As Strings ${resp.status_code} 200 + Remove All Elements At URI ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/connected-sff-dictionary/br-int-ovs-2/sff-sff-data-plane-locator/ + ${resp} RequestsLibrary.Get session ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/connected-sff-dictionary/br-int-ovs-2/sff-sff-data-plane-locator/ + Should Be Equal As Strings ${resp.status_code} 404 + +Put DPL of Connected SFF Dictionary to SFF + [Documentation] Put DPL of Connected SFF Dictionary to SFF + Remove All Elements At URI ${SERVICE_FORWARDERS_URI} + Add Elements To URI From File ${SERVICE_FORWARDERS_URI} ${SERVICE_FORWARDERS_FILE} + Add Elements To URI From File ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/connected-sff-dictionary/br-int-ovs-2/sff-sff-data-plane-locator/ ${SFF_CSD_LOCATOR_FILE} + ${elements}= create list sff-sff-data-plane-locator 6000 10.1.1.1 + Check For Elements At URI ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/connected-sff-dictionary/br-int-ovs-2/sff-sff-data-plane-locator/ ${elements} + Check For Elements At URI ${SERVICE_FORWARDERS_URI}service-function-forwarder/SFF-bootstrap/connected-sff-dictionary/br-int-ovs-2/ ${elements} + +Clean The Datastore After Tests + [Documentation] Clean All Service Function Forwarders In Datastore After Tests + Remove All Elements At URI ${SERVICE_FORWARDERS_URI} diff --git a/test/csit/suites/sfc/SFC_Basic/030__sfc_service_nodes.robot b/test/csit/suites/sfc/SFC_Basic/030__sfc_service_nodes.robot new file mode 100644 index 0000000000..1de5fb8770 --- /dev/null +++ b/test/csit/suites/sfc/SFC_Basic/030__sfc_service_nodes.robot @@ -0,0 +1,87 @@ +*** Settings *** +Documentation Test suite for SFC Service Nodes, Operates Nodes from Restconf APIs. +Suite Setup Create Session session http://${CONTROLLER}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS} +Suite Teardown Delete All Sessions +Library SSHLibrary +Library Collections +Library OperatingSystem +Library RequestsLibrary +Variables ../../../variables/Variables.py +Resource ../../../libraries/Utils.txt + +*** Variables *** +${SERVICE_NODES_URI} /restconf/config/service-node:service-nodes/ +${SERVICE_NODES_FILE} ../../../variables/sfc/service-nodes.json +${SN_NODE100_URI} /restconf/config/service-node:service-nodes/service-node/node-100 +${SN_NODE100_FILE} ../../../variables/sfc/sn_node_100.json + +*** Test Cases *** +Put Service Nodes + [Documentation] Add Service Nodes from JSON file + Add Elements To URI From File ${SERVICE_NODES_URI} ${SERVICE_NODES_FILE} + ${body} OperatingSystem.Get File ${SERVICE_NODES_FILE} + ${jsonbody} To Json ${body} + ${nodes} Get From Dictionary ${jsonbody} service-nodes + ${resp} RequestsLibrary.Get session ${SERVICE_NODES_URI} + Should Be Equal As Strings ${resp.status_code} 200 + ${result} To JSON ${resp.content} + ${node} Get From Dictionary ${result} service-nodes + Lists Should be Equal ${node} ${nodes} + +Delete All Service Nodes + [Documentation] Delete all Service Nodes + Add Elements To URI From File ${SERVICE_NODES_URI} ${SERVICE_NODES_FILE} + ${resp} RequestsLibrary.Get session ${SERVICE_NODES_URI} + Should Be Equal As Strings ${resp.status_code} 200 + Remove All Elements At URI ${SERVICE_NODES_URI} + ${resp} RequestsLibrary.Get session ${SERVICE_NODES_URI} + Should Be Equal As Strings ${resp.status_code} 404 + +Get one Service Node + [Documentation] Get one Service Node + Remove All Elements At URI ${SERVICE_NODES_URI} + Add Elements To URI From File ${SERVICE_NODES_URI} ${SERVICE_NODES_FILE} + ${elements}= Create List node-101 firewall-101-2 10.3.1.101 + Check For Elements At URI ${SERVICE_NODES_URI}service-node/node-101 ${elements} + +Get A Non-existing Service Node + [Documentation] Get A Non-existing Service Node + Remove All Elements At URI ${SERVICE_NODES_URI} + Add Elements To URI From File ${SERVICE_NODES_URI} ${SERVICE_NODES_FILE} + ${resp} RequestsLibrary.Get session ${SERVICE_NODES_URI}service-node/non-existing-sf + Should Be Equal As Strings ${resp.status_code} 404 + +Delete A Service Node + [Documentation] Delete A Service Node + Remove All Elements At URI ${SERVICE_NODES_URI} + Add Elements To URI From File ${SERVICE_NODES_URI} ${SERVICE_NODES_FILE} + Remove All Elements At URI ${SERVICE_NODES_URI}service-node/node-101 + ${resp} RequestsLibrary.Get session ${SERVICE_NODES_URI} + Should Be Equal As Strings ${resp.status_code} 200 + Should Not Contain ${resp.content} node-101 + +Delete A Non-existing Service Node + [Documentation] Delete A Non existing Service Node + Remove All Elements At URI ${SERVICE_NODES_URI} + Add Elements To URI From File ${SERVICE_NODES_URI} ${SERVICE_NODES_FILE} + ${body} OperatingSystem.Get File ${SERVICE_NODES_FILE} + ${jsonbody} To Json ${body} + ${nodes} Get From Dictionary ${jsonbody} service-nodes + Remove All Elements At URI ${SERVICE_NODES_URI}service-node/non-existing-sn + ${resp} RequestsLibrary.Get session ${SERVICE_NODES_URI} + Should Be Equal As Strings ${resp.status_code} 200 + ${result} To JSON ${resp.content} + ${node} Get From Dictionary ${result} service-nodes + Lists Should be Equal ${node} ${nodes} + +Put one Service Node + [Documentation] Put one Service Node + Remove All Elements At URI ${SERVICE_NODES_URI} + Add Elements To URI From File ${SN_NODE100_URI} ${SN_NODE100_FILE} + ${elements}= Create List node-100 10.3.1.100 dpi-100-1 firewall-102-1 + Check For Elements At URI ${SN_NODE100_URI} ${elements} + Check For Elements At URI ${SERVICE_NODES_URI} ${elements} + +Clean All Service Nodes After Tests + [Documentation] Delete all Service Nodes From Datastore After Tests + Remove All Elements At URI ${SERVICE_NODES_URI} diff --git a/test/csit/suites/sfc/SFC_Basic/040__sfc_service_chains.robot b/test/csit/suites/sfc/SFC_Basic/040__sfc_service_chains.robot new file mode 100644 index 0000000000..43aaf75469 --- /dev/null +++ b/test/csit/suites/sfc/SFC_Basic/040__sfc_service_chains.robot @@ -0,0 +1,133 @@ +*** Settings *** +Documentation Test suite for SFC Service Function Chains, Operates Chains from Restconf APIs. +Suite Setup Create Session session http://${CONTROLLER}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS} +Suite Teardown Delete All Sessions +Library SSHLibrary +Library Collections +Library OperatingSystem +Library RequestsLibrary +Variables ../../../variables/Variables.py +Resource ../../../libraries/Utils.txt + +*** Variables *** +${SERVICE_CHAINS_URI} /restconf/config/service-function-chain:service-function-chains/ +${SERVICE_CHAINS_FILE} ../../../variables/sfc/service-function-chains.json +${SERVICE_CHAIN100_URI} /restconf/config/service-function-chain:service-function-chains/service-function-chain/SFC100 +${SERVICE_CHAIN100_FILE} ../../../variables/sfc/sfc_chain_100.json +${SERVICE_CHAIN100_SFIDS_URI} /restconf/config/service-function-chain:service-function-chains/service-function-chain/SFC100/sfc-service-function/ids-abstract100 +${SERVICE_CHAIN100_SFIDS_FILE} ../../../variables/sfc/sfc_chain_100_sfids.json + +*** Test Cases *** +Put Service Function Chains + [Documentation] Add Service Function Chains from JSON file + Add Elements To URI From File ${SERVICE_CHAINS_URI} ${SERVICE_CHAINS_FILE} + ${body} OperatingSystem.Get File ${SERVICE_CHAINS_FILE} + ${jsonbody} To Json ${body} + ${chains} Get From Dictionary ${jsonbody} service-function-chains + ${resp} RequestsLibrary.Get session ${SERVICE_CHAINS_URI} + Should Be Equal As Strings ${resp.status_code} 200 + ${result} To JSON ${resp.content} + ${chain} Get From Dictionary ${result} service-function-chains + Lists Should be Equal ${chain} ${chains} + +Delete All Service Function Chains + [Documentation] Delete all Service Function Chains + ${resp} RequestsLibrary.Get session ${SERVICE_CHAINS_URI} + Should Be Equal As Strings ${resp.status_code} 200 + Remove All Elements At URI ${SERVICE_CHAINS_URI} + ${resp} RequestsLibrary.Get session ${SERVICE_CHAINS_URI} + Should Be Equal As Strings ${resp.status_code} 404 + +Get one Service Function Chain + [Documentation] Get one Service Function Chain + Remove All Elements At URI ${SERVICE_CHAINS_URI} + Add Elements To URI From File ${SERVICE_CHAINS_URI} ${SERVICE_CHAINS_FILE} + ${elements}= Create List SFC1 dpi-abstract1 napt44-abstract1 firewall-abstract1 + Check For Elements At URI ${SERVICE_CHAINS_URI}service-function-chain/SFC1 ${elements} + +Get A Non-existing Service Function Chain + [Documentation] Get A Non-existing Service Function Chain + Remove All Elements At URI ${SERVICE_CHAINS_URI} + Add Elements To URI From File ${SERVICE_CHAINS_URI} ${SERVICE_CHAINS_FILE} + ${resp} RequestsLibrary.Get session ${SERVICE_CHAINS_URI}service-function-chain/non-existing-sfc + Should Be Equal As Strings ${resp.status_code} 404 + +Delete A Service Function Chain + [Documentation] Delete A Service Function Chain + Remove All Elements At URI ${SERVICE_CHAINS_URI} + Add Elements To URI From File ${SERVICE_CHAINS_URI} ${SERVICE_CHAINS_FILE} + ${resp} RequestsLibrary.Get session ${SERVICE_CHAINS_URI}service-function-chain/SFC1 + Should Be Equal As Strings ${resp.status_code} 200 + Remove All Elements At URI ${SERVICE_CHAINS_URI}service-function-chain/SFC1 + ${elements}= Create List SFC1 dpi-abstract1 napt44-abstract1 firewall-abstract1 + Check For Elements Not At URI ${SERVICE_CHAINS_URI} ${elements} + +Delete A Non-existing Service Function Chain + [Documentation] Delete A Non existing Service Function Chain + Remove All Elements At URI ${SERVICE_CHAINS_URI} + Add Elements To URI From File ${SERVICE_CHAINS_URI} ${SERVICE_CHAINS_FILE} + ${body} OperatingSystem.Get File ${SERVICE_CHAINS_FILE} + ${jsonbody} To Json ${body} + ${chains} Get From Dictionary ${jsonbody} service-function-chains + Remove All Elements At URI ${SERVICE_CHAINS_URI}service-function-chain/non-existing-sfc + ${resp} RequestsLibrary.Get session ${SERVICE_CHAINS_URI} + Should Be Equal As Strings ${resp.status_code} 200 + ${result} To JSON ${resp.content} + ${chain} Get From Dictionary ${result} service-function-chains + Lists Should be Equal ${chain} ${chains} + +Put one Service Function Chain + [Documentation] Put one Service Function Chain + Remove All Elements At URI ${SERVICE_CHAINS_URI} + Add Elements To URI From File ${SERVICE_CHAIN100_URI} ${SERVICE_CHAIN100_FILE} + ${elements}= Create List SFC100 dpi-abstract100 napt44-abstract100 firewall-abstract100 + Check For Elements At URI ${SERVICE_CHAIN100_URI} ${elements} + Check For Elements At URI ${SERVICE_CHAINS_URI} ${elements} + +Get one Service Function From Chain + [Documentation] Get one Service Function From Chain + Remove All Elements At URI ${SERVICE_CHAINS_URI} + Add Elements To URI From File ${SERVICE_CHAINS_URI} ${SERVICE_CHAINS_FILE} + ${elements}= Create List dpi-abstract1 "order":0 service-function-type:dpi + Check For Elements At URI ${SERVICE_CHAINS_URI}service-function-chain/SFC1/sfc-service-function/dpi-abstract1 ${elements} + +Get A Non-existing Service Function From Chain + [Documentation] Get A Non-existing Service Function From Chain + Remove All Elements At URI ${SERVICE_CHAINS_URI} + Add Elements To URI From File ${SERVICE_CHAINS_URI} ${SERVICE_CHAINS_FILE} + ${resp} RequestsLibrary.Get session ${SERVICE_CHAINS_URI}service-function-chain/SFC1/sfc-service-function/non-existing-sft + Should Be Equal As Strings ${resp.status_code} 404 + +Delete A Service Function From Chain + [Documentation] Delete A Service Function From Chain + Remove All Elements At URI ${SERVICE_CHAINS_URI} + Add Elements To URI From File ${SERVICE_CHAINS_URI} ${SERVICE_CHAINS_FILE} + Remove All Elements At URI ${SERVICE_CHAINS_URI}service-function-chain/SFC1/sfc-service-function/dpi-abstract1 + ${resp} RequestsLibrary.Get session ${SERVICE_CHAINS_URI} + Should Be Equal As Strings ${resp.status_code} 200 + Should Contain ${resp.content} SFC1 + ${elements}= Create List dpi-abstract1 service-function-type:dpi + Check For Elements Not At URI ${SERVICE_CHAINS_URI}service-function-chain/SFC1/ ${elements} + +Delete A Non-existing Service Function From Chain + [Documentation] Delete A Non existing Service Function From Chain + Remove All Elements At URI ${SERVICE_CHAINS_URI} + Add Elements To URI From File ${SERVICE_CHAINS_URI} ${SERVICE_CHAINS_FILE} + Remove All Elements At URI ${SERVICE_CHAINS_URI}service-function-chain/SFC1/sfc-service-function/non-existing-sft + ${elements}= Create List dpi-abstract1 napt44-abstract1 firewall-abstract1 + Check For Elements At URI ${SERVICE_CHAINS_URI}service-function-chain/SFC1 ${elements} + Check For Elements At URI ${SERVICE_CHAINS_URI} ${elements} + +Put one Service Function into Chain + [Documentation] Put one Service Function Chain + Remove All Elements At URI ${SERVICE_CHAINS_URI} + Add Elements To URI From File ${SERVICE_CHAINS_URI} ${SERVICE_CHAINS_FILE} + Add Elements To URI From File ${SERVICE_CHAIN100_SFIDS_URI} ${SERVICE_CHAIN100_SFIDS_FILE} + ${elements}= Create List ids-abstract100 "order":3 service-function-type:ids + Check For Elements At URI ${SERVICE_CHAIN100_SFIDS_URI} ${elements} + Check For Elements At URI ${SERVICE_CHAIN100_URI} ${elements} + Check For Elements At URI ${SERVICE_CHAINS_URI} ${elements} + +Clean All Service Function Chains After Tests + [Documentation] Delete all Service Function Chains From Datastore After Tests + Remove All Elements At URI ${SERVICE_CHAINS_URI} diff --git a/test/csit/suites/sfc/SFC_Basic/050__sfc_service_schedule_types.robot b/test/csit/suites/sfc/SFC_Basic/050__sfc_service_schedule_types.robot new file mode 100644 index 0000000000..7991e26e91 --- /dev/null +++ b/test/csit/suites/sfc/SFC_Basic/050__sfc_service_schedule_types.robot @@ -0,0 +1,86 @@ +*** Settings *** +Documentation Test suite for SFC Function Schedule Algorithm Types, Operates types from Restconf APIs. +Suite Setup Create Session session http://${CONTROLLER}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS} +Suite Teardown Delete All Sessions +Library SSHLibrary +Library Collections +Library OperatingSystem +Library RequestsLibrary +Variables ../../../variables/Variables.py +Resource ../../../libraries/Utils.txt + +*** Variables *** +${SERVICE_SCHED_TYPES_URI} /restconf/config/service-function-scheduler-type:service-function-scheduler-types/ +${SERVICE_SCHED_TYPES_FILE} ../../../variables/sfc/service-schedule-types.json +${SERVICE_WSP_SCHED_TYPE_URI} /restconf/config/service-function-scheduler-type:service-function-scheduler-types/service-function-scheduler-type/service-function-scheduler-type:weighted-shortest-path +${SERVICE_WSP_SCHED_TYPE_FILE} ../../../variables/sfc/service-wsp-schedule-type.json + +*** Test Cases *** +Add Service Function Schedule Algorithm Types + [Documentation] Add Service Function Schedule Algorithm Types from JSON file + Add Elements To URI From File ${SERVICE_SCHED_TYPES_URI} ${SERVICE_SCHED_TYPES_FILE} + ${body} OperatingSystem.Get File ${SERVICE_SCHED_TYPES_FILE} + ${jsonbody} To Json ${body} + ${types} Get From Dictionary ${jsonbody} service-function-scheduler-types + ${resp} RequestsLibrary.Get session ${SERVICE_SCHED_TYPES_URI} + Should Be Equal As Strings ${resp.status_code} 200 + ${result} To JSON ${resp.content} + ${type} Get From Dictionary ${result} service-function-scheduler-types + Lists Should be Equal ${type} ${types} + +Delete All Service Function Schedule Algorithm Types + [Documentation] Delete Service Function Schedule Algorithm Types + ${resp} RequestsLibrary.Get session ${SERVICE_SCHED_TYPES_URI} + Should Be Equal As Strings ${resp.status_code} 200 + Remove All Elements At URI ${SERVICE_SCHED_TYPES_URI} + ${resp} RequestsLibrary.Get session ${SERVICE_SCHED_TYPES_URI} + Should Be Equal As Strings ${resp.status_code} 404 + +Get Ramdom Schedule Algorithm Type + [Documentation] Get Ramdom Schedule Algorithm Type + Remove All Elements At URI ${SERVICE_SCHED_TYPES_URI} + Add Elements To URI From File ${SERVICE_SCHED_TYPES_URI} ${SERVICE_SCHED_TYPES_FILE} + ${elements}= Create List random "enabled":false service-function-scheduler-type:random + Check For Elements At URI ${SERVICE_SCHED_TYPES_URI}service-function-scheduler-type/service-function-scheduler-type:random ${elements} + ${resp} RequestsLibrary.Get session ${SERVICE_SCHED_TYPES_URI}service-function-scheduler-type/service-function-scheduler-type:random + +Get A Non-existing Service Function Schedule Algorithm Type + [Documentation] Get A Non-existing Service Function Schedule Algorithm Type + Remove All Elements At URI ${SERVICE_SCHED_TYPES_URI} + Add Elements To URI From File ${SERVICE_SCHED_TYPES_URI} ${SERVICE_SCHED_TYPES_FILE} + ${resp} RequestsLibrary.Get session ${SERVICE_SCHED_TYPES_URI}service-function-scheduler-type/service-function-scheduler-type:user-defined + Should Be Equal As Strings ${resp.status_code} 404 + +Delete Ramdom Schedule Algorithm Type + [Documentation] Delete Ramdom Schedule Algorithm Type + Remove All Elements At URI ${SERVICE_SCHED_TYPES_URI} + Add Elements To URI From File ${SERVICE_SCHED_TYPES_URI} ${SERVICE_SCHED_TYPES_FILE} + Remove All Elements At URI ${SERVICE_SCHED_TYPES_URI}service-function-scheduler-type/service-function-scheduler-type:random + ${elements}= Create List random service-function-scheduler-type:random + Check For Elements Not At URI ${SERVICE_SCHED_TYPES_URI} ${elements} + +Delete A Non-existing Service Function Schedule Algorithm Type + [Documentation] Delete A Non existing Service Function Schedule Algorithm Type + Remove All Elements At URI ${SERVICE_SCHED_TYPES_URI} + Add Elements To URI From File ${SERVICE_SCHED_TYPES_URI} ${SERVICE_SCHED_TYPES_FILE} + ${body} OperatingSystem.Get File ${SERVICE_SCHED_TYPES_FILE} + ${jsonbody} To Json ${body} + ${types} Get From Dictionary ${jsonbody} service-function-scheduler-types + Remove All Elements At URI ${SERVICE_SCHED_TYPES_URI}service-function-scheduler-type/service-function-scheduler-type:user-defined + ${resp} RequestsLibrary.Get session ${SERVICE_SCHED_TYPES_URI} + Should Be Equal As Strings ${resp.status_code} 200 + ${result} To JSON ${resp.content} + ${type} Get From Dictionary ${result} service-function-scheduler-types + Lists Should be Equal ${type} ${types} + +Put one Service Function Schedule Algorithm Type + [Documentation] Put one Service Function Schedule Algorithm Type + Remove All Elements At URI ${SERVICE_SCHED_TYPES_URI} + Add Elements To URI From File ${SERVICE_WSP_SCHED_TYPE_URI} ${SERVICE_WSP_SCHED_TYPE_FILE} + ${elements}= Create List weighted-shortest-path service-function-scheduler-type:weighted-shortest-path + Check For Elements At URI ${SERVICE_WSP_SCHED_TYPE_URI} ${elements} + Check For Elements At URI ${SERVICE_SCHED_TYPES_URI} ${elements} + +Clean Datastore After Tests + [Documentation] Delete All Service Function Schedule Algorithm Types From Datastore After Tests + Remove All Elements At URI ${SERVICE_SCHED_TYPES_URI} diff --git a/test/csit/suites/sfc/SFC_Basic/060__sfc_service_paths.robot b/test/csit/suites/sfc/SFC_Basic/060__sfc_service_paths.robot new file mode 100644 index 0000000000..dc330f9b19 --- /dev/null +++ b/test/csit/suites/sfc/SFC_Basic/060__sfc_service_paths.robot @@ -0,0 +1,93 @@ +*** Settings *** +Documentation Test suite for SFC Service Function Paths, Operates paths from Restconf APIs. +Suite Setup Create Session session http://${CONTROLLER}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS} +Suite Teardown Delete All Sessions +Library SSHLibrary +Library Collections +Library OperatingSystem +Library RequestsLibrary +Variables ../../../variables/Variables.py +Resource ../../../libraries/Utils.txt + +*** Variables *** +${SERVICE_FUNCTION_PATHS_URI} /restconf/config/service-function-path:service-function-paths/ +${SERVICE_FUNCTION_PATHS_FILE} ../../../variables/sfc/service-function-paths.json +${SERVICE_FUNCTION_PATH400_URI} /restconf/config/service-function-path:service-function-paths/service-function-path/SFC1-400 +${SERVICE_FUNCTION_PATH400_FILE} ../../../variables/sfc/sfp_sfc1_path400.json + +*** Test Cases *** +Add Service Function Paths + [Documentation] Add Service Function Paths from JSON file + Add Elements To URI From File ${SERVICE_FUNCTION_PATHS_URI} ${SERVICE_FUNCTION_PATHS_FILE} + ${body} OperatingSystem.Get File ${SERVICE_FUNCTION_PATHS_FILE} + ${jsonbody} To Json ${body} + ${paths} Get From Dictionary ${jsonbody} service-function-paths + ${resp} RequestsLibrary.Get session ${SERVICE_FUNCTION_PATHS_URI} + Should Be Equal As Strings ${resp.status_code} 200 + ${result} To JSON ${resp.content} + ${path} Get From Dictionary ${result} service-function-paths + Lists Should be Equal ${path} ${paths} + +Delete All Service Function Paths + [Documentation] Delete all Service Function Paths + ${resp} RequestsLibrary.Get session ${SERVICE_FUNCTION_PATHS_URI} + Should Be Equal As Strings ${resp.status_code} 200 + Remove All Elements At URI ${SERVICE_FUNCTION_PATHS_URI} + ${resp} RequestsLibrary.Get session ${SERVICE_FUNCTION_PATHS_URI} + Should Be Equal As Strings ${resp.status_code} 404 + +Get one Service Function Path + [Documentation] Get one Service Function Path + Remove All Elements At URI ${SERVICE_FUNCTION_PATHS_URI} + Add Elements To URI From File ${SERVICE_FUNCTION_PATHS_URI} ${SERVICE_FUNCTION_PATHS_FILE} + ${elements}= Create List SFC1-100 "service-chain-name":"SFC1" + Check For Elements At URI ${SERVICE_FUNCTION_PATHS_URI}service-function-path/SFC1-100 ${elements} + +Get A Non-existing Service Function Path + [Documentation] Get A Non-existing Service Function Path + Remove All Elements At URI ${SERVICE_FUNCTION_PATHS_URI} + Add Elements To URI From File ${SERVICE_FUNCTION_PATHS_URI} ${SERVICE_FUNCTION_PATHS_FILE} + ${resp} RequestsLibrary.Get session ${SERVICE_FUNCTION_PATHS_URI}service-function-path/non-existing-sfp + Should Be Equal As Strings ${resp.status_code} 404 + +Delete A Service Function Path + [Documentation] Delete A Service Function Path + Remove All Elements At URI ${SERVICE_FUNCTION_PATHS_URI} + Add Elements To URI From File ${SERVICE_FUNCTION_PATHS_URI} ${SERVICE_FUNCTION_PATHS_FILE} + ${resp} RequestsLibrary.Get session ${SERVICE_FUNCTION_PATHS_URI}service-function-path/SFC1-100 + Should Be Equal As Strings ${resp.status_code} 200 + Remove All Elements At URI ${SERVICE_FUNCTION_PATHS_URI}service-function-path/SFC1-100 + ${resp} RequestsLibrary.Get session ${SERVICE_FUNCTION_PATHS_URI}service-function-path/SFC1-100 + Should Be Equal As Strings ${resp.status_code} 404 + ${resp} RequestsLibrary.Get session ${SERVICE_FUNCTION_PATHS_URI} + Should Be Equal As Strings ${resp.status_code} 200 + Should Not Contain ${resp.content} SFC1-100 + +Delete A Non-existing Empty Service Function Path + [Documentation] Delete A Non existing Service Function Path + Remove All Elements At URI ${SERVICE_FUNCTION_PATHS_URI} + Add Elements To URI From File ${SERVICE_FUNCTION_PATHS_URI} ${SERVICE_FUNCTION_PATHS_FILE} + ${body} OperatingSystem.Get File ${SERVICE_FUNCTION_PATHS_FILE} + ${jsonbody} To Json ${body} + ${paths} Get From Dictionary ${jsonbody} service-function-paths + Remove All Elements At URI ${SERVICE_FUNCTION_PATHS_URI}service-function-path/non-existing-sfp + ${resp} RequestsLibrary.Get session ${SERVICE_FUNCTION_PATHS_URI} + Should Be Equal As Strings ${resp.status_code} 200 + ${result} To JSON ${resp.content} + ${path} Get From Dictionary ${result} service-function-paths + Lists Should be Equal ${path} ${paths} + +Put one Service Function + [Documentation] Put one Service Function + Remove All Elements At URI ${SERVICE_FUNCTION_PATHS_URI} + Add Elements To URI From File ${SERVICE_FUNCTION_PATH400_URI} ${SERVICE_FUNCTION_PATH400_FILE} + ${resp} RequestsLibrary.Get session ${SERVICE_FUNCTION_PATH400_URI} + Should Be Equal As Strings ${resp.status_code} 200 + Should Contain ${resp.content} SFC1-400 + ${resp} RequestsLibrary.Get session ${SERVICE_FUNCTION_PATHS_URI} + Should Be Equal As Strings ${resp.status_code} 200 + Should Contain ${resp.content} SFC1-400 + +Clean All Service Function Paths After Tests + [Documentation] Delete all Service Function Paths From Datastore After Tests + Remove All Elements At URI ${SERVICE_FUNCTION_PATHS_URI} diff --git a/test/csit/suites/sfc/SFC_Basic/070__sfc_rendered_service_paths.robot b/test/csit/suites/sfc/SFC_Basic/070__sfc_rendered_service_paths.robot new file mode 100644 index 0000000000..bf55f8f647 --- /dev/null +++ b/test/csit/suites/sfc/SFC_Basic/070__sfc_rendered_service_paths.robot @@ -0,0 +1,261 @@ +*** Settings *** +Documentation Test suite for SFC Service Functions, Operates functions from Restconf APIs. +Suite Setup Create Session session http://${CONTROLLER}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS} +Suite Teardown Delete All Sessions +Library SSHLibrary +Library Collections +Library OperatingSystem +Library RequestsLibrary +Variables ../../../variables/Variables.py +Resource ../../../libraries/Utils.txt + +*** Variables *** +${SERVICE_FUNCTIONS_URI} /restconf/config/service-function:service-functions/ +${SERVICE_FUNCTIONS_FILE} ../../../variables/sfc/service-functions.json +${SERVICE_FORWARDERS_URI} /restconf/config/service-function-forwarder:service-function-forwarders/ +${SERVICE_FORWARDERS_FILE} ../../../variables/sfc/service-function-forwarders.json +${SERVICE_NODES_URI} /restconf/config/service-node:service-nodes/ +${SERVICE_NODES_FILE} ../../../variables/sfc/service-nodes.json +${SERVICE_CHAINS_URI} /restconf/config/service-function-chain:service-function-chains/ +${SERVICE_CHAINS_FILE} ../../../variables/sfc/service-function-chains.json +${SERVICE_FUNCTION_PATHS_URI} /restconf/config/service-function-path:service-function-paths/ +${SERVICE_FUNCTION_PATHS_FILE} ../../../variables/sfc/service-function-paths.json + +${SERVICE_SCHED_TYPES_URI} /restconf/config/service-function-scheduler-type:service-function-scheduler-types/ +${SERVICE_SCHED_TYPE_URI_BASE} ${SERVICE_SCHED_TYPES_URI}service-function-scheduler-type/service-function-scheduler-type: +${SERVICE_RANDOM_SCHED_TYPE_URI} ${SERVICE_SCHED_TYPE_URI_BASE}random +${SERVICE_RANDOM_SCHED_TYPE_FILE} ../../../variables/sfc/service-random-schedule-type.json +${SERVICE_ROUNDROBIN_SCHED_TYPE_URI} ${SERVICE_SCHED_TYPE_URI_BASE}round-robin +${SERVICE_ROUNDROBIN_SCHED_TYPE_FILE} ../../../variables/sfc/service-roundrobin-schedule-type.json +${SERVICE_LOADBALANCE_SCHED_TYPE_URI} ${SERVICE_SCHED_TYPE_URI_BASE}load-balance +${SERVICE_LOADBALANCE_SCHED_TYPE_FILE} ../../../variables/sfc/service-loadbalance-schedule-type.json +${SERVICE_SHORTESTPATH_SCHED_TYPE_URI} ${SERVICE_SCHED_TYPE_URI_BASE}shortest-path +${SERVICE_SHORTESTPATH_SCHED_TYPE_FILE} ../../../variables/sfc/service-loadbalance-schedule-type.json + +${RENDERED_SERVICE_PATHS_URI} /restconf/config/rendered-service-path:rendered-service-paths/ +${OPERATIONAL_RSPS_URI} /restconf/operational/rendered-service-path:rendered-service-paths/ +${OPERATIONS_CREATE_RSP_URI} /restconf/operations/rendered-service-path:create-rendered-path/ +${OPERATIONS_DELETE_RSP_URI} /restconf/operations/rendered-service-path:delete-rendered-path +${CREATE_RSP1_INPUT} {"input":{"parent-service-function-path":"SFC1-100","name":"SFC1-100-Path-1"}} +${CREATE_RSP2_INPUT} {"input":{"parent-service-function-path":"SFC1-100","name":"SFC1-100-Path-2"}} +${CREATE_RSP3_INPUT} {"input":{"parent-service-function-path":"SFC1-100","name":"SFC1-100-Path-3"}} +${CREATE_RSP4_INPUT} {"input":{"parent-service-function-path":"SFC1-100","name":"SFC1-100-Path-4"}} +${CREATE_RSP5_INPUT} {"input":{"parent-service-function-path":"SFC1-100","name":"SFC1-100-Path-5"}} +${CREATE_RSP6_INPUT} {"input":{"parent-service-function-path":"SFC1-100","name":"SFC1-100-Path-6"}} +${CREATE_RSP_FAILURE_INPUT} {"input":{"parent-service-function-path":"SFC1-empty","name":"SFC1-empty-Path-1"}} +${DELETE_RSP1_INPUT} {"input":{"name":"SFC1-100-Path-1"}} +${DELETE_RSP2_INPUT} {"input":{"name":"SFC1-100-Path-2"}} +${DELETE_RSP3_INPUT} {"input":{"name":"SFC1-100-Path-3"}} +${DELETE_RSP4_INPUT} {"input":{"name":"SFC1-100-Path-4"}} +${DELETE_RSP5_INPUT} {"input":{"name":"SFC1-100-Path-5"}} +${DELETE_RSP6_INPUT} {"input":{"name":"SFC1-100-Path-6"}} + +*** Test Cases *** +Basic Environment Setup Tests + [Documentation] Prepare Basic Test Environment + Add Elements To URI From File ${SERVICE_FORWARDERS_URI} ${SERVICE_FORWARDERS_FILE} + Add Elements To URI From File ${SERVICE_NODES_URI} ${SERVICE_NODES_FILE} + Add Elements To URI From File ${SERVICE_FUNCTIONS_URI} ${SERVICE_FUNCTIONS_FILE} + Add Elements To URI From File ${SERVICE_CHAINS_URI} ${SERVICE_CHAINS_FILE} + Add Elements To URI From File ${SERVICE_FUNCTION_PATHS_URI} ${SERVICE_FUNCTION_PATHS_FILE} + +Create and Get Rendered Service Path + [Documentation] Create and Get Rendered Service Path Through RESTConf APIs + Post Elements To URI As JSON ${OPERATIONS_CREATE_RSP_URI} ${CREATE_RSP1_INPUT} + ${resp} RequestsLibrary.Get session ${OPERATIONAL_RSPS_URI} + Should Be Equal As Strings ${resp.status_code} 200 + ${elements}= Create List SFC1-100-Path-1 "parent-service-function-path":"SFC1-100" "hop-number":0 "service-index":255 "hop-number":1 "service-index":254 "hop-number":2 "service-index":253 + Check For Elements At URI ${OPERATIONAL_RSPS_URI} ${elements} + +Create Get Rendered Service Path Failure + [Documentation] Create Rendered Service Path Failure Cases + ${resp} RequestsLibrary.Post session ${OPERATIONS_CREATE_RSP_URI} data=${CREATE_RSP_FAILURE_INPUT} headers=${headers} + Should Be Equal As Strings ${resp.status_code} 500 + +Get Rendered Service Path By Name + [Documentation] Get Rendered Service Path By Name Through RESTConf APIs + Post Elements To URI As JSON ${OPERATIONS_CREATE_RSP_URI} ${CREATE_RSP1_INPUT} + ${resp} RequestsLibrary.Get session ${OPERATIONAL_RSPS_URI}rendered-service-path/SFC1-100-Path-1 + Should Be Equal As Strings ${resp.status_code} 200 + ${elements}= Create List SFC1-100-Path-1 "parent-service-function-path":"SFC1-100" "hop-number":0 "service-index":255 "hop-number":1 "service-index":254 "hop-number":2 "service-index":253 + Check For Elements At URI ${OPERATIONAL_RSPS_URI} ${elements} + +Get Non Existing Rendered Service Path + [Documentation] Get Non Existing Rendered Service Path Through RESTConf APIs + Post Elements To URI As JSON ${OPERATIONS_CREATE_RSP_URI} ${CREATE_RSP1_INPUT} + ${resp} RequestsLibrary.Get session ${OPERATIONAL_RSPS_URI}rendered-service-path/non-existing-rsp + Should Be Equal As Strings ${resp.status_code} 404 + ${resp} RequestsLibrary.Get session ${OPERATIONAL_RSPS_URI} + Should Be Equal As Strings ${resp.status_code} 200 + Should Not Contain ${resp.content} non-existing-rsp + +Delete one Rendered Service Path By Name + [Documentation] Delete One Rendered Service Path By Name Through RESTConf APIs + Post Elements To URI As JSON ${OPERATIONS_CREATE_RSP_URI} ${CREATE_RSP1_INPUT} + ${resp} RequestsLibrary.Get session ${OPERATIONAL_RSPS_URI}rendered-service-path/SFC1-100-Path-1 + Should Be Equal As Strings ${resp.status_code} 200 + Should Contain ${resp.content} SFC1-100-Path-1 + Post Elements To URI As JSON ${OPERATIONS_DELETE_RSP_URI} ${DELETE_RSP1_INPUT} + ${resp} RequestsLibrary.Get session ${OPERATIONAL_RSPS_URI}rendered-service-path/SFC1-100-Path-1 + Should Be Equal As Strings ${resp.status_code} 404 + ${resp} RequestsLibrary.Get session ${OPERATIONAL_RSPS_URI} + Should Be Equal As Strings ${resp.status_code} 200 + Should Not Contain ${resp.content} SFC1-100-Path-1 + +Delete Non Existing Rendered Service Path By Name + [Documentation] Delete One Rendered Service Path By Name Through RESTConf APIs + Post Elements To URI As JSON ${OPERATIONS_CREATE_RSP_URI} ${CREATE_RSP1_INPUT} + ${resp} RequestsLibrary.Get session ${OPERATIONAL_RSPS_URI}rendered-service-path/SFC1-100-Path-1 + Should Be Equal As Strings ${resp.status_code} 200 + Should Contain ${resp.content} SFC1-100-Path-1 + Post Elements To URI As JSON ${OPERATIONS_DELETE_RSP_URI} ${DELETE_RSP2_INPUT} + ${resp} RequestsLibrary.Get session ${OPERATIONAL_RSPS_URI} + Should Be Equal As Strings ${resp.status_code} 200 + Should Not Contain ${resp.content} {"rendered-service-paths":{}} + +Get Rendered Service Path Hop + [Documentation] Get Rendered Service Path By Name Through RESTConf APIs + Post Elements To URI As JSON ${OPERATIONS_CREATE_RSP_URI} ${CREATE_RSP1_INPUT} + ${resp} RequestsLibrary.Get session ${OPERATIONAL_RSPS_URI}rendered-service-path/SFC1-100-Path-1/rendered-service-path-hop/0/ + Should Be Equal As Strings ${resp.status_code} 200 + ${elements}= Create List "hop-number":0 "service-index":255 "service-function-name":"dpi + Check For Elements At URI ${OPERATIONAL_RSPS_URI}rendered-service-path/SFC1-100-Path-1/rendered-service-path-hop/0/ ${elements} + ${elements}= Create List "hop-number":1 "service-index":254 "service-function-name":"napt44 + Check For Elements At URI ${OPERATIONAL_RSPS_URI}rendered-service-path/SFC1-100-Path-1/rendered-service-path-hop/1/ ${elements} + ${elements}= Create List "hop-number":2 "service-index":253 "service-function-name":"firewall + Check For Elements At URI ${OPERATIONAL_RSPS_URI}rendered-service-path/SFC1-100-Path-1/rendered-service-path-hop/2/ ${elements} + ${resp} RequestsLibrary.Get session ${OPERATIONAL_RSPS_URI}rendered-service-path/SFC1-100-Path-1/rendered-service-path-hop/3/ + Should Be Equal As Strings ${resp.status_code} 404 + Post Elements To URI As JSON ${OPERATIONS_DELETE_RSP_URI} ${DELETE_RSP1_INPUT} + +Generate RSPs with Random Schedule Algorithm type + [Documentation] Generate RSPs with Random Schedule Algorithm type Through RESTConf APIs + Remove All Elements At URI ${SERVICE_SCHED_TYPES_URI} + Add Elements To URI From File ${SERVICE_RANDOM_SCHED_TYPE_URI} ${SERVICE_RANDOM_SCHED_TYPE_FILE} + Post Elements To URI As JSON ${OPERATIONS_CREATE_RSP_URI} ${CREATE_RSP1_INPUT} + ${elements}= Create List "hop-number":0 "service-index":255 "service-function-name":"dpi + Check For Elements At URI ${OPERATIONAL_RSPS_URI}rendered-service-path/SFC1-100-Path-1/rendered-service-path-hop/0/ ${elements} + ${elements}= Create List "hop-number":1 "service-index":254 "service-function-name":"napt44 + Check For Elements At URI ${OPERATIONAL_RSPS_URI}rendered-service-path/SFC1-100-Path-1/rendered-service-path-hop/1/ ${elements} + ${elements}= Create List "hop-number":2 "service-index":253 "service-function-name":"firewall + Check For Elements At URI ${OPERATIONAL_RSPS_URI}rendered-service-path/SFC1-100-Path-1/rendered-service-path-hop/2/ ${elements} + Post Elements To URI As JSON ${OPERATIONS_CREATE_RSP_URI} ${CREATE_RSP2_INPUT} + ${elements}= Create List "hop-number":0 "service-index":255 "service-function-name":"dpi + Check For Elements At URI ${OPERATIONAL_RSPS_URI}rendered-service-path/SFC1-100-Path-2/rendered-service-path-hop/0/ ${elements} + ${elements}= Create List "hop-number":1 "service-index":254 "service-function-name":"napt44 + Check For Elements At URI ${OPERATIONAL_RSPS_URI}rendered-service-path/SFC1-100-Path-2/rendered-service-path-hop/1/ ${elements} + ${elements}= Create List "hop-number":2 "service-index":253 "service-function-name":"firewall + Check For Elements At URI ${OPERATIONAL_RSPS_URI}rendered-service-path/SFC1-100-Path-2/rendered-service-path-hop/2/ ${elements} + Post Elements To URI As JSON ${OPERATIONS_DELETE_RSP_URI} ${DELETE_RSP1_INPUT} + Post Elements To URI As JSON ${OPERATIONS_DELETE_RSP_URI} ${DELETE_RSP2_INPUT} + +Generate RSPs with Round Robin Schedule Algorithm type + [Documentation] Generate RSPs with Round Robin Schedule Algorithm type + Remove All Elements At URI ${SERVICE_SCHED_TYPES_URI} + Add Elements To URI From File ${SERVICE_ROUNDROBIN_SCHED_TYPE_URI} ${SERVICE_ROUNDROBIN_SCHED_TYPE_FILE} + Post Elements To URI As JSON ${OPERATIONS_CREATE_RSP_URI} ${CREATE_RSP1_INPUT} + Post Elements To URI As JSON ${OPERATIONS_CREATE_RSP_URI} ${CREATE_RSP2_INPUT} + Post Elements To URI As JSON ${OPERATIONS_CREATE_RSP_URI} ${CREATE_RSP3_INPUT} + Post Elements To URI As JSON ${OPERATIONS_CREATE_RSP_URI} ${CREATE_RSP4_INPUT} + Post Elements To URI As JSON ${OPERATIONS_CREATE_RSP_URI} ${CREATE_RSP5_INPUT} + Post Elements To URI As JSON ${OPERATIONS_CREATE_RSP_URI} ${CREATE_RSP6_INPUT} + ${path1_hop0} Get JSON Elements From URI ${OPERATIONAL_RSPS_URI}rendered-service-path/SFC1-100-Path-1/rendered-service-path-hop/0/ + ${path1_hop1} Get JSON Elements From URI ${OPERATIONAL_RSPS_URI}rendered-service-path/SFC1-100-Path-1/rendered-service-path-hop/1/ + ${path1_hop2} Get JSON Elements From URI ${OPERATIONAL_RSPS_URI}rendered-service-path/SFC1-100-Path-1/rendered-service-path-hop/2/ + ${path2_hop0} Get JSON Elements From URI ${OPERATIONAL_RSPS_URI}rendered-service-path/SFC1-100-Path-2/rendered-service-path-hop/0/ + ${path2_hop1} Get JSON Elements From URI ${OPERATIONAL_RSPS_URI}rendered-service-path/SFC1-100-Path-2/rendered-service-path-hop/1/ + ${path2_hop2} Get JSON Elements From URI ${OPERATIONAL_RSPS_URI}rendered-service-path/SFC1-100-Path-2/rendered-service-path-hop/2/ + ${path3_hop0} Get JSON Elements From URI ${OPERATIONAL_RSPS_URI}rendered-service-path/SFC1-100-Path-3/rendered-service-path-hop/0/ + ${path3_hop1} Get JSON Elements From URI ${OPERATIONAL_RSPS_URI}rendered-service-path/SFC1-100-Path-3/rendered-service-path-hop/1/ + ${path3_hop2} Get JSON Elements From URI ${OPERATIONAL_RSPS_URI}rendered-service-path/SFC1-100-Path-3/rendered-service-path-hop/2/ + ${path4_hop0} Get JSON Elements From URI ${OPERATIONAL_RSPS_URI}rendered-service-path/SFC1-100-Path-4/rendered-service-path-hop/0/ + ${path4_hop1} Get JSON Elements From URI ${OPERATIONAL_RSPS_URI}rendered-service-path/SFC1-100-Path-4/rendered-service-path-hop/1/ + ${path4_hop2} Get JSON Elements From URI ${OPERATIONAL_RSPS_URI}rendered-service-path/SFC1-100-Path-4/rendered-service-path-hop/2/ + ${path5_hop0} Get JSON Elements From URI ${OPERATIONAL_RSPS_URI}rendered-service-path/SFC1-100-Path-5/rendered-service-path-hop/0/ + ${path5_hop1} Get JSON Elements From URI ${OPERATIONAL_RSPS_URI}rendered-service-path/SFC1-100-Path-5/rendered-service-path-hop/1/ + ${path5_hop2} Get JSON Elements From URI ${OPERATIONAL_RSPS_URI}rendered-service-path/SFC1-100-Path-5/rendered-service-path-hop/2/ + ${path6_hop0} Get JSON Elements From URI ${OPERATIONAL_RSPS_URI}rendered-service-path/SFC1-100-Path-6/rendered-service-path-hop/0/ + ${path6_hop1} Get JSON Elements From URI ${OPERATIONAL_RSPS_URI}rendered-service-path/SFC1-100-Path-6/rendered-service-path-hop/1/ + ${path6_hop2} Get JSON Elements From URI ${OPERATIONAL_RSPS_URI}rendered-service-path/SFC1-100-Path-6/rendered-service-path-hop/2/ + Should Be Equal ${path1_hop0} ${path4_hop0} + Should Not Be Equal ${path1_hop0} ${path2_hop0} + Should Be Equal ${path1_hop1} ${path4_hop1} + Should Not Be Equal ${path1_hop1} ${path2_hop1} + Should Be Equal ${path1_hop2} ${path4_hop2} + Should Not Be Equal ${path1_hop2} ${path2_hop2} + Should Be Equal ${path2_hop0} ${path5_hop0} + Should Not Be Equal ${path2_hop0} ${path3_hop0} + Should Be Equal ${path2_hop1} ${path5_hop1} + Should Not Be Equal ${path2_hop1} ${path3_hop1} + Should Be Equal ${path2_hop2} ${path5_hop2} + Should Not Be Equal ${path2_hop2} ${path3_hop2} + Should Be Equal ${path3_hop0} ${path6_hop0} + Should Not Be Equal ${path3_hop0} ${path1_hop0} + Should Be Equal ${path3_hop1} ${path6_hop1} + Should Not Be Equal ${path3_hop1} ${path1_hop1} + Should Be Equal ${path3_hop2} ${path6_hop2} + Should Not Be Equal ${path3_hop2} ${path1_hop2} + Post Elements To URI As JSON ${OPERATIONS_DELETE_RSP_URI} ${DELETE_RSP1_INPUT} + Post Elements To URI As JSON ${OPERATIONS_DELETE_RSP_URI} ${DELETE_RSP2_INPUT} + Post Elements To URI As JSON ${OPERATIONS_DELETE_RSP_URI} ${DELETE_RSP3_INPUT} + Post Elements To URI As JSON ${OPERATIONS_DELETE_RSP_URI} ${DELETE_RSP4_INPUT} + Post Elements To URI As JSON ${OPERATIONS_DELETE_RSP_URI} ${DELETE_RSP5_INPUT} + Post Elements To URI As JSON ${OPERATIONS_DELETE_RSP_URI} ${DELETE_RSP6_INPUT} + +Generate RSPs with Shortest Path Schedule Algorithm type + [Documentation] Generate RSPs with Shortest Path Schedule Algorithm type Through RESTConf APIs + Remove All Elements At URI ${SERVICE_SCHED_TYPES_URI} + Add Elements To URI From File ${SERVICE_SHORTESTPATH_SCHED_TYPE_URI} ${SERVICE_SHORTESTPATH_SCHED_TYPE_FILE} + Post Elements To URI As JSON ${OPERATIONS_CREATE_RSP_URI} ${CREATE_RSP1_INPUT} + ${elements}= Create List "hop-number":0 "service-index":255 "service-function-name":"dpi + Check For Elements At URI ${OPERATIONAL_RSPS_URI}rendered-service-path/SFC1-100-Path-1/rendered-service-path-hop/0/ ${elements} + ${elements}= Create List "hop-number":1 "service-index":254 "service-function-name":"napt44 + Check For Elements At URI ${OPERATIONAL_RSPS_URI}rendered-service-path/SFC1-100-Path-1/rendered-service-path-hop/1/ ${elements} + ${elements}= Create List "hop-number":2 "service-index":253 "service-function-name":"firewall + Check For Elements At URI ${OPERATIONAL_RSPS_URI}rendered-service-path/SFC1-100-Path-1/rendered-service-path-hop/2/ ${elements} + ${resp} RequestsLibrary.Get session ${OPERATIONAL_RSPS_URI}rendered-service-path/SFC1-100-Path-1/rendered-service-path-hop/0/ + Should Be Equal As Strings ${resp.status_code} 200 + ${fwd_hop1} Extract Value From Content ${resp.content} service-function-forwarder + ${resp} RequestsLibrary.Get session ${OPERATIONAL_RSPS_URI}rendered-service-path/SFC1-100-Path-1/rendered-service-path-hop/1/ + Should Be Equal As Strings ${resp.status_code} 200 + ${fwd_hop2} Extract Value From Content ${resp.content} service-function-forwarder + ${resp} RequestsLibrary.Get session ${OPERATIONAL_RSPS_URI}rendered-service-path/SFC1-100-Path-1/rendered-service-path-hop/2/ + Should Be Equal As Strings ${resp.status_code} 200 + ${fwd_hop3} Extract Value From Content ${resp.content} service-function-forwarder + Should Be Equal ${fwd_hop1} ${fwd_hop2} + Should Be Equal ${fwd_hop2} ${fwd_hop3} + Post Elements To URI As JSON ${OPERATIONS_CREATE_RSP_URI} ${CREATE_RSP2_INPUT} + ${resp} RequestsLibrary.Get session ${OPERATIONAL_RSPS_URI}rendered-service-path/SFC1-100-Path-2/rendered-service-path-hop/0/ + Should Be Equal As Strings ${resp.status_code} 200 + ${fwd_hop1} Extract Value From Content ${resp.content} service-function-forwarder + ${resp} RequestsLibrary.Get session ${OPERATIONAL_RSPS_URI}rendered-service-path/SFC1-100-Path-2/rendered-service-path-hop/1/ + Should Be Equal As Strings ${resp.status_code} 200 + ${fwd_hop2} Extract Value From Content ${resp.content} service-function-forwarder + ${resp} RequestsLibrary.Get session ${OPERATIONAL_RSPS_URI}rendered-service-path/SFC1-100-Path-2/rendered-service-path-hop/2/ + Should Be Equal As Strings ${resp.status_code} 200 + ${fwd_hop3} Extract Value From Content ${resp.content} service-function-forwarder + Should Be Equal ${fwd_hop1} ${fwd_hop2} + Should Be Equal ${fwd_hop2} ${fwd_hop3} + Post Elements To URI As JSON ${OPERATIONS_DELETE_RSP_URI} ${DELETE_RSP1_INPUT} + Post Elements To URI As JSON ${OPERATIONS_DELETE_RSP_URI} ${DELETE_RSP2_INPUT} + +Clean Datastore After Tests + [Documentation] Clean All Items In Datastore After Tests + Remove All Elements At URI ${SERVICE_FUNCTIONS_URI} + Remove All Elements At URI ${SERVICE_FORWARDERS_URI} + Remove All Elements At URI ${SERVICE_NODES_URI} + Remove All Elements At URI ${SERVICE_CHAINS_URI} + Remove All Elements At URI ${SERVICE_SCHED_TYPES_URI} + Remove All Elements At URI ${SERVICE_FUNCTION_PATHS_URI} + +*** Keywords *** +Post Elements To URI As JSON + [Arguments] ${uri} ${data} + ${resp} RequestsLibrary.Post session ${uri} data=${data} headers=${headers} + Should Be Equal As Strings ${resp.status_code} 200 + +Get JSON Elements From URI + [Arguments] ${uri} + ${resp} RequestsLibrary.Get session ${uri} + ${value} To Json ${resp.content} + [Return] ${value} diff --git a/test/csit/variables/sfc/service-function-chains.json b/test/csit/variables/sfc/service-function-chains.json new file mode 100644 index 0000000000..1274039d48 --- /dev/null +++ b/test/csit/variables/sfc/service-function-chains.json @@ -0,0 +1,41 @@ +{ + "service-function-chains": { + "service-function-chain": [ + { + "name": "SFC1", + "sfc-service-function": [ + { + "name": "dpi-abstract1", + "type": "service-function-type:dpi", + "order" : 0 + }, + { + "name": "napt44-abstract1", + "type": "service-function-type:napt44", + "order" : 1 + }, + { + "name": "firewall-abstract1", + "type": "service-function-type:firewall", + "order" : 2 + } + ] + }, + { + "name": "SFC2", + "sfc-service-function": [ + { + "name": "firewall-abstract2", + "type": "service-function-type:firewall", + "order" : 0 + }, + { + "name": "napt44-abstract2", + "type": "service-function-type:napt44", + "order" : 1 + } + ] + } + ] + } +} \ No newline at end of file diff --git a/test/csit/variables/sfc/service-function-forwarders.json b/test/csit/variables/sfc/service-function-forwarders.json new file mode 100644 index 0000000000..a1758dc6d9 --- /dev/null +++ b/test/csit/variables/sfc/service-function-forwarders.json @@ -0,0 +1,90 @@ +{ + "service-function-forwarders": { + "service-function-forwarder": [ + { + "name": "SFF-bootstrap", + "service-node": "OVSDB1", + "rest-uri": "http://localhost:5000", + "sff-data-plane-locator": [ + { + "name": "eth0", + "data-plane-locator": { + "port": 5000, + "ip": "192.168.1.1", + "transport": "service-locator:vxlan-gpe" + } + } + ], + "service-function-dictionary": [ + { + "sff-sf-data-plane-locator": { + "port": 5000, + "ip": "10.1.1.1" + }, + "name": "SF1", + "type": "service-function-type:dpi" + }, + { + "sff-sf-data-plane-locator": { + "port": 5000, + "ip": "10.1.1.2" + }, + "name": "SF2", + "type": "service-function-type:firewall" + } + ], + "connected-sff-dictionary": [ + { + "sff-sff-data-plane-locator": { + "port": 5000, + "ip": "192.168.1.2" + }, + "name": "br-int-ovs-2" + } + ] + }, + { + "name": "br-int-ovs-2", + "service-node": "OVSDB2", + "rest-uri": "http://localhost:5000", + "sff-data-plane-locator": [ + { + "name": "eth0", + "data-plane-locator": { + "port": 5000, + "ip": "192.168.1.2", + "transport": "service-locator:vxlan-gpe" + } + } + ], + "service-function-dictionary": [ + { + "sff-sf-data-plane-locator": { + "port": 5000, + "ip": "10.1.1.5" + }, + "name": "SF5", + "type": "service-function-type:dpi" + }, + { + "sff-sf-data-plane-locator": { + "port": 5000, + "ip": "10.1.1.6" + }, + "name": "SF6", + "type": "service-function-type:napt44" + } + ], + "connected-sff-dictionary": [ + { + "sff-sff-data-plane-locator": { + "port": 5000, + "ip": "10.1.1.2" + }, + "name": "SFF-bootstrap" + } + ] + } + ] + } +} diff --git a/test/csit/variables/sfc/service-function-paths.json b/test/csit/variables/sfc/service-function-paths.json new file mode 100644 index 0000000000..4b1eadf20c --- /dev/null +++ b/test/csit/variables/sfc/service-function-paths.json @@ -0,0 +1,26 @@ +{ + "service-function-paths": { + "service-function-path": [ + { + "name": "SFC1-100", + "service-chain-name": "SFC1" + }, + { + "name": "SFC1-200", + "service-chain-name": "SFC1" + }, + { + "name": "SFC1-300", + "service-chain-name": "SFC1" + }, + { + "name": "SFC2-100", + "service-chain-name": "SFC2" + }, + { + "name": "SFC2-200", + "service-chain-name": "SFC2" + } + ] + } +} diff --git a/test/csit/variables/sfc/service-functions.json b/test/csit/variables/sfc/service-functions.json new file mode 100644 index 0000000000..8d42773f9d --- /dev/null +++ b/test/csit/variables/sfc/service-functions.json @@ -0,0 +1,141 @@ +{ + "service-functions": { + "service-function": [ + { + "rest-uri": "http://localhost:10002", + "ip-mgmt-address": "10.3.1.103", + "sf-data-plane-locator": [ + { + "name": "preferred", + "port": 10002, + "ip": "10.3.1.103", + "service-function-forwarder": "SFF-bootstrap" + } + ], + "name": "napt44-103-2", + "type": "service-function-type:napt44", + "nsh-aware": true + }, + { + "rest-uri": "http://localhost:10001", + "ip-mgmt-address": "10.3.1.103", + "sf-data-plane-locator": [ + { + "name": "master", + "port": 10001, + "ip": "10.3.1.103", + "service-function-forwarder": "SFF-bootstrap" + } + ], + "name": "napt44-103-1", + "type": "service-function-type:napt44", + "nsh-aware": true + }, + { + "rest-uri": "http://localhost:10002", + "ip-mgmt-address": "10.3.1.102", + "sf-data-plane-locator": [ + { + "name": "1", + "port": 10002, + "ip": "10.3.1.102", + "service-function-forwarder": "SFF-bootstrap" + } + ], + "name": "dpi-102-2", + "type": "service-function-type:dpi", + "nsh-aware": true + }, + { + "rest-uri": "http://localhost:10002", + "ip-mgmt-address": "10.3.1.101", + "sf-data-plane-locator": [ + { + "name": "2", + "port": 10002, + "ip": "10.3.1.101", + "service-function-forwarder": "SFF-bootstrap" + } + ], + "name": "firewall-101-2", + "type": "service-function-type:firewall", + "nsh-aware": true + }, + { + "rest-uri": "http://localhost:10002", + "ip-mgmt-address": "10.3.1.104", + "sf-data-plane-locator": [ + { + "name": "3", + "port": 10020, + "ip": "10.3.1.104", + "service-function-forwarder": "SFF-bootstrap" + } + ], + "name": "napt44-104", + "type": "service-function-type:napt44", + "nsh-aware": true + }, + { + "rest-uri": "http://localhost:10001", + "ip-mgmt-address": "10.3.1.102", + "sf-data-plane-locator": [ + { + "name": "4", + "port": 10001, + "ip": "10.3.1.102", + "service-function-forwarder": "SFF-bootstrap" + } + ], + "name": "dpi-102-1", + "type": "service-function-type:dpi", + "nsh-aware": true + }, + { + "rest-uri": "http://localhost:10001", + "ip-mgmt-address": "10.3.1.104", + "sf-data-plane-locator": [ + { + "name": "my-locator", + "port": 10001, + "ip": "10.3.1.104", + "service-function-forwarder": "SFF-bootstrap" + } + ], + "name": "firewall-104", + "type": "service-function-type:firewall", + "nsh-aware": true + }, + { + "rest-uri": "http://localhost:10003", + "ip-mgmt-address": "10.3.1.102", + "sf-data-plane-locator": [ + { + "name": "101", + "port": 10003, + "ip": "10.3.1.102", + "service-function-forwarder": "SFF-bootstrap" + } + ], + "name": "dpi-102-3", + "type": "service-function-type:dpi", + "nsh-aware": true + }, + { + "rest-uri": "http://localhost:10001", + "ip-mgmt-address": "10.3.1.101", + "sf-data-plane-locator": [ + { + "name": "007", + "port": 10001, + "ip": "10.3.1.101", + "service-function-forwarder": "SFF-bootstrap" + } + ], + "name": "firewall-101-1", + "type": "service-function-type:firewall", + "nsh-aware": true + } + ] + } +} diff --git a/test/csit/variables/sfc/service-loadbalance-schedule-type.json b/test/csit/variables/sfc/service-loadbalance-schedule-type.json new file mode 100644 index 0000000000..e5780f372b --- /dev/null +++ b/test/csit/variables/sfc/service-loadbalance-schedule-type.json @@ -0,0 +1,9 @@ +{ + "service-function-scheduler-type": [ + { + "type": "service-function-scheduler-type:load-balance", + "enabled": true, + "name": "load-balance" + } + ] +} diff --git a/test/csit/variables/sfc/service-nodes.json b/test/csit/variables/sfc/service-nodes.json new file mode 100644 index 0000000000..36787c139a --- /dev/null +++ b/test/csit/variables/sfc/service-nodes.json @@ -0,0 +1,39 @@ +{ + "service-nodes": { + "service-node": [ + { + "name": "node-101", + "service-function": [ + "firewall-101-2", + "firewall-101-1" + ], + "ip-mgmt-address": "10.3.1.101" + }, + { + "name": "node-102", + "service-function": [ + "dpi-102-1", + "dpi-102-2", + "dpi-102-3" + ], + "ip-mgmt-address": "10.3.1.102" + }, + { + "name": "node-103", + "service-function": [ + "napt44-103-1", + "napt44-103-2" + ], + "ip-mgmt-address": "10.3.1.103" + }, + { + "name": "node-104", + "service-function": [ + "firewall-104", + "napt44-104" + ], + "ip-mgmt-address": "10.3.1.104" + } + ] + } +} \ No newline at end of file diff --git a/test/csit/variables/sfc/service-random-schedule-type.json b/test/csit/variables/sfc/service-random-schedule-type.json new file mode 100644 index 0000000000..63b413c5dd --- /dev/null +++ b/test/csit/variables/sfc/service-random-schedule-type.json @@ -0,0 +1,9 @@ +{ + "service-function-scheduler-type": [ + { + "type": "service-function-scheduler-type:random", + "enabled": true, + "name": "random" + } + ] +} diff --git a/test/csit/variables/sfc/service-roundrobin-schedule-type.json b/test/csit/variables/sfc/service-roundrobin-schedule-type.json new file mode 100644 index 0000000000..c7168381f6 --- /dev/null +++ b/test/csit/variables/sfc/service-roundrobin-schedule-type.json @@ -0,0 +1,9 @@ +{ + "service-function-scheduler-type": [ + { + "type": "service-function-scheduler-type:round-robin", + "enabled": true, + "name": "round-robin" + } + ] +} diff --git a/test/csit/variables/sfc/service-schedule-types.json b/test/csit/variables/sfc/service-schedule-types.json new file mode 100644 index 0000000000..44aacd4110 --- /dev/null +++ b/test/csit/variables/sfc/service-schedule-types.json @@ -0,0 +1,27 @@ +{ + "service-function-scheduler-types": { + "service-function-scheduler-type": [ + { + "name": "random", + "type": "service-function-scheduler-type:random", + "enabled": false + }, + { + "name": "round-robin", + "type": "service-function-scheduler-type:round-robin", + "enabled": true + }, + { + "name": "load-balance", + "type": "service-function-scheduler-type:load-balance", + "enabled": false + }, + { + "name": "shortest-path", + "type": "service-function-scheduler-type:shortest-path", + "enabled": false + } + ] + } +} + diff --git a/test/csit/variables/sfc/service-shortestpath-schedule-type.json b/test/csit/variables/sfc/service-shortestpath-schedule-type.json new file mode 100644 index 0000000000..56559177f0 --- /dev/null +++ b/test/csit/variables/sfc/service-shortestpath-schedule-type.json @@ -0,0 +1,9 @@ +{ + "service-function-scheduler-type": [ + { + "type": "service-function-scheduler-type:shortest-path", + "enabled": true, + "name": "shortest-path" + } + ] +} diff --git a/test/csit/variables/sfc/service-wsp-schedule-type.json b/test/csit/variables/sfc/service-wsp-schedule-type.json new file mode 100644 index 0000000000..85adbd00fb --- /dev/null +++ b/test/csit/variables/sfc/service-wsp-schedule-type.json @@ -0,0 +1,9 @@ +{ + "service-function-scheduler-type": [ + { + "type": "service-function-scheduler-type:weighted-shortest-path", + "enabled": false, + "name": "weighted-shortest-path" + } + ] +} diff --git a/test/csit/variables/sfc/sf_dpi_102_100.json b/test/csit/variables/sfc/sf_dpi_102_100.json new file mode 100644 index 0000000000..8acbc95d1e --- /dev/null +++ b/test/csit/variables/sfc/sf_dpi_102_100.json @@ -0,0 +1,19 @@ +{ + "service-function": [ + { + "name": "dpi-102-100", + "type": "service-function-type:dpi", + "nsh-aware": true, + "sf-data-plane-locator": [ + { + "name": "dpl-100", + "port": 10100, + "ip": "10.3.1.102", + "service-function-forwarder": "SFF-bootstrap" + } + ], + "ip-mgmt-address": "10.3.1.102", + "rest-uri": "http://localhost:10100" + } + ] +} diff --git a/test/csit/variables/sfc/sf_dpl_101.json b/test/csit/variables/sfc/sf_dpl_101.json new file mode 100644 index 0000000000..fb1ed3e683 --- /dev/null +++ b/test/csit/variables/sfc/sf_dpl_101.json @@ -0,0 +1,10 @@ +{ + "sf-data-plane-locator": [ + { + "name": "dpl-101", + "port": 10101, + "ip": "10.3.1.102", + "service-function-forwarder": "SFF-bootstrap" + } + ] +} diff --git a/test/csit/variables/sfc/sfc_chain_100.json b/test/csit/variables/sfc/sfc_chain_100.json new file mode 100644 index 0000000000..f8702a1faa --- /dev/null +++ b/test/csit/variables/sfc/sfc_chain_100.json @@ -0,0 +1,24 @@ +{ + "service-function-chain": [ + { + "name": "SFC100", + "sfc-service-function": [ + { + "name": "dpi-abstract100", + "order": 0, + "type": "service-function-type:firewall" + }, + { + "name": "napt44-abstract100", + "order": 1, + "type": "service-function-type:dpi" + }, + { + "name": "firewall-abstract100", + "order": 2, + "type": "service-function-type:napt44" + } + ] + } + ] +} diff --git a/test/csit/variables/sfc/sfc_chain_100_sfids.json b/test/csit/variables/sfc/sfc_chain_100_sfids.json new file mode 100644 index 0000000000..d6d6025a76 --- /dev/null +++ b/test/csit/variables/sfc/sfc_chain_100_sfids.json @@ -0,0 +1,9 @@ +{ + "sfc-service-function": [ + { + "name": "ids-abstract100", + "order": 3, + "type": "service-function-type:ids" + } + ] +} diff --git a/test/csit/variables/sfc/sff_csd_locator.json b/test/csit/variables/sfc/sff_csd_locator.json new file mode 100644 index 0000000000..7ac28e7964 --- /dev/null +++ b/test/csit/variables/sfc/sff_csd_locator.json @@ -0,0 +1,6 @@ +{ + "sff-sff-data-plane-locator": { + "ip": "10.1.1.1", + "port": 6000 + } +} diff --git a/test/csit/variables/sfc/sff_csd_sff100.json b/test/csit/variables/sfc/sff_csd_sff100.json new file mode 100644 index 0000000000..e2715bbb3a --- /dev/null +++ b/test/csit/variables/sfc/sff_csd_sff100.json @@ -0,0 +1,17 @@ +{ + "connected-sff-dictionary": [ + { + "name": "SFF100", + "sff-interfaces": [ + { + "sff-interface": "dpl-100" + } + ], + "sff-sff-data-plane-locator": { + "port": 6000, + "ip": "10.1.1.2" + }, + "failmode": "service-function-forwarder:open" + } + ] +} diff --git a/test/csit/variables/sfc/sff_dpl_101.json b/test/csit/variables/sfc/sff_dpl_101.json new file mode 100644 index 0000000000..0fd51efd08 --- /dev/null +++ b/test/csit/variables/sfc/sff_dpl_101.json @@ -0,0 +1,12 @@ +{ + "sff-data-plane-locator": [ + { + "name": "dpl-101", + "data-plane-locator": { + "ip": "192.168.1.1", + "port": 6101, + "transport": "service-locator:vxlan-gpe" + } + } + ] +} diff --git a/test/csit/variables/sfc/sff_dpl_locator.json b/test/csit/variables/sfc/sff_dpl_locator.json new file mode 100644 index 0000000000..3da405be36 --- /dev/null +++ b/test/csit/variables/sfc/sff_dpl_locator.json @@ -0,0 +1,7 @@ +{ + "data-plane-locator": { + "ip": "192.168.1.1", + "port": 5000, + "transport": "service-locator:vxlan-gpe" + } +} diff --git a/test/csit/variables/sfc/sff_ovs_100.json b/test/csit/variables/sfc/sff_ovs_100.json new file mode 100644 index 0000000000..b9fcad65ec --- /dev/null +++ b/test/csit/variables/sfc/sff_ovs_100.json @@ -0,0 +1,29 @@ +{ + "service-function-forwarder": [ + { + "name": "ovs-100", + "service-node": "OVSDB2", + "rest-uri": "http://localhost:6000", + "sff-data-plane-locator": [ + { + "name": "eth0", + "data-plane-locator": { + "port": 6000, + "ip": "192.168.1.2", + "transport": "service-locator:vxlan-gpe" + } + } + ], + "service-function-dictionary": [ + { + "sff-sf-data-plane-locator": { + "port": 6000, + "ip": "10.1.1.7" + }, + "name": "SF7", + "type": "service-function-type:dpi" + } + ] + } + ] +} diff --git a/test/csit/variables/sfc/sff_sfd_locator.json b/test/csit/variables/sfc/sff_sfd_locator.json new file mode 100644 index 0000000000..50dc19dbfb --- /dev/null +++ b/test/csit/variables/sfc/sff_sfd_locator.json @@ -0,0 +1,6 @@ +{ + "sff-sf-data-plane-locator": { + "ip": "10.1.1.1", + "port": 6000 + } +} diff --git a/test/csit/variables/sfc/sff_sfd_sf100.json b/test/csit/variables/sfc/sff_sfd_sf100.json new file mode 100644 index 0000000000..7449c96076 --- /dev/null +++ b/test/csit/variables/sfc/sff_sfd_sf100.json @@ -0,0 +1,12 @@ +{ + "service-function-dictionary": [ + { + "name": "SF100", + "sff-sf-data-plane-locator": { + "ip": "10.1.1.1", + "port": 5100 + }, + "type": "service-function-type:napt44" + } + ] +} diff --git a/test/csit/variables/sfc/sfp_sfc1_path400.json b/test/csit/variables/sfc/sfp_sfc1_path400.json new file mode 100644 index 0000000000..9a17f8eccb --- /dev/null +++ b/test/csit/variables/sfc/sfp_sfc1_path400.json @@ -0,0 +1,8 @@ +{ + "service-function-path": [ + { + "name": "SFC1-400", + "service-chain-name": "SFC1" + } + ] +} diff --git a/test/csit/variables/sfc/sn_node_100.json b/test/csit/variables/sfc/sn_node_100.json new file mode 100644 index 0000000000..2562724c3b --- /dev/null +++ b/test/csit/variables/sfc/sn_node_100.json @@ -0,0 +1,12 @@ +{ + "service-node": [ + { + "name": "node-100", + "ip-mgmt-address": "10.3.1.100", + "service-function": [ + "dpi-100-1", + "firewall-102-1" + ] + } + ] +} -- 2.36.6