From f9e0a1a422577a2d4d286e3bba4d518aa1ea7c24 Mon Sep 17 00:00:00 2001
From: Nikolay Stanchev <ns17@it-innovation.soton.ac.uk>
Date: Tue, 10 Jul 2018 16:31:53 +0100
Subject: [PATCH] Adds validation for the service function chain instance ID
 when using the build graph API endpoint

---
 src/service/clmcservice/graphapi/tests.py     | 15 +++++++++++++++
 src/service/clmcservice/graphapi/utilities.py |  3 +++
 2 files changed, 18 insertions(+)

diff --git a/src/service/clmcservice/graphapi/tests.py b/src/service/clmcservice/graphapi/tests.py
index 5fcffdc..c818a3a 100644
--- a/src/service/clmcservice/graphapi/tests.py
+++ b/src/service/clmcservice/graphapi/tests.py
@@ -141,6 +141,21 @@ class TestGraphAPI(object):
             error_raised = True
         assert error_raised, "A bad request error must have been raised in case of invalid URL parameters."
 
+        service_functions = dict(nginx={"measurement_name": "nginx", "response_time_field": "mean(avg_processing_time)"},
+                                 minio={"measurement_name": "minio_http", "response_time_field": "mean(total_processing_time)/mean(total_requests_count)"})
+        build_json_body = dict(database=test_db_name, retention_policy="autogen", service_function_chain_instance="testsfc1", service_functions=service_functions)
+        body = dumps(build_json_body)
+        request = testing.DummyRequest()
+        request.params["from"] = from_timestamp
+        request.params["to"] = to_timestamp
+        request.body = body.encode(request.charset)
+        error_raised = False
+        try:
+            GraphAPI(request).build_temporal_graph()
+        except HTTPBadRequest:
+            error_raised = True
+        assert error_raised, "A bad request error must have been raised in case of invalid SFC ID."
+
         service_functions = dict(nginx={"measurement_name": "nginx", "response_time_field": "mean(avg_processing_time)"},
                                  minio={"measurement_name": "minio_http", "response_time_field": "mean(total_processing_time)/mean(total_requests_count)"})
         build_json_body = dict(database=test_db_name, retention_policy="autogen", service_function_chain_instance="test_sfc1_1", service_functions=service_functions)
diff --git a/src/service/clmcservice/graphapi/utilities.py b/src/service/clmcservice/graphapi/utilities.py
index a0a29d6..88e97b4 100644
--- a/src/service/clmcservice/graphapi/utilities.py
+++ b/src/service/clmcservice/graphapi/utilities.py
@@ -70,6 +70,9 @@ def validate_json_queries_body(body):
 
     assert GRAPH_BUILD_QUERY_PARAMS == set(body.keys()), "Invalid JSON query document."
 
+    sfc_i = body["service_function_chain_instance"]
+    assert len(sfc_i.split('_')) > 1, "Incorrect format of service function chain instance ID - use format <sfcID>_<instanceNum>"
+
     assert type(body["service_functions"]) == dict, "The service function description should be represented with a dictionary."
 
     for sf in body["service_functions"]:
-- 
GitLab