Configure HV-VES suite containers 65/59365/11
authorFilip Krzywka <filip.krzywka@nokia.com>
Mon, 6 Aug 2018 08:07:03 +0000 (10:07 +0200)
committerFilip Krzywka <filip.krzywka@nokia.com>
Fri, 31 Aug 2018 05:47:38 +0000 (07:47 +0200)
- populate consul with HV-VES configuration
- make DCAE app simulator to consume messages from non-default
kafka topic

Change-Id: I13773476f271b533236c0888fa5d091a0ee46a23
Issue-ID: DCAEGEN2-687
Signed-off-by: Filip Krzywka <filip.krzywka@nokia.com>
test/csit/plans/dcaegen2-collectors-hv-ves/testsuites/setup.sh
test/csit/tests/dcaegen2-collectors-hv-ves/testcases/__init__.robot
test/csit/tests/dcaegen2-collectors-hv-ves/testcases/hv-ves.robot
test/csit/tests/dcaegen2-collectors-hv-ves/testcases/libraries/ConsulLibrary.py [new file with mode: 0644]
test/csit/tests/dcaegen2-collectors-hv-ves/testcases/libraries/DcaeAppSimulatorLibrary.py [new file with mode: 0644]
test/csit/tests/dcaegen2-collectors-hv-ves/testcases/libraries/HttpRequests.py [new file with mode: 0644]
test/csit/tests/dcaegen2-collectors-hv-ves/testcases/libraries/VesHvContainersUtilsLibrary.py [new file with mode: 0644]
test/csit/tests/dcaegen2-collectors-hv-ves/testcases/resources/ves-hv-configuration.json [new file with mode: 0644]

index 48e3980..72dacf6 100755 (executable)
@@ -37,4 +37,4 @@ docker cp ssl/. ${COMPOSE_VES_HV_CONTAINER_NAME}:/etc/ves-hv
 # race condition end
 
 
-export ROBOT_VARIABLES="--pythonpath ${WORKSPACE}/test/csit/tests/dcaegen2/hv-ves-testcases/libraries"
\ No newline at end of file
+export ROBOT_VARIABLES="--pythonpath ${WORKSPACE}/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/libraries"
\ No newline at end of file
index e69de29..322d17b 100644 (file)
@@ -0,0 +1,48 @@
+*** Settings ***
+Library       DcaeAppSimulatorLibrary
+Library       ConsulLibrary
+Library       VesHvContainersUtilsLibrary
+
+Suite Setup       HV-VES Collector Suites Setup
+
+*** Keywords ***
+HV-VES Collector Suites Setup
+    Log   Started Suite: HV-VES
+    Configure collector
+    Configure Dcae App
+    Log   Suite setup finished
+
+
+Configure collector
+    ${CONSUL_API_ACCESS}=   Get Consul Api Access Url   ${HTTP_METHOD_URL}   ${CONSUL_CONTAINER_HOST}   ${CONSUL_CONTAINER_PORT}
+    ${CONSUL_API_URL}=  Catenate   SEPARATOR=   ${CONSUL_API_ACCESS}   ${CONSUL_VES_HV_CONFIGURATION_KEY_PATH}
+    Publish HV VES Configuration In Consul    ${CONSUL_API_URL}   ${VES_HV_CONFIGURATION_JSON_FILEPATH}
+
+Configure Dcae App
+    ${DCAE_APP_API_ACCESS}=   Get Dcae App Api Access Url   ${HTTP_METHOD_URL}   ${DCAE_APP_CONTAINER_HOST}   ${DCAE_APP_CONTAINER_PORT}
+
+    ${DCAE_APP_API_MESSAGES_COUNT_URL}=  Catenate   SEPARATOR=   ${DCAE_APP_API_ACCESS}   ${DCAE_APP_API_MESSAGES_COUNT_PATH}
+    Set Suite Variable    ${DCAE_APP_API_MESSAGES_COUNT_URL}    children=True
+
+    ${DCAE_APP_API_TOPIC_CONFIGURATION_URL}=  Catenate   SEPARATOR=   ${DCAE_APP_API_ACCESS}   ${DCAE_APP_API_TOPIC_CONFIGURATION_PATH}
+    Wait until keyword succeeds   10 sec   5 sec
+    ...    Configure Dcae App Simulator To Consume Messages From Topics   ${DCAE_APP_API_TOPIC_CONFIGURATION_URL}  ${ROUTED_MESSAGES_TOPIC}
+
+
+*** Variables ***
+${HTTP_METHOD_URL}                             http://
+
+${CONSUL_CONTAINER_HOST}                       consul
+${CONSUL_CONTAINER_PORT}                       8500
+${CONSUL_VES_HV_CONFIGURATION_KEY_PATH}        /v1/kv/veshv-config
+
+${DCAE_APP_CONTAINER_HOST}                     dcae-app-simulator
+${DCAE_APP_CONTAINER_PORT}                     6063
+${DCAE_APP_API_TOPIC_CONFIGURATION_PATH}       /configuration/topics
+${DCAE_APP_API_MESSAGES_PATH}                  /messages/all
+${DCAE_APP_API_MESSAGES_COUNT_PATH}            ${DCAE_APP_API_MESSAGES_PATH}/count
+
+${ROUTED_MESSAGES_TOPIC}                       test-hv-ran-meas
+
+${VES_HV_RESOURCES}                            %{WORKSPACE}/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/resources
+${VES_HV_CONFIGURATION_JSON_FILEPATH}          ${VES_HV_RESOURCES}/ves-hv-configuration.json
index 36093f4..38ce248 100644 (file)
@@ -1,4 +1,8 @@
+*** Settings ***
+Library    DcaeAppSimulatorLibrary
+
 *** Test Cases ***
 Initial testcase
-    [Documentation]   Testing tests setup script
-    Log   Robot framework execution successful
\ No newline at end of file
+    [Documentation]   Testing dcae app connection
+    Wait until keyword succeeds   60 sec   5 sec
+    ...    Assert Dcae App Consumed   ${DCAE_APP_API_MESSAGES_COUNT_URL}   0
diff --git a/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/libraries/ConsulLibrary.py b/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/libraries/ConsulLibrary.py
new file mode 100644 (file)
index 0000000..52d7e0e
--- /dev/null
@@ -0,0 +1,16 @@
+from robot.api import logger
+import HttpRequests
+
+CONSUL_NAME = "Consul"
+
+class ConsulLibrary:
+
+    def publish_hv_ves_configuration_in_consul(self, consul_url, consul_configuration_filepath):
+        logger.info("Reading consul configuration file from: " + consul_configuration_filepath)
+        file = open(consul_configuration_filepath, "rb")
+        data = file.read()
+        file.close()
+
+        logger.info("PUT at: " + consul_url)
+        resp = HttpRequests.session_without_env().put(consul_url, data=data, timeout=5)
+        HttpRequests.checkStatusCode(resp.status_code, CONSUL_NAME)
\ No newline at end of file
diff --git a/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/libraries/DcaeAppSimulatorLibrary.py b/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/libraries/DcaeAppSimulatorLibrary.py
new file mode 100644 (file)
index 0000000..29e5b57
--- /dev/null
@@ -0,0 +1,26 @@
+import HttpRequests
+from robot.api import logger
+
+DCAE_APP_NAME = "DCAE App"
+
+class DcaeAppSimulatorLibrary:
+
+    def configure_dcae_app_simulator_to_consume_messages_from_topics(self, app_url, topics):
+        logger.info("PUT at: " + app_url)
+        resp = HttpRequests.session_without_env().put(app_url, data={'topics': topics}, timeout=5)
+        HttpRequests.checkStatusCode(resp.status_code, DCAE_APP_NAME)
+
+    def assert_DCAE_app_consumed(self, app_url, expected_messages_amount):
+        logger.info("GET at: " + app_url)
+        resp = HttpRequests.session_without_env().get(app_url, timeout=5)
+        HttpRequests.checkStatusCode(resp.status_code, DCAE_APP_NAME)
+
+        assert resp.content == expected_messages_amount, \
+            "Messages consumed by simulator: " + resp.content + " expecting: " + expected_messages_amount
+
+
+    def reset_DCAE_app_simulator(self, app_url):
+        logger.info("DELETE at: " + app_url)
+        resp = HttpRequests.session_without_env().delete(app_url, timeout=5)
+        HttpRequests.checkStatusCode(resp.status_code, DCAE_APP_NAME)
+
diff --git a/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/libraries/HttpRequests.py b/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/libraries/HttpRequests.py
new file mode 100644 (file)
index 0000000..0d1d928
--- /dev/null
@@ -0,0 +1,12 @@
+import requests
+from robot.api import logger
+
+def session_without_env():
+    session = requests.Session()
+    session.trust_env = False
+    return session
+
+def checkStatusCode(status_code, server_name):
+    if status_code != 200:
+        logger.error("Response status code from " + server_name + ": " + str(status_code))
+        raise (Exception(server_name + " returned status code " + status_code))
\ No newline at end of file
diff --git a/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/libraries/VesHvContainersUtilsLibrary.py b/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/libraries/VesHvContainersUtilsLibrary.py
new file mode 100644 (file)
index 0000000..4db0461
--- /dev/null
@@ -0,0 +1,34 @@
+from time import time
+
+from robot.api import logger
+import os.path
+
+LOCALHOST = "localhost"
+
+
+class VesHvContainersUtilsLibrary:
+
+    def get_consul_api_access_url(self, method, image_name, port):
+        return self.create_url(
+            method,
+            self.get_instance_address(image_name, port)
+        )
+
+    def get_dcae_app_api_access_url(self, method, image_name, port):
+        return self.create_url(
+            method,
+            self.get_instance_address(image_name, port)
+        )
+
+    def get_instance_address(self, image_name, port):
+        if is_running_inside_docker():
+            return image_name + ":" + port
+        else:
+            logger.info("File `/.dockerenv` not found. Assuming local environment and using localhost.")
+            return LOCALHOST + ":" + port
+
+    def create_url(self, method, host_address):
+        return method + host_address
+
+def is_running_inside_docker():
+    return os.path.isfile("/.dockerenv")
diff --git a/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/resources/ves-hv-configuration.json b/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/resources/ves-hv-configuration.json
new file mode 100644 (file)
index 0000000..3235a0c
--- /dev/null
@@ -0,0 +1,9 @@
+{
+  "kafkaBootstrapServers": "kafka:9092",
+  "routing": [
+    {
+      "fromDomain": 11,
+      "toTopic": "test-hv-ran-meas"
+    }
+  ]
+}
\ No newline at end of file