aboutsummaryrefslogtreecommitdiffstats
path: root/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/libraries
diff options
context:
space:
mode:
authorGary Wu <gary.i.wu@huawei.com>2018-09-27 10:29:30 -0700
committerGary Wu <gary.i.wu@huawei.com>2018-09-27 12:50:28 -0700
commit2d3d8dcf6ef1bd2a161c69d561c629c5ec3f59c4 (patch)
tree652fd47a183c291e96c6721f550a5f63464f6e66 /test/csit/tests/dcaegen2-collectors-hv-ves/testcases/libraries
parente161173e279a73134dda4c2f429605d6c9ee1fe7 (diff)
Move CSIT to integration/csit repo
To facilite branching of CSIT tests, all CSIT test code and scripts are relocated to the integration/csit repo. Change-Id: I6777cd414e43dbf2bfa6215f7e50849e1a6a2e59 Issue-ID: INT-671 Signed-off-by: Gary Wu <gary.i.wu@huawei.com>
Diffstat (limited to 'test/csit/tests/dcaegen2-collectors-hv-ves/testcases/libraries')
-rw-r--r--test/csit/tests/dcaegen2-collectors-hv-ves/testcases/libraries/ConsulLibrary.py16
-rw-r--r--test/csit/tests/dcaegen2-collectors-hv-ves/testcases/libraries/DcaeAppSimulatorLibrary.py46
-rw-r--r--test/csit/tests/dcaegen2-collectors-hv-ves/testcases/libraries/HttpRequests.py19
-rw-r--r--test/csit/tests/dcaegen2-collectors-hv-ves/testcases/libraries/VesHvContainersUtilsLibrary.py69
-rw-r--r--test/csit/tests/dcaegen2-collectors-hv-ves/testcases/libraries/XnfSimulatorLibrary.py166
5 files changed, 0 insertions, 316 deletions
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
deleted file mode 100644
index 52d7e0eab..000000000
--- a/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/libraries/ConsulLibrary.py
+++ /dev/null
@@ -1,16 +0,0 @@
-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
deleted file mode 100644
index 9edad2cc2..000000000
--- a/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/libraries/DcaeAppSimulatorLibrary.py
+++ /dev/null
@@ -1,46 +0,0 @@
-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=10)
- 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=10)
- 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=10)
- 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=10)
- 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=10)
- 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
deleted file mode 100644
index c0dcd81d4..000000000
--- a/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/libraries/HttpRequests.py
+++ /dev/null
@@ -1,19 +0,0 @@
-import requests
-from robot.api import logger
-
-valid_status_codes = [
- requests.codes.ok,
- requests.codes.accepted
-]
-
-
-def session_without_env():
- session = requests.Session()
- session.trust_env = False
- return session
-
-
-def checkStatusCode(status_code, server_name):
- if status_code not in valid_status_codes:
- logger.error("Response status code from " + server_name + ": " + str(status_code))
- raise (Exception(server_name + " returned status code " + status_code))
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
deleted file mode 100644
index 989a796ce..000000000
--- a/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/libraries/VesHvContainersUtilsLibrary.py
+++ /dev/null
@@ -1,69 +0,0 @@
-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
deleted file mode 100644
index f6a978754..000000000
--- a/test/csit/tests/dcaegen2-collectors-hv-ves/testcases/libraries/XnfSimulatorLibrary.py
+++ /dev/null
@@ -1,166 +0,0 @@
-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_PREFIX") + SIMULATOR_IMAGE_NAME + ":latest"
-WORKSPACE_ENV = os.getenv("WORKSPACE")
-certificates_dir_path = WORKSPACE_ENV + "/test/csit/plans/dcaegen2-collectors-hv-ves/testsuites/ssl/"
-collector_certs_lookup_dir = "/etc/ves-hv/"
-ONE_SECOND_IN_NANOS = 10 ** 9
-
-
-class XnfSimulatorLibrary:
-
- def start_xnf_simulators(self, list_of_ports,
- should_use_valid_certs=True,
- should_disable_ssl=False,
- should_connect_to_unencrypted_hv_ves=False):
- logger.info("Creating " + str(len(list_of_ports)) + " xNF Simulator containers")
- dockerClient = docker.from_env()
-
- self.pullImageIfAbsent(dockerClient)
- logger.info("Using image: " + SIMULATOR_IMAGE_FULL_NAME)
-
- simulators_addresses = self.create_containers(dockerClient,
- list_of_ports,
- should_use_valid_certs,
- should_disable_ssl,
- should_connect_to_unencrypted_hv_ves)
-
- 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_containers(self,
- dockerClient,
- list_of_ports,
- should_use_valid_certs,
- should_disable_ssl,
- should_connect_to_unencrypted_hv_ves):
- simulators_addresses = []
- for port in list_of_ports:
- xnf = XnfSimulator(port, should_use_valid_certs, should_disable_ssl, should_connect_to_unencrypted_hv_ves)
- container = self.run_simulator(dockerClient, xnf)
- logger.info("Started container: " + container.name + " " + container.id)
- simulators_addresses.append(container.name + ":" + xnf.port)
- return simulators_addresses
-
- def run_simulator(self, dockerClient, xnf):
- xNF_startup_command = xnf.get_startup_command()
- xNF_healthcheck_command = xnf.get_healthcheck_command()
- port = xnf.port
- logger.info("Startup command: " + str(xNF_startup_command))
- logger.info("Healthcheck command: " + str(xNF_healthcheck_command))
- return dockerClient.containers.run(SIMULATOR_IMAGE_FULL_NAME,
- command=xNF_startup_command,
- healthcheck=xNF_healthcheck_command,
- detach=True,
- network="ves-hv-default",
- ports={port + "/tcp": port},
- volumes=self.container_volumes(),
- name=xnf.container_name_prefix + port)
-
- def container_volumes(self):
- return {certificates_dir_path: {"bind": collector_certs_lookup_dir, "mode": 'rw'}}
-
- 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, suite_name):
- dockerClient = docker.from_env()
- for container in self.get_simulators_list(dockerClient):
- logger.info("Stopping and removing container: " + container.id)
- log_filename = WORKSPACE_ENV + "/archives/containers_logs/" + \
- suite_name.split(".")[-1] + "_" + container.name + ".log"
- file = open(log_filename, "w+")
- file.write(container.logs())
- file.close()
- 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 XnfSimulator:
- container_name_prefix = "ves-hv-collector-xnf-simulator"
-
- def __init__(self,
- port,
- should_use_valid_certs,
- should_disable_ssl,
- should_connect_to_unencrypted_hv_ves):
- self.port = port
- cert_name_prefix = "" if should_use_valid_certs else "untrusted"
- certificates_path_with_file_prefix = collector_certs_lookup_dir + cert_name_prefix
- self.key_store_path = certificates_path_with_file_prefix + "client.p12"
- self.trust_store_path = certificates_path_with_file_prefix + "trust.p12"
- self.sec_store_passwd = "onaponap"
- self.disable_ssl = should_disable_ssl
- self.hv_collector_host = "unencrypted-ves-hv-collector" \
- if should_connect_to_unencrypted_hv_ves else "ves-hv-collector"
-
- def get_startup_command(self):
- startup_command = ["--listen-port", self.port,
- "--ves-host", self.hv_collector_host,
- "--ves-port", "6061",
- "--key-store", self.key_store_path,
- "--trust-store", self.trust_store_path,
- "--key-store-password", self.sec_store_passwd,
- "--trust-store-password", self.sec_store_passwd
- ]
- if self.disable_ssl:
- startup_command.append("--ssl-disable")
- return startup_command
-
- def get_healthcheck_command(self):
- return {
- "interval": 5 * ONE_SECOND_IN_NANOS,
- "timeout": 3 * ONE_SECOND_IN_NANOS,
- "retries": 1,
- "test": ["CMD", "curl", "--request", "GET",
- "--fail", "--silent", "--show-error",
- "localhost:" + self.port + "/healthcheck"]
- }
-
-
-class ContainerException(Exception):
- def __init__(self, message):
- super(ContainerException, self).__init__(message)