diff options
Diffstat (limited to 'dcae-policy/tests/test_discovery.py')
-rw-r--r-- | dcae-policy/tests/test_discovery.py | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/dcae-policy/tests/test_discovery.py b/dcae-policy/tests/test_discovery.py new file mode 100644 index 0000000..893b7ce --- /dev/null +++ b/dcae-policy/tests/test_discovery.py @@ -0,0 +1,127 @@ +# ================================================================================ +# Copyright (c) 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. + +"""unit tests for discovery in dcaepolicyplugin""" + +import base64 +import json + +import pytest +from cloudify.state import current_ctx + +from dcaepolicyplugin import discovery, tasks +from tests.log_ctx import CtxLogger +from tests.mock_cloudify_ctx import MockCloudifyContextFull +from tests.mock_setup import (MONKEYED_POLICY_ID, POLICY_ID, MonkeyedNode, + MonkeyedResponse) + +POLICY_HANDLER_FROM_KV = "http:policy_handler_from_kv:25577" + + +def monkeyed_discovery_get_failure(full_path): + """monkeypatch for the GET to consul""" + return MonkeyedResponse(full_path) + + +def test_discovery_failure(monkeypatch): + """test finding policy-handler in consul""" + monkeypatch.setattr('requests.get', monkeyed_discovery_get_failure) + + node_policy = MonkeyedNode( + 'test_dcae_policy_node_id', + 'test_dcae_policy_node_name', + tasks.DCAE_POLICY_TYPE, + {POLICY_ID: MONKEYED_POLICY_ID} + ) + try: + current_ctx.set(node_policy.ctx) + tasks.PolicyHandler._lazy_init() + assert tasks.PolicyHandler.DEFAULT_URL == tasks.PolicyHandler._url + + finally: + tasks.PolicyHandler._url = None + MockCloudifyContextFull.clear() + current_ctx.clear() + + +def monkeyed_discovery_get_kv(full_path): + """monkeypatch for the GET to consul""" + if full_path.startswith(discovery.CONSUL_SERVICE_URL.format("")): + return MonkeyedResponse(full_path) + + if full_path.startswith(discovery.CONSUL_KV_MASK.format("")): + value = base64.b64encode(json.dumps( + {tasks.DCAE_POLICY_PLUGIN: { + tasks.PolicyHandler.SERVICE_NAME_POLICY_HANDLER: { + "url": POLICY_HANDLER_FROM_KV}}} + )) + return MonkeyedResponse(full_path, {}, [{"Value": value}]) + + return MonkeyedResponse(full_path) + + +def test_discovery_kv(monkeypatch): + """test finding policy-handler in consul""" + monkeypatch.setattr('requests.get', monkeyed_discovery_get_kv) + + node_policy = MonkeyedNode( + 'test_dcae_policy_node_id', + 'test_dcae_policy_node_name', + tasks.DCAE_POLICY_TYPE, + {POLICY_ID: MONKEYED_POLICY_ID} + ) + try: + current_ctx.set(node_policy.ctx) + tasks.PolicyHandler._lazy_init() + assert POLICY_HANDLER_FROM_KV == tasks.PolicyHandler._url + + finally: + tasks.PolicyHandler._url = None + MockCloudifyContextFull.clear() + current_ctx.clear() + + +def monkeyed_discovery_get(full_path): + """monkeypatch for the GET to consul""" + return MonkeyedResponse(full_path, {}, + [{"ServiceAddress": "monkey-policy-handler-address", "ServicePort": "9999"}]) + + +def test_discovery(monkeypatch): + """test finding policy-handler in consul""" + monkeypatch.setattr('requests.get', monkeyed_discovery_get) + + node_policy = MonkeyedNode( + 'test_dcae_policy_node_id', + 'test_dcae_policy_node_name', + tasks.DCAE_POLICY_TYPE, + {POLICY_ID: MONKEYED_POLICY_ID} + ) + + try: + current_ctx.set(node_policy.ctx) + expected = "http://monkey-policy-handler-address:9999" + CtxLogger.log_ctx_info("before PolicyHandler._lazy_init") + tasks.PolicyHandler._lazy_init() + CtxLogger.log_ctx_info("after PolicyHandler._lazy_init") + assert expected == tasks.PolicyHandler._url + + finally: + tasks.PolicyHandler._url = None + MockCloudifyContextFull.clear() + current_ctx.clear() |