diff options
Diffstat (limited to 'tests/test_policyhandler.py')
-rw-r--r-- | tests/test_policyhandler.py | 798 |
1 files changed, 38 insertions, 760 deletions
diff --git a/tests/test_policyhandler.py b/tests/test_policyhandler.py index c501c12..4743a6e 100644 --- a/tests/test_policyhandler.py +++ b/tests/test_policyhandler.py @@ -18,418 +18,24 @@ """test of the package for policy-handler of DCAE-Controller""" -import base64 -import copy import json -import re import time import uuid +import pytest import cherrypy from cherrypy.test.helper import CPWebCase -import pytest - -from policyhandler.config import Config -from policyhandler.deploy_handler import DeployHandler -from policyhandler.discovery import DiscoveryClient -from policyhandler.onap.audit import (REQUEST_X_ECOMP_REQUESTID, Audit, - AuditHttpCode) -from policyhandler.policy_consts import (LATEST_POLICIES, POLICY_BODY, - POLICY_CONFIG, POLICY_ID, POLICY_NAME, - POLICY_VERSION, POLICY_VERSIONS) -from policyhandler.policy_receiver import (LOADED_POLICIES, POLICY_VER, - REMOVED_POLICIES, PolicyReceiver) -from policyhandler.policy_rest import PolicyRest -from policyhandler.policy_utils import PolicyUtils, Utils +from policyhandler.onap.audit import REQUEST_X_ECOMP_REQUESTID, Audit +from policyhandler.policy_consts import LATEST_POLICIES, POLICY_NAME +from policyhandler.policy_receiver import PolicyReceiver +from policyhandler.policy_utils import Utils from policyhandler.web_server import _PolicyWeb -from .mock_settings import MonkeyedResponse, Settings - -Settings.init() - -class MonkeyPolicyBody(object): - """policy body that policy-engine returns""" - @staticmethod - def create_policy_body(policy_id, policy_version=1): - """returns a fake policy-body""" - prev_ver = str(policy_version - 1) - this_ver = str(policy_version) - config = { - "policy_updated_from_ver": prev_ver, - "policy_updated_to_ver": this_ver, - "policy_hello": "world!", - "policy_updated_ts": Settings.RUN_TS, - "updated_policy_id": policy_id - } - return { - "policyConfigMessage": "Config Retrieved! ", - "policyConfigStatus": "CONFIG_RETRIEVED", - "type": "JSON", - POLICY_NAME: "{0}.{1}.xml".format(policy_id, this_ver), - POLICY_VERSION: this_ver, - POLICY_CONFIG: json.dumps(config), - "matchingConditions": { - "ONAPName": "DCAE", - "ConfigName": "alex_config_name" - }, - "responseAttributes": {}, - "property": None - } - - -class MockPolicyEngine(object): - """pretend this is the policy-engine""" - scope_prefix = "test_scope_prefix.Config_" - LOREM_IPSUM = """Lorem ipsum dolor sit amet consectetur ametist""".split() - LONG_TEXT = "0123456789" * 100 - _policies = [] - - @staticmethod - def init(): - """init static vars""" - MockPolicyEngine._policies = [ - MonkeyPolicyBody.create_policy_body( - MockPolicyEngine.scope_prefix + policy_id, policy_index + 1) - for policy_id in MockPolicyEngine.LOREM_IPSUM - for policy_index in range(1 + MockPolicyEngine.LOREM_IPSUM.index(policy_id))] - Settings.logger.info("MockPolicyEngine._policies: %s", - json.dumps(MockPolicyEngine._policies)) - - @staticmethod - def get_config(policy_name): - """find policy the way the policy-engine finds""" - if not policy_name: - return [] - return [copy.deepcopy(policy) - for policy in MockPolicyEngine._policies - if re.match(policy_name, policy[POLICY_NAME])] - - @staticmethod - def get_configs_all(): - """get all policies the way the policy-engine finds""" - policies = [copy.deepcopy(policy) - for policy in MockPolicyEngine._policies] - for policy in policies: - policy["config"] = MockPolicyEngine.LONG_TEXT - return policies - - @staticmethod - def get_policy_id(policy_index): - """get the policy_id by index""" - return (MockPolicyEngine.scope_prefix - + MockPolicyEngine.LOREM_IPSUM[ - policy_index % len(MockPolicyEngine.LOREM_IPSUM)]) - - @staticmethod - def gen_policy_latest(policy_index, version_offset=0): - """generate the policy response by policy_index = version - 1""" - policy_id = MockPolicyEngine.get_policy_id(policy_index) - policy = { - POLICY_ID: policy_id, - POLICY_BODY: MonkeyPolicyBody.create_policy_body( - policy_id, policy_index + 1 - version_offset) - } - return policy_id, PolicyUtils.parse_policy_config(policy) - - @staticmethod - def gen_all_policies_latest(version_offset=0): - """generate all latest policies""" - return dict(MockPolicyEngine.gen_policy_latest(policy_index, version_offset=version_offset) - for policy_index in range(len(MockPolicyEngine.LOREM_IPSUM))) - - @staticmethod - def gen_policies_latest(match_to_policy_name): - """generate all latest policies""" - return dict((k, v) - for k, v in MockPolicyEngine.gen_all_policies_latest().items() - if re.match(match_to_policy_name, k)) - -MockPolicyEngine.init() - - -class MockDeploymentHandler(object): - """pretend this is the deployment-handler""" - - @staticmethod - def default_response(): - """generate the deployed policies message""" - return {"server_instance_uuid": Settings.deploy_handler_instance_uuid} - - @staticmethod - def get_deployed_policies(): - """generate the deployed policies message""" - response = MockDeploymentHandler.default_response() - policies = dict( - (policy_id, { - POLICY_ID: policy_id, - POLICY_VERSIONS: {policy.get(POLICY_BODY, {}).get(POLICY_VERSION, "999"): True}, - "pending_update": False}) - for policy_id, policy in (MockPolicyEngine.gen_all_policies_latest(version_offset=1) - .items())) - response["policies"] = policies - - return response - - -@pytest.fixture() -def fix_pdp_post(monkeypatch): - """monkeyed request /getConfig to PDP""" - def monkeyed_policy_rest_post(full_path, json=None, headers=None, **custom_kwargs): - """monkeypatch for the POST to policy-engine""" - res_json = MockPolicyEngine.get_config(json.get(POLICY_NAME)) - return MonkeyedResponse(full_path, res_json, json, headers) - - Settings.logger.info("setup fix_pdp_post") - PolicyRest._lazy_init() - monkeypatch.setattr('policyhandler.policy_rest.PolicyRest._requests_session.post', - monkeyed_policy_rest_post) - yield fix_pdp_post # provide the fixture value - Settings.logger.info("teardown fix_pdp_post") - - -@pytest.fixture() -def fix_pdp_post_big(monkeypatch): - """monkeyed request /getConfig to PDP""" - def monkeyed_policy_rest_post(full_path, json=None, headers=None, **custom_kwargs): - """monkeypatch for the POST to policy-engine""" - res_json = MockPolicyEngine.get_configs_all() - return MonkeyedResponse(full_path, res_json, json, headers) - - Settings.logger.info("setup fix_pdp_post_big") - PolicyRest._lazy_init() - monkeypatch.setattr('policyhandler.policy_rest.PolicyRest._requests_session.post', - monkeyed_policy_rest_post) - yield fix_pdp_post_big # provide the fixture value - Settings.logger.info("teardown fix_pdp_post_big") - - -class MockException(Exception): - """mock exception""" - pass - - -@pytest.fixture() -def fix_pdp_post_boom(monkeypatch): - """monkeyed request /getConfig to PDP - exception""" - def monkeyed_policy_rest_post_boom(full_path, json=None, headers=None, **custom_kwargs): - """monkeypatch for the POST to policy-engine""" - raise MockException("fix_pdp_post_boom") - - Settings.logger.info("setup fix_pdp_post_boom") - PolicyRest._lazy_init() - monkeypatch.setattr('policyhandler.policy_rest.PolicyRest._requests_session.post', - monkeyed_policy_rest_post_boom) - yield fix_pdp_post_boom - Settings.logger.info("teardown fix_pdp_post_boom") - -@staticmethod -def monkeyed_boom(*args, **kwargs): - """monkeypatch for the select_latest_policies""" - raise MockException("monkeyed_boom") - -@pytest.fixture() -def fix_select_latest_policies_boom(monkeypatch): - """monkeyed exception""" - - Settings.logger.info("setup fix_select_latest_policies_boom") - monkeypatch.setattr('policyhandler.policy_utils.PolicyUtils.select_latest_policies', - monkeyed_boom) - monkeypatch.setattr('policyhandler.policy_utils.PolicyUtils.select_latest_policy', - monkeyed_boom) - monkeypatch.setattr('policyhandler.policy_utils.PolicyUtils.extract_policy_id', - monkeyed_boom) - - yield fix_select_latest_policies_boom - Settings.logger.info("teardown fix_select_latest_policies_boom") - -@pytest.fixture() -def fix_discovery(monkeypatch): - """monkeyed discovery request.get""" - def monkeyed_discovery(full_path): - """monkeypatch for get from consul""" - res_json = {} - if full_path == DiscoveryClient.CONSUL_SERVICE_MASK.format( - Config.discovered_config.get_by_key(Config.DEPLOY_HANDLER)): - res_json = [{ - "ServiceAddress": "1.1.1.1", - "ServicePort": "123" - }] - elif full_path == DiscoveryClient.CONSUL_KV_MASK.format(Config.system_name): - res_json = [{"Value": base64.b64encode( - json.dumps(Settings.mock_config).encode()).decode("utf-8")}] - return MonkeyedResponse(full_path, res_json) - - Settings.logger.info("setup fix_discovery") - monkeypatch.setattr('policyhandler.discovery.requests.get', monkeyed_discovery) - yield fix_discovery # provide the fixture value - Settings.logger.info("teardown fix_discovery") - -@pytest.fixture() -def fix_deploy_handler(monkeypatch): - """monkeyed requests to deployment-handler""" - def monkeyed_deploy_handler_put(full_path, json=None, headers=None, - params=None, **custom_kwargs): - """monkeypatch for policy-update request.put to deploy_handler""" - return MonkeyedResponse(full_path, MockDeploymentHandler.default_response(), - json, headers) - - def monkeyed_deploy_handler_get(full_path, headers=None, params=None, **custom_kwargs): - """monkeypatch policy-update request.get to deploy_handler""" - return MonkeyedResponse(full_path, MockDeploymentHandler.get_deployed_policies(), - None, headers) - - Settings.logger.info("setup fix_deploy_handler") - audit = Audit(req_message="fix_deploy_handler") - DeployHandler._lazy_init(audit) - - monkeypatch.setattr('policyhandler.deploy_handler.DeployHandler._requests_session.put', - monkeyed_deploy_handler_put) - monkeypatch.setattr('policyhandler.deploy_handler.DeployHandler._requests_session.get', - monkeyed_deploy_handler_get) - - yield fix_deploy_handler # provide the fixture value - audit.audit_done("teardown") - Settings.logger.info("teardown fix_deploy_handler") - - -@pytest.fixture() -def fix_deploy_handler_fail(monkeypatch): - """monkeyed failed discovery request.get""" - def monkeyed_deploy_handler_put(full_path, json=None, headers=None, - params=None, **custom_kwargs): - """monkeypatch for deploy_handler""" - res = MonkeyedResponse( - full_path, - {"server_instance_uuid": Settings.deploy_handler_instance_uuid}, - json, headers - ) - res.status_code = 413 - return res - - def monkeyed_deploy_handler_get(full_path, headers=None, params=None, **custom_kwargs): - """monkeypatch policy-update request.get to deploy_handler""" - return MonkeyedResponse(full_path, MockDeploymentHandler.default_response(), - None, headers) - - @staticmethod - def monkeyed_deploy_handler_init(audit_ignore): - """monkeypatch for deploy_handler init""" - DeployHandler._url = None - - Settings.logger.info("setup fix_deploy_handler_fail") - config_catch_up = Config.discovered_config.get_by_key("catch_up") - Config.discovered_config.update("catch_up", {"interval": 1}) - - audit = Audit(req_message="fix_deploy_handler_fail") - DeployHandler._lazy_init(audit) - - monkeypatch.setattr('policyhandler.deploy_handler.DeployHandler._lazy_init', - monkeyed_deploy_handler_init) - monkeypatch.setattr('policyhandler.deploy_handler.DeployHandler._requests_session.put', - monkeyed_deploy_handler_put) - monkeypatch.setattr('policyhandler.deploy_handler.DeployHandler._requests_session.get', - monkeyed_deploy_handler_get) - - yield fix_deploy_handler_fail - audit.audit_done("teardown") - Settings.logger.info("teardown fix_deploy_handler_fail") - Config.discovered_config.update("catch_up", config_catch_up) - - -@pytest.fixture() -def fix_cherrypy_engine_exit(monkeypatch): - """monkeyed cherrypy.engine.exit()""" - Settings.logger.info("setup fix_cherrypy_engine_exit") - - def monkeyed_cherrypy_engine_exit(): - """monkeypatch for deploy_handler""" - Settings.logger.info("cherrypy_engine_exit()") - - monkeypatch.setattr('policyhandler.web_server.cherrypy.engine.exit', - monkeyed_cherrypy_engine_exit) - yield fix_cherrypy_engine_exit # provide the fixture value - Settings.logger.info("teardown fix_cherrypy_engine_exit") - - -class MonkeyedWebSocket(object): - """Monkey websocket""" - on_message = None - - @staticmethod - def send_notification(updated_indexes): - """fake notification through the web-socket""" - if not MonkeyedWebSocket.on_message: - return - message = { - LOADED_POLICIES: [ - {POLICY_NAME: "{0}.{1}.xml".format( - MockPolicyEngine.get_policy_id(policy_index), policy_index + 1), - POLICY_VER: str(policy_index + 1)} - for policy_index in updated_indexes or [] - ], - REMOVED_POLICIES : [] - } - message = json.dumps(message) - Settings.logger.info("send_notification: %s", message) - MonkeyedWebSocket.on_message(None, message) - - @staticmethod - def enableTrace(yes_no): - """ignore""" - pass - - class MonkeyedSocket(object): - """Monkey websocket""" - def __init__(self): - self.connected = True - - class WebSocketApp(object): - """Monkeyed WebSocketApp""" - def __init__(self, web_socket_url, on_message=None, on_close=None, on_error=None): - self.web_socket_url = web_socket_url - self.on_message = MonkeyedWebSocket.on_message = on_message - self.on_close = on_close - self.on_error = on_error - self.sock = MonkeyedWebSocket.MonkeyedSocket() - Settings.logger.info("MonkeyedWebSocket for: %s", self.web_socket_url) - - def run_forever(self): - """forever in the loop""" - counter = 0 - while self.sock.connected: - counter += 1 - Settings.logger.info("MonkeyedWebSocket sleep %s...", counter) - time.sleep(5) - Settings.logger.info("MonkeyedWebSocket exit %s", counter) - - def close(self): - """close socket""" - self.sock.connected = False - - -@pytest.fixture() -def fix_policy_receiver_websocket(monkeypatch): - """monkeyed websocket for policy_receiver""" - Settings.logger.info("setup fix_policy_receiver_websocket") - monkeypatch.setattr('policyhandler.policy_receiver.websocket', MonkeyedWebSocket) - yield fix_policy_receiver_websocket # provide the fixture value - Settings.logger.info("teardown fix_policy_receiver_websocket") - - -def test_get_policy_latest(fix_pdp_post, fix_discovery): - """test /policy_latest/<policy-id>""" - policy_id, expected_policy = MockPolicyEngine.gen_policy_latest(3) - - audit = Audit(job_name="test_get_policy_latest", - req_message="get /policy_latest/{0}".format(policy_id or "")) - policy_latest = PolicyRest.get_latest_policy((audit, policy_id, None, None)) or {} - audit.audit_done(result=json.dumps(policy_latest)) - - Settings.logger.info("expected_policy: %s", json.dumps(expected_policy)) - Settings.logger.info("policy_latest: %s", json.dumps(policy_latest)) - assert Utils.are_the_same(policy_latest, expected_policy) - +from .mock_policy_engine import MockPolicyEngine +from .mock_settings import Settings +from .mock_tracker import Tracker +from .mock_websocket import MockWebSocket @pytest.mark.usefixtures("fix_pdp_post", "fix_discovery") @@ -448,6 +54,8 @@ class WebServerTest(CPWebCase): Settings.logger.info("got healthcheck: %s", self.body) self.assertStatus('200 OK') + Tracker.validate() + def test_web_policy_latest(self): """test /policy_latest/<policy-id>""" policy_id, expected_policy = MockPolicyEngine.gen_policy_latest(3) @@ -464,6 +72,8 @@ class WebServerTest(CPWebCase): result = self.getPage("/healthcheck") Settings.logger.info("healthcheck result: %s", result) + Tracker.validate() + @pytest.mark.usefixtures("fix_deploy_handler") def test_web_all_policies_latest(self): """test GET /policies_latest""" @@ -485,6 +95,8 @@ class WebServerTest(CPWebCase): result = self.getPage("/healthcheck") Settings.logger.info("healthcheck result: %s", result) + Tracker.validate() + def test_web_policies_latest(self): """test POST /policies_latest with policyName""" match_to_policy_name = MockPolicyEngine.scope_prefix + "amet.*" @@ -511,334 +123,14 @@ class WebServerTest(CPWebCase): result = self.getPage("/healthcheck") Settings.logger.info("healthcheck result: %s", result) - @pytest.mark.usefixtures("fix_deploy_handler", "fix_policy_receiver_websocket") - def test_zzz_policy_updates_and_catch_ups(self): - """test run policy handler with policy updates and catchups""" - Settings.logger.info("start policy_updates_and_catch_ups") - audit = Audit(job_name="test_zzz_policy_updates_and_catch_ups", - req_message="start policy_updates_and_catch_ups") - PolicyReceiver.run(audit) - - Settings.logger.info("sleep before send_notification...") - time.sleep(2) - - MonkeyedWebSocket.send_notification([1, 3, 5]) - Settings.logger.info("sleep after send_notification...") - time.sleep(3) - - Settings.logger.info("sleep 30 before shutdown...") - time.sleep(30) - - result = self.getPage("/healthcheck") - Settings.logger.info("healthcheck result: %s", result) - - PolicyReceiver.shutdown(audit) - time.sleep(1) - - @pytest.mark.usefixtures("fix_deploy_handler", "fix_policy_receiver_websocket") - def test_zzz_catch_up_on_deploy_handler_changed(self): - """test run policy handler with deployment-handler changed underneath""" - Settings.logger.info("start zzz_catch_up_on_deploy_handler_changed") - audit = Audit(job_name="test_zzz_catch_up_on_deploy_handler_changed", - req_message="start zzz_catch_up_on_deploy_handler_changed") - PolicyReceiver.run(audit) - - Settings.logger.info("sleep before send_notification...") - time.sleep(2) - - MonkeyedWebSocket.send_notification([1]) - Settings.logger.info("sleep after send_notification...") - time.sleep(3) - - Settings.deploy_handler_instance_uuid = str(uuid.uuid4()) - Settings.logger.info("new deploy-handler uuid=%s", Settings.deploy_handler_instance_uuid) - - MonkeyedWebSocket.send_notification([2, 4]) - Settings.logger.info("sleep after send_notification...") - time.sleep(3) - - Settings.logger.info("sleep 5 before shutdown...") - time.sleep(5) - - result = self.getPage("/healthcheck") - Settings.logger.info("healthcheck result: %s", result) - - PolicyReceiver.shutdown(audit) - time.sleep(1) - - @pytest.mark.usefixtures("fix_deploy_handler", "fix_policy_receiver_websocket") - def test_zzz_get_catch_up(self): - """test /catch_up""" - Settings.logger.info("start /catch_up") - audit = Audit(job_name="test_zzz_get_catch_up", req_message="start /catch_up") - PolicyReceiver.run(audit) - time.sleep(5) - result = self.getPage("/catch_up") - Settings.logger.info("catch_up result: %s", result) - self.assertStatus('200 OK') - Settings.logger.info("got catch_up: %s", self.body) - - Settings.logger.info("sleep 5 before shutdown...") - time.sleep(5) - - result = self.getPage("/healthcheck") - Settings.logger.info("healthcheck result: %s", result) - - PolicyReceiver.shutdown(audit) - time.sleep(1) - - @pytest.mark.usefixtures( - "fix_deploy_handler", - "fix_policy_receiver_websocket", - "fix_cherrypy_engine_exit") - def test_zzzzz_shutdown(self): - """test shutdown""" - Settings.logger.info("start shutdown") - audit = Audit(job_name="test_zzzzz_shutdown", req_message="start shutdown") - PolicyReceiver.run(audit) - - Settings.logger.info("sleep before send_notification...") - time.sleep(2) - - MonkeyedWebSocket.send_notification([1, 3, 5]) - Settings.logger.info("sleep after send_notification...") - time.sleep(3) - - result = self.getPage("/healthcheck") - Settings.logger.info("healthcheck result: %s", result) - - WebServerTest.do_gc_test = False - Settings.logger.info("shutdown...") - audit.audit_done("shutdown") - result = self.getPage("/shutdown") - Settings.logger.info("shutdown result: %s", result) - self.assertStatus('200 OK') - Settings.logger.info("got shutdown: %s", self.body) - time.sleep(1) - - -@pytest.mark.usefixtures("fix_pdp_post_boom", "fix_discovery") -class WebServerPDPBoomTest(CPWebCase): - """testing the web-server - runs tests in alphabetical order of method names""" - def setup_server(): - """setup the web-server""" - cherrypy.tree.mount(_PolicyWeb(), '/') - - setup_server = staticmethod(setup_server) - - def test_web_healthcheck(self): - """test /healthcheck""" - result = self.getPage("/healthcheck") - Settings.logger.info("healthcheck result: %s", result) - Settings.logger.info("got healthcheck: %s", self.body) - self.assertStatus('200 OK') - - def test_web_policy_latest(self): - """test /policy_latest/<policy-id>""" - policy_id, _ = MockPolicyEngine.gen_policy_latest(3) - - self.getPage("/policy_latest/{0}".format(policy_id or "")) - self.assertStatus(AuditHttpCode.SERVER_INTERNAL_ERROR.value) - - result = self.getPage("/healthcheck") - Settings.logger.info("healthcheck result: %s", result) - - @pytest.mark.usefixtures("fix_deploy_handler") - def test_web_all_policies_latest(self): - """test GET /policies_latest""" - result = self.getPage("/policies_latest") - Settings.logger.info("result: %s", result) - Settings.logger.info("body: %s", self.body) - self.assertStatus(AuditHttpCode.SERVER_INTERNAL_ERROR.value) - - result = self.getPage("/healthcheck") - Settings.logger.info("healthcheck result: %s", result) - - def test_web_policies_latest(self): - """test POST /policies_latest with policyName""" - match_to_policy_name = MockPolicyEngine.scope_prefix + "amet.*" - - body = json.dumps({POLICY_NAME: match_to_policy_name}) - result = self.getPage("/policies_latest", method='POST', - body=body, - headers=[ - (REQUEST_X_ECOMP_REQUESTID, str(uuid.uuid4())), - ("Content-Type", "application/json"), - ('Content-Length', str(len(body))) - ]) - Settings.logger.info("result: %s", result) - Settings.logger.info("body: %s", self.body) - self.assertStatus(AuditHttpCode.SERVER_INTERNAL_ERROR.value) - - result = self.getPage("/healthcheck") - Settings.logger.info("healthcheck result: %s", result) + Tracker.validate() @pytest.mark.usefixtures("fix_deploy_handler", "fix_policy_receiver_websocket") def test_zzz_policy_updates_and_catch_ups(self): """test run policy handler with policy updates and catchups""" Settings.logger.info("start policy_updates_and_catch_ups") - audit = Audit(job_name="test_zzz_policy_updates_and_catch_ups", - req_message="start policy_updates_and_catch_ups") - PolicyReceiver.run(audit) - - Settings.logger.info("sleep before send_notification...") - time.sleep(2) - - MonkeyedWebSocket.send_notification([1, 3, 5]) - Settings.logger.info("sleep after send_notification...") - time.sleep(3) - - Settings.logger.info("sleep 30 before shutdown...") - time.sleep(30) - - result = self.getPage("/healthcheck") - Settings.logger.info("healthcheck result: %s", result) - - PolicyReceiver.shutdown(audit) - time.sleep(1) - - @pytest.mark.usefixtures("fix_deploy_handler", "fix_policy_receiver_websocket") - def test_zzz_catch_up_on_deploy_handler_changed(self): - """test run policy handler with deployment-handler changed underneath""" - Settings.logger.info("start zzz_catch_up_on_deploy_handler_changed") - audit = Audit(job_name="test_zzz_catch_up_on_deploy_handler_changed", - req_message="start zzz_catch_up_on_deploy_handler_changed") - PolicyReceiver.run(audit) - - Settings.logger.info("sleep before send_notification...") - time.sleep(2) - - MonkeyedWebSocket.send_notification([1]) - Settings.logger.info("sleep after send_notification...") - time.sleep(3) - - Settings.deploy_handler_instance_uuid = str(uuid.uuid4()) - Settings.logger.info("new deploy-handler uuid=%s", Settings.deploy_handler_instance_uuid) - - MonkeyedWebSocket.send_notification([2, 4]) - Settings.logger.info("sleep after send_notification...") - time.sleep(3) + assert not PolicyReceiver.is_running() - Settings.logger.info("sleep 5 before shutdown...") - time.sleep(5) - - result = self.getPage("/healthcheck") - Settings.logger.info("healthcheck result: %s", result) - - PolicyReceiver.shutdown(audit) - time.sleep(1) - - @pytest.mark.usefixtures("fix_deploy_handler", "fix_policy_receiver_websocket") - def test_zzz_get_catch_up(self): - """test /catch_up""" - Settings.logger.info("start /catch_up") - audit = Audit(job_name="test_zzz_get_catch_up", req_message="start /catch_up") - PolicyReceiver.run(audit) - time.sleep(5) - result = self.getPage("/catch_up") - Settings.logger.info("catch_up result: %s", result) - self.assertStatus('200 OK') - Settings.logger.info("got catch_up: %s", self.body) - - Settings.logger.info("sleep 5 before shutdown...") - time.sleep(5) - - result = self.getPage("/healthcheck") - Settings.logger.info("healthcheck result: %s", result) - - PolicyReceiver.shutdown(audit) - time.sleep(1) - - @pytest.mark.usefixtures( - "fix_deploy_handler", - "fix_policy_receiver_websocket", - "fix_cherrypy_engine_exit") - def test_zzzzz_shutdown(self): - """test shutdown""" - Settings.logger.info("start shutdown") - audit = Audit(job_name="test_zzzzz_shutdown", req_message="start shutdown") - PolicyReceiver.run(audit) - - Settings.logger.info("sleep before send_notification...") - time.sleep(2) - - MonkeyedWebSocket.send_notification([1, 3, 5]) - Settings.logger.info("sleep after send_notification...") - time.sleep(3) - - result = self.getPage("/healthcheck") - Settings.logger.info("healthcheck result: %s", result) - - WebServerPDPBoomTest.do_gc_test = False - Settings.logger.info("shutdown...") - audit.audit_done("shutdown") - result = self.getPage("/shutdown") - Settings.logger.info("shutdown result: %s", result) - self.assertStatus('200 OK') - Settings.logger.info("got shutdown: %s", self.body) - time.sleep(1) - - -@pytest.mark.usefixtures("fix_pdp_post", "fix_select_latest_policies_boom", "fix_discovery") -class WebServerInternalBoomTest(CPWebCase): - """testing the web-server - runs tests in alphabetical order of method names""" - def setup_server(): - """setup the web-server""" - cherrypy.tree.mount(_PolicyWeb(), '/') - - setup_server = staticmethod(setup_server) - - def test_web_healthcheck(self): - """test /healthcheck""" - result = self.getPage("/healthcheck") - Settings.logger.info("healthcheck result: %s", result) - Settings.logger.info("got healthcheck: %s", self.body) - self.assertStatus('200 OK') - - def test_web_policy_latest(self): - """test /policy_latest/<policy-id>""" - policy_id, _ = MockPolicyEngine.gen_policy_latest(3) - - self.getPage("/policy_latest/{0}".format(policy_id or "")) - self.assertStatus(AuditHttpCode.SERVER_INTERNAL_ERROR.value) - - result = self.getPage("/healthcheck") - Settings.logger.info("healthcheck result: %s", result) - - @pytest.mark.usefixtures("fix_deploy_handler") - def test_web_all_policies_latest(self): - """test GET /policies_latest""" - result = self.getPage("/policies_latest") - Settings.logger.info("result: %s", result) - Settings.logger.info("body: %s", self.body) - self.assertStatus(AuditHttpCode.SERVER_INTERNAL_ERROR.value) - - result = self.getPage("/healthcheck") - Settings.logger.info("healthcheck result: %s", result) - - def test_web_policies_latest(self): - """test POST /policies_latest with policyName""" - match_to_policy_name = MockPolicyEngine.scope_prefix + "amet.*" - - body = json.dumps({POLICY_NAME: match_to_policy_name}) - result = self.getPage("/policies_latest", method='POST', - body=body, - headers=[ - (REQUEST_X_ECOMP_REQUESTID, str(uuid.uuid4())), - ("Content-Type", "application/json"), - ('Content-Length', str(len(body))) - ]) - Settings.logger.info("result: %s", result) - Settings.logger.info("body: %s", self.body) - self.assertStatus(AuditHttpCode.SERVER_INTERNAL_ERROR.value) - - result = self.getPage("/healthcheck") - Settings.logger.info("healthcheck result: %s", result) - - @pytest.mark.usefixtures("fix_deploy_handler", "fix_policy_receiver_websocket") - def test_zzz_policy_updates_and_catch_ups(self): - """test run policy handler with policy updates and catchups""" - Settings.logger.info("start policy_updates_and_catch_ups") audit = Audit(job_name="test_zzz_policy_updates_and_catch_ups", req_message="start policy_updates_and_catch_ups") PolicyReceiver.run(audit) @@ -846,23 +138,27 @@ class WebServerInternalBoomTest(CPWebCase): Settings.logger.info("sleep before send_notification...") time.sleep(2) - MonkeyedWebSocket.send_notification([1, 3, 5]) + MockWebSocket.send_notification([1, 3, 5]) Settings.logger.info("sleep after send_notification...") time.sleep(3) - Settings.logger.info("sleep 30 before shutdown...") - time.sleep(30) + Settings.logger.info("sleep 10 before shutdown...") + time.sleep(10) result = self.getPage("/healthcheck") Settings.logger.info("healthcheck result: %s", result) PolicyReceiver.shutdown(audit) time.sleep(1) + assert not PolicyReceiver.is_running() + + Tracker.validate() @pytest.mark.usefixtures("fix_deploy_handler", "fix_policy_receiver_websocket") def test_zzz_catch_up_on_deploy_handler_changed(self): """test run policy handler with deployment-handler changed underneath""" Settings.logger.info("start zzz_catch_up_on_deploy_handler_changed") + assert not PolicyReceiver.is_running() audit = Audit(job_name="test_zzz_catch_up_on_deploy_handler_changed", req_message="start zzz_catch_up_on_deploy_handler_changed") PolicyReceiver.run(audit) @@ -870,14 +166,14 @@ class WebServerInternalBoomTest(CPWebCase): Settings.logger.info("sleep before send_notification...") time.sleep(2) - MonkeyedWebSocket.send_notification([1]) + MockWebSocket.send_notification([1]) Settings.logger.info("sleep after send_notification...") time.sleep(3) Settings.deploy_handler_instance_uuid = str(uuid.uuid4()) Settings.logger.info("new deploy-handler uuid=%s", Settings.deploy_handler_instance_uuid) - MonkeyedWebSocket.send_notification([2, 4]) + MockWebSocket.send_notification([2, 4]) Settings.logger.info("sleep after send_notification...") time.sleep(3) @@ -889,11 +185,15 @@ class WebServerInternalBoomTest(CPWebCase): PolicyReceiver.shutdown(audit) time.sleep(1) + assert not PolicyReceiver.is_running() + + Tracker.validate() @pytest.mark.usefixtures("fix_deploy_handler", "fix_policy_receiver_websocket") def test_zzz_get_catch_up(self): """test /catch_up""" Settings.logger.info("start /catch_up") + assert not PolicyReceiver.is_running() audit = Audit(job_name="test_zzz_get_catch_up", req_message="start /catch_up") PolicyReceiver.run(audit) time.sleep(5) @@ -910,6 +210,9 @@ class WebServerInternalBoomTest(CPWebCase): PolicyReceiver.shutdown(audit) time.sleep(1) + assert not PolicyReceiver.is_running() + + Tracker.validate() @pytest.mark.usefixtures( "fix_deploy_handler", @@ -918,20 +221,21 @@ class WebServerInternalBoomTest(CPWebCase): def test_zzzzz_shutdown(self): """test shutdown""" Settings.logger.info("start shutdown") + assert not PolicyReceiver.is_running() audit = Audit(job_name="test_zzzzz_shutdown", req_message="start shutdown") PolicyReceiver.run(audit) Settings.logger.info("sleep before send_notification...") time.sleep(2) - MonkeyedWebSocket.send_notification([1, 3, 5]) + MockWebSocket.send_notification([1, 3, 5]) Settings.logger.info("sleep after send_notification...") time.sleep(3) result = self.getPage("/healthcheck") Settings.logger.info("healthcheck result: %s", result) - WebServerInternalBoomTest.do_gc_test = False + WebServerTest.do_gc_test = False Settings.logger.info("shutdown...") audit.audit_done("shutdown") result = self.getPage("/shutdown") @@ -939,32 +243,6 @@ class WebServerInternalBoomTest(CPWebCase): self.assertStatus('200 OK') Settings.logger.info("got shutdown: %s", self.body) time.sleep(1) + assert not PolicyReceiver.is_running() - -@pytest.mark.usefixtures( - "fix_pdp_post_big", - "fix_deploy_handler_fail", - "fix_policy_receiver_websocket", - "fix_discovery" -) -def test_catch_ups_failed_dh(): - """test run policy handler with catchups and failed deployment-handler""" - Settings.logger.info("start test_catch_ups_failed_dh") - audit = Audit(job_name="test_catch_ups_failed_dh", - req_message="start test_catch_ups_failed_dh") - PolicyReceiver.run(audit) - - Settings.logger.info("sleep 50 before shutdown...") - time.sleep(50) - - health = audit.health(full=True) - audit.audit_done(result=json.dumps(health)) - - Settings.logger.info("healthcheck: %s", json.dumps(health)) - assert bool(health) - - PolicyReceiver.shutdown(audit) - time.sleep(1) - - health = audit.health(full=True) - Settings.logger.info("healthcheck: %s", json.dumps(health)) + Tracker.validate() |