diff options
Diffstat (limited to 'test/csit')
35 files changed, 1405 insertions, 7 deletions
diff --git a/test/csit/plans/dcaegen2/hv-ves-testsuites/docker-compose.yml b/test/csit/plans/dcaegen2-collectors-hv-ves/testsuites/docker-compose.yml index 28cded8cb..28cded8cb 100644 --- a/test/csit/plans/dcaegen2/hv-ves-testsuites/docker-compose.yml +++ b/test/csit/plans/dcaegen2-collectors-hv-ves/testsuites/docker-compose.yml diff --git a/test/csit/plans/dcaegen2/hv-ves-testsuites/setup.sh b/test/csit/plans/dcaegen2-collectors-hv-ves/testsuites/setup.sh index 48e39807f..72dacf6a2 100755 --- a/test/csit/plans/dcaegen2/hv-ves-testsuites/setup.sh +++ b/test/csit/plans/dcaegen2-collectors-hv-ves/testsuites/setup.sh @@ -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 diff --git a/test/csit/plans/dcaegen2/hv-ves-testsuites/ssl/Makefile b/test/csit/plans/dcaegen2-collectors-hv-ves/testsuites/ssl/Makefile index 5fddc6b1d..5fddc6b1d 100644 --- a/test/csit/plans/dcaegen2/hv-ves-testsuites/ssl/Makefile +++ b/test/csit/plans/dcaegen2-collectors-hv-ves/testsuites/ssl/Makefile diff --git a/test/csit/plans/dcaegen2/hv-ves-testsuites/ssl/README.md b/test/csit/plans/dcaegen2-collectors-hv-ves/testsuites/ssl/README.md index 174c16641..174c16641 100644 --- a/test/csit/plans/dcaegen2/hv-ves-testsuites/ssl/README.md +++ b/test/csit/plans/dcaegen2-collectors-hv-ves/testsuites/ssl/README.md diff --git a/test/csit/plans/dcaegen2/hv-ves-testsuites/teardown.sh b/test/csit/plans/dcaegen2-collectors-hv-ves/testsuites/teardown.sh index 91ad90305..91ad90305 100755 --- a/test/csit/plans/dcaegen2/hv-ves-testsuites/teardown.sh +++ b/test/csit/plans/dcaegen2-collectors-hv-ves/testsuites/teardown.sh diff --git a/test/csit/plans/dcaegen2/hv-ves-testsuites/testplan.txt b/test/csit/plans/dcaegen2-collectors-hv-ves/testsuites/testplan.txt index 3f4f14806..e9a7f6366 100644 --- a/test/csit/plans/dcaegen2/hv-ves-testsuites/testplan.txt +++ b/test/csit/plans/dcaegen2-collectors-hv-ves/testsuites/testplan.txt @@ -1,4 +1,4 @@ # Test suites are relative paths under [integration.git]/test/csit/tests/. # Place the suites in run order. -dcaegen2/hv-ves-testcases +dcaegen2-collectors-hv-ves/testcases diff --git a/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/__init__.robot b/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/__init__.robot new file mode 100644 index 000000000..32e920b39 --- /dev/null +++ b/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/__init__.robot @@ -0,0 +1,57 @@ +*** 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} + Sleep 5 + +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_MESSAGE_RESET_URL}= Catenate SEPARATOR= ${DCAE_APP_API_ACCESS} ${DCAE_APP_API_MESSAGES_RESET_PATH} + Set Suite Variable ${DCAE_APP_API_MESSAGE_RESET_URL} children=True + + ${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_MESSAGES_VALIDATION_URL}= Catenate SEPARATOR= ${DCAE_APP_API_ACCESS} ${DCAE_APP_API_MESSAGES_VALIDATION_PATH} + Set Suite Variable ${DCAE_APP_API_MESSAGES_VALIDATION_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_RESET_PATH} /messages +${DCAE_APP_API_MESSAGES_PATH} /messages/all +${DCAE_APP_API_MESSAGES_COUNT_PATH} ${DCAE_APP_API_MESSAGES_PATH}/count +${DCAE_APP_API_MESSAGES_VALIDATION_PATH} ${DCAE_APP_API_MESSAGES_PATH}/validate + +${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 diff --git a/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/hv-ves.robot b/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/hv-ves.robot new file mode 100644 index 000000000..482b698fe --- /dev/null +++ b/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/hv-ves.robot @@ -0,0 +1,118 @@ +*** Settings *** +Library DcaeAppSimulatorLibrary +Library XnfSimulatorLibrary +Library VesHvContainersUtilsLibrary +Library Collections + +Suite Setup Message Routing Suite Setup +Suite Teardown VES-HV Collector Suite Teardown +Test Teardown VES-HV Collector Test Shutdown + +*** Test Cases *** +Correct Messages Routing + [Documentation] VES-HV Collector should route all valid messages to topics specified in configuration + ... and do not change message payload generated in XNF simulator + + ${SIMULATORS_LIST}= Get xNF Simulators 1 + Send Messages From xNF Simulators ${SIMULATORS_LIST} ${XNF_FIXED_PAYLOAD_REQUEST} + + Wait until keyword succeeds 60 sec 5 sec + ... Assert Dcae App Consumed ${DCAE_APP_API_MESSAGES_COUNT_URL} ${AMOUNT_25000} + Assert Dcae App Consumed Proper Messages ${DCAE_APP_API_MESSAGES_VALIDATION_URL} ${DCAE_FIXED_PAYLOAD_REQUEST} + + +Too big payload message handling + [Documentation] VES-HV Collector should interrupt the stream when encountered message with too big payload + + ${SIMULATORS_LIST}= Get xNF Simulators 1 + Send Messages From xNF Simulators ${SIMULATORS_LIST} ${XNF_TOO_BIG_PAYLOAD_REQUEST} + + Wait until keyword succeeds 60 sec 5 sec + ... Assert Dcae App Consumed Less Equal Than ${DCAE_APP_API_MESSAGES_COUNT_URL} ${AMOUNT_25000} + + +Invalid wire frame message handling + [Documentation] VES-HV Collector should skip messages with invalid wire frame + + ${SIMULATORS_LIST}= Get xNF Simulators 1 + Send Messages From xNF Simulators ${SIMULATORS_LIST} ${XNF_INVALID_WIRE_FRAME_REQUEST} + + Wait until keyword succeeds 60 sec 5 sec + ... Assert Dcae App Consumed ${DCAE_APP_API_MESSAGES_COUNT_URL} ${AMOUNT_50000} + Assert Dcae App Consumed Proper Messages ${DCAE_APP_API_MESSAGES_VALIDATION_URL} ${DCAE_INVALID_WIRE_FRAME_REQUEST} + + +Invalid GPB data message handling + [Documentation] VES-HV Collector should skip messages with invalid GPB data + + ${SIMULATORS_LIST}= Get xNF Simulators 1 + Send Messages From xNF Simulators ${SIMULATORS_LIST} ${XNF_INVALID_GPB_DATA_REQUEST} + + Wait until keyword succeeds 60 sec 5 sec + ... Assert Dcae App Consumed ${DCAE_APP_API_MESSAGES_COUNT_URL} ${AMOUNT_50000} + Assert Dcae App Consumed Proper Messages ${DCAE_APP_API_MESSAGES_VALIDATION_URL} ${DCAE_INVALID_GPB_DATA_REQUEST} + + +Unsupported domain message handling + [Documentation] VES-HV Collector should skip messages with unsupported domain + + ${SIMULATORS_LIST}= Get xNF Simulators 1 + Send Messages From xNF Simulators ${SIMULATORS_LIST} ${XNF_UNSUPPORTED_DOMAIN_REQUEST} + + Wait until keyword succeeds 60 sec 5 sec + ... Assert Dcae App Consumed ${DCAE_APP_API_MESSAGES_COUNT_URL} ${AMOUNT_50000} + Assert Dcae App Consumed Proper Messages ${DCAE_APP_API_MESSAGES_VALIDATION_URL} ${DCAE_UNSUPPORTED_DOMAIN_REQUEST} + +*** Keywords *** +Message Routing Suite Setup + Log Started Suite: VES-HV Message Routing + ${XNF_PORTS_LIST}= Create List 7000 + Configure xNF Simulators On Ports ${XNF_PORTS_LIST} + Log Suite setup finished + +Configure xNF Simulators On Ports + [Arguments] ${XNF_PORTS_LIST} + ${XNF_SIMULATORS_ADDRESSES}= Start Xnf Simulators ${XNF_PORTS_LIST} True + Set Suite Variable ${XNF_SIMULATORS_ADDRESSES} + + +Get xNF Simulators + [Arguments] ${AMOUNT} + ${SIMULATORS}= Get Slice From List ${XNF_SIMULATORS_ADDRESSES} 0 ${AMOUNT} + [Return] ${SIMULATORS} + + +Send Messages From xNF Simulators + [Arguments] ${XNF_HOSTS_LIST} ${MESSAGE_FILEPATH} + :FOR ${HOST} IN @{XNF_HOSTS_LIST} + \ ${XNF_SIM_API_ACCESS}= Get xNF Sim Api Access Url ${HTTP_METHOD_URL} ${HOST} + \ ${XNF_SIM_API_URL}= Catenate SEPARATOR= ${XNF_SIM_API_ACCESS} ${XNF_SIM_API_PATH} + \ Send messages ${XNF_SIM_API_URL} ${MESSAGE_FILEPATH} + + +VES-HV Collector Test Shutdown + Reset DCAE App Simulator ${DCAE_APP_API_MESSAGE_RESET_URL} + + +VES-HV Collector Suite Teardown + Stop And Remove All Xnf Simulators + +*** Variables *** +${HTTP_METHOD_URL} http:// + +${XNF_SIM_API_PATH} /simulator/async + +${VES_HV_SCENARIOS} %{WORKSPACE}/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/resources/scenarios +${XNF_FIXED_PAYLOAD_REQUEST} ${VES_HV_SCENARIOS}/fixed-payload/xnf-fixed-payload-request.json +${XNF_TOO_BIG_PAYLOAD_REQUEST} ${VES_HV_SCENARIOS}/too-big-payload/xnf-too-big-payload-request.json +${XNF_INVALID_WIRE_FRAME_REQUEST} ${VES_HV_SCENARIOS}/invalid-wire-frame/xnf-invalid-wire-frame-request.json +${XNF_INVALID_GPB_DATA_REQUEST} ${VES_HV_SCENARIOS}/invalid-gpb-data/xnf-invalid-gpb-data-request.json +${XNF_UNSUPPORTED_DOMAIN_REQUEST} ${VES_HV_SCENARIOS}/unsupported-domain/xnf-unsupported-domain-request.json + +${DCAE_FIXED_PAYLOAD_REQUEST} ${VES_HV_SCENARIOS}/fixed-payload/dcae-fixed-payload-request.json +${DCAE_INVALID_WIRE_FRAME_REQUEST} ${VES_HV_SCENARIOS}/invalid-wire-frame/dcae-invalid-wire-frame-request.json +${DCAE_INVALID_GPB_DATA_REQUEST} ${VES_HV_SCENARIOS}/invalid-gpb-data/dcae-invalid-gpb-data-request.json +${DCAE_UNSUPPORTED_DOMAIN_REQUEST} ${VES_HV_SCENARIOS}/unsupported-domain/dcae-unsupported-domain-request.json + +${AMOUNT_25000} 25000 +${AMOUNT_50000} 50000 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 index 000000000..52d7e0eab --- /dev/null +++ b/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/libraries/ConsulLibrary.py @@ -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 index 000000000..ab3b1e21d --- /dev/null +++ b/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/libraries/DcaeAppSimulatorLibrary.py @@ -0,0 +1,46 @@ +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 assert_DCAE_app_consumed_less_equal_than(self, app_url, messages_threshold): + logger.info("GET at: " + app_url) + resp = HttpRequests.session_without_env().get(app_url, timeout=5) + HttpRequests.checkStatusCode(resp.status_code, DCAE_APP_NAME) + + logger.debug("Messages consumed by simulator: " + resp.content + + " expecting more than 0 and less/equal than " + messages_threshold) + + assert 0 < int(resp.content) <= int(messages_threshold), \ + "Messages consumed by simulator: " + resp.content + \ + " expecting more than 0 and less/equal than " + messages_threshold + + 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) + + def assert_DCAE_app_consumed_proper_messages(self, app_url, message_filepath): + logger.info("POST at: " + app_url) + file = open(message_filepath, "rb") + data = file.read() + file.close() + + resp = HttpRequests.session_without_env().post(app_url, data=data, 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 index 000000000..0d1d928b5 --- /dev/null +++ b/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/libraries/HttpRequests.py @@ -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 index 000000000..989a796ce --- /dev/null +++ b/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/libraries/VesHvContainersUtilsLibrary.py @@ -0,0 +1,69 @@ +from time import time + +from robot.api import logger +import os.path +import docker +from io import BytesIO +from os.path import basename +from tarfile import TarFile, TarInfo + +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_xnf_sim_api_access_url(self, method, host): + if is_running_inside_docker(): + return self.create_url(method, host) + else: + logger.info("File `/.dockerenv` not found. Assuming local environment and using localhost.") + port_from_container_name = str(host)[-4:] + return self.create_url(method, LOCALHOST + ":" + port_from_container_name) + + 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") + +def copy_to_container(container_id, filepaths, path='/etc/ves-hv'): + with create_archive(filepaths) as archive: + docker.APIClient('unix:///var/run/docker.sock') \ + .put_archive(container=container_id, path=(path), data=archive) + + +def create_archive(filepaths): + tarstream = BytesIO() + tarfile = TarFile(fileobj=tarstream, mode='w') + for filepath in filepaths: + file = open(filepath, 'r') + file_data = file.read() + + tarinfo = TarInfo(name=basename(file.name)) + tarinfo.size = len(file_data) + tarinfo.mtime = time() + + tarfile.addfile(tarinfo, BytesIO(file_data)) + + tarfile.close() + tarstream.seek(0) + return tarstream diff --git a/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/libraries/XnfSimulatorLibrary.py b/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/libraries/XnfSimulatorLibrary.py new file mode 100644 index 000000000..d85eb4dee --- /dev/null +++ b/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/libraries/XnfSimulatorLibrary.py @@ -0,0 +1,124 @@ +from VesHvContainersUtilsLibrary import copy_to_container +import HttpRequests +import os +import docker +from robot.api import logger +from time import sleep + +XNF_SIMULATOR_NAME = "xNF Simulator" +SIMULATOR_IMAGE_NAME = "onap/org.onap.dcaegen2.collectors.hv-ves.hv-collector-xnf-simulator" +SIMULATOR_IMAGE_FULL_NAME = os.getenv("DOCKER_REGISTRY") + "/" + SIMULATOR_IMAGE_NAME + ":latest" +certificates_dir_path = os.getenv("WORKSPACE") + "/test/csit/plans/dcaegen2-collectors-hv-ves/testsuites/ssl/" +ONE_SECOND_IN_NANOS = 10 ** 9 + +class XnfSimulatorLibrary: + + def start_xnf_simulators(self, list_of_ports, valid_certs=True): + logger.info("Creating " + str(len(list_of_ports)) + " xNF Simulator containers") + dockerClient = docker.from_env() + cert_name_prefix = "" if valid_certs else "invalid_" + self.pullImageIfAbsent(dockerClient) + logger.info("Using image: " + SIMULATOR_IMAGE_FULL_NAME) + simulators_addresses = self.create_simulators(dockerClient, list_of_ports, cert_name_prefix) + self.assert_containers_startup_was_successful(dockerClient) + dockerClient.close() + return simulators_addresses + + def pullImageIfAbsent(self, dockerClient): + try: + dockerClient.images.get(SIMULATOR_IMAGE_FULL_NAME) + except: + logger.console("Image " + SIMULATOR_IMAGE_FULL_NAME + " will be pulled from repository. " + "This can take a while.") + dockerClient.images.pull(SIMULATOR_IMAGE_FULL_NAME) + + def create_simulators(self, dockerClient, list_of_ports, cert_name_prefix): + simulators_addresses = [] + for port in list_of_ports: + container = self.run_simulator(dockerClient, port, + "/etc/ves-hv/" + cert_name_prefix + "client.crt", + "/etc/ves-hv/" + cert_name_prefix + "client.key", + "/etc/ves-hv/" + cert_name_prefix + "trust.crt" + ) + + self.copy_required_certificates_into_simulator(container) + logger.info("Started container: " + container.name + " " + container.id) + simulators_addresses.append(container.name + ":" + port) + return simulators_addresses + + def run_simulator(self, dockerClient, port, client_crt_path, client_key_path, client_trust_store): + return dockerClient.containers.run(SIMULATOR_IMAGE_FULL_NAME, + command=["--listen-port", port, + "--ves-host", "ves-hv-collector", + "--ves-port", "6061", + "--cert-file", client_crt_path, + "--private-key-file", client_key_path, + "--trust-cert-file", client_trust_store + ], + healthcheck={ + "interval": 5 * ONE_SECOND_IN_NANOS, + "timeout": 3 * ONE_SECOND_IN_NANOS, + "retries": 1, + "test": ["CMD", "curl", "--request", "GET", + "--fail", "--silent", "--show-error", + "localhost:" + port + "/healthcheck"] + }, + detach=True, + network="ves-hv-default", + ports={port + "/tcp": port}, + name="ves-hv-collector-xnf-simulator" + port) + + def copy_required_certificates_into_simulator(self, container): + container.exec_run("mkdir -p /etc/ves-hv") + copy_to_container(container.id, [ + certificates_dir_path + "client.crt", + certificates_dir_path + "client.key", + certificates_dir_path + "trust.crt", + certificates_dir_path + "invalid_client.crt", + certificates_dir_path + "invalid_client.key", + certificates_dir_path + "invalid_trust.crt", + ]) + + def assert_containers_startup_was_successful(self, dockerClient): + checks_amount = 6 + check_interval_in_seconds = 5 + for _ in range(checks_amount): + sleep(check_interval_in_seconds) + all_containers_healthy = True + for container in self.get_simulators_list(dockerClient): + all_containers_healthy = all_containers_healthy and self.is_container_healthy(container) + if (all_containers_healthy): + return + raise ContainerException("One of xNF simulators containers did not pass the healthcheck.") + + def is_container_healthy(self, container): + container_health = container.attrs['State']['Health']['Status'] + return container_health == 'healthy' and container.status == 'running' + + def stop_and_remove_all_xnf_simulators(self): + dockerClient = docker.from_env() + for container in self.get_simulators_list(dockerClient): + logger.info("Stopping and removing container: " + container.id) + logger.debug(container.logs()) + container.stop() + container.remove() + dockerClient.close() + + def get_simulators_list(self, dockerClient): + return dockerClient.containers.list(filters={"ancestor": SIMULATOR_IMAGE_FULL_NAME}, all=True) + + def send_messages(self, simulator_url, message_filepath): + logger.info("Reading message to simulator from: " + message_filepath) + + file = open(message_filepath, "rb") + data = file.read() + file.close() + + logger.info("POST at: " + simulator_url) + resp = HttpRequests.session_without_env().post(simulator_url, data=data, timeout=5) + HttpRequests.checkStatusCode(resp.status_code, XNF_SIMULATOR_NAME) + + +class ContainerException(Exception): + def __init__(self, message): + super(ContainerException, self).__init__(message) diff --git a/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/multiple-clients.robot b/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/multiple-clients.robot new file mode 100644 index 000000000..bac85394f --- /dev/null +++ b/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/multiple-clients.robot @@ -0,0 +1,35 @@ +*** Settings *** +Library DcaeAppSimulatorLibrary + +Resource resources/common-keywords.robot + +Suite Setup Multiple Clients Handling Suite Setup +Suite Teardown VES-HV Collector Suite Teardown +Test Teardown VES-HV Collector Test Shutdown + +*** Keywords *** +Multiple Clients Handling Suite Setup + Log Started Suite: VES-HV Multiple Clients Handling + ${XNF_PORTS_LIST}= Create List 7000 7001 7002 + Configure xNF Simulators On Ports ${XNF_PORTS_LIST} + Log Suite setup finished + +*** Test Cases *** +Handle Multiple Connections + [Documentation] VES-HV Collector should handle multiple incoming transmissions + + ${SIMULATORS_LIST}= Get xNF Simulators 3 + Send Messages From xNF Simulators ${SIMULATORS_LIST} ${XNF_SMALLER_PAYLOAD_REQUEST} + + Wait until keyword succeeds 60 sec 5 sec + ... Assert Dcae App Consumed ${DCAE_APP_API_MESSAGES_COUNT_URL} ${AMOUNT_15000} + Assert Dcae App Consumed Proper Messages ${DCAE_APP_API_MESSAGES_VALIDATION_URL} ${DCAE_SMALLER_PAYLOAD_REQUEST} + + +*** Variables *** +${VES_HV_SCENARIOS} %{WORKSPACE}/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/resources/scenarios + +${XNF_SMALLER_PAYLOAD_REQUEST} ${VES_HV_SCENARIOS}/multiple-simulators-payload/xnf-simulator-smaller-valid-request.json +${DCAE_SMALLER_PAYLOAD_REQUEST} ${VES_HV_SCENARIOS}/multiple-simulators-payload/dcae-smaller-valid-request.json + +${AMOUNT_15000} 15000 diff --git a/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/resources/common-keywords.robot b/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/resources/common-keywords.robot new file mode 100644 index 000000000..af4cd71da --- /dev/null +++ b/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/resources/common-keywords.robot @@ -0,0 +1,38 @@ +*** Settings *** +Library XnfSimulatorLibrary +Library VesHvContainersUtilsLibrary +Library Collections + +*** Keywords *** +Configure xNF Simulators On Ports + [Arguments] ${XNF_PORTS_LIST} + ${XNF_SIMULATORS_ADDRESSES}= Start Xnf Simulators ${XNF_PORTS_LIST} True + Set Suite Variable ${XNF_SIMULATORS_ADDRESSES} + + +Get xNF Simulators + [Arguments] ${AMOUNT} + ${SIMULATORS}= Get Slice From List ${XNF_SIMULATORS_ADDRESSES} 0 ${AMOUNT} + [Return] ${SIMULATORS} + + +Send Messages From xNF Simulators + [Arguments] ${XNF_HOSTS_LIST} ${MESSAGE_FILEPATH} + :FOR ${HOST} IN @{XNF_HOSTS_LIST} + \ ${XNF_SIM_API_ACCESS}= Get xNF Sim Api Access Url ${HTTP_METHOD_URL} ${HOST} + \ ${XNF_SIM_API_URL}= Catenate SEPARATOR= ${XNF_SIM_API_ACCESS} ${XNF_SIM_API_PATH} + \ Send messages ${XNF_SIM_API_URL} ${MESSAGE_FILEPATH} + + +VES-HV Collector Test Shutdown + Reset DCAE App Simulator ${DCAE_APP_API_MESSAGE_RESET_URL} + + +VES-HV Collector Suite Teardown + Stop And Remove All Xnf Simulators + +*** Variables *** +${HTTP_METHOD_URL} http:// + +${XNF_SIM_API_PATH} /simulator/async + diff --git a/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/resources/scenarios/fixed-payload/dcae-fixed-payload-request.json b/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/resources/scenarios/fixed-payload/dcae-fixed-payload-request.json new file mode 100644 index 000000000..fb53f50ec --- /dev/null +++ b/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/resources/scenarios/fixed-payload/dcae-fixed-payload-request.json @@ -0,0 +1,23 @@ +[ + { + "commonEventHeader": { + "version": "sample-version", + "domain": "HVRANMEAS", + "sequence": 1, + "priority": 1, + "eventId": "sample-event-id", + "eventName": "sample-event-name", + "eventType": "sample-event-type", + "startEpochMicrosec": 120034455, + "lastEpochMicrosec": 120034455, + "nfNamingCode": "sample-nf-naming-code", + "nfcNamingCode": "sample-nfc-naming-code", + "reportingEntityId": "sample-reporting-entity-id", + "reportingEntityName": "sample-reporting-entity-name", + "sourceId": "sample-source-id", + "sourceName": "sample-source-name" + }, + "messageType": "FIXED_PAYLOAD", + "messagesAmount": 25000 + } +] diff --git a/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/resources/scenarios/fixed-payload/xnf-fixed-payload-request.json b/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/resources/scenarios/fixed-payload/xnf-fixed-payload-request.json new file mode 100644 index 000000000..fb53f50ec --- /dev/null +++ b/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/resources/scenarios/fixed-payload/xnf-fixed-payload-request.json @@ -0,0 +1,23 @@ +[ + { + "commonEventHeader": { + "version": "sample-version", + "domain": "HVRANMEAS", + "sequence": 1, + "priority": 1, + "eventId": "sample-event-id", + "eventName": "sample-event-name", + "eventType": "sample-event-type", + "startEpochMicrosec": 120034455, + "lastEpochMicrosec": 120034455, + "nfNamingCode": "sample-nf-naming-code", + "nfcNamingCode": "sample-nfc-naming-code", + "reportingEntityId": "sample-reporting-entity-id", + "reportingEntityName": "sample-reporting-entity-name", + "sourceId": "sample-source-id", + "sourceName": "sample-source-name" + }, + "messageType": "FIXED_PAYLOAD", + "messagesAmount": 25000 + } +] diff --git a/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/resources/scenarios/invalid-gpb-data/dcae-invalid-gpb-data-request.json b/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/resources/scenarios/invalid-gpb-data/dcae-invalid-gpb-data-request.json new file mode 100644 index 000000000..772b03bef --- /dev/null +++ b/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/resources/scenarios/invalid-gpb-data/dcae-invalid-gpb-data-request.json @@ -0,0 +1,23 @@ +[ + { + "commonEventHeader": { + "version": "sample-version", + "domain": "HVRANMEAS", + "sequence": 1, + "priority": 1, + "eventId": "sample-event-id", + "eventName": "sample-event-name", + "eventType": "sample-event-type", + "startEpochMicrosec": 120034455, + "lastEpochMicrosec": 120034455, + "nfNamingCode": "sample-nf-naming-code", + "nfcNamingCode": "sample-nfc-naming-code", + "reportingEntityId": "sample-reporting-entity-id", + "reportingEntityName": "sample-reporting-entity-name", + "sourceId": "sample-source-id", + "sourceName": "sample-source-name" + }, + "messageType": "VALID", + "messagesAmount": 50000 + } +] diff --git a/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/resources/scenarios/invalid-gpb-data/xnf-invalid-gpb-data-request.json b/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/resources/scenarios/invalid-gpb-data/xnf-invalid-gpb-data-request.json new file mode 100644 index 000000000..d9cb4c2ec --- /dev/null +++ b/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/resources/scenarios/invalid-gpb-data/xnf-invalid-gpb-data-request.json @@ -0,0 +1,65 @@ +[ + { + "commonEventHeader": { + "version": "sample-version", + "domain": "HVRANMEAS", + "sequence": 1, + "priority": 1, + "eventId": "sample-event-id", + "eventName": "sample-event-name", + "eventType": "sample-event-type", + "startEpochMicrosec": 120034455, + "lastEpochMicrosec": 120034455, + "nfNamingCode": "sample-nf-naming-code", + "nfcNamingCode": "sample-nfc-naming-code", + "reportingEntityId": "sample-reporting-entity-id", + "reportingEntityName": "sample-reporting-entity-name", + "sourceId": "sample-source-id", + "sourceName": "sample-source-name" + }, + "messageType": "VALID", + "messagesAmount": 25000 + }, + { + "commonEventHeader": { + "version": "sample-version", + "domain": "HVRANMEAS", + "sequence": 1, + "priority": 1, + "eventId": "sample-event-id", + "eventName": "sample-event-name", + "eventType": "sample-event-type", + "startEpochMicrosec": 120034455, + "lastEpochMicrosec": 120034455, + "nfNamingCode": "sample-nf-naming-code", + "nfcNamingCode": "sample-nfc-naming-code", + "reportingEntityId": "sample-reporting-entity-id", + "reportingEntityName": "sample-reporting-entity-name", + "sourceId": "sample-source-id", + "sourceName": "sample-source-name" + }, + "messageType": "INVALID_GPB_DATA", + "messagesAmount": 100 + }, + { + "commonEventHeader": { + "version": "sample-version", + "domain": "HVRANMEAS", + "sequence": 1, + "priority": 1, + "eventId": "sample-event-id", + "eventName": "sample-event-name", + "eventType": "sample-event-type", + "startEpochMicrosec": 120034455, + "lastEpochMicrosec": 120034455, + "nfNamingCode": "sample-nf-naming-code", + "nfcNamingCode": "sample-nfc-naming-code", + "reportingEntityId": "sample-reporting-entity-id", + "reportingEntityName": "sample-reporting-entity-name", + "sourceId": "sample-source-id", + "sourceName": "sample-source-name" + }, + "messageType": "VALID", + "messagesAmount": 25000 + } +] diff --git a/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/resources/scenarios/invalid-wire-frame/dcae-invalid-wire-frame-request.json b/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/resources/scenarios/invalid-wire-frame/dcae-invalid-wire-frame-request.json new file mode 100644 index 000000000..772b03bef --- /dev/null +++ b/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/resources/scenarios/invalid-wire-frame/dcae-invalid-wire-frame-request.json @@ -0,0 +1,23 @@ +[ + { + "commonEventHeader": { + "version": "sample-version", + "domain": "HVRANMEAS", + "sequence": 1, + "priority": 1, + "eventId": "sample-event-id", + "eventName": "sample-event-name", + "eventType": "sample-event-type", + "startEpochMicrosec": 120034455, + "lastEpochMicrosec": 120034455, + "nfNamingCode": "sample-nf-naming-code", + "nfcNamingCode": "sample-nfc-naming-code", + "reportingEntityId": "sample-reporting-entity-id", + "reportingEntityName": "sample-reporting-entity-name", + "sourceId": "sample-source-id", + "sourceName": "sample-source-name" + }, + "messageType": "VALID", + "messagesAmount": 50000 + } +] diff --git a/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/resources/scenarios/invalid-wire-frame/xnf-invalid-wire-frame-request.json b/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/resources/scenarios/invalid-wire-frame/xnf-invalid-wire-frame-request.json new file mode 100644 index 000000000..88d4e325d --- /dev/null +++ b/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/resources/scenarios/invalid-wire-frame/xnf-invalid-wire-frame-request.json @@ -0,0 +1,65 @@ +[ + { + "commonEventHeader": { + "version": "sample-version", + "domain": "HVRANMEAS", + "sequence": 1, + "priority": 1, + "eventId": "sample-event-id", + "eventName": "sample-event-name", + "eventType": "sample-event-type", + "startEpochMicrosec": 120034455, + "lastEpochMicrosec": 120034455, + "nfNamingCode": "sample-nf-naming-code", + "nfcNamingCode": "sample-nfc-naming-code", + "reportingEntityId": "sample-reporting-entity-id", + "reportingEntityName": "sample-reporting-entity-name", + "sourceId": "sample-source-id", + "sourceName": "sample-source-name" + }, + "messageType": "VALID", + "messagesAmount": 25000 + }, + { + "commonEventHeader": { + "version": "sample-version", + "domain": "HVRANMEAS", + "sequence": 1, + "priority": 1, + "eventId": "sample-event-id", + "eventName": "sample-event-name", + "eventType": "sample-event-type", + "startEpochMicrosec": 120034455, + "lastEpochMicrosec": 120034455, + "nfNamingCode": "sample-nf-naming-code", + "nfcNamingCode": "sample-nfc-naming-code", + "reportingEntityId": "sample-reporting-entity-id", + "reportingEntityName": "sample-reporting-entity-name", + "sourceId": "sample-source-id", + "sourceName": "sample-source-name" + }, + "messageType": "INVALID_WIRE_FRAME", + "messagesAmount": 100 + }, + { + "commonEventHeader": { + "version": "sample-version", + "domain": "HVRANMEAS", + "sequence": 1, + "priority": 1, + "eventId": "sample-event-id", + "eventName": "sample-event-name", + "eventType": "sample-event-type", + "startEpochMicrosec": 120034455, + "lastEpochMicrosec": 120034455, + "nfNamingCode": "sample-nf-naming-code", + "nfcNamingCode": "sample-nfc-naming-code", + "reportingEntityId": "sample-reporting-entity-id", + "reportingEntityName": "sample-reporting-entity-name", + "sourceId": "sample-source-id", + "sourceName": "sample-source-name" + }, + "messageType": "VALID", + "messagesAmount": 25000 + } +] diff --git a/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/resources/scenarios/multiple-simulators-payload/dcae-smaller-valid-request.json b/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/resources/scenarios/multiple-simulators-payload/dcae-smaller-valid-request.json new file mode 100644 index 000000000..9d34a7e24 --- /dev/null +++ b/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/resources/scenarios/multiple-simulators-payload/dcae-smaller-valid-request.json @@ -0,0 +1,23 @@ +[ + { + "commonEventHeader": { + "version": "sample-version", + "domain": "HVRANMEAS", + "sequence": 1, + "priority": 1, + "eventId": "sample-event-id", + "eventName": "sample-event-name", + "eventType": "sample-event-type", + "startEpochMicrosec": 120034455, + "lastEpochMicrosec": 120034455, + "nfNamingCode": "sample-nf-naming-code", + "nfcNamingCode": "sample-nfc-naming-code", + "reportingEntityId": "sample-reporting-entity-id", + "reportingEntityName": "sample-reporting-entity-name", + "sourceId": "sample-source-id", + "sourceName": "sample-source-name" + }, + "messageType": "FIXED_PAYLOAD", + "messagesAmount": 15000 + } +]
\ No newline at end of file diff --git a/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/resources/scenarios/multiple-simulators-payload/xnf-simulator-smaller-valid-request.json b/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/resources/scenarios/multiple-simulators-payload/xnf-simulator-smaller-valid-request.json new file mode 100644 index 000000000..625737e56 --- /dev/null +++ b/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/resources/scenarios/multiple-simulators-payload/xnf-simulator-smaller-valid-request.json @@ -0,0 +1,23 @@ +[ + { + "commonEventHeader": { + "version": "sample-version", + "domain": "HVRANMEAS", + "sequence": 1, + "priority": 1, + "eventId": "sample-event-id", + "eventName": "sample-event-name", + "eventType": "sample-event-type", + "startEpochMicrosec": 120034455, + "lastEpochMicrosec": 120034455, + "nfNamingCode": "sample-nf-naming-code", + "nfcNamingCode": "sample-nfc-naming-code", + "reportingEntityId": "sample-reporting-entity-id", + "reportingEntityName": "sample-reporting-entity-name", + "sourceId": "sample-source-id", + "sourceName": "sample-source-name" + }, + "messageType": "FIXED_PAYLOAD", + "messagesAmount": 5000 + } +]
\ No newline at end of file diff --git a/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/resources/scenarios/too-big-payload/xnf-too-big-payload-request.json b/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/resources/scenarios/too-big-payload/xnf-too-big-payload-request.json new file mode 100644 index 000000000..b1c727a0c --- /dev/null +++ b/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/resources/scenarios/too-big-payload/xnf-too-big-payload-request.json @@ -0,0 +1,65 @@ +[ + { + "commonEventHeader": { + "version": "sample-version", + "domain": "HVRANMEAS", + "sequence": 1, + "priority": 1, + "eventId": "sample-event-id", + "eventName": "sample-event-name", + "eventType": "sample-event-type", + "startEpochMicrosec": 120034455, + "lastEpochMicrosec": 120034455, + "nfNamingCode": "sample-nf-naming-code", + "nfcNamingCode": "sample-nfc-naming-code", + "reportingEntityId": "sample-reporting-entity-id", + "reportingEntityName": "sample-reporting-entity-name", + "sourceId": "sample-source-id", + "sourceName": "sample-source-name" + }, + "messageType": "VALID", + "messagesAmount": 25000 + }, + { + "commonEventHeader": { + "version": "sample-version", + "domain": "HVRANMEAS", + "sequence": 1, + "priority": 1, + "eventId": "sample-event-id", + "eventName": "sample-event-name", + "eventType": "sample-event-type", + "startEpochMicrosec": 120034455, + "lastEpochMicrosec": 120034455, + "nfNamingCode": "sample-nf-naming-code", + "nfcNamingCode": "sample-nfc-naming-code", + "reportingEntityId": "sample-reporting-entity-id", + "reportingEntityName": "sample-reporting-entity-name", + "sourceId": "sample-source-id", + "sourceName": "sample-source-name" + }, + "messageType": "TOO_BIG_PAYLOAD", + "messagesAmount": 100 + }, + { + "commonEventHeader": { + "version": "sample-version", + "domain": "HVRANMEAS", + "sequence": 1, + "priority": 1, + "eventId": "sample-event-id", + "eventName": "sample-event-name", + "eventType": "sample-event-type", + "startEpochMicrosec": 120034455, + "lastEpochMicrosec": 120034455, + "nfNamingCode": "sample-nf-naming-code", + "nfcNamingCode": "sample-nfc-naming-code", + "reportingEntityId": "sample-reporting-entity-id", + "reportingEntityName": "sample-reporting-entity-name", + "sourceId": "sample-source-id", + "sourceName": "sample-source-name" + }, + "messageType": "VALID", + "messagesAmount": 25000 + } +] diff --git a/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/resources/scenarios/unsupported-domain/dcae-unsupported-domain-request.json b/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/resources/scenarios/unsupported-domain/dcae-unsupported-domain-request.json new file mode 100644 index 000000000..772b03bef --- /dev/null +++ b/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/resources/scenarios/unsupported-domain/dcae-unsupported-domain-request.json @@ -0,0 +1,23 @@ +[ + { + "commonEventHeader": { + "version": "sample-version", + "domain": "HVRANMEAS", + "sequence": 1, + "priority": 1, + "eventId": "sample-event-id", + "eventName": "sample-event-name", + "eventType": "sample-event-type", + "startEpochMicrosec": 120034455, + "lastEpochMicrosec": 120034455, + "nfNamingCode": "sample-nf-naming-code", + "nfcNamingCode": "sample-nfc-naming-code", + "reportingEntityId": "sample-reporting-entity-id", + "reportingEntityName": "sample-reporting-entity-name", + "sourceId": "sample-source-id", + "sourceName": "sample-source-name" + }, + "messageType": "VALID", + "messagesAmount": 50000 + } +] diff --git a/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/resources/scenarios/unsupported-domain/xnf-unsupported-domain-request.json b/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/resources/scenarios/unsupported-domain/xnf-unsupported-domain-request.json new file mode 100644 index 000000000..e37e20d19 --- /dev/null +++ b/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/resources/scenarios/unsupported-domain/xnf-unsupported-domain-request.json @@ -0,0 +1,65 @@ +[ + { + "commonEventHeader": { + "version": "sample-version", + "domain": "HVRANMEAS", + "sequence": 1, + "priority": 1, + "eventId": "sample-event-id", + "eventName": "sample-event-name", + "eventType": "sample-event-type", + "startEpochMicrosec": 120034455, + "lastEpochMicrosec": 120034455, + "nfNamingCode": "sample-nf-naming-code", + "nfcNamingCode": "sample-nfc-naming-code", + "reportingEntityId": "sample-reporting-entity-id", + "reportingEntityName": "sample-reporting-entity-name", + "sourceId": "sample-source-id", + "sourceName": "sample-source-name" + }, + "messageType": "VALID", + "messagesAmount": 25000 + }, + { + "commonEventHeader": { + "version": "sample-version", + "domain": "FAULT", + "sequence": 1, + "priority": 1, + "eventId": "sample-event-id", + "eventName": "sample-event-name", + "eventType": "sample-event-type", + "startEpochMicrosec": 120034455, + "lastEpochMicrosec": 120034455, + "nfNamingCode": "sample-nf-naming-code", + "nfcNamingCode": "sample-nfc-naming-code", + "reportingEntityId": "sample-reporting-entity-id", + "reportingEntityName": "sample-reporting-entity-name", + "sourceId": "sample-source-id", + "sourceName": "sample-source-name" + }, + "messageType": "VALID", + "messagesAmount": 100 + }, + { + "commonEventHeader": { + "version": "sample-version", + "domain": "HVRANMEAS", + "sequence": 1, + "priority": 1, + "eventId": "sample-event-id", + "eventName": "sample-event-name", + "eventType": "sample-event-type", + "startEpochMicrosec": 120034455, + "lastEpochMicrosec": 120034455, + "nfNamingCode": "sample-nf-naming-code", + "nfcNamingCode": "sample-nfc-naming-code", + "reportingEntityId": "sample-reporting-entity-id", + "reportingEntityName": "sample-reporting-entity-name", + "sourceId": "sample-source-id", + "sourceName": "sample-source-name" + }, + "messageType": "VALID", + "messagesAmount": 25000 + } +] 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 index 000000000..3235a0c0e --- /dev/null +++ b/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/resources/ves-hv-configuration.json @@ -0,0 +1,9 @@ +{ + "kafkaBootstrapServers": "kafka:9092", + "routing": [ + { + "fromDomain": 11, + "toTopic": "test-hv-ran-meas" + } + ] +}
\ No newline at end of file diff --git a/test/csit/tests/dcaegen2/hv-ves-testcases/__init__.robot b/test/csit/tests/dcaegen2/hv-ves-testcases/__init__.robot deleted file mode 100644 index e69de29bb..000000000 --- a/test/csit/tests/dcaegen2/hv-ves-testcases/__init__.robot +++ /dev/null diff --git a/test/csit/tests/dcaegen2/hv-ves-testcases/hv-ves.robot b/test/csit/tests/dcaegen2/hv-ves-testcases/hv-ves.robot deleted file mode 100644 index 36093f449..000000000 --- a/test/csit/tests/dcaegen2/hv-ves-testcases/hv-ves.robot +++ /dev/null @@ -1,4 +0,0 @@ -*** Test Cases *** -Initial testcase - [Documentation] Testing tests setup script - Log Robot framework execution successful
\ No newline at end of file diff --git a/test/csit/tests/vid/resources/docker-compose.yml b/test/csit/tests/vid/resources/docker-compose.yml index 8f6d4a7ba..93b317001 100644 --- a/test/csit/tests/vid/resources/docker-compose.yml +++ b/test/csit/tests/vid/resources/docker-compose.yml @@ -5,12 +5,14 @@ services: environment: - VID_MYSQL_DBNAME=vid_openecomp_epsdk - VID_MYSQL_PASS=Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U + - ASDC_CLIENT_REST_HOST=localhost + - ASDC_CLIENT_REST_PORT=8443 ports: - "8080:8080" container_name: vid-server links: - vid-mariadb:vid-mariadb-docker-instance - + vid-mariadb: image: mariadb:10 environment: @@ -23,3 +25,11 @@ services: - ${WORKSPACE}/data/clone/vid/lf_config/vid-my.cnf:/etc/mysql/my.cnf - ${WORKSPACE}/data/clone/vid/lf_config/vid-schema.sql:/docker-entrypoint-initdb.d/vid-schema.sql - /var/lib/mysql + + sdc_simulator: + build: + context: simulators + dockerfile: SDC_simulator + ports: + - "8443:8443" + container_name: sdc_simulator
\ No newline at end of file diff --git a/test/csit/tests/vid/resources/simulators/SDC.py b/test/csit/tests/vid/resources/simulators/SDC.py new file mode 100644 index 000000000..e99a0bdce --- /dev/null +++ b/test/csit/tests/vid/resources/simulators/SDC.py @@ -0,0 +1,37 @@ +import ssl +from http.server import BaseHTTPRequestHandler, HTTPServer + +from sys import argv + +DEFAULT_PORT = 8443 + + +class SDCHandler(BaseHTTPRequestHandler): + + def __init__(self, request, client_address, server): + self.response_on_get = self._read_on_get_response() + super().__init__(request, client_address, server) + + def do_GET(self): + self.send_response(200) + self._set_headers() + + self.wfile.write(self.response_on_get.encode("utf-8")) + return + + def _set_headers(self): + self.send_header('Content-Type', 'application/json') + self.end_headers() + + @staticmethod + def _read_on_get_response(): + with open('sdc_get_response.json', 'r') as file: + return file.read() + + +if __name__ == '__main__': + SDCHandler.protocol_version = "HTTP/1.1" + + httpd = HTTPServer(('', DEFAULT_PORT), SDCHandler) + httpd.socket = ssl.wrap_socket(httpd.socket, server_side=True, certfile='cert.pem', keyfile='key.pem') + httpd.serve_forever() diff --git a/test/csit/tests/vid/resources/simulators/SDC_simulator b/test/csit/tests/vid/resources/simulators/SDC_simulator new file mode 100644 index 000000000..ec67e9fec --- /dev/null +++ b/test/csit/tests/vid/resources/simulators/SDC_simulator @@ -0,0 +1,7 @@ +FROM python:3 + +ADD SDC.py / + +EXPOSE 8443 + +CMD [ "python", "./SDC.py" ] diff --git a/test/csit/tests/vid/resources/simulators/cert.pem b/test/csit/tests/vid/resources/simulators/cert.pem new file mode 100644 index 000000000..cea1e37a6 --- /dev/null +++ b/test/csit/tests/vid/resources/simulators/cert.pem @@ -0,0 +1,74 @@ +Bag Attributes + friendlyName: 1 + localKeyID: 54 69 6D 65 20 31 35 33 35 36 31 39 34 30 35 39 30 38 +subject=/C=US/ST=Michigan/L=Southfield/O=ATT Services, Inc./OU=ASDC/CN=mtanjv9sdcf51.aic.cip.att.com +issuer=/C=US/O=Symantec Corporation/OU=Symantec Trust Network/CN=Symantec Class 3 Secure Server CA - G4 +-----BEGIN CERTIFICATE----- +MIIGDzCCBPegAwIBAgIQfZLBdhhGhkOBcXuI5oF0gTANBgkqhkiG9w0BAQsFADB+ +MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAd +BgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxLzAtBgNVBAMTJlN5bWFudGVj +IENsYXNzIDMgU2VjdXJlIFNlcnZlciBDQSAtIEc0MB4XDTE1MTIwOTAwMDAwMFoX +DTE2MTIwODIzNTk1OVowgYkxCzAJBgNVBAYTAlVTMREwDwYDVQQIDAhNaWNoaWdh +bjETMBEGA1UEBwwKU291dGhmaWVsZDEbMBkGA1UECgwSQVRUIFNlcnZpY2VzLCBJ +bmMuMQ0wCwYDVQQLDARBU0RDMSYwJAYDVQQDDB1tdGFuanY5c2RjZjUxLmFpYy5j +aXAuYXR0LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOup99Ff +gk02lwXv535Y1FCCE8vL47BKj96h6to8rXwwN+9W+xiVEIgDXKOWBC7W8iEP2tOd +Smzi3wsZIivaFh2yPGtj1z0a7WuA7wNw1fJF4WGr4VFaxHbMBaPOZHa3D+iIduWP +H/t6ECEzfGRRtTt+mVCpV8Rx+v/q8d0yO114u/WBtbGGlIPDJcrHLRODnjM+mkjq +EwfoR9qqqjbJhjUkUujGM/qVKm3YAjMIZ1ldteRXUew4xI/Foo6u3hqJwbYIJf3r +fzWCt+fIyktDsm/c1w9HcX+8R0alK90bjC2D5auukIfbmhxd4MR9NBAH0SFleQtw +SQLN6GYMVexhUEECAwEAAaOCAnswggJ3MCgGA1UdEQQhMB+CHW10YW5qdjlzZGNm +NTEuYWljLmNpcC5hdHQuY29tMAkGA1UdEwQCMAAwDgYDVR0PAQH/BAQDAgWgMB0G +A1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjBhBgNVHSAEWjBYMFYGBmeBDAEC +AjBMMCMGCCsGAQUFBwIBFhdodHRwczovL2Quc3ltY2IuY29tL2NwczAlBggrBgEF +BQcCAjAZGhdodHRwczovL2Quc3ltY2IuY29tL3JwYTAfBgNVHSMEGDAWgBRfYM9h +kFXfhEMUimAqsvV69EMY7zArBgNVHR8EJDAiMCCgHqAchhpodHRwOi8vc3Muc3lt +Y2IuY29tL3NzLmNybDBXBggrBgEFBQcBAQRLMEkwHwYIKwYBBQUHMAGGE2h0dHA6 +Ly9zcy5zeW1jZC5jb20wJgYIKwYBBQUHMAKGGmh0dHA6Ly9zcy5zeW1jYi5jb20v +c3MuY3J0MIIBBQYKKwYBBAHWeQIEAgSB9gSB8wDxAHYA3esdK3oNT6Ygi4GtgWhw +fi6OnQHVXIiNPRHEzbbsvswAAAFRh4XRnAAABAMARzBFAiBXZqph5qeHUUnY8OkH +jJLo454/8c9IBB7asjEYWYoBPQIhAKAwvP8KfqilgawBkuRV7r41P8Xd3Yi72RQO +1Dvpi8rkAHcApLkJkLQYWBSHuxOizGdwCjw1mAT5G9+443fNDsgN3BAAAAFRh4XR +3AAABAMASDBGAiEAon+cZcRpSsuo1aiCtaN3aAG0EqJb/1jJ4m4Q/qo1nEoCIQCr +KrBNyywa4OTmSVSAsyazbnMr5ldimxNORhhtyGeFLDANBgkqhkiG9w0BAQsFAAOC +AQEAG3/Mq8F0wbCpOOMCq4dZwgLENBjor9b9UljQZ+sgt7Nn00bfGdxY4MKtOTiK +9ks/nV9sW0KyvhsZvLPPgdSCnu0MZogWQsKqQDkIkJoHtFRSaYTT1vLAIoKz/dN+ +SBS71EzFH92lMfiFtAjfTrFady0/6z7lp4VZwbXLWjHw6LQESENc29Xw1jpCVkg8 +iB2n/qCFfyw3HuvP+eW2TLmnHOl0tda1vrYKCXT2n7HepiJM3g9yLjb/w3MuxEmw +dj1DqRemXtOUJW0mQXn1mRBjXEunzHoCr3GaeSU6G3RbIzXr34Hsv4IbggkhRula +gQIYidtDmw0PS1kyaFvlhZkd1g== +-----END CERTIFICATE----- +Bag Attributes + friendlyName: CN=Symantec Class 3 Secure Server CA - G4,OU=Symantec Trust Network,O=Symantec Corporation,C=US +subject=/C=US/O=Symantec Corporation/OU=Symantec Trust Network/CN=Symantec Class 3 Secure Server CA - G4 +issuer=/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=(c) 2006 VeriSign, Inc. - For authorized use only/CN=VeriSign Class 3 Public Primary Certification Authority - G5 +-----BEGIN CERTIFICATE----- +MIIFODCCBCCgAwIBAgIQUT+5dDhwtzRAQY0wkwaZ/zANBgkqhkiG9w0BAQsFADCB +yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL +ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp +U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW +ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5IC0gRzUwHhcNMTMxMDMxMDAwMDAwWhcNMjMxMDMwMjM1OTU5WjB+MQsw +CQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNV +BAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxLzAtBgNVBAMTJlN5bWFudGVjIENs +YXNzIDMgU2VjdXJlIFNlcnZlciBDQSAtIEc0MIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEAstgFyhx0LbUXVjnFSlIJluhL2AzxaJ+aQihiw6UwU35VEYJb +A3oNL+F5BMm0lncZgQGUWfm893qZJ4Itt4PdWid/sgN6nFMl6UgfRk/InSn4vnlW +9vf92Tpo2otLgjNBEsPIPMzWlnqEIRoiBAMnF4scaGGTDw5RgDMdtLXO637QYqzu +s3sBdO9pNevK1T2p7peYyo2qRA4lmUoVlqTObQJUHypqJuIGOmNIrLRM0XWTUP8T +L9ba4cYY9Z/JJV3zADreJk20KQnNDz0jbxZKgRb78oMQw7jW2FUyPfG9D72MUpVK +Fpd6UiFjdS8W+cRmvvW1Cdj/JwDNRHxvSz+w9wIDAQABo4IBYzCCAV8wEgYDVR0T +AQH/BAgwBgEB/wIBADAwBgNVHR8EKTAnMCWgI6Ahhh9odHRwOi8vczEuc3ltY2Iu +Y29tL3BjYTMtZzUuY3JsMA4GA1UdDwEB/wQEAwIBBjAvBggrBgEFBQcBAQQjMCEw +HwYIKwYBBQUHMAGGE2h0dHA6Ly9zMi5zeW1jYi5jb20wawYDVR0gBGQwYjBgBgpg +hkgBhvhFAQc2MFIwJgYIKwYBBQUHAgEWGmh0dHA6Ly93d3cuc3ltYXV0aC5jb20v +Y3BzMCgGCCsGAQUFBwICMBwaGmh0dHA6Ly93d3cuc3ltYXV0aC5jb20vcnBhMCkG +A1UdEQQiMCCkHjAcMRowGAYDVQQDExFTeW1hbnRlY1BLSS0xLTUzNDAdBgNVHQ4E +FgQUX2DPYZBV34RDFIpgKrL1evRDGO8wHwYDVR0jBBgwFoAUf9Nlp8Ld7LvwMAnz +Qzn6Aq8zMTMwDQYJKoZIhvcNAQELBQADggEBAF6UVkndji1l9cE2UbYD49qecxny +H1mrWH5sJgUs+oHXXCMXIiw3k/eG7IXmsKP9H+IyqEVv4dn7ua/ScKAyQmW/hP4W +Ko8/xabWo5N9Q+l0IZE1KPRj6S7t9/Vcf0uatSDpCr3gRRAMFJSaXaXjS5HoJJtG +QGX0InLNmfiIEfXzf+YzguaoxX7+0AjiJVgIcWjmzaLmFN5OUiQt/eV5E1PnXi8t +TRttQBVSK/eHiXgSgW7ZTaoteNTCLD0IX4eRnh8OsN4wUmSGiaqdZpwOdgyA8nTY +Kvi4Os7X1g8RvmurFPW9QaAiY4nxug9vKWNmLT+sjHLF+8fk1A/yO0+MKcc= +-----END CERTIFICATE-----
\ No newline at end of file diff --git a/test/csit/tests/vid/resources/simulators/key.pem b/test/csit/tests/vid/resources/simulators/key.pem new file mode 100644 index 000000000..641d13fa0 --- /dev/null +++ b/test/csit/tests/vid/resources/simulators/key.pem @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDrqffRX4JNNpcF +7+d+WNRQghPLy+OwSo/eoeraPK18MDfvVvsYlRCIA1yjlgQu1vIhD9rTnUps4t8L +GSIr2hYdsjxrY9c9Gu1rgO8DcNXyReFhq+FRWsR2zAWjzmR2tw/oiHbljx/7ehAh +M3xkUbU7fplQqVfEcfr/6vHdMjtdeLv1gbWxhpSDwyXKxy0Tg54zPppI6hMH6Efa +qqo2yYY1JFLoxjP6lSpt2AIzCGdZXbXkV1HsOMSPxaKOrt4aicG2CCX96381grfn +yMpLQ7Jv3NcPR3F/vEdGpSvdG4wtg+WrrpCH25ocXeDEfTQQB9EhZXkLcEkCzehm +DFXsYVBBAgMBAAECggEBAOkwoYCzIktnFh+Q2R9DpKsZW59QXDfoP95LmAlk+0Gk +sOSKzCHx9o6vzO4uFmuG08Z1WtIElU2TXKMttotv3Gx8Hp8hBy12xLGYvmlIMNvv +2+n62xTWXQs0LOx+4Rg7Yml1Bzl1227KxMUlnhPiahO53NldB/Th2D197OA0wVtl +o3d753CNs+vVk1Z8RTUWrW1ZNHdfQNa1zrNo3Q5/evnlt+mAhFbUIKB3FgMk4N4/ +EjnTH6d+MEUD1sVCNruxqv8PZzRzzJEU/8gzy0WAPFAGOOC7hgU3n7dIEEkjvoIw +HlZD5c6I+3AzYq08CtUwWI09pNVlznqoOY6d548YusUCgYEA9cHOUXiafXFupqpT +HwE18Yk5sqISpPwS8yip4NPPUv+W9qvCpdkFvV3HRMlICWJGoerRsALEQYY5fsvY +7lk1avunprbIa9XLUrvb4ydJYynFhKjXkfTAmyCmbvH8t10BfDNuXT098+4M4HpG +YW2Arl9Db7RoOBwQtPFX2RmYOM8CgYEA9Xx4TbsbT1C6c49aDZmuFeBXDEaMTDYS +CC50MqMQpfoqS5QVyjl7JzP/dIz9CcUExFz7MOmYCp8yocXnLwxGDrZjZMkwEz15 +8WUGj4WMpSpUSRmGEVnoVE5bRazq37vhbOwh8gcKhF1ifVgwm+Rjs+4g6DwmSR8l +4CVK6lWrCe8CgYEA5QR7kR6z0Wywse4N0dnd/D1mIFq6xzcFLcZaMOMR1IXMmAjO +NqF8oNDQjwCH+f60VdWvHLgnTeyYjdnHSa6mghEMVecF9L/iXzIjopaM5DUcFRkG +8sRD7QxLLR6i4/lvFeAT3B3jKvtO0q4AAnD6NwUdoe5cJNW6l/REalNYsK8CgYBw +n7lF2CiwW9YevE7RXIc8rB7jl943/LqLHFzc+mjh7QLIh9jzXSm+E6IIY8KXX9dP +C2WGzDSf8ue0xmnI8PWXPGAfVhoDSboPYI0A/YFIKUJgAyC6ByiKvSQstCdRnA3Q +/giY1Fgj4AAWh4ZNjxua6g4Y3bem5m5nBlT3a3Q76wKBgQDSMFNfVNWautPQvcYB +iu9oQhbXVkjh+ToFWq6pW4VaWhEf/6hqvihc6PcB7FXJ1v1/ybko6cIgVmFUt43s +it1q5aLy3v6GTS/UnDZI3r5oECEuLeUqnHm3qilbatUtwvxghgdwGK+YG0yTfS3y +GqdNDH5YdJJMyiLdQlLIzJb/XQ== +-----END PRIVATE KEY----- diff --git a/test/csit/tests/vid/resources/simulators/sdc_get_response.json b/test/csit/tests/vid/resources/simulators/sdc_get_response.json new file mode 100644 index 000000000..9f7e118c5 --- /dev/null +++ b/test/csit/tests/vid/resources/simulators/sdc_get_response.json @@ -0,0 +1,301 @@ +{ + "service": { + "uuid": "2763bc78-8523-482f-895b-0c0db7364224", + "invariantUuid": "abb2dc66-b211-49d2-ab2f-8774694136fa", + "name": "Bare2", + "version": "1.0", + "toscaModelURL": null, + "category": "Network L1-3", + "serviceType": "", + "serviceRole": "", + "description": "Bare2", + "serviceEcompNaming": "true", + "instantiationType": "ClientConfig", + "inputs": {} + }, + "vnfs": { + "95e654c0-676b-4386-8a69 0": { + "uuid": "d6395498-7ecb-4eba-bf84-4380f6e9cdcf", + "invariantUuid": "16262b97-bcb1-4033-8f9f-a3016eaf1ec3", + "description": "vendor software product", + "name": "95e654c0-676b-4386-8a69", + "version": "1.0", + "customizationUuid": "34a3b91d-8d73-4412-bf4e-c6456741007f", + "inputs": {}, + "commands": {}, + "properties": { + "vf_module_id": "vTrafficPNG", + "repo_url_blob": "https://nexus.onap.org/content/sites/raw", + "unprotected_private_subnet_id": "zdfw1fwl01_unprotected_sub", + "public_net_id": "PUT THE PUBLIC NETWORK ID HERE", + "vfw_private_ip_0": "192.168.10.100", + "onap_private_subnet_id": "PUT THE ONAP PRIVATE NETWORK NAME HERE", + "onap_private_net_cidr": "10.0.0.0/16", + "image_name": "PUT THE VM IMAGE NAME HERE (UBUNTU 1404)", + "flavor_name": "PUT THE VM FLAVOR NAME HERE (m1.medium suggested)", + "vnf_id": "vPNG_Firewall_demo_app", + "vpg_name_0": "zdfw1fwl01pgn01", + "vpg_private_ip_1": "10.0.100.2", + "vsn_private_ip_0": "192.168.20.250", + "vpg_private_ip_0": "192.168.10.200", + "protected_private_net_cidr": "192.168.20.0/24", + "unprotected_private_net_cidr": "192.168.10.0/24", + "nf_naming": "{ecomp_generated_naming=true}", + "multi_stage_design": "false", + "onap_private_net_id": "PUT THE ONAP PRIVATE NETWORK NAME HERE", + "unprotected_private_net_id": "zdfw1fwl01_unprotected", + "availability_zone_max_count": "1", + "demo_artifacts_version": "1.2.1", + "pub_key": "PUT YOUR PUBLIC KEY HERE", + "key_name": "vfw_key", + "repo_url_artifacts": "https://nexus.onap.org/content/repositories/releases", + "install_script_version": "1.2.1", + "cloud_env": "PUT openstack OR rackspace HERE" + }, + "type": "VF", + "modelCustomizationName": "95e654c0-676b-4386-8a69 0", + "vfModules": { + "95e654c0676b43868a690..95e654c0676b43868a69..base_vpkg..module-0": { + "uuid": "12082e9d-a854-48cc-8243-e24b26199856", + "invariantUuid": "239419df-3375-49fe-9dd4-73b3393858ba", + "customizationUuid": "32c824f7-5910-4d7a-88ad-188d4905675d", + "description": null, + "name": "95e654c0676b43868a69..base_vpkg..module-0", + "version": "1", + "volumeGroupAllowed": false, + "commands": {}, + "modelCustomizationName": "95e654c0676b43868a69..base_vpkg..module-0", + "properties": { + "min_vf_module_instances": { + "name": "min_vf_module_instances", + "value": 1, + "entrySchema": null, + "required": true, + "constraints": [], + "description": "The minimum instances of this VF-Module", + "default": null, + "type": "integer" + }, + "vf_module_label": { + "name": "vf_module_label", + "value": "base_vpkg", + "entrySchema": null, + "required": true, + "constraints": [], + "description": "Alternate textual key used to reference this VF-Module model. Must be unique within the VNF model\n", + "default": null, + "type": "string" + }, + "max_vf_module_instances": { + "name": "max_vf_module_instances", + "value": 1, + "entrySchema": null, + "required": false, + "constraints": [], + "description": "The maximum instances of this VF-Module", + "default": null, + "type": "integer" + }, + "vfc_list": { + "name": "vfc_list", + "value": null, + "entrySchema": { + "description": "<vfc_id>:<count>", + "type": "string" + }, + "required": false, + "constraints": [], + "description": "Identifies the set of VM types and their count included in the VF-Module\n", + "default": null, + "type": "map" + }, + "vf_module_type": { + "name": "vf_module_type", + "value": "Base", + "entrySchema": null, + "required": true, + "constraints": [], + "description": "", + "default": null, + "type": "string" + }, + "vf_module_description": { + "name": "vf_module_description", + "value": null, + "entrySchema": null, + "required": true, + "constraints": [], + "description": "Description of the VF-modules contents and purpose (e.g. \"Front-End\" or \"Database Cluster\")\n", + "default": null, + "type": "string" + }, + "initial_count": { + "name": "initial_count", + "value": 1, + "entrySchema": null, + "required": false, + "constraints": [], + "description": "The initial count of instances of the VF-Module. The value must be in the range between min_vfmodule_instances and max_vfmodule_instances. If no value provided the initial count is the min_vfmodule_instances.\n", + "default": null, + "type": "integer" + }, + "volume_group": { + "name": "volume_group", + "value": false, + "entrySchema": null, + "required": true, + "constraints": [], + "description": "\"true\" indicates that this VF Module model requires attachment to a Volume Group. VID operator must select the Volume Group instance to attach to a VF-Module at deployment time.\n", + "default": false, + "type": "boolean" + }, + "availability_zone_count": { + "name": "availability_zone_count", + "value": null, + "entrySchema": null, + "required": false, + "constraints": [], + "description": "Quantity of Availability Zones needed for this VF-Module (source: Extracted from VF-Module HEAT template)\n", + "default": null, + "type": "integer" + }, + "isBase": { + "name": "isBase", + "value": false, + "entrySchema": null, + "required": true, + "constraints": [], + "description": "Whether this module should be deployed before other modules", + "default": false, + "type": "boolean" + } + } + } + }, + "volumeGroups": {} + } + }, + "networks": {}, + "configurations": {}, + "serviceProxies": {}, + "vfModules": { + "95e654c0676b43868a690..95e654c0676b43868a69..base_vpkg..module-0": { + "uuid": "12082e9d-a854-48cc-8243-e24b26199856", + "invariantUuid": "239419df-3375-49fe-9dd4-73b3393858ba", + "customizationUuid": "32c824f7-5910-4d7a-88ad-188d4905675d", + "description": null, + "name": "95e654c0676b43868a69..base_vpkg..module-0", + "version": "1", + "volumeGroupAllowed": false, + "commands": {}, + "modelCustomizationName": "95e654c0676b43868a69..base_vpkg..module-0", + "properties": { + "min_vf_module_instances": { + "name": "min_vf_module_instances", + "value": 1, + "entrySchema": null, + "required": true, + "constraints": [], + "description": "The minimum instances of this VF-Module", + "default": null, + "type": "integer" + }, + "vf_module_label": { + "name": "vf_module_label", + "value": "base_vpkg", + "entrySchema": null, + "required": true, + "constraints": [], + "description": "Alternate textual key used to reference this VF-Module model. Must be unique within the VNF model\n", + "default": null, + "type": "string" + }, + "max_vf_module_instances": { + "name": "max_vf_module_instances", + "value": 1, + "entrySchema": null, + "required": false, + "constraints": [], + "description": "The maximum instances of this VF-Module", + "default": null, + "type": "integer" + }, + "vfc_list": { + "name": "vfc_list", + "value": null, + "entrySchema": { + "description": "<vfc_id>:<count>", + "type": "string" + }, + "required": false, + "constraints": [], + "description": "Identifies the set of VM types and their count included in the VF-Module\n", + "default": null, + "type": "map" + }, + "vf_module_type": { + "name": "vf_module_type", + "value": "Base", + "entrySchema": null, + "required": true, + "constraints": [], + "description": "", + "default": null, + "type": "string" + }, + "vf_module_description": { + "name": "vf_module_description", + "value": null, + "entrySchema": null, + "required": true, + "constraints": [], + "description": "Description of the VF-modules contents and purpose (e.g. \"Front-End\" or \"Database Cluster\")\n", + "default": null, + "type": "string" + }, + "initial_count": { + "name": "initial_count", + "value": 1, + "entrySchema": null, + "required": false, + "constraints": [], + "description": "The initial count of instances of the VF-Module. The value must be in the range between min_vfmodule_instances and max_vfmodule_instances. If no value provided the initial count is the min_vfmodule_instances.\n", + "default": null, + "type": "integer" + }, + "volume_group": { + "name": "volume_group", + "value": false, + "entrySchema": null, + "required": true, + "constraints": [], + "description": "\"true\" indicates that this VF Module model requires attachment to a Volume Group. VID operator must select the Volume Group instance to attach to a VF-Module at deployment time.\n", + "default": false, + "type": "boolean" + }, + "availability_zone_count": { + "name": "availability_zone_count", + "value": null, + "entrySchema": null, + "required": false, + "constraints": [], + "description": "Quantity of Availability Zones needed for this VF-Module (source: Extracted from VF-Module HEAT template)\n", + "default": null, + "type": "integer" + }, + "isBase": { + "name": "isBase", + "value": false, + "entrySchema": null, + "required": true, + "constraints": [], + "description": "Whether this module should be deployed before other modules", + "default": false, + "type": "boolean" + } + } + } + }, + "volumeGroups": {}, + "pnfs": {} +}
\ No newline at end of file |