From 4a07112b1723fd212fc4768fe4f6e35c8eee1e64 Mon Sep 17 00:00:00 2001 From: Diego Granados Date: Mon, 23 Jan 2017 17:10:21 +0100 Subject: [PATCH] Bug 3712. SFC: SFP validation of SF types at creation time Set of five new tests for SFP validation. This validation verifies that SF types for SFs defined in SFP hops are (when present), consistent with the SF types for the SFs defined in the referenced SF chain Change-Id: I66a5f3bc3fa2098def8397bdd256094c5c82a818 Signed-off-by: Diego Granados --- csit/libraries/TemplatedRequests.robot | 1 + csit/libraries/Utils.robot | 6 ++ .../SFC_Basic/060__sfc_service_paths.robot | 2 +- .../061__sfc_service_paths_validation.robot | 98 +++++++++++++++++++ csit/testplans/sfc-rest-basic.txt | 1 + ...ce-function-chain-firewall-napt44-dpi.json | 26 +++++ .../service-function-paths-with-one-hop.json | 16 +++ ...s-with-three-hops-firewall-napt44-dpi.json | 24 +++++ 8 files changed, 173 insertions(+), 1 deletion(-) create mode 100644 csit/suites/sfc/SFC_Basic/061__sfc_service_paths_validation.robot create mode 100644 csit/variables/sfc/master/service-function-chain-firewall-napt44-dpi.json create mode 100644 csit/variables/sfc/master/service-function-paths-with-one-hop.json create mode 100644 csit/variables/sfc/master/service-function-paths-with-three-hops-firewall-napt44-dpi.json diff --git a/csit/libraries/TemplatedRequests.robot b/csit/libraries/TemplatedRequests.robot index 1903609bd9..5eebc429cc 100644 --- a/csit/libraries/TemplatedRequests.robot +++ b/csit/libraries/TemplatedRequests.robot @@ -114,6 +114,7 @@ Variables ${CURDIR}/../variables/Variables.py *** Variables *** # TODO: Make the following list more narrow when streams without Bug 2594 fix (up to beryllium) are no longer used. @{ALLOWED_STATUS_CODES} ${200} ${201} ${204} # List of integers, not strings. Used by both PUT and DELETE (if the resource should have been present). +@{DATA_VALIDATION_ERROR} ${500} @{ALLOWED_DELETE_STATUS_CODES} ${200} ${201} ${204} ${404} # List of integers, not strings. Used by DELETE if the resource may be not present. @{KEYS_WITH_BITS} op # the default list with keys to be sorted when norm_json libray is used # TODO: Add option for delete to require 404. diff --git a/csit/libraries/Utils.robot b/csit/libraries/Utils.robot index f107f9a311..c3d6b6b181 100644 --- a/csit/libraries/Utils.robot +++ b/csit/libraries/Utils.robot @@ -330,6 +330,12 @@ Add Elements To URI And Verify ${resp} RequestsLibrary.Get Request ${session} ${dest_uri} Should Not Be Equal ${resp.status_code} 404 +Add Elements To URI From File And Check Validation Error + [Arguments] ${dest_uri} ${data_file} ${headers}=${headers} ${session}=session + ${body} OperatingSystem.Get File ${data_file} + ${resp} RequestsLibrary.Put Request ${session} ${dest_uri} data=${body} headers=${headers} + Should Contain ${DATA_VALIDATION_ERROR} ${resp.status_code} + Post Elements To URI From File [Arguments] ${dest_uri} ${data_file} ${headers}=${headers} ${session}=session ${body} OperatingSystem.Get File ${data_file} diff --git a/csit/suites/sfc/SFC_Basic/060__sfc_service_paths.robot b/csit/suites/sfc/SFC_Basic/060__sfc_service_paths.robot index b6a218c91b..910693f65a 100644 --- a/csit/suites/sfc/SFC_Basic/060__sfc_service_paths.robot +++ b/csit/suites/sfc/SFC_Basic/060__sfc_service_paths.robot @@ -7,7 +7,7 @@ Library SSHLibrary Library Collections Library OperatingSystem Library RequestsLibrary -Variables ../../../variables/Variables.py +Resource ../../../variables/Variables.robot Resource ../../../libraries/Utils.robot Resource ../../../libraries/TemplatedRequests.robot diff --git a/csit/suites/sfc/SFC_Basic/061__sfc_service_paths_validation.robot b/csit/suites/sfc/SFC_Basic/061__sfc_service_paths_validation.robot new file mode 100644 index 0000000000..f80781a47e --- /dev/null +++ b/csit/suites/sfc/SFC_Basic/061__sfc_service_paths_validation.robot @@ -0,0 +1,98 @@ +*** Settings *** +Documentation Test suite for SFC Service Function Paths validation. This validation is in charge of verifying that the SF types for the SFs defined in newly added SFPs are consistent with SF types defined in the referenced SFC. +Suite Setup Init Suite +Suite Teardown Delete All Sessions +Test Setup Remove All Elements If Exist ${SERVICE_FUNCTION_PATHS_URI} +Test Teardown Clean_All_URIs +Library SSHLibrary +Library Collections +Library OperatingSystem +Library RequestsLibrary +Resource ../../../variables/Variables.robot +Resource ../../../variables/sfc/Variables.robot +Resource ../../../libraries/Utils.robot +Resource ../../../libraries/TemplatedRequests.robot + +*** Test Cases *** +Add Service Function Path referencing a non-existing SF + [Documentation] Add Service Function Paths from JSON file + Add Elements To URI From File And Check Validation Error ${SERVICE_FUNCTION_PATHS_URI} ${SERVICE_FUNCTION_PATHS_WITH_HOP_FILE} + ${body} OperatingSystem.Get File ${SERVICE_FUNCTION_PATHS_WITH_HOP_FILE} + ${jsonbody} To Json ${body} + ${paths} Get From Dictionary ${jsonbody} service-function-paths + ${resp} RequestsLibrary.Get Request session ${SERVICE_FUNCTION_PATHS_URI} + Should Be Equal As Strings ${resp.status_code} 404 + +Add Service Function Path referencing a non-existing SFC + [Documentation] Add Service Function Paths from JSON file + Add Elements To URI From File ${SERVICE_FUNCTIONS_URI} ${SERVICE_FUNCTIONS_FILE} + Add Elements To URI From File And Check Validation Error ${SERVICE_FUNCTION_PATHS_URI} ${SERVICE_FUNCTION_PATHS_WITH_HOP_FILE} + ${body} OperatingSystem.Get File ${SERVICE_FUNCTION_PATHS_WITH_HOP_FILE} + ${jsonbody} To Json ${body} + ${paths} Get From Dictionary ${jsonbody} service-function-paths + ${resp} RequestsLibrary.Get Request session ${SERVICE_FUNCTION_PATHS_URI} + Should Be Equal As Strings ${resp.status_code} 404 + Remove All Elements At URI ${SERVICE_FUNCTIONS_URI} + +Add Service Function Path where SFC types size and hop sizes differ + [Documentation] Add Service Function Paths from JSON 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 And Check Validation Error ${SERVICE_FUNCTION_PATHS_URI} ${SERVICE_FUNCTION_PATHS_WITH_HOP_FILE} + ${body} OperatingSystem.Get File ${SERVICE_FUNCTION_PATHS_WITH_HOP_FILE} + ${jsonbody} To Json ${body} + ${paths} Get From Dictionary ${jsonbody} service-function-paths + ${resp} RequestsLibrary.Get Request session ${SERVICE_FUNCTION_PATHS_URI} + Should Be Equal As Strings ${resp.status_code} 404 + Remove All Elements At URI ${SERVICE_CHAINS_URI} + Remove All Elements At URI ${SERVICE_FUNCTIONS_URI} + +Add Service Function Path where SFC types size and types for SFs in hops differ + [Documentation] Add Service Function Paths from JSON 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 And Check Validation Error ${SERVICE_FUNCTION_PATHS_URI} ${SERVICE_FUNCTION_PATHS_WITH_THREE_HOPS_FILE} + ${body} OperatingSystem.Get File ${SERVICE_FUNCTION_PATHS_WITH_HOP_FILE} + ${jsonbody} To Json ${body} + ${paths} Get From Dictionary ${jsonbody} service-function-paths + ${resp} RequestsLibrary.Get Request session ${SERVICE_FUNCTION_PATHS_URI} + Should Be Equal As Strings ${resp.status_code} 404 + Remove All Elements At URI ${SERVICE_FUNCTIONS_URI} + Remove All Elements At URI ${SERVICE_CHAINS_URI} + +Add Service Function Path where SFC types size and types for SFs in hops match + [Documentation] Add Service Function Paths from JSON 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_FW_NAPT44_DPI} + Add Elements To URI From File And Verify ${SERVICE_FUNCTION_PATHS_URI} ${SERVICE_FUNCTION_PATHS_WITH_THREE_HOPS_FILE} + ${body} OperatingSystem.Get File ${SERVICE_FUNCTION_PATHS_FILE} + ${jsonbody} To Json ${body} + ${paths} Get From Dictionary ${jsonbody} service-function-paths + ${resp} RequestsLibrary.Get Request session ${SERVICE_FUNCTION_PATHS_URI} + Should Contain ${ALLOWED_STATUS_CODES} ${resp.status_code} + ${result} To JSON ${resp.content} + ${path} Get From Dictionary ${result} service-function-paths + Lists Should be Equal ${path} ${paths} + +*** keywords *** +Init Suite + [Documentation] Initialize session and ODL version specific variables + Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS} + log ${ODL_STREAM} + Set Suite Variable ${VERSION_DIR} master + Set Suite Variable ${SFC_JSON_TEST_FILES_DIR} ${CURDIR}/../../../variables/sfc/${VERSION_DIR} + Set Suite Variable ${SERVICE_FUNCTION_PATHS_FILE} ${SFC_JSON_TEST_FILES_DIR}/service-function-paths.json + Set Suite Variable ${SERVICE_FUNCTION_PATH400_URI} ${SERVICE_FUNCTION_PATHS_URI}/SFC1-400 + Set Suite Variable ${SERVICE_FUNCTION_PATH400_FILE} ${SFC_JSON_TEST_FILES_DIR}/sfp_sfc1_path400.json + Set Suite Variable ${SERVICE_FUNCTION_PATHS_WITH_HOP_FILE} ${SFC_JSON_TEST_FILES_DIR}/service-function-paths-with-one-hop.json + Set Suite Variable ${SERVICE_FUNCTION_PATHS_WITH_THREE_HOPS_FILE} ${SFC_JSON_TEST_FILES_DIR}/service-function-paths-with-three-hops-firewall-napt44-dpi.json + Set Suite Variable ${SFC_MODEL_VALIDATION_ERROR} ${500} + Set Suite Variable ${SERVICE_FUNCTIONS_FILE} ${SFC_JSON_TEST_FILES_DIR}/service-functions.json + Set Suite Variable ${SERVICE_CHAINS_FILE} ${SFC_JSON_TEST_FILES_DIR}/service-function-chains.json + Set Suite Variable ${SERVICE_CHAINS_FILE_FW_NAPT44_DPI} ${SFC_JSON_TEST_FILES_DIR}/service-function-chain-firewall-napt44-dpi.json + +Clean_All_URIs + [Documentation] Deletes all the elements which might have been created during SFP validation tests + Utils.Remove All Elements If Exist ${SERVICE_FUNCTIONS_URI} + Utils.Remove All Elements If Exist ${SERVICE_CHAINS_URI} + Utils.Remove All Elements If Exist ${SERVICE_FUNCTION_PATHS_URI} diff --git a/csit/testplans/sfc-rest-basic.txt b/csit/testplans/sfc-rest-basic.txt index 9b44a10f9a..a227423709 100644 --- a/csit/testplans/sfc-rest-basic.txt +++ b/csit/testplans/sfc-rest-basic.txt @@ -5,6 +5,7 @@ integration/test/csit/suites/sfc/SFC_Basic/030__sfc_service_nodes.robot integration/test/csit/suites/sfc/SFC_Basic/040__sfc_service_chains.robot integration/test/csit/suites/sfc/SFC_Basic/050__sfc_service_schedule_types.robot integration/test/csit/suites/sfc/SFC_Basic/060__sfc_service_paths.robot +integration/test/csit/suites/sfc/SFC_Basic/061__sfc_service_paths_validation.robot integration/test/csit/suites/sfc/SFC_Basic/070__sfc_rendered_service_paths.robot integration/test/csit/suites/sfc/SFC_Basic/080__sfc_simple_clustering.robot integration/test/csit/suites/sfc/SFC_Basic/090__sfc_service_functions_logical.robot diff --git a/csit/variables/sfc/master/service-function-chain-firewall-napt44-dpi.json b/csit/variables/sfc/master/service-function-chain-firewall-napt44-dpi.json new file mode 100644 index 0000000000..74d26f266a --- /dev/null +++ b/csit/variables/sfc/master/service-function-chain-firewall-napt44-dpi.json @@ -0,0 +1,26 @@ +{ + "service-function-chains": { + "service-function-chain": [ + { + "name": "SFC1", + "sfc-service-function": [ + { + "name": "firewall-abstract1", + "type": "firewall", + "order" : 0 + }, + { + "name": "napt44-abstract1", + "type": "napt44", + "order" : 1 + }, + { + "name": "dpi-abstract1", + "type": "dpi", + "order" : 2 + } + ] + } + ] + } +} diff --git a/csit/variables/sfc/master/service-function-paths-with-one-hop.json b/csit/variables/sfc/master/service-function-paths-with-one-hop.json new file mode 100644 index 0000000000..c78ac8a771 --- /dev/null +++ b/csit/variables/sfc/master/service-function-paths-with-one-hop.json @@ -0,0 +1,16 @@ +{ + "service-function-paths": { + "service-function-path": [ + { + "name": "SFC1-100", + "service-chain-name": "SFC1", + "service-path-hop": [ + { + "hop-number": 0, + "service-function-name": "firewall-104" + } + ] + } + ] + } +} diff --git a/csit/variables/sfc/master/service-function-paths-with-three-hops-firewall-napt44-dpi.json b/csit/variables/sfc/master/service-function-paths-with-three-hops-firewall-napt44-dpi.json new file mode 100644 index 0000000000..bd979fb09d --- /dev/null +++ b/csit/variables/sfc/master/service-function-paths-with-three-hops-firewall-napt44-dpi.json @@ -0,0 +1,24 @@ +{ + "service-function-paths": { + "service-function-path": [ + { + "name": "SFC1-100", + "service-chain-name": "SFC1", + "service-path-hop": [ + { + "hop-number": 0, + "service-function-name": "firewall-104" + }, + { + "hop-number": 1, + "service-function-name": "napt44-103-2" + }, + { + "hop-number": 2, + "service-function-name": "dpi-102-2" + } + ] + } + ] + } +} -- 2.36.6