Bug 3712. SFC: SFP validation of SF types at creation time 43/50843/9
authorDiego Granados <diego.jesus.granados.lopez@ericsson.com>
Mon, 23 Jan 2017 16:10:21 +0000 (17:10 +0100)
committerJamo Luhrsen <jluhrsen@redhat.com>
Thu, 23 Feb 2017 16:38:36 +0000 (16:38 +0000)
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 <diego.jesus.granados.lopez@ericsson.com>
csit/libraries/TemplatedRequests.robot
csit/libraries/Utils.robot
csit/suites/sfc/SFC_Basic/060__sfc_service_paths.robot
csit/suites/sfc/SFC_Basic/061__sfc_service_paths_validation.robot [new file with mode: 0644]
csit/testplans/sfc-rest-basic.txt
csit/variables/sfc/master/service-function-chain-firewall-napt44-dpi.json [new file with mode: 0644]
csit/variables/sfc/master/service-function-paths-with-one-hop.json [new file with mode: 0644]
csit/variables/sfc/master/service-function-paths-with-three-hops-firewall-napt44-dpi.json [new file with mode: 0644]

index 1903609bd9db2c25a243987a76256b8afe83c7d1..5eebc429cc578c53041136ea34d8c1dc2bd58b43 100644 (file)
@@ -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.
index f107f9a3116f77d6d14e1499b4d1e8dbb5ec1585..c3d6b6b1811251b2a13ddf5b23cd7ee8209a65d9 100644 (file)
@@ -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}
index b6a218c91b37a4544619b0b17f079503e783744c..910693f65abdc1afc7e583578a97d18d238b9e88 100644 (file)
@@ -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 (file)
index 0000000..f80781a
--- /dev/null
@@ -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}
index 9b44a10f9a06bc5fc95ed80e7113a193de76b681..a227423709e6e34c2779ed843baab894d3dfda62 100644 (file)
@@ -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 (file)
index 0000000..74d26f2
--- /dev/null
@@ -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 (file)
index 0000000..c78ac8a
--- /dev/null
@@ -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 (file)
index 0000000..bd979fb
--- /dev/null
@@ -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"
+                    }
+         ]
+      }
+    ]
+  }
+}