diff options
Diffstat (limited to 'docker/tests')
-rw-r--r-- | docker/tests/test_decorators.py | 36 | ||||
-rw-r--r-- | docker/tests/test_discovery.py | 69 | ||||
-rw-r--r-- | docker/tests/test_tasks.py | 277 | ||||
-rw-r--r-- | docker/tests/test_utils.py | 32 |
4 files changed, 0 insertions, 414 deletions
diff --git a/docker/tests/test_decorators.py b/docker/tests/test_decorators.py deleted file mode 100644 index 403e39f..0000000 --- a/docker/tests/test_decorators.py +++ /dev/null @@ -1,36 +0,0 @@ -# ============LICENSE_START======================================================= -# org.onap.dcae -# ================================================================================ -# Copyright (c) 2017-2018 AT&T Intellectual Property. All rights reserved. -# ================================================================================ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ============LICENSE_END========================================================= -# -# ECOMP is a trademark and service mark of AT&T Intellectual Property. - -from dockerplugin import decorators as dec - - -def test_wrapper_merge_inputs(): - properties = { "app_config": {"nested": { "a": 123, "b": 456 }, "foo": "duh"}, - "image": "some-docker-image" } - kwargs = { "app_config": {"nested": {"a": 789, "c": "zyx"}} } - - def task_func(**inputs): - return inputs - - expected = { "app_config": {"nested": { "a": 789, "b": 456, "c": "zyx" }, - "foo": "duh"}, "image": "some-docker-image" } - - assert expected == dec._wrapper_merge_inputs(task_func, properties, **kwargs) - diff --git a/docker/tests/test_discovery.py b/docker/tests/test_discovery.py deleted file mode 100644 index f3aed66..0000000 --- a/docker/tests/test_discovery.py +++ /dev/null @@ -1,69 +0,0 @@ -# ============LICENSE_START======================================================= -# org.onap.dcae -# ================================================================================ -# Copyright (c) 2017-2018 AT&T Intellectual Property. All rights reserved. -# ================================================================================ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ============LICENSE_END========================================================= -# -# ECOMP is a trademark and service mark of AT&T Intellectual Property. - -import pytest -from functools import partial -import requests -from dockerplugin import discovery as dis - - -def test_wrap_consul_call(): - def foo(a, b, c="default"): - return " ".join([a, b, c]) - - wrapped_foo = partial(dis._wrap_consul_call, foo) - assert wrapped_foo("hello", "world") == "hello world default" - assert wrapped_foo("hello", "world", c="new masters") == "hello world new masters" - - def foo_connection_error(a, b, c): - raise requests.exceptions.ConnectionError("simulate failed connection") - - wrapped_foo = partial(dis._wrap_consul_call, foo_connection_error) - with pytest.raises(dis.DiscoveryConnectionError): - wrapped_foo("a", "b", "c") - - -def test_generate_service_component_name(): - component_type = "some-component-type" - name = dis.generate_service_component_name(component_type) - assert name.split("_")[1] == component_type - - -def test_find_matching_services(): - services = { "component_dockerhost_1": ["foo", "bar"], - "platform_dockerhost": [], "component_dockerhost_2": ["baz"] } - assert sorted(["component_dockerhost_1", "component_dockerhost_2"]) \ - == sorted(dis._find_matching_services(services, "component_dockerhost", [])) - - assert ["component_dockerhost_1"] == dis._find_matching_services(services, \ - "component_dockerhost", ["foo", "bar"]) - - assert ["component_dockerhost_1"] == dis._find_matching_services(services, \ - "component_dockerhost", ["foo"]) - - assert [] == dis._find_matching_services(services, "unknown", ["foo"]) - - -def test_is_healthy_pure(): - def fake_is_healthy(name): - return 0, [{ "Checks": [{"Status": "passing"}] }] - - assert True == dis._is_healthy_pure(fake_is_healthy, "some-component") - diff --git a/docker/tests/test_tasks.py b/docker/tests/test_tasks.py deleted file mode 100644 index c58d02c..0000000 --- a/docker/tests/test_tasks.py +++ /dev/null @@ -1,277 +0,0 @@ -# ============LICENSE_START======================================================= -# org.onap.dcae -# ================================================================================ -# Copyright (c) 2017-2018 AT&T Intellectual Property. All rights reserved. -# ================================================================================ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ============LICENSE_END========================================================= -# -# ECOMP is a trademark and service mark of AT&T Intellectual Property. - -import copy -import pytest -from cloudify.exceptions import NonRecoverableError, RecoverableError -import dockerplugin -from dockerplugin import tasks -from dockerplugin.exceptions import DockerPluginDeploymentError - - -def test_generate_component_name(): - kwargs = { "service_component_type": "doodle", - "service_component_name_override": None } - - assert "doodle" in tasks._generate_component_name(**kwargs)["name"] - - kwargs["service_component_name_override"] = "yankee" - - assert "yankee" == tasks._generate_component_name(**kwargs)["name"] - - -def test_parse_streams(monkeypatch): - # Good case for streams_publishes - test_input = { "streams_publishes": [{"name": "topic00", "type": "message_router"}, - {"name": "feed00", "type": "data_router"}], - "streams_subscribes": {} } - - expected = {'feed00': {'type': 'data_router', 'name': 'feed00'}, - 'streams_publishes': [{'type': 'message_router', 'name': 'topic00'}, - {'type': 'data_router', 'name': 'feed00'}], - 'streams_subscribes': {}, - 'topic00': {'type': 'message_router', 'name': 'topic00'} - } - - assert expected == tasks._parse_streams(**test_input) - - # Good case for streams_subscribes (password provided) - test_input = { "streams_publishes": {}, - "streams_subscribes": [{"name": "topic01", "type": "message_router"}, - {"name": "feed01", "type": "data_router", "username": "hero", - "password": "123456"}] } - - expected = {'feed01': {'type': 'data_router', 'name': 'feed01', - 'username': 'hero', 'password': '123456'}, - 'streams_publishes': {}, - 'streams_subscribes': [{'type': 'message_router', 'name': 'topic01'}, - {'type': 'data_router', 'name': 'feed01', 'username': 'hero', - 'password': '123456'}], - 'topic01': {'type': 'message_router', 'name': 'topic01'}} - - assert expected == tasks._parse_streams(**test_input) - - # Good case for streams_subscribes (password generated) - test_input = { "streams_publishes": {}, - "streams_subscribes": [{"name": "topic01", "type": "message_router"}, - {"name": "feed01", "type": "data_router", "username": None, - "password": None}] } - - def not_so_random(n): - return "nosurprise" - - monkeypatch.setattr(dockerplugin.utils, "random_string", not_so_random) - - expected = {'feed01': {'type': 'data_router', 'name': 'feed01', - 'username': 'nosurprise', 'password': 'nosurprise'}, - 'streams_publishes': {}, - 'streams_subscribes': [{'type': 'message_router', 'name': 'topic01'}, - {'type': 'data_router', 'name': 'feed01', 'username': None, - 'password': None}], - 'topic01': {'type': 'message_router', 'name': 'topic01'}} - - assert expected == tasks._parse_streams(**test_input) - - -def test_setup_for_discovery(monkeypatch): - test_input = { "name": "some-name", - "application_config": { "one": "a", "two": "b" } } - - def fake_push_config(conn, name, application_config): - return - - monkeypatch.setattr(dockerplugin.discovery, "push_service_component_config", - fake_push_config) - - assert test_input == tasks._setup_for_discovery(**test_input) - - def fake_push_config_connection_error(conn, name, application_config): - raise dockerplugin.discovery.DiscoveryConnectionError("Boom") - - monkeypatch.setattr(dockerplugin.discovery, "push_service_component_config", - fake_push_config_connection_error) - - with pytest.raises(RecoverableError): - tasks._setup_for_discovery(**test_input) - - -def test_setup_for_discovery_streams(monkeypatch): - test_input = {'feed01': {'type': 'data_router', 'name': 'feed01', - 'username': 'hero', 'password': '123456', 'location': 'Bedminster'}, - 'streams_publishes': {}, - 'streams_subscribes': [{'type': 'message_router', 'name': 'topic01'}, - {'type': 'data_router', 'name': 'feed01', 'username': 'hero', - 'password': '123456', 'location': 'Bedminster'}], - 'topic01': {'type': 'message_router', 'name': 'topic01'}} - test_input["name"] = "some-foo-service-component" - - # Good case - def fake_add_to_entry(conn, key, add_name, add_value): - """ - This fake method will check all the pieces that are used to make store - details in Consul - """ - if key != test_input["name"] + ":dmaap": - return None - if add_name != "feed01": - return None - if add_value != {"location": "Bedminster", "delivery_url": None, - "username": "hero", "password": "123456", "subscriber_id": None}: - return None - - return "SUCCESS!" - - monkeypatch.setattr(dockerplugin.discovery, "add_to_entry", - fake_add_to_entry) - - assert tasks._setup_for_discovery_streams(**test_input) == test_input - - # Good case - no data router subscribers - test_input = {"streams_publishes": [{"name": "topic00", "type": "message_router"}], - 'streams_subscribes': [{'type': 'message_router', 'name': 'topic01'}]} - test_input["name"] = "some-foo-service-component" - - assert tasks._setup_for_discovery_streams(**test_input) == test_input - - # Bad case - something happened from the Consul call - test_input = {'feed01': {'type': 'data_router', 'name': 'feed01', - 'username': 'hero', 'password': '123456', 'location': 'Bedminster'}, - 'streams_publishes': {}, - 'streams_subscribes': [{'type': 'message_router', 'name': 'topic01'}, - {'type': 'data_router', 'name': 'feed01', 'username': 'hero', - 'password': '123456', 'location': 'Bedminster'}], - 'topic01': {'type': 'message_router', 'name': 'topic01'}} - test_input["name"] = "some-foo-service-component" - - def barf(conn, key, add_name, add_value): - raise RuntimeError("Barf") - - monkeypatch.setattr(dockerplugin.discovery, "add_to_entry", - barf) - - with pytest.raises(NonRecoverableError): - tasks._setup_for_discovery_streams(**test_input) - - -def test_lookup_service(monkeypatch): - def fake_lookup(conn, scn): - return [{"ServiceAddress": "192.168.1.1", "ServicePort": "80"}] - - monkeypatch.setattr(dockerplugin.discovery, "lookup_service", - fake_lookup) - - assert "192.168.1.1" == tasks._lookup_service("some-component") - assert "192.168.1.1:80" == tasks._lookup_service("some-component", - with_port=True) - - -def test_verify_container(monkeypatch): - def fake_is_healthy_success(ch, scn): - return True - - monkeypatch.setattr(dockerplugin.discovery, "is_healthy", - fake_is_healthy_success) - - assert tasks._verify_container("some-name", 3) - - def fake_is_healthy_never_good(ch, scn): - return False - - monkeypatch.setattr(dockerplugin.discovery, "is_healthy", - fake_is_healthy_never_good) - - with pytest.raises(DockerPluginDeploymentError): - tasks._verify_container("some-name", 2) - - -def test_update_delivery_url(monkeypatch): - test_input = {'feed01': {'type': 'data_router', 'name': 'feed01', - 'username': 'hero', 'password': '123456', 'location': 'Bedminster', - 'route': 'some-path'}, - 'streams_publishes': {}, - 'streams_subscribes': [{'type': 'message_router', 'name': 'topic01'}, - {'type': 'data_router', 'name': 'feed01', 'username': 'hero', - 'password': '123456', 'location': 'Bedminster', - 'route': 'some-path'}], - 'topic01': {'type': 'message_router', 'name': 'topic01'}} - test_input["service_component_name"] = "some-foo-service-component" - - def fake_lookup_service(name, with_port=False): - if with_port: - return "10.100.1.100:8080" - else: - return - - monkeypatch.setattr(dockerplugin.tasks, "_lookup_service", - fake_lookup_service) - - expected = copy.deepcopy(test_input) - expected["feed01"]["delivery_url"] = "http://10.100.1.100:8080/some-path" - - assert tasks._update_delivery_url(**test_input) == expected - - -def test_enhance_docker_params(): - # Good - Test empty docker config - - test_kwargs = { "docker_config": {}, "service_id": None } - actual = tasks._enhance_docker_params(**test_kwargs) - - assert actual == {'envs': {"SERVICE_TAGS": ""}, 'docker_config': {}, "service_id": None } - - # Good - Test just docker config ports and volumes - - test_kwargs = { "docker_config": { "ports": ["1:1", "2:2"], - "volumes": [{"container": "somewhere", "host": "somewhere else"}] }, - "service_id": None } - actual = tasks._enhance_docker_params(**test_kwargs) - - assert actual == {'envs': {"SERVICE_TAGS": ""}, 'docker_config': {'ports': ['1:1', '2:2'], - 'volumes': [{'host': 'somewhere else', 'container': 'somewhere'}]}, - 'ports': ['1:1', '2:2'], 'volumes': [{'host': 'somewhere else', - 'container': 'somewhere'}], "service_id": None} - - # Good - Test just docker config ports and volumes with overrrides - - test_kwargs = { "docker_config": { "ports": ["1:1", "2:2"], - "volumes": [{"container": "somewhere", "host": "somewhere else"}] }, - "ports": ["3:3", "4:4"], "volumes": [{"container": "nowhere", "host": - "nowhere else"}], - "service_id": None } - actual = tasks._enhance_docker_params(**test_kwargs) - - assert actual == {'envs': {"SERVICE_TAGS": ""}, 'docker_config': {'ports': ['1:1', '2:2'], - 'volumes': [{'host': 'somewhere else', 'container': 'somewhere'}]}, - 'ports': ['1:1', '2:2', '3:3', '4:4'], 'volumes': [{'host': 'somewhere else', - 'container': 'somewhere'}, {'host': 'nowhere else', 'container': - 'nowhere'}], "service_id": None} - - # Good - - test_kwargs = { "docker_config": {}, "service_id": "zed", - "deployment_id": "abc" } - actual = tasks._enhance_docker_params(**test_kwargs) - - assert actual["envs"] == {"SERVICE_TAGS": "abc,zed"} - - -def test_notify_container(): - test_input = { "docker_config": { "trigger_type": "unknown" } } - assert test_input == tasks._notify_container(**test_input) diff --git a/docker/tests/test_utils.py b/docker/tests/test_utils.py deleted file mode 100644 index 4578dae..0000000 --- a/docker/tests/test_utils.py +++ /dev/null @@ -1,32 +0,0 @@ -# ============LICENSE_START======================================================= -# org.onap.dcae -# ================================================================================ -# Copyright (c) 2017-2018 AT&T Intellectual Property. All rights reserved. -# ================================================================================ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ============LICENSE_END========================================================= -# -# ECOMP is a trademark and service mark of AT&T Intellectual Property. - -from dockerplugin import utils - - -def test_random_string(): - target_length = 10 - assert len(utils.random_string(target_length)) == target_length - - -def test_update_dict(): - d = { "a": 1, "b": 2 } - u = { "a": 2, "b": 3 } - assert utils.update_dict(d, u) == u |