5.1.0 policy-handler - policy-updates from new PDP

DCAEGEN2-1851:
- policy-handler now supports the policy-update notification
  from the new policy-engine thru DMaaP MR
  = no policy-filters - only policy-id values
- see README for discoverable config settings of dmaap_mr client
  = DMaaP MR client has the same flexibility as policy_engine
  = set the query.timeout to high value like 15000 (default)
- requests to DMaaP MR go through a single blocking connection
- first catch-up only after draining the policy-updates from DMaaP MR
  on the first loop
- safe parsing of messages from DMaaP MR
- policy-engine changed the data type for policy-version field
  from int to string that is expected to have the semver value
- related change to deployment-handler (DCAEGEN2-2085) has to be
  deployed to handle the non-numeric policyVersion
- on new PDP API: http /policy_latest and policy-updates
  return the new data from the new PDP API with the following fields
  added/renamed by the policy-handler to keep other policy related parts
  intact in R4-R6 (see pdp_api/policy_utils.py)
  * policyName = policy_id + "." + policyVersion.replace(".","-")
                                 + ".xml"
  * policyVersion = str(metadata["policy-version"])
  * "config" - is the renamed "properties" from the new PDP API response
- enabled the /catch_up and the periodic auto-catch-up for the new PDP
  API
- enabled GET /policies_latest - returns the latest policies for the
  deployed components
- POST /policies_latest - still disabled since no support for the
  policy-filters is provided for the new PDP API
- fixed hiding the Authorization value on comparing the configs
- logging of secrets is now sha256 to see whether they changed
- added X-ONAP-RequestID to headers the same way as X-ECOMP-RequestID
- on policy-update process the removal first, then addition
- changed the pool_connections=1 (number of pools) on PDP and DH sides
  == only a single destination is expected for each
- log the exception as fatal into error.log
- other minor fixes and refactoring
- unit-test coverage 74%
- integration testing is requested

DCAEGEN2-1976:
- policy-handler is enhanced to get user/password from env vars
  for PDP and DMaaP MR clients and overwriting the Authorization field
  in https headers received from the discoverable config
  = to override the Authorization value on policy_engine,
    set the environment vars $PDP_USER and $PDP_PWD in policy-handler
    container
  = to override the Authorization value on dmaap_mr,
    if using https and user-password authentication,
    set the environment vars $DMAAP_MR_USER and $DMAAP_MR_PWD in
    policy-handler container

Change-Id: Iad8eab9e20e615a0e0d2822f4735dc64c50aa55c
Signed-off-by: Alex Shatov <alexs@att.com>
Issue-ID: DCAEGEN2-1851
Issue-ID: DCAEGEN2-1976
diff --git a/LICENSE.txt b/LICENSE.txt
index c6c6e24..80a0d71 100644
--- a/LICENSE.txt
+++ b/LICENSE.txt
@@ -1,7 +1,7 @@
 /*
 * ============LICENSE_START==========================================
 * ===================================================================
-* Copyright (c) 2017-2019 AT&T Intellectual Property. All rights reserved.
+* Copyright (c) 2017-2020 AT&T Intellectual Property. All rights reserved.
 * ===================================================================
 *
 * Unless otherwise specified, all software contained herein is licensed
diff --git a/README.md b/README.md
index 3266b2f..4427324 100644
--- a/README.md
+++ b/README.md
@@ -143,9 +143,9 @@
 }
 ```
 
-#### point the discovarable config of the policy-handler to point to the **new PDP API**
+#### the discovarable config of the policy-handler to point to the **new PDP API**
 
-In short: keep the consul-kv record for he policy-handler as before R4 Dublin.
+In short: keep the consul-kv record for the policy-handler as before R4 Dublin.
 
 Here is a sample config from consul-kv.  Please replace the {{ ... }} with real setup values
 
@@ -201,6 +201,19 @@
       "tls_ca_mode": "cert_directory",
       "timeout_in_secs": 60
     },
+    "dmaap_mr" : {
+        "url" : "http://{{ YOUR_DMAAP_MR_URL }}/events/{{ POLICY_UPDATE_TOPICNAME }}/{{ POLICY_UPDATE_CONSUMEGROUP }}/{{ POLICY_UPDATE_CONSUMERID }}",
+        "query": {
+          "timeout": 15000
+        },
+        "headers" : {
+            "Content-Type" : "application/json",
+            "Authorization": "Basic {{ YOUR_DMAAP_MR_SUBSCRIBER_AUTHORIZATION }}"
+        },
+        "target_entity" : "dmaap_mr",
+        "tls_ca_mode" : "cert_directory",
+        "timeout_in_secs": 60
+    },
     "deploy_handler": {
       "target_entity": "deployment_handler",
       "url": "http://deployment_handler:8188",
@@ -272,9 +285,16 @@
         Accept : "application/json"
         "Content-Type" : "application/json"
         ClientAuth : "Basic {{ YOUR_POLICY_ENGINE_CLIENT_AUTH }}"
+
+        # to override the Authorization value,
+        #    set the environment vars $PDP_USER and $PDP_PWD in policy-handler
         Authorization : "Basic {{ YOUR_POLICY_ENGINE_AUTHORIZATION }}"
+
         Environment : "{{ YOUR_POLICY_ENGINE_ENVIRONMENT }}"
+
+      # target_entity name that is used for logging
       target_entity : "policy_engine"
+
       # optional tls_ca_mode specifies where to find the cacert.pem for tls
       #   can be one of these:
       #       "cert_directory" - use the cacert.pem stored locally in cert_directory.
@@ -288,6 +308,43 @@
       # optional timeout_in_secs specifies the timeout for the http requests
       timeout_in_secs: 60
 
+
+    # DMaaP MR subscriber config
+    # These are the url of and the auth for the external system, namely the policy-engine (PDP).
+    # We obtain that info manually from PDP and DMaaP folks at the moment.
+    dmaap_mr :
+      url: "http://{{ YOUR_DMAAP_MR_URL }}/events/{{ POLICY_UPDATE_TOPICNAME }}/{{ POLICY_UPDATE_CONSUMEGROUP }}/{{ POLICY_UPDATE_CONSUMERID }}"
+
+      query:
+        # The number of milliseconds for DMaaP MR to wait for messages if none are immediately available.
+        # This should normally be used, and set at 15000 or higher.
+        # This is referred to as long-polling timeout
+        # ?timeout=15000 passed to DMaaP MR in the query
+        timeout: 15000
+
+      headers:
+        "Content-Type": "application/json"
+        # provide Authorization for the subscriber if using https and user-password authentication
+        # to override the Authorization value,
+        #    set the environment vars $DMAAP_MR_USER and $DMAAP_MR_PWD in policy-handler
+        Authorization: "Basic {{ YOUR_DMAAP_MR_SUBSCRIBER_AUTHORIZATION }}"
+
+      # target_entity name that is used for logging
+      target_entity: "dmaap_mr"
+      # optional tls_ca_mode specifies where to find the cacert.pem for tls
+      #   can be one of these:
+      #       "cert_directory" - use the cacert.pem stored locally in cert_directory.
+      #                          this is the default if cacert.pem file is found
+      #
+      #       "os_ca_bundle"     - use the public ca_bundle provided by linux system.
+      #                          this is the default if cacert.pem file not found
+      #
+      #       "do_not_verify"  - special hack to turn off the verification by cacert and hostname
+      tls_ca_mode: "cert_directory"
+      # optional timeout_in_secs specifies the timeout for the http requests
+      timeout_in_secs: 60
+
+
     # deploy_handler config
     #    changed from string "deployment_handler" in 2.3.1 to structure in 2.4.0
     deploy_handler :
diff --git a/README_pdp_api_v0.md b/README_pdp_api_v0.md
index 9fd822a..a909ca9 100644
--- a/README_pdp_api_v0.md
+++ b/README_pdp_api_v0.md
@@ -182,6 +182,8 @@
         Accept : "application/json"
         "Content-Type" : "application/json"
         ClientAuth : "Basic {{ YOUR_POLICY_ENGINE_CLIENT_AUTH }}"
+        # to override the Authorization value,
+        #    set the environment vars $PDP_USER and $PDP_PWD in policy-handler
         Authorization : "Basic {{ YOUR_POLICY_ENGINE_AUTHORIZATION }}"
         Environment : "{{ YOUR_POLICY_ENGINE_ENVIRONMENT }}"
       target_entity : "policy_engine"
diff --git a/policyhandler/config.py b/policyhandler/config.py
index f8c425a..25ae3a5 100644
--- a/policyhandler/config.py
+++ b/policyhandler/config.py
@@ -1,5 +1,5 @@
 # ================================================================================
-# Copyright (c) 2017-2019 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2017-2020 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.
@@ -17,6 +17,7 @@
 
 """read and use the config"""
 
+import base64
 import copy
 import json
 import logging
@@ -137,6 +138,7 @@
     FIELD_WSERVICE_PORT = "wservice_port"
     FIELD_TLS = "tls"
     FIELD_POLICY_ENGINE = "policy_engine"
+    DMAAP_MR = "dmaap_mr"
     POOL_CONNECTIONS = "pool_connections"
     DEPLOY_HANDLER = "deploy_handler"
     THREAD_POOL_SIZE = "thread_pool_size"
@@ -155,6 +157,11 @@
     SERVICE_ACTIVATOR = "service_activator"
     MODE_OF_OPERATION = "mode_of_operation"
     PDP_API_VERSION = "PDP_API_VERSION"
+    QUERY_TIMEOUT = "timeout"
+    PDP_USER = "PDP_USER"
+    PDP_PWD = "PDP_PWD"
+    DMAAP_MR_USER = "DMAAP_MR_USER"
+    DMAAP_MR_PWD = "DMAAP_MR_PWD"
 
     system_name = SERVICE_NAME_POLICY_HANDLER
     wservice_port = 25577
@@ -165,6 +172,8 @@
     tls_server_cert_file = None
     tls_private_key_file = None
     tls_server_ca_chain_file = None
+    _pdp_authorization = None
+    _dmaap_mr_authorization = None
 
     _local_config = Settings()
     discovered_config = Settings()
@@ -254,6 +263,18 @@
         Config._pdp_api_version = os.environ.get(
             Config.PDP_API_VERSION, loaded_config.get(Config.PDP_API_VERSION.lower()))
 
+        pdp_user = os.environ.get(Config.PDP_USER)
+        pdp_pwd = os.environ.get(Config.PDP_PWD)
+        if pdp_user and pdp_pwd:
+            Config._pdp_authorization = "Basic {}".format(base64.b64encode(
+                ("{}:{}".format(pdp_user, pdp_pwd)).encode()).decode("utf-8"))
+
+        dmaap_mr_user = os.environ.get(Config.DMAAP_MR_USER)
+        dmaap_mr_pwd = os.environ.get(Config.DMAAP_MR_PWD)
+        if dmaap_mr_user and dmaap_mr_pwd:
+            Config._dmaap_mr_authorization = "Basic {}".format(base64.b64encode(
+                ("{}:{}".format(dmaap_mr_user, dmaap_mr_pwd)).encode()).decode("utf-8"))
+
         local_config = loaded_config.get(Config.SERVICE_NAME_POLICY_HANDLER, {})
         Config.system_name = local_config.get(Config.FIELD_SYSTEM, Config.system_name)
 
@@ -262,6 +283,26 @@
         Config._local_config.set_config(local_config, auto_commit=True)
 
     @staticmethod
+    def _overwrite_discovered_config(audit, discovered_config):
+        """replace the secrets in discovered_config with data from environment"""
+        changes = []
+        if Config._pdp_authorization:
+            pdp_cfg = discovered_config.get("policy_engine", {})
+            if pdp_cfg.get("url", "").lower().startswith("https:"):
+                pdp_cfg.get("headers", {})["Authorization"] = Config._pdp_authorization
+                changes.append("pdp_authorization")
+
+        if Config._dmaap_mr_authorization:
+            dmaap_mr_cfg = discovered_config.get("dmaap_mr", {})
+            if dmaap_mr_cfg.get("url", "").lower().startswith("https:"):
+                dmaap_mr_cfg.get("headers", {})["Authorization"] = Config._dmaap_mr_authorization
+                changes.append("dmaap_mr_authorization")
+
+        if changes:
+            _LOGGER.info(audit.info("overwritten discovered config: {}".format(", ".join(changes))))
+
+
+    @staticmethod
     def discover(audit):
         """bring the config settings from the discovery service"""
         discovery_key = Config.system_name
@@ -269,14 +310,17 @@
         new_config = DiscoveryClient.get_value(audit, discovery_key)
 
         if not new_config or not isinstance(new_config, dict):
-            _LOGGER.warning("unexpected config from discovery: %s", new_config)
+            _LOGGER.warning(audit.warn("unexpected config from discovery: {}".format(new_config)))
             return
 
-        _LOGGER.debug("loaded config from discovery(%s): %s",
-                      discovery_key, Audit.json_dumps(new_config))
+        _LOGGER.debug(audit.debug("loaded config from discovery({}): {}".format(
+            discovery_key, Audit.json_dumps(new_config))))
+        discovered_config = new_config.get(Config.SERVICE_NAME_POLICY_HANDLER)
 
-        Config.discovered_config.set_config(new_config.get(Config.SERVICE_NAME_POLICY_HANDLER))
-        _LOGGER.info("config from discovery: %s", Config.discovered_config)
+        Config._overwrite_discovered_config(audit, discovered_config)
+
+        Config.discovered_config.set_config(discovered_config)
+        _LOGGER.info(audit.info("config from discovery: {}".format(Config.discovered_config)))
 
 
     @staticmethod
diff --git a/policyhandler/deploy_handler.py b/policyhandler/deploy_handler.py
index a127e54..997ec3e 100644
--- a/policyhandler/deploy_handler.py
+++ b/policyhandler/deploy_handler.py
@@ -1,5 +1,5 @@
 # ================================================================================
-# Copyright (c) 2017-2019 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2017-2020 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.
@@ -25,8 +25,7 @@
 
 from .config import Config, Settings
 from .discovery import DiscoveryClient
-from .onap.audit import (REQUEST_X_ECOMP_REQUESTID, AuditHttpCode,
-                         AuditResponseCode, Metrics)
+from .onap.audit import AuditHttpCode, AuditResponseCode, Metrics
 from .policy_consts import (CATCH_UP, LATEST_POLICIES, POLICIES,
                             POLICY_FILTER_MATCHES, POLICY_FILTERS,
                             REMOVED_POLICIES, TARGET_ENTITY)
@@ -172,10 +171,10 @@
         changed, pool_size = DeployHandler._settings.get_by_key(Config.POOL_CONNECTIONS, 10)
         if changed:
             DeployHandler._requests_session.mount(
-                'https://', requests.adapters.HTTPAdapter(pool_connections=pool_size,
+                'https://', requests.adapters.HTTPAdapter(pool_connections=1,
                                                           pool_maxsize=pool_size))
             DeployHandler._requests_session.mount(
-                'http://', requests.adapters.HTTPAdapter(pool_connections=pool_size,
+                'http://', requests.adapters.HTTPAdapter(pool_connections=1,
                                                          pool_maxsize=pool_size))
 
         _, config_dh = DeployHandler._settings.get_by_key(Config.DEPLOY_HANDLER)
@@ -301,7 +300,8 @@
 
         metrics = Metrics(aud_parent=audit, targetEntity="{} policy_update".format(target_entity),
                           targetServiceName=url)
-        headers = {REQUEST_X_ECOMP_REQUESTID : metrics.request_id}
+
+        headers = metrics.put_request_id_into_headers()
 
         log_action = "put to {} at {}".format(target_entity, url)
         log_data = "msg={} headers={}, params={}, timeout_in_secs={}, custom_kwargs({})".format(
@@ -330,7 +330,7 @@
                           else AuditHttpCode.SERVER_INTERNAL_ERROR.value)
             error_msg = "failed to {} {}: {} {}".format(
                 log_action, type(ex).__name__, str(ex), log_data)
-            _LOGGER.exception(error_msg)
+            _LOGGER.exception(metrics.fatal(error_msg))
             metrics.set_http_status_code(error_code)
             audit.set_http_status_code(error_code)
             metrics.metrics(error_msg)
@@ -371,7 +371,7 @@
         metrics = Metrics(aud_parent=audit,
                           targetEntity="{} get_deployed_policies".format(target_entity),
                           targetServiceName=url)
-        headers = {REQUEST_X_ECOMP_REQUESTID : metrics.request_id}
+        headers = metrics.put_request_id_into_headers()
 
         log_action = "get from {} at {}".format(target_entity, url)
         log_data = "headers={}, params={}, timeout_in_secs={}, custom_kwargs({})".format(
@@ -387,7 +387,7 @@
             metrics.set_http_status_code(AuditHttpCode.SERVICE_UNAVAILABLE_ERROR.value)
             audit.set_http_status_code(AuditHttpCode.SERVICE_UNAVAILABLE_ERROR.value)
             metrics.metrics(error_msg)
-            return None, None
+            return {"error": "failed to retrieve policies from deployment-handler"}, None, None
 
         res = None
         try:
@@ -399,11 +399,11 @@
                           else AuditHttpCode.SERVER_INTERNAL_ERROR.value)
             error_msg = "failed to {} {}: {} {}".format(
                 log_action, type(ex).__name__, str(ex), log_data)
-            _LOGGER.exception(error_msg)
+            _LOGGER.exception(metrics.fatal(error_msg))
             metrics.set_http_status_code(error_code)
             audit.set_http_status_code(error_code)
             metrics.metrics(error_msg)
-            return None, None
+            return {"error": "failed to retrieve policies from deployment-handler"}, None, None
 
         metrics.set_http_status_code(res.status_code)
         audit.set_http_status_code(res.status_code)
@@ -414,7 +414,7 @@
 
         if res.status_code != requests.codes.ok:
             _LOGGER.error(log_line)
-            return None, None
+            return {"error": "failed to retrieve policies from deployment-handler"}, None, None
 
         result = res.json() or {}
         DeployHandler._server_instance_changed(result, metrics)
@@ -426,10 +426,10 @@
             _LOGGER.warning(audit.warn(
                 "found no deployed policies or policy-filters: {}".format(log_line),
                 error_code=AuditResponseCode.DATA_ERROR))
-            return policies, policy_filters
+            return {"warning": "got no deployed policies"}, None, None
 
         _LOGGER.info(log_line)
-        return policies, policy_filters
+        return None, policies, policy_filters
 
     @staticmethod
     def _server_instance_changed(result, metrics):
diff --git a/policyhandler/discovery.py b/policyhandler/discovery.py
index 83f54ac..b6b6bbd 100644
--- a/policyhandler/discovery.py
+++ b/policyhandler/discovery.py
@@ -1,5 +1,5 @@
 # ================================================================================
-# Copyright (c) 2017-2019 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2017-2020 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.
@@ -85,7 +85,7 @@
                           else AuditHttpCode.SERVER_INTERNAL_ERROR.value)
             error_msg = ("failed {}/{} to {} {}: {}".format(status_code, error_code, log_line,
                                                             type(ex).__name__, str(ex)))
-            _LOGGER.exception(error_msg)
+            _LOGGER.exception(metrics.fatal(error_msg))
             metrics.set_http_status_code(error_code)
             audit.set_http_status_code(error_code)
             metrics.metrics(error_msg)
@@ -136,7 +136,7 @@
                           else AuditHttpCode.SERVER_INTERNAL_ERROR.value)
             error_msg = ("failed {}/{} to {} {}: {}".format(status_code, error_code, log_line,
                                                             type(ex).__name__, str(ex)))
-            _LOGGER.exception(error_msg)
+            _LOGGER.exception(metrics.fatal(error_msg))
             metrics.set_http_status_code(error_code)
             audit.set_http_status_code(error_code)
             metrics.metrics(error_msg)
diff --git a/policyhandler/onap/audit.py b/policyhandler/onap/audit.py
index 3c09c16..269dfd8 100644
--- a/policyhandler/onap/audit.py
+++ b/policyhandler/onap/audit.py
@@ -1,5 +1,5 @@
 # ================================================================================
-# Copyright (c) 2017-2019 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2017-2020 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.
@@ -25,6 +25,7 @@
 """
 
 import copy
+import hashlib
 import json
 import os
 import re
@@ -41,6 +42,7 @@
 from .process_info import ProcessInfo
 
 REQUEST_X_ECOMP_REQUESTID = "X-ECOMP-RequestID"
+REQUEST_X_ONAP_REQUESTID = "X-ONAP-RequestID"
 REQUEST_REMOTE_ADDR = "Remote-Addr"
 REQUEST_HOST = "Host"
 HOSTNAME = "HOSTNAME"
@@ -118,7 +120,7 @@
 class _Audit(object):
     """put the audit object on stack per each initiating request in the system
 
-    :request_id: is the X-ECOMP-RequestID for tracing
+    :request_id: is the X-ONAP-RequestID or X-ECOMP-RequestID for tracing
 
     :req_message: is the request message string for logging
 
@@ -172,7 +174,7 @@
         """create audit object per each request in the system
 
         :job_name: is the name of the audit job for health stats
-        :request_id: is the X-ECOMP-RequestID for tracing
+        :request_id: is the X-ONAP-RequestID or X-ECOMP-RequestID for tracing
         :req_message: is the request message string for logging
         :kwargs: - put any request related params into kwargs
         """
@@ -184,6 +186,12 @@
         self.max_http_status_code = 0
         self._lock = threading.Lock()
 
+    def put_request_id_into_headers(self, headers=None):
+        """when sending message out - put the request_id into headers"""
+        headers = headers or {}
+        headers[REQUEST_X_ONAP_REQUESTID]  = self.request_id
+        headers[REQUEST_X_ECOMP_REQUESTID] = self.request_id
+        return headers
 
     @staticmethod
     def register_item_health(health_name, health_getter=None):
@@ -241,6 +249,8 @@
 
     def set_http_status_code(self, http_status_code):
         """accumulate the highest(worst) http status code"""
+        if http_status_code is None:
+            http_status_code = AuditHttpCode.SERVER_INTERNAL_ERROR.value
         with self._lock:
             if self.max_http_status_code < AuditHttpCode.SERVER_INTERNAL_ERROR.value:
                 self.max_http_status_code = max(http_status_code, self.max_http_status_code)
@@ -308,9 +318,7 @@
         """debug+error - the warn level of logging"""
         all_kwargs = self.merge_all_kwargs(**kwargs)
 
-        if error_code and isinstance(error_code, AuditResponseCode):
-            all_kwargs[ERROR_CODE] = error_code.value
-            all_kwargs[ERROR_DESCRIPTION] = AuditResponseCode.get_human_text(error_code)
+        self._set_error_code_in_kwargs(error_code, all_kwargs)
 
         _Audit._logger_debug.warn(log_line, **all_kwargs)
         _Audit._logger_error.warn(log_line, **all_kwargs)
@@ -320,9 +328,7 @@
         """debug+error - the error level of logging"""
         all_kwargs = self.merge_all_kwargs(**kwargs)
 
-        if error_code and isinstance(error_code, AuditResponseCode):
-            all_kwargs[ERROR_CODE] = error_code.value
-            all_kwargs[ERROR_DESCRIPTION] = AuditResponseCode.get_human_text(error_code)
+        self._set_error_code_in_kwargs(error_code, all_kwargs)
 
         _Audit._logger_debug.error(log_line, **all_kwargs)
         _Audit._logger_error.error(log_line, **all_kwargs)
@@ -332,25 +338,32 @@
         """debug+error - the fatal level of logging"""
         all_kwargs = self.merge_all_kwargs(**kwargs)
 
-        if error_code and isinstance(error_code, AuditResponseCode):
-            all_kwargs[ERROR_CODE] = error_code.value
-            all_kwargs[ERROR_DESCRIPTION] = AuditResponseCode.get_human_text(error_code)
+        self._set_error_code_in_kwargs(error_code, all_kwargs)
 
         _Audit._logger_debug.fatal(log_line, **all_kwargs)
         _Audit._logger_error.fatal(log_line, **all_kwargs)
         return log_line
 
+    def _set_error_code_in_kwargs(self, error_code, all_kwargs):
+        """set the error code and description in kwargs for logging"""
+        if not error_code or not isinstance(error_code, AuditResponseCode):
+            error_code = AuditResponseCode.UNKNOWN_ERROR
+        all_kwargs[ERROR_CODE] = error_code.value
+        all_kwargs[ERROR_DESCRIPTION] = AuditResponseCode.get_human_text(error_code)
+
     @staticmethod
     def hide_secrets(obj):
         """hides the known secret field values of the dictionary"""
         if not isinstance(obj, dict):
             return obj
 
-        for key in obj:
+        for key, val in obj.items():
             if key.lower() in [HEADER_CLIENTAUTH, HEADER_AUTHORIZATION]:
-                obj[key] = "*"
-            elif isinstance(obj[key], dict):
-                obj[key] = _Audit.hide_secrets(obj[key])
+                hval = hashlib.sha256()
+                hval.update(val.encode())
+                obj[key] = "***({})***".format(hval.hexdigest())
+            elif isinstance(val, dict):
+                obj[key] = _Audit.hide_secrets(val)
 
         return obj
 
@@ -375,7 +388,7 @@
         """create audit object per each request in the system
 
         :job_name: is the name of the audit job for health stats
-        :request_id: is the X-ECOMP-RequestID for tracing
+        :request_id: is the X-ONAP-RequestID or X-ECOMP-RequestID for tracing
         :req_message: is the request message string for logging
         :aud_parent: is the parent Audit - used for sub-query metrics to other systems
         :kwargs: - put any request related params into kwargs
@@ -388,7 +401,9 @@
         headers = self.kwargs.get("headers", {})
         if headers:
             if not self.request_id:
-                self.request_id = headers.get(REQUEST_X_ECOMP_REQUESTID)
+                self.request_id = headers.get(REQUEST_X_ONAP_REQUESTID,
+                                              headers.get(REQUEST_X_ECOMP_REQUESTID))
+
             self.kwargs.setdefault(AUDIT_IPADDRESS, headers.get(REQUEST_REMOTE_ADDR))
             self.kwargs.setdefault(AUDIT_SERVER, headers.get(REQUEST_HOST))
 
diff --git a/policyhandler/pdp_api/dmaap_mr.py b/policyhandler/pdp_api/dmaap_mr.py
new file mode 100644
index 0000000..2d4d468
--- /dev/null
+++ b/policyhandler/pdp_api/dmaap_mr.py
@@ -0,0 +1,202 @@
+# ================================================================================
+# Copyright (c) 2019 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=========================================================
+#
+
+"""policy-client communicates with policy-engine thru REST API"""
+
+import copy
+import json
+from threading import Lock
+
+import requests
+
+from ..config import Config, Settings
+from ..onap.audit import AuditHttpCode, AuditResponseCode, Metrics
+from ..utils import Utils
+
+_LOGGER = Utils.get_logger(__file__)
+
+class DmaapMr(object):
+    """using the http API to policy-engine"""
+    _lazy_inited = False
+    DEFAULT_TIMEOUT_IN_SECS = 60
+
+    _lock = Lock()
+    _settings = Settings(Config.DMAAP_MR)
+
+    _requests_session = None
+    _long_polling = False
+    _target_entity = None
+    _url = None
+    _query = {}
+    _headers = None
+    _custom_kwargs = {}
+    _timeout_in_secs = DEFAULT_TIMEOUT_IN_SECS
+
+    @staticmethod
+    def _init(audit):
+        """init static config"""
+        DmaapMr._custom_kwargs = {}
+        tls_ca_mode = None
+
+        if not DmaapMr._requests_session:
+            DmaapMr._requests_session = requests.Session()
+            DmaapMr._requests_session.mount(
+                'https://', requests.adapters.HTTPAdapter(pool_connections=1, pool_maxsize=1,
+                                                          pool_block=True))
+            DmaapMr._requests_session.mount(
+                'http://', requests.adapters.HTTPAdapter(pool_connections=1, pool_maxsize=1,
+                                                         pool_block=True))
+
+
+        _, config = DmaapMr._settings.get_by_key(Config.DMAAP_MR)
+        if config:
+            DmaapMr._url = config.get("url")
+            DmaapMr._headers = config.get("headers", {})
+            DmaapMr._query = copy.deepcopy(config.get("query", {}))
+            if DmaapMr._query.get(Config.QUERY_TIMEOUT, 0) < 1000:
+                DmaapMr._query[Config.QUERY_TIMEOUT] = 15000
+
+            DmaapMr._target_entity = config.get("target_entity", Config.DMAAP_MR)
+
+            tls_ca_mode = config.get(Config.TLS_CA_MODE)
+            DmaapMr._custom_kwargs = Config.get_requests_kwargs(tls_ca_mode)
+            DmaapMr._timeout_in_secs = config.get(Config.TIMEOUT_IN_SECS)
+            if not DmaapMr._timeout_in_secs or DmaapMr._timeout_in_secs < 1:
+                DmaapMr._timeout_in_secs = DmaapMr.DEFAULT_TIMEOUT_IN_SECS
+
+        _LOGGER.info(
+            audit.info(("config DMaaP MR({}) url({}) query({}) headers({}) "
+                        "tls_ca_mode({}) custom_kwargs({}) timeout_in_secs({}): {}").format(
+                            DmaapMr._target_entity, DmaapMr._url,
+                            Metrics.json_dumps(DmaapMr._query),
+                            Metrics.json_dumps(DmaapMr._headers), tls_ca_mode,
+                            json.dumps(DmaapMr._custom_kwargs), DmaapMr._timeout_in_secs,
+                            DmaapMr._settings)))
+
+        DmaapMr._settings.commit_change()
+        DmaapMr._lazy_inited = True
+
+    @staticmethod
+    def reconfigure(audit):
+        """reconfigure"""
+        with DmaapMr._lock:
+            DmaapMr._settings.set_config(Config.discovered_config)
+            if not DmaapMr._settings.is_changed():
+                DmaapMr._settings.commit_change()
+                return False
+
+            DmaapMr._lazy_inited = False
+            DmaapMr._long_polling = False
+            DmaapMr._init(audit)
+        return True
+
+    @staticmethod
+    def _lazy_init(audit):
+        """init static config"""
+        if DmaapMr._lazy_inited:
+            return
+
+        with DmaapMr._lock:
+            if DmaapMr._lazy_inited:
+                return
+
+            DmaapMr._settings.set_config(Config.discovered_config)
+            DmaapMr._long_polling = False
+            DmaapMr._init(audit)
+
+    @staticmethod
+    def get_policy_updates(audit):
+        """
+        get from DMaaP MR - returns json list of stringified messages
+
+        example [
+            "{\"deployed-policies\":[
+                {\"policy-type\":\"onap.policies.monitoring.cdap.tca.hi.lo.app\",
+                 \"policy-type-version\":\"1.0.0\",
+                 \"policy-id\":\"onap.scaleout.tca\",
+                 \"policy-version\":\"2.2.2\",
+                 \"success-count\":3,
+                 \"failure-count\":0
+            }],
+             \"undeployed-policies\":[
+                {\"policy-type\":\"onap.policies.monitoring.cdap.tca.hi.lo.app\",
+                 \"policy-type-version\":\"1.0.0\",
+                 \"policy-id\":\"onap.scaleout.tca\",
+                 \"policy-version\":\"1.0.0\",
+                 \"success-count\":3,
+                 \"failure-count\":0
+            }]}"
+        ]
+        """
+        DmaapMr._lazy_init(audit)
+
+        if not DmaapMr._url:
+            _LOGGER.error(
+                audit.error("no url for DMaaP MR", error_code=AuditResponseCode.AVAILABILITY_ERROR))
+            audit.set_http_status_code(AuditHttpCode.SERVER_INTERNAL_ERROR.value)
+            return None
+
+        with DmaapMr._lock:
+            target_entity = DmaapMr._target_entity
+            url = DmaapMr._url
+            params = copy.deepcopy(DmaapMr._query) if DmaapMr._long_polling else None
+            headers = copy.deepcopy(DmaapMr._headers)
+            timeout_in_secs = DmaapMr._timeout_in_secs
+            custom_kwargs = copy.deepcopy(DmaapMr._custom_kwargs)
+            DmaapMr._long_polling = True
+
+        metrics = Metrics(aud_parent=audit, targetEntity=target_entity, targetServiceName=url)
+
+        headers = metrics.put_request_id_into_headers(headers)
+
+        log_line = (
+            "get from {} at {} with params={}, headers={}, custom_kwargs({}) timeout_in_secs({})"
+            .format(target_entity, url, json.dumps(params), Metrics.json_dumps(headers),
+                    json.dumps(custom_kwargs), timeout_in_secs))
+
+        _LOGGER.info(metrics.metrics_start(log_line))
+
+        res = None
+        try:
+            res = DmaapMr._requests_session.get(url, params=params, headers=headers,
+                                                timeout=timeout_in_secs, **custom_kwargs)
+
+        except Exception as ex:
+            error_code = (AuditHttpCode.SERVICE_UNAVAILABLE_ERROR.value
+                          if isinstance(ex, requests.exceptions.RequestException)
+                          else AuditHttpCode.SERVER_INTERNAL_ERROR.value)
+            error_msg = ("failed {}: {} to {}".format(type(ex).__name__, str(ex), log_line))
+
+            _LOGGER.exception(metrics.fatal(error_msg))
+            metrics.set_http_status_code(error_code)
+            audit.set_http_status_code(error_code)
+            metrics.metrics(error_msg)
+            return None
+
+        log_line = "response {} from {}: text={} headers={}".format(
+            res.status_code, log_line, res.text, Metrics.json_dumps(dict(res.headers.items())))
+        _LOGGER.info(log_line)
+
+        metrics.set_http_status_code(res.status_code)
+        audit.set_http_status_code(res.status_code)
+        metrics.metrics(log_line)
+
+        policy_updates = None
+        if res.status_code == requests.codes.ok:
+            policy_updates = res.json()
+
+        return policy_updates
diff --git a/policyhandler/pdp_api/pdp_consts.py b/policyhandler/pdp_api/pdp_consts.py
index 2337456..32f80f3 100644
--- a/policyhandler/pdp_api/pdp_consts.py
+++ b/policyhandler/pdp_api/pdp_consts.py
@@ -1,5 +1,5 @@
 # ================================================================================
-# Copyright (c) 2019 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2019-2020 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.
@@ -33,3 +33,7 @@
 PDP_REQ_ONAP_COMPONENT = "ONAPComponent"
 PDP_REQ_ONAP_INSTANCE = "ONAPInstance"
 PDP_REQ_RESOURCE = "resource"
+
+# fields from policy-update notification
+DEPLOYED_POLICIES = "deployed-policies"
+UNDEPLOYED_POLICIES = "undeployed-policies"
diff --git a/policyhandler/pdp_api/policy_listener.py b/policyhandler/pdp_api/policy_listener.py
index 9fa4695..0d33785 100644
--- a/policyhandler/pdp_api/policy_listener.py
+++ b/policyhandler/pdp_api/policy_listener.py
@@ -1,5 +1,5 @@
 # ================================================================================
-# Copyright (c) 2019 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2019-2020 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.
@@ -17,39 +17,173 @@
 
 """
 policy-listener communicates with policy-engine
-to receive push notifications
+to receive push notifications through DMaaP MR
 on updates and removal of policies.
 
-on receiving the policy-notifications, the policy-receiver
+on receiving the policy-notifications, the policy-listener
 passes the notifications to policy-updater
 """
 
+import json
 import os
+from threading import Event, Lock, Thread
 
-from ..utils import ToBeImplementedException, Utils
+from ..onap.audit import Audit, AuditResponseCode
+from ..utils import Utils
+from .dmaap_mr import DmaapMr
+from .pdp_consts import (DEPLOYED_POLICIES, PDP_METADATA, PDP_POLICY_ID,
+                         PDP_POLICY_VERSION, UNDEPLOYED_POLICIES)
 
 _LOGGER = Utils.get_logger(__file__)
 
-class PolicyListener(object):
-    """listener to PolicyEngine"""
+class PolicyListener(Thread):
+    """listener to DMaaP MR"""
     PDP_API_FOLDER = os.path.basename(os.path.dirname(os.path.realpath(__file__)))
+    SLEEP_BEFORE_RESTARTING = 30
 
-    def __init__(self, *_):
+    def __init__(self, audit, policy_updater):
         """listener to receive the policy notifications from PolicyEngine"""
-        _LOGGER.info("to_be_implemented")
-        raise ToBeImplementedException()
+        Thread.__init__(self, name="policy_listener", daemon=True)
 
-    def reconfigure(self, _):
-        """configure and reconfigure the listener"""
-        _LOGGER.info("to_be_implemented")
-        raise ToBeImplementedException()
+        self._policy_updater = policy_updater
+        self._lock = Lock()
+        self._run_event = Event()
+        self._keep_running = True
+        self._first_loop = True
+
+        self._dmaap_mr = None
+        self.reconfigure(audit)
+
+    def reconfigure(self, audit):
+        """configure and reconfigure the DMaaP MR"""
+        reconfigured = DmaapMr.reconfigure(audit)
+        if reconfigured and not self._first_loop:
+            with self._lock:
+                self._first_loop = True
+        return reconfigured
 
     def run(self):
-        """listen on web-socket and pass the policy notifications to policy-updater"""
-        _LOGGER.info("to_be_implemented")
-        raise ToBeImplementedException()
+        """listen on DMaaP MR and pass the policy notifications to policy-updater"""
+        _LOGGER.info("starting policy_listener...")
+        delayed_restarting = False
+        while True:
+            if not self._get_keep_running():
+                break
 
-    def shutdown(self, _):
-        """Shutdown the policy-listener"""
-        _LOGGER.info("to_be_implemented")
-        raise ToBeImplementedException()
+            if delayed_restarting:
+                _LOGGER.info(
+                    "going to sleep for %s secs before restarting policy-notifications",
+                    PolicyListener.SLEEP_BEFORE_RESTARTING)
+
+                self._run_event.clear()
+                self._run_event.wait(PolicyListener.SLEEP_BEFORE_RESTARTING)
+                if not self._get_keep_running():
+                    break
+
+            audit = Audit(job_name="policy_update",
+                          req_message="waiting for policy-notifications...",
+                          retry_get_config=True)
+
+            policy_updates = DmaapMr.get_policy_updates(audit)
+
+            if not self._get_keep_running():
+                audit.audit_done(result="exiting policy_listener")
+                break
+
+            delayed_restarting = not audit.is_success()
+            if self._first_loop:
+                policy_updater = None
+                with self._lock:
+                    if self._first_loop:
+                        self._first_loop = False
+                        policy_updater = self._policy_updater
+                if policy_updater is not None:
+                    audit.req_message = "first catch_up"
+                    _LOGGER.info(audit.info("first catch_up - ignoring policy-updates: {}"
+                                            .format(json.dumps(policy_updates))))
+                    policy_updater.catch_up(audit)
+            elif not policy_updates:
+                _LOGGER.info(audit.info(
+                    "no policy-updates: {}".format(json.dumps(policy_updates))))
+                audit.audit_done(result="no policy-updates")
+            else:
+                self._on_policy_update_message(audit, policy_updates)
+
+        _LOGGER.info("exit policy_listener")
+
+    def _get_keep_running(self):
+        """thread-safe check whether to continue running"""
+        with self._lock:
+            keep_running = self._keep_running
+        return keep_running
+
+    def _on_policy_update_message(self, audit, policy_updates):
+        """received the notification from PDP"""
+        try:
+            _LOGGER.info("Received notification message: %s", json.dumps(policy_updates))
+            if not policy_updates:
+                return
+
+            policies_updated = []
+
+            for idx, pdp_update_msg in enumerate(policy_updates):
+                pdp_update_msg = Utils.safe_json_parse(pdp_update_msg)
+
+                if not pdp_update_msg or not isinstance(pdp_update_msg, dict):
+                    _LOGGER.warning(audit.warn(
+                        "unexpected message from PDP: {}".format(json.dumps(pdp_update_msg)),
+                        error_code=AuditResponseCode.DATA_ERROR))
+                    continue
+
+                _LOGGER.debug("raw policy_update[%s]: %s", idx, json.dumps(pdp_update_msg))
+
+                deployed_policies = [
+                    {PDP_METADATA: {PDP_POLICY_ID: p_deployed.get(PDP_POLICY_ID),
+                                    PDP_POLICY_VERSION: p_deployed.get(PDP_POLICY_VERSION)}}
+                    for p_deployed in pdp_update_msg.get(DEPLOYED_POLICIES, [])
+                    if (p_deployed.get(PDP_POLICY_ID) is not None
+                        and p_deployed.get(PDP_POLICY_VERSION) is not None)]
+
+                undeployed_policies = [
+                    {PDP_METADATA: {PDP_POLICY_ID: p_undeployed.get(PDP_POLICY_ID),
+                                    PDP_POLICY_VERSION: p_undeployed.get(PDP_POLICY_VERSION)}}
+                    for p_undeployed in pdp_update_msg.get(UNDEPLOYED_POLICIES, [])
+                    if (p_undeployed.get(PDP_POLICY_ID) is not None
+                        and p_undeployed.get(PDP_POLICY_VERSION) is not None)]
+
+                if not deployed_policies and not undeployed_policies:
+                    _LOGGER.warning(audit.warn(
+                        "no policy deployed or undeployed: {}".format(json.dumps(pdp_update_msg)),
+                        error_code=AuditResponseCode.DATA_ERROR))
+                    continue
+
+                policy_update = {DEPLOYED_POLICIES: deployed_policies,
+                                 UNDEPLOYED_POLICIES: undeployed_policies}
+                _LOGGER.info(audit.info("policy_update[{}]: {}"
+                                        .format(idx, json.dumps(policy_update))))
+
+                policies_updated.append(policy_update)
+
+            if not policies_updated:
+                _LOGGER.warning(audit.warn(
+                    "erroneous notification from PDP: {}".format(json.dumps(policy_updates)),
+                    error_code=AuditResponseCode.DATA_ERROR))
+                return
+
+            with self._lock:
+                policy_updater = self._policy_updater
+            if policy_updater is not None:
+                policy_updater.policy_update(audit, policies_updated)
+        except Exception as ex:
+            error_msg = "crash {} {} at {}: {}".format(type(ex).__name__, str(ex),
+                                                       "on_policy_update_message",
+                                                       json.dumps(policy_updates))
+            _LOGGER.exception(audit.fatal(error_msg))
+
+    def shutdown(self, audit):
+        """Shutdown the policy_listener"""
+        _LOGGER.info(audit.info("shutdown policy_listener - no waiting..."))
+        with self._lock:
+            self._keep_running = False
+            self._policy_updater = None
+            self._run_event.set()
diff --git a/policyhandler/pdp_api/policy_matcher.py b/policyhandler/pdp_api/policy_matcher.py
index 57258c3..2972fb8 100644
--- a/policyhandler/pdp_api/policy_matcher.py
+++ b/policyhandler/pdp_api/policy_matcher.py
@@ -1,5 +1,5 @@
 # ================================================================================
-# Copyright (c) 2019 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2019-2020 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.
@@ -19,7 +19,98 @@
 
 import os
 
+from ..deploy_handler import DeployHandler, PolicyUpdateMessage
+from ..policy_consts import (ERRORED_POLICIES, LATEST_POLICIES, POLICY_BODY,
+                             POLICY_VERSIONS)
+from ..utils import Utils
+from .pdp_consts import POLICY_VERSION
+from .policy_rest import PolicyRest
+
+_LOGGER = Utils.get_logger(__file__)
 
 class PolicyMatcher(object):
     """policy-matcher - static class"""
+    PENDING_UPDATE = "pending_update"
     PDP_API_FOLDER = os.path.basename(os.path.dirname(os.path.realpath(__file__)))
+
+    @staticmethod
+    def build_catch_up_message(audit, deployed_policies, _=None):
+        """find the latest policies from policy-engine for the deployed policies"""
+
+        if not deployed_policies:
+            error_txt = "no deployed policies"
+            _LOGGER.warning(error_txt)
+            return {"error": error_txt}, None
+
+        pdp_response = PolicyRest.get_latest_policies(audit, policy_ids=list(deployed_policies))
+
+        if not audit.is_success():
+            error_txt = "failed to retrieve policies from policy-engine"
+            _LOGGER.warning(error_txt)
+            return {"error": error_txt}, None
+
+        latest_policies = pdp_response.get(LATEST_POLICIES, {})
+        errored_policies = pdp_response.get(ERRORED_POLICIES, {})
+
+        latest_policies, changed_policies = PolicyMatcher._match_policies(
+            latest_policies, deployed_policies)
+
+        errored_policies = dict((policy_id, policy)
+                                for (policy_id, policy) in errored_policies.items()
+                                if deployed_policies.get(policy_id, {}).get(POLICY_VERSIONS))
+
+        removed_policies = dict(
+            (policy_id, True)
+            for (policy_id, deployed_policy) in deployed_policies.items()
+            if deployed_policy.get(POLICY_VERSIONS)
+            and policy_id not in latest_policies
+            and policy_id not in errored_policies
+        )
+
+        return ({LATEST_POLICIES: latest_policies, ERRORED_POLICIES: errored_policies},
+                PolicyUpdateMessage(changed_policies, removed_policies))
+
+    @staticmethod
+    def match_to_deployed_policies(audit, policies_updated, policies_removed):
+        """match the policies_updated, policies_removed versus deployed policies"""
+        _, deployed_policies, _ = DeployHandler.get_deployed_policies(audit)
+        if not audit.is_success():
+            return {}, {}, {}
+
+        _, changed_policies = PolicyMatcher._match_policies(policies_updated, deployed_policies)
+
+        policies_removed = dict((policy_id, policy)
+                                for (policy_id, policy) in policies_removed.items()
+                                if deployed_policies.get(policy_id, {}).get(POLICY_VERSIONS))
+
+        return changed_policies, policies_removed, {}
+
+
+    @staticmethod
+    def _match_policies(policies, deployed_policies):
+        """
+        Match policies to deployed policies by policy_id.
+
+        Also calculates the policies that changed in comparison to deployed policies
+        """
+        matching_policies = {}
+        changed_policies = {}
+
+        policies = policies or {}
+        deployed_policies = deployed_policies or {}
+
+        for (policy_id, policy) in policies.items():
+            new_version = policy.get(POLICY_BODY, {}).get(POLICY_VERSION)
+            deployed_policy = deployed_policies.get(policy_id)
+
+            if deployed_policy:
+                matching_policies[policy_id] = policy
+
+            policy_changed = (deployed_policy and new_version
+                              and (deployed_policy.get(PolicyMatcher.PENDING_UPDATE)
+                                   or {new_version} ^
+                                   deployed_policy.get(POLICY_VERSIONS, {}).keys()))
+            if policy_changed:
+                changed_policies[policy_id] = policy
+
+        return matching_policies, changed_policies
diff --git a/policyhandler/pdp_api/policy_rest.py b/policyhandler/pdp_api/policy_rest.py
index 14d9296..0b33ccd 100644
--- a/policyhandler/pdp_api/policy_rest.py
+++ b/policyhandler/pdp_api/policy_rest.py
@@ -1,5 +1,5 @@
 # ================================================================================
-# Copyright (c) 2019 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2019-2020 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.
@@ -20,16 +20,19 @@
 import copy
 import json
 import os
+import time
 import urllib.parse
+from multiprocessing.dummy import Pool as ThreadPool
 from threading import Lock
 
 import requests
 
 from ..config import Config, Settings
-from ..onap.audit import (REQUEST_X_ECOMP_REQUESTID, AuditHttpCode,
-                          AuditResponseCode, Metrics)
+from ..onap.audit import AuditHttpCode, AuditResponseCode, Metrics
+from ..policy_consts import (ERRORED_POLICIES, LATEST_POLICIES, POLICY_BODY,
+                             POLICY_ID, POLICY_NAMES)
 from ..utils import Utils
-from .pdp_consts import PDP_POLICIES
+from .pdp_consts import PDP_POLICIES, POLICY_NAME, POLICY_VERSION
 from .policy_utils import PolicyUtils
 
 _LOGGER = Utils.get_logger(__file__)
@@ -37,11 +40,15 @@
 class PolicyRest(object):
     """using the http API to policy-engine"""
     PDP_API_FOLDER = os.path.basename(os.path.dirname(os.path.realpath(__file__)))
-    _lazy_inited = False
+    EXPECTED_VERSIONS = "expected_versions"
+    IGNORE_POLICY_NAMES = "ignore_policy_names"
     DEFAULT_TIMEOUT_IN_SECS = 60
+    _lazy_inited = False
 
     _lock = Lock()
-    _settings = Settings(Config.FIELD_POLICY_ENGINE, Config.POOL_CONNECTIONS)
+    _settings = Settings(Config.FIELD_POLICY_ENGINE, Config.POOL_CONNECTIONS,
+                         Config.THREAD_POOL_SIZE,
+                         Config.POLICY_RETRY_COUNT, Config.POLICY_RETRY_SLEEP)
 
     _target_entity = None
     _requests_session = None
@@ -49,6 +56,9 @@
     _url_pdp_decision = None
     _headers = None
     _custom_kwargs = {}
+    _thread_pool_size = 4
+    _policy_retry_count = 1
+    _policy_retry_sleep = 0
     _timeout_in_secs = DEFAULT_TIMEOUT_IN_SECS
 
     @staticmethod
@@ -63,10 +73,10 @@
         changed, pool_size = PolicyRest._settings.get_by_key(Config.POOL_CONNECTIONS, 20)
         if changed:
             PolicyRest._requests_session.mount(
-                'https://', requests.adapters.HTTPAdapter(pool_connections=pool_size,
+                'https://', requests.adapters.HTTPAdapter(pool_connections=1,
                                                           pool_maxsize=pool_size))
             PolicyRest._requests_session.mount(
-                'http://', requests.adapters.HTTPAdapter(pool_connections=pool_size,
+                'http://', requests.adapters.HTTPAdapter(pool_connections=1,
                                                          pool_maxsize=pool_size))
 
         _, config = PolicyRest._settings.get_by_key(Config.FIELD_POLICY_ENGINE)
@@ -77,6 +87,15 @@
                     PolicyRest._url, config.get("path_decision", "/decision/v1/"))
             PolicyRest._headers = config.get("headers", {})
             PolicyRest._target_entity = config.get("target_entity", Config.FIELD_POLICY_ENGINE)
+            _, PolicyRest._thread_pool_size = PolicyRest._settings.get_by_key(
+                Config.THREAD_POOL_SIZE, 4)
+            if PolicyRest._thread_pool_size < 2:
+                PolicyRest._thread_pool_size = 2
+
+            _, PolicyRest._policy_retry_count = PolicyRest._settings.get_by_key(
+                Config.POLICY_RETRY_COUNT, 1)
+            _, PolicyRest._policy_retry_sleep = PolicyRest._settings.get_by_key(
+                Config.POLICY_RETRY_SLEEP, 0)
 
             tls_ca_mode = config.get(Config.TLS_CA_MODE)
             PolicyRest._custom_kwargs = Config.get_requests_kwargs(tls_ca_mode)
@@ -121,13 +140,13 @@
             PolicyRest._init()
 
     @staticmethod
-    def _pdp_get_decision(audit, pdp_req):
-        """Communication with the policy-engine"""
+    def _pdp_get_decision(audit, policy_ids):
+        """get policies from the policy-engine by policy-ids"""
         if not PolicyRest._url:
             _LOGGER.error(
                 audit.error("no url for PDP", error_code=AuditResponseCode.AVAILABILITY_ERROR))
             audit.set_http_status_code(AuditHttpCode.SERVER_INTERNAL_ERROR.value)
-            return None
+            return None, None
 
         with PolicyRest._lock:
             session = PolicyRest._requests_session
@@ -137,9 +156,11 @@
             headers = copy.deepcopy(PolicyRest._headers)
             custom_kwargs = copy.deepcopy(PolicyRest._custom_kwargs)
 
+        pdp_req = PolicyUtils.gen_req_to_pdp(policy_ids)
+
         metrics = Metrics(aud_parent=audit, targetEntity=target_entity, targetServiceName=url)
 
-        headers[REQUEST_X_ECOMP_REQUESTID] = metrics.request_id
+        headers = metrics.put_request_id_into_headers(headers)
 
         log_action = "post to {} at {}".format(target_entity, url)
         log_data = "msg={} headers={}, custom_kwargs({}) timeout_in_secs({})".format(
@@ -159,11 +180,11 @@
                           else AuditHttpCode.SERVER_INTERNAL_ERROR.value)
             error_msg = ("failed {}: {} to {}".format(type(ex).__name__, str(ex), log_line))
 
-            _LOGGER.exception(error_msg)
+            _LOGGER.exception(metrics.fatal(error_msg))
             metrics.set_http_status_code(error_code)
             audit.set_http_status_code(error_code)
             metrics.metrics(error_msg)
-            return None
+            return (error_code, None)
 
         log_line = "response {} from {}: text={} headers={}".format(
             res.status_code, log_line, res.text,
@@ -174,40 +195,282 @@
         audit.set_http_status_code(res.status_code)
         metrics.metrics(log_line)
 
-        policy_bodies = None
+        latest_policies = None
         if res.status_code == requests.codes.ok:
-            policy_bodies = res.json().get(PDP_POLICIES)
+            policy_bodies = res.json().get(PDP_POLICIES, {})
+            latest_policies = dict((policy_id, PolicyUtils.convert_to_policy(policy))
+                                   for (policy_id, policy) in policy_bodies.items())
 
-        return policy_bodies
+        return res.status_code, latest_policies
+
 
     @staticmethod
     def get_latest_policy(aud_policy_id):
         """safely try retrieving the latest policy for the policy_id from the policy-engine"""
-        audit, policy_id, _, _ = aud_policy_id
+        audit, policy_id, expected_versions, ignore_policy_names = aud_policy_id
+        str_metrics = "policy_id({0}), expected_versions({1}) ignore_policy_names({2})".format(
+            policy_id, json.dumps(expected_versions), json.dumps(ignore_policy_names))
+
+        try:
+            return PolicyRest._get_latest_policy(
+                audit, policy_id, expected_versions, ignore_policy_names, str_metrics)
+
+        except Exception as ex:
+            error_msg = ("{0}: crash {1} {2} at {3}: {4}"
+                         .format(audit.request_id, type(ex).__name__, str(ex),
+                                 "get_latest_policy", str_metrics))
+
+            _LOGGER.exception(error_msg)
+            audit.fatal(error_msg, error_code=AuditResponseCode.BUSINESS_PROCESS_ERROR)
+            audit.set_http_status_code(AuditHttpCode.SERVER_INTERNAL_ERROR.value)
+            return None
+
+
+    @staticmethod
+    def _get_latest_policy(audit, policy_id,
+                           expected_versions, ignore_policy_names, str_metrics):
+        """retry several times getting the latest policy for the policy_id from the policy-engine"""
+        PolicyRest._lazy_init()
+        latest_policy = None
+        status_code = 0
+        retry_get_config = audit.kwargs.get("retry_get_config")
+
+        for retry in range(1, PolicyRest._policy_retry_count + 1):
+            _LOGGER.debug("try(%s) retry_get_config(%s): %s", retry, retry_get_config, str_metrics)
+
+            done, removed, latest_policy, status_code = PolicyRest._get_latest_policy_once(
+                audit, policy_id, expected_versions, ignore_policy_names)
+
+            if removed:
+                audit.set_http_status_code(AuditHttpCode.DATA_NOT_FOUND_OK.value)
+                return None
+
+            if done or not retry_get_config or not PolicyRest._policy_retry_sleep:
+                break
+
+            if retry == PolicyRest._policy_retry_count:
+                _LOGGER.error(
+                    audit.error("gave up retrying after #{} for policy_id({}) from PDP {}"
+                                .format(retry, policy_id, PolicyRest._url_pdp_decision),
+                                error_code=AuditResponseCode.DATA_ERROR))
+                break
+
+            _LOGGER.warning(audit.warn(
+                "will retry({}) for policy_id({}) in {} secs from PDP {}".format(
+                    retry, policy_id, PolicyRest._policy_retry_sleep, PolicyRest._url_pdp_decision),
+                error_code=AuditResponseCode.DATA_ERROR))
+            time.sleep(PolicyRest._policy_retry_sleep)
+
+        audit.set_http_status_code(status_code)
+        if not PolicyUtils.validate_policy(latest_policy):
+            audit.set_http_status_code(AuditHttpCode.DATA_NOT_FOUND_OK.value)
+            _LOGGER.error(audit.error(
+                "received invalid policy from PDP: {}".format(json.dumps(latest_policy)),
+                error_code=AuditResponseCode.DATA_ERROR))
+
+        return latest_policy
+
+    @staticmethod
+    def _get_latest_policy_once(audit, policy_id, expected_versions, ignore_policy_names):
+        """single attempt to get the latest policy for the policy_id from the policy-engine"""
+
+        status_code, latest_policies = PolicyRest._pdp_get_decision(audit, policy_id)
+
+        if (ignore_policy_names and not expected_versions and not latest_policies
+                and AuditHttpCode.HTTP_OK.value == status_code):
+            return True, True, None, status_code
+
+        log_line = "{} looking for policy_id({}) in latest_policies: {}".format(
+            status_code, policy_id, json.dumps(latest_policies))
+        _LOGGER.info(log_line)
+
+        latest_policy = (latest_policies or {}).get(policy_id)
+
+        log_error = ""
+        if latest_policy:
+            policy_body = latest_policy.get(POLICY_BODY, {})
+            policy_version = policy_body.get(POLICY_VERSION)
+            policy_name = policy_body.get(POLICY_NAME)
+            if expected_versions and policy_version not in expected_versions:
+                log_error = ("received unexpected policy version({}) instead of ({})"
+                             " from PDP for policy_id={}: {}"
+                             .format(policy_version, json.dumps(expected_versions),
+                                     policy_id, json.dumps(latest_policy)))
+            elif ignore_policy_names and policy_name in ignore_policy_names:
+                log_error = ("unexpectedly received policy version({}) from PDP"
+                             " for policy_id={}: {}. to ignore-policy-names {}"
+                             .format(policy_version, policy_id,
+                                     json.dumps(latest_policy),
+                                     json.dumps(ignore_policy_names)))
+
+        if not latest_policy or log_error:
+            _LOGGER.error(audit.error(
+                log_error or "received unexpected policy data({}) from PDP for policy_id={}: {}"
+                .format(json.dumps(latest_policy), policy_id, json.dumps(latest_policies)),
+                error_code=AuditResponseCode.DATA_ERROR))
+            latest_policy = None
+
+        done = bool(latest_policy or audit.is_serious_error(status_code))
+        return done, False, latest_policy, status_code
+
+    @staticmethod
+    def get_latest_updated_policies(audit, updated_policies, removed_policies):
+        """safely try retrieving the latest policies for the list of policy_names"""
+        if not updated_policies and not removed_policies:
+            return None, None
+
+        policies_updated = [(policy_id, policy.get(POLICY_BODY, {}).get(POLICY_VERSION))
+                            for policy_id, policy in updated_policies.items()]
+        policies_removed = [(policy_id, policy.get(POLICY_NAMES, {}))
+                            for policy_id, policy in removed_policies.items()]
+
+        if not policies_updated and not policies_removed:
+            return None, None
+
+        str_metrics = "policies_updated[{0}]: {1} policies_removed[{2}]: {3}".format(
+            len(policies_updated), json.dumps(policies_updated),
+            len(policies_removed), json.dumps(policies_removed))
+
+        try:
+            return PolicyRest._get_latest_updated_policies(
+                audit, str_metrics, policies_updated, policies_removed)
+
+        except Exception as ex:
+            error_msg = ("{0}: crash {1} {2} at {3}: {4}"
+                         .format(audit.request_id, type(ex).__name__, str(ex),
+                                 "get_latest_updated_policies", str_metrics))
+
+            _LOGGER.exception(error_msg)
+            audit.fatal(error_msg, error_code=AuditResponseCode.BUSINESS_PROCESS_ERROR)
+            audit.set_http_status_code(AuditHttpCode.SERVER_INTERNAL_ERROR.value)
+            return None, None
+
+    @staticmethod
+    def _get_latest_updated_policies(audit, str_metrics, policies_updated, policies_removed):
+        """Get the latest policies of the list of policy_names from the policy-engine"""
+        PolicyRest._lazy_init()
+        metrics_total = Metrics(
+            aud_parent=audit,
+            targetEntity="{0} total get_latest_updated_policies".format(PolicyRest._target_entity),
+            targetServiceName=PolicyRest._url_pdp_decision)
+
+        metrics_total.metrics_start("get_latest_updated_policies {0}".format(str_metrics))
+        _LOGGER.debug(str_metrics)
+
+        policies_to_find = {}
+        for (policy_id, policy_version) in policies_updated:
+            if not policy_id or policy_version is None:
+                continue
+            policy = policies_to_find.get(policy_id)
+            if not policy:
+                policies_to_find[policy_id] = {
+                    POLICY_ID: policy_id,
+                    PolicyRest.EXPECTED_VERSIONS: {policy_version: True},
+                    PolicyRest.IGNORE_POLICY_NAMES: {}
+                }
+                continue
+            policy[PolicyRest.EXPECTED_VERSIONS][policy_version] = True
+
+        for (policy_id, policy_names) in policies_removed:
+            if not policy_id:
+                continue
+            policy = policies_to_find.get(policy_id)
+            if not policy:
+                policies_to_find[policy_id] = {
+                    POLICY_ID: policy_id,
+                    PolicyRest.IGNORE_POLICY_NAMES: policy_names
+                }
+                continue
+            policy[PolicyRest.IGNORE_POLICY_NAMES].update(policy_names)
+
+        apns = [(audit, policy_id,
+                 policy_to_find.get(PolicyRest.EXPECTED_VERSIONS),
+                 policy_to_find.get(PolicyRest.IGNORE_POLICY_NAMES))
+                for (policy_id, policy_to_find) in policies_to_find.items()]
+
+        policies = None
+        apns_length = len(apns)
+        _LOGGER.debug("apns_length(%s) policies_to_find %s", apns_length,
+                      json.dumps(policies_to_find))
+
+        if apns_length == 1:
+            policies = [PolicyRest.get_latest_policy(apns[0])]
+        else:
+            pool = ThreadPool(min(PolicyRest._thread_pool_size, apns_length))
+            policies = pool.map(PolicyRest.get_latest_policy, apns)
+            pool.close()
+            pool.join()
+
+        metrics_total.metrics("result({}) get_latest_updated_policies {}: {} {}"
+                              .format(apns_length, str_metrics,
+                                      len(policies), json.dumps(policies)))
+
+        updated_policies = dict((policy[POLICY_ID], policy)
+                                for policy in policies
+                                if policy and policy.get(POLICY_ID))
+
+        removed_policies = dict((policy_id, True)
+                                for (policy_id, policy_to_find) in policies_to_find.items()
+                                if not policy_to_find.get(PolicyRest.EXPECTED_VERSIONS)
+                                and policy_to_find.get(PolicyRest.IGNORE_POLICY_NAMES)
+                                and policy_id not in updated_policies)
+
+        errored_policies = dict((policy_id, policy_to_find)
+                                for (policy_id, policy_to_find) in policies_to_find.items()
+                                if policy_id not in updated_policies
+                                and policy_id not in removed_policies)
+
+        _LOGGER.debug(
+            "result(%s) updated_policies %s, removed_policies %s, errored_policies %s",
+            apns_length, json.dumps(updated_policies), json.dumps(removed_policies),
+            json.dumps(errored_policies))
+
+        if errored_policies:
+            audit.set_http_status_code(AuditHttpCode.DATA_ERROR.value)
+            audit.error(
+                "errored_policies in PDP: {}".format(json.dumps(errored_policies)),
+                error_code=AuditResponseCode.DATA_ERROR)
+
+        return updated_policies, removed_policies
+
+
+    @staticmethod
+    def get_latest_policies(audit, policy_ids=None):
+        """Get the latest policies by policy-ids from the policy-engine"""
+        result = {}
+        str_policy_ids = json.dumps(policy_ids or [])
+
         try:
             PolicyRest._lazy_init()
+            if policy_ids:
+                _, latest_policies = PolicyRest._pdp_get_decision(audit, policy_ids)
 
-            pdp_req = PolicyUtils.gen_req_to_pdp(policy_id)
-            policy_bodies = PolicyRest._pdp_get_decision(audit, pdp_req)
+                if not latest_policies:
+                    audit.set_http_status_code(AuditHttpCode.DATA_NOT_FOUND_OK.value)
+                    _LOGGER.warning(audit.warn(
+                        "received no policies from PDP for policy_ids {}"
+                        .format(str_policy_ids), error_code=AuditResponseCode.DATA_ERROR))
+                    return latest_policies
 
-            log_line = "looking for policy_id({}) in policy_bodies: {}".format(
-                policy_id, json.dumps(policy_bodies))
-            _LOGGER.info(log_line)
+                valid_policies = {}
+                errored_policies = {}
+                for (policy_id, policy) in latest_policies.items():
+                    if PolicyUtils.validate_policy(policy):
+                        valid_policies[policy_id] = policy
+                    else:
+                        errored_policies[policy_id] = policy
 
-            latest_policy = None
-            if policy_bodies and policy_id in policy_bodies:
-                latest_policy = PolicyUtils.convert_to_policy(policy_bodies[policy_id])
+                result[LATEST_POLICIES] = valid_policies
+                result[ERRORED_POLICIES] = errored_policies
 
-            if not PolicyUtils.validate_policy(latest_policy):
-                audit.set_http_status_code(AuditHttpCode.DATA_NOT_FOUND_OK.value)
-                _LOGGER.error(audit.error(
-                    "received invalid policy from PDP: {}".format(json.dumps(latest_policy)),
-                    error_code=AuditResponseCode.DATA_ERROR))
+            _LOGGER.debug("got policies for policy_ids: %s. result: %s",
+                          str_policy_ids, json.dumps(result))
+            return result
 
-            return latest_policy
         except Exception as ex:
-            error_msg = ("{}: get_latest_policy({}) crash {}: {}"
-                         .format(audit.request_id, policy_id, type(ex).__name__, str(ex)))
+            error_msg = ("{}: crash {} {} at {}: {}"
+                         .format(audit.request_id, type(ex).__name__, str(ex),
+                                 "get_latest_policies", str_policy_ids))
 
             _LOGGER.exception(error_msg)
             audit.fatal(error_msg, error_code=AuditResponseCode.BUSINESS_PROCESS_ERROR)
diff --git a/policyhandler/pdp_api/policy_updates.py b/policyhandler/pdp_api/policy_updates.py
index eb3c3d1..15f5b0a 100644
--- a/policyhandler/pdp_api/policy_updates.py
+++ b/policyhandler/pdp_api/policy_updates.py
@@ -1,5 +1,5 @@
 # ================================================================================
-# Copyright (c) 2019 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2019-2020 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.
@@ -17,10 +17,13 @@
 
 """policy-updates accumulates the policy-update notifications from PDP"""
 
+import json
 import os
 
-from ..utils import Utils, ToBeImplementedException
-
+from ..policy_consts import POLICY_BODY, POLICY_ID, POLICY_NAMES
+from ..utils import Utils
+from .pdp_consts import DEPLOYED_POLICIES, POLICY_NAME, UNDEPLOYED_POLICIES
+from .policy_utils import PolicyUtils
 
 _LOGGER = Utils.get_logger(__file__)
 
@@ -30,9 +33,12 @@
 
     def __init__(self):
         """init and reset"""
+        self._audit = None
+        self._policies_updated = {}
+        self._policies_removed = {}
 
     def reset(self):
-        """resets the state"""
+        """resets the state - removes the pending policy-updates"""
         self.__init__()
 
     def pop_policy_updates(self):
@@ -40,10 +46,71 @@
         Returns the consolidated (audit, policies_updated, policies_removed)
         and resets the state
         """
-        _LOGGER.info("to_be_implemented")
-        return None, None, None
+        if not self._audit:
+            return None, None, None
 
-    def push_policy_updates(self, *_):
-        """consolidate the new policies_updated, policies_removed to existing ones"""
-        _LOGGER.info("to_be_implemented")
-        raise ToBeImplementedException()
+        audit = self._audit
+        policies_updated = self._policies_updated
+        policies_removed = self._policies_removed
+
+        self.reset()
+
+        return audit, policies_updated, policies_removed
+
+
+    def push_policy_updates(self, audit, multi_policies_updated):
+        """
+        consolidate the new policies_updated, policies_removed to existing ones
+
+        receives
+        :multi_policies_updated: as [
+            {DEPLOYED_POLICIES: [{PDP_METADATA: {POLICY_ID: <policy_id>,
+                                                 POLICY_VERSION: <policy_version>}}, ...],
+             UNDEPLOYED_POLICIES: [{PDP_METADATA: {POLICY_ID: <policy_id>,
+                                                   POLICY_VERSION: <policy_version>}}, ...]
+            }, ...]
+        """
+        for p_single_updated in multi_policies_updated:
+            for p_undeployed in p_single_updated.get(UNDEPLOYED_POLICIES, []):
+                policy = PolicyUtils.convert_to_policy(p_undeployed)
+                if not policy:
+                    continue
+                policy_id = policy.get(POLICY_ID)
+                policy_name = policy.get(POLICY_BODY, {}).get(POLICY_NAME)
+
+                if policy_id in self._policies_removed:
+                    policy = self._policies_removed[policy_id]
+
+                if POLICY_NAMES not in policy:
+                    policy[POLICY_NAMES] = {}
+                policy[POLICY_NAMES][policy_name] = True
+                self._policies_removed[policy_id] = policy
+
+            for p_deployed in p_single_updated.get(DEPLOYED_POLICIES, []):
+                policy = PolicyUtils.convert_to_policy(p_deployed)
+                if not policy:
+                    continue
+                policy_id = policy.get(POLICY_ID)
+                policy_name = policy.get(POLICY_BODY, {}).get(POLICY_NAME)
+
+                self._policies_updated[policy_id] = policy
+
+                rm_policy_names = self._policies_removed.get(policy_id, {}).get(POLICY_NAMES)
+                if rm_policy_names and policy_name in rm_policy_names:
+                    del rm_policy_names[policy_name]
+
+        req_message = ("policy-update notification - updated[{}], removed[{}]"
+                       .format(len(self._policies_updated),
+                               len(self._policies_removed)))
+
+        if not self._audit:
+            self._audit = audit
+        else:
+            audit.audit_done(result="policy-updates queued to request_id({})"
+                             .format(self._audit.request_id))
+        self._audit.req_message = req_message
+
+        _LOGGER.info(
+            "pending(%s) for %s policies_updated %s policies_removed %s",
+            self._audit.request_id, req_message,
+            json.dumps(self._policies_updated), json.dumps(self._policies_removed))
diff --git a/policyhandler/pdp_api/policy_utils.py b/policyhandler/pdp_api/policy_utils.py
index 1d06d14..f2ed522 100644
--- a/policyhandler/pdp_api/policy_utils.py
+++ b/policyhandler/pdp_api/policy_utils.py
@@ -1,5 +1,5 @@
 # ================================================================================
-# Copyright (c) 2019 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2019-2020 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.
@@ -30,14 +30,19 @@
     """policy-client utils"""
 
     @staticmethod
-    def gen_req_to_pdp(policy_id):
-        """request to get a single policy from pdp by policy_id"""
+    def gen_req_to_pdp(policy_ids):
+        """request to get policies from pdp by policy_id list or a single value"""
+        if not policy_ids:
+            policy_ids = []
+        elif not isinstance(policy_ids, list):
+            policy_ids = [policy_ids]
+
         return {
             PDP_REQ_ONAP_NAME: "DCAE",
             PDP_REQ_ONAP_COMPONENT: Audit.service_name,
             PDP_REQ_ONAP_INSTANCE: Audit.SERVICE_INSTANCE_UUID,
             "action": "configure",
-            PDP_REQ_RESOURCE: {PDP_POLICY_ID: [policy_id]}
+            PDP_REQ_RESOURCE: {PDP_POLICY_ID: policy_ids}
         }
 
     @staticmethod
@@ -52,7 +57,7 @@
             "version": "1.0.0",
             "metadata": {
                 "policy-id": "onap.scaleout.tca",
-                "policy-version": 1,
+                "policy-version": "1.2.3",
                 "description": "The scaleout policy for vDNS"
             },
             "properties": {
@@ -73,13 +78,13 @@
         {
             "policy_id": "onap.scaleout.tca",
             "policy_body": {
-                "policyName": "onap.scaleout.tca.1.xml",
-                "policyVersion": 1,
+                "policyName": "onap.scaleout.tca.1-2-3.xml",
+                "policyVersion": "1.2.3",
                 "type": "onap.policies.monitoring.cdap.tca.hi.lo.app",
                 "version": "1.0.0",
                 "metadata": {
                     "policy-id": "onap.scaleout.tca",
-                    "policy-version": 1,
+                    "policy-version": "1.2.3",
                     "description": "The scaleout policy for vDNS"
                 },
                 "config": {
@@ -97,19 +102,20 @@
             }
         }
         """
-        if not policy_body or not policy_body.get(PDP_PROPERTIES):
+        if not policy_body:
             return None
 
         pdp_metadata = policy_body.get(PDP_METADATA, {})
         policy_id = pdp_metadata.get(PDP_POLICY_ID)
         policy_version = pdp_metadata.get(PDP_POLICY_VERSION)
-        if not policy_id or not policy_version:
+        if not policy_id or policy_version is None:
             return None
 
-        policy_body[POLICY_NAME] = "{}.{}.xml".format(policy_id, policy_version)
+        policy_body[POLICY_NAME] = "{}.{}.xml".format(policy_id, policy_version.replace(".", "-"))
         policy_body[POLICY_VERSION] = str(policy_version)
-        policy_body[POLICY_CONFIG] = policy_body[PDP_PROPERTIES]
-        del policy_body[PDP_PROPERTIES]
+        if PDP_PROPERTIES in policy_body:
+            policy_body[POLICY_CONFIG] = policy_body[PDP_PROPERTIES]
+            del policy_body[PDP_PROPERTIES]
 
         return {POLICY_ID:policy_id, POLICY_BODY:policy_body}
 
diff --git a/policyhandler/pdp_api_v0/policy_listener.py b/policyhandler/pdp_api_v0/policy_listener.py
index 67e4c49..7525e4d 100644
--- a/policyhandler/pdp_api_v0/policy_listener.py
+++ b/policyhandler/pdp_api_v0/policy_listener.py
@@ -1,5 +1,5 @@
 # ================================================================================
-# Copyright (c) 2018-2019 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2018-2020 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.
@@ -16,7 +16,7 @@
 #
 
 """
-policy-listener communicates with policy-engine
+policy_listener communicates with policy-engine
 thru web-socket to receive push notifications
 on updates and removal of policies.
 
@@ -298,8 +298,8 @@
 
 
     def shutdown(self, audit):
-        """Shutdown the policy-listener"""
-        _LOGGER.info(audit.info("shutdown policy-listener"))
+        """Shutdown the policy_listener"""
+        _LOGGER.info(audit.info("shutdown policy_listener"))
         with self._lock:
             self._keep_running = False
 
diff --git a/policyhandler/pdp_api_v0/policy_matcher.py b/policyhandler/pdp_api_v0/policy_matcher.py
index 357af49..deb6619 100644
--- a/policyhandler/pdp_api_v0/policy_matcher.py
+++ b/policyhandler/pdp_api_v0/policy_matcher.py
@@ -1,5 +1,5 @@
 # ================================================================================
-# Copyright (c) 2018-2019 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2018-2020 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.
@@ -38,24 +38,6 @@
     PDP_API_FOLDER = os.path.basename(os.path.dirname(os.path.realpath(__file__)))
 
     @staticmethod
-    def get_deployed_policies(audit):
-        """get the deployed policies and policy-filters"""
-        deployed_policies, deployed_policy_filters = DeployHandler.get_deployed_policies(audit)
-
-        if audit.is_not_found():
-            warning_txt = "got no deployed policies or policy-filters"
-            _LOGGER.warning(warning_txt)
-            return {"warning": warning_txt}, None, None
-
-        if not audit.is_success() or (not deployed_policies and not deployed_policy_filters):
-            error_txt = "failed to retrieve policies from deployment-handler"
-            _LOGGER.error(error_txt)
-            return {"error": error_txt}, None, None
-
-        return None, deployed_policies, deployed_policy_filters
-
-
-    @staticmethod
     def build_catch_up_message(audit, deployed_policies, deployed_policy_filters):
         """
         find the latest policies from policy-engine for the deployed policies and policy-filters
@@ -135,7 +117,7 @@
     @staticmethod
     def match_to_deployed_policies(audit, policies_updated, policies_removed):
         """match the policies_updated, policies_removed versus deployed policies"""
-        deployed_policies, deployed_policy_filters = DeployHandler.get_deployed_policies(audit)
+        _, deployed_policies, deployed_policy_filters = DeployHandler.get_deployed_policies(audit)
         if not audit.is_success():
             return {}, {}, {}
 
diff --git a/policyhandler/pdp_api_v0/policy_rest.py b/policyhandler/pdp_api_v0/policy_rest.py
index c59625e..30fc043 100644
--- a/policyhandler/pdp_api_v0/policy_rest.py
+++ b/policyhandler/pdp_api_v0/policy_rest.py
@@ -1,5 +1,5 @@
 # ================================================================================
-# Copyright (c) 2017-2019 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2017-2020 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.
@@ -28,8 +28,7 @@
 import requests
 
 from ..config import Config, Settings
-from ..onap.audit import (REQUEST_X_ECOMP_REQUESTID, AuditHttpCode,
-                          AuditResponseCode, Metrics)
+from ..onap.audit import AuditHttpCode, AuditResponseCode, Metrics
 from ..policy_consts import (ERRORED_POLICIES, LATEST_POLICIES, POLICY_BODY,
                              POLICY_FILTER, POLICY_FILTERS, POLICY_ID,
                              POLICY_NAMES)
@@ -84,10 +83,10 @@
         changed, pool_size = PolicyRest._settings.get_by_key(Config.POOL_CONNECTIONS, 20)
         if changed:
             PolicyRest._requests_session.mount(
-                'https://', requests.adapters.HTTPAdapter(pool_connections=pool_size,
+                'https://', requests.adapters.HTTPAdapter(pool_connections=1,
                                                           pool_maxsize=pool_size))
             PolicyRest._requests_session.mount(
-                'http://', requests.adapters.HTTPAdapter(pool_connections=pool_size,
+                'http://', requests.adapters.HTTPAdapter(pool_connections=1,
                                                          pool_maxsize=pool_size))
 
         _, config = PolicyRest._settings.get_by_key(Config.FIELD_POLICY_ENGINE)
@@ -159,7 +158,7 @@
             _LOGGER.error(
                 audit.error("no url for PDP", error_code=AuditResponseCode.AVAILABILITY_ERROR))
             audit.set_http_status_code(AuditHttpCode.SERVER_INTERNAL_ERROR.value)
-            return None
+            return None, None
 
         with PolicyRest._lock:
             session = PolicyRest._requests_session
@@ -171,7 +170,7 @@
 
         metrics = Metrics(aud_parent=audit, targetEntity=target_entity, targetServiceName=url)
 
-        headers[REQUEST_X_ECOMP_REQUESTID] = metrics.request_id
+        headers = metrics.put_request_id_into_headers(headers)
 
         log_action = "post to {} at {}".format(target_entity, url)
         log_data = "msg={} headers={}, custom_kwargs({}) timeout_in_secs({})".format(
@@ -191,7 +190,7 @@
                           else AuditHttpCode.SERVER_INTERNAL_ERROR.value)
             error_msg = ("failed {}: {} to {}".format(type(ex).__name__, str(ex), log_line))
 
-            _LOGGER.exception(error_msg)
+            _LOGGER.exception(metrics.fatal(error_msg))
             metrics.set_http_status_code(error_code)
             audit.set_http_status_code(error_code)
             metrics.metrics(error_msg)
@@ -412,7 +411,7 @@
 
         policies_to_find = {}
         for (policy_id, policy_version) in policies_updated:
-            if not policy_id or not policy_version or not policy_version.isdigit():
+            if not policy_id or policy_version is None or not policy_version.isdigit():
                 continue
             policy = policies_to_find.get(policy_id)
             if not policy:
diff --git a/policyhandler/pdp_api_v0/policy_updates.py b/policyhandler/pdp_api_v0/policy_updates.py
index eafdca2..ac68f4a 100644
--- a/policyhandler/pdp_api_v0/policy_updates.py
+++ b/policyhandler/pdp_api_v0/policy_updates.py
@@ -1,5 +1,5 @@
 # ================================================================================
-# Copyright (c) 2018-2019 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2018-2020 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.
@@ -40,7 +40,7 @@
         self._policies_removed = {}
 
     def reset(self):
-        """resets the state"""
+        """resets the state - removes the pending policy-updates"""
         self.__init__()
 
     def pop_policy_updates(self):
@@ -62,25 +62,12 @@
 
     def push_policy_updates(self, policies_updated, policies_removed):
         """consolidate the new policies_updated, policies_removed to existing ones"""
-        for policy_body in policies_updated:
-            policy_name = policy_body.get(POLICY_NAME)
-            policy = PolicyUtils.convert_to_policy(policy_body)
-            if not policy:
-                continue
-            policy_id = policy.get(POLICY_ID)
-
-            self._policies_updated[policy_id] = policy
-
-            rm_policy_names = self._policies_removed.get(policy_id, {}).get(POLICY_NAMES)
-            if rm_policy_names and policy_name in rm_policy_names:
-                del rm_policy_names[policy_name]
-
         for policy_body in policies_removed:
-            policy_name = policy_body.get(POLICY_NAME)
             policy = PolicyUtils.convert_to_policy(policy_body)
             if not policy:
                 continue
             policy_id = policy.get(POLICY_ID)
+            policy_name = policy_body.get(POLICY_NAME)
 
             if policy_id in self._policies_removed:
                 policy = self._policies_removed[policy_id]
@@ -90,16 +77,27 @@
             policy[POLICY_NAMES][policy_name] = True
             self._policies_removed[policy_id] = policy
 
+        for policy_body in policies_updated:
+            policy = PolicyUtils.convert_to_policy(policy_body)
+            if not policy:
+                continue
+            policy_id = policy.get(POLICY_ID)
+            policy_name = policy_body.get(POLICY_NAME)
+
+            self._policies_updated[policy_id] = policy
+
+            rm_policy_names = self._policies_removed.get(policy_id, {}).get(POLICY_NAMES)
+            if rm_policy_names and policy_name in rm_policy_names:
+                del rm_policy_names[policy_name]
+
         req_message = ("policy-update notification - updated[{0}], removed[{1}]"
                        .format(len(self._policies_updated),
                                len(self._policies_removed)))
 
         if not self._audit:
-            self._audit = Audit(job_name="policy_update",
-                                req_message=req_message,
+            self._audit = Audit(job_name="policy_update", req_message=req_message,
                                 retry_get_config=True)
-        else:
-            self._audit.req_message = req_message
+        self._audit.req_message = req_message
 
         _LOGGER.info(
             "pending(%s) for %s policies_updated %s policies_removed %s",
diff --git a/policyhandler/pdp_api_v0/policy_utils.py b/policyhandler/pdp_api_v0/policy_utils.py
index d337665..2cbb22c 100644
--- a/policyhandler/pdp_api_v0/policy_utils.py
+++ b/policyhandler/pdp_api_v0/policy_utils.py
@@ -1,5 +1,5 @@
 # ================================================================================
-# Copyright (c) 2018-2019 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2018-2020 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.
@@ -63,7 +63,7 @@
             return None
         policy_name = policy_body.get(POLICY_NAME)
         policy_version = policy_body.get(POLICY_VERSION)
-        if not policy_name or not policy_version:
+        if not policy_name or policy_version is None:
             return None
         policy_id = PolicyUtils.extract_policy_id(policy_name)
         if not policy_id:
@@ -81,7 +81,7 @@
         for policy_body in policy_bodies:
             policy_name = policy_body.get(POLICY_NAME)
             policy_version = policy_body.get(POLICY_VERSION)
-            if not policy_name or not policy_version or not policy_version.isdigit():
+            if not policy_name or policy_version is None or not policy_version.isdigit():
                 continue
             if expected_versions and policy_version not in expected_versions:
                 continue
@@ -108,7 +108,7 @@
                 continue
             policy_id = policy.get(POLICY_ID)
             policy_version = policy.get(POLICY_BODY, {}).get(POLICY_VERSION)
-            if not policy_id or not policy_version or not policy_version.isdigit():
+            if not policy_id or policy_version is None or not policy_version.isdigit():
                 continue
             if (policy_id not in policies
                     or int(policy_version) > int(policies[policy_id][POLICY_BODY][POLICY_VERSION])):
diff --git a/policyhandler/policy_receiver.py b/policyhandler/policy_receiver.py
index d949c4b..091c2c3 100644
--- a/policyhandler/policy_receiver.py
+++ b/policyhandler/policy_receiver.py
@@ -1,5 +1,5 @@
 # ================================================================================
-# Copyright (c) 2018-2019 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2018-2020 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.
@@ -24,13 +24,15 @@
 passes the notifications to policy-updater
 """
 
+from .config import Config
 from .service_activator import ServiceActivator
 
+
 class PolicyReceiver(object):
     """
     policy-receiver - static singleton wrapper around two threads
         policy_updater - master thread for all scheduled actions
-        policy_listener - listens to policy-engine through web-socket
+        policy_listener - listens to policy-engine through DMaaP MR or web-socket
     """
     _policy_updater = None
     _policy_listener = None
@@ -47,9 +49,9 @@
     def _close_listener(audit):
         """stop the notification-handler"""
         if PolicyReceiver._policy_listener:
-            policy_receiver = PolicyReceiver._policy_listener
+            policy_listener = PolicyReceiver._policy_listener
             PolicyReceiver._policy_listener = None
-            policy_receiver.shutdown(audit)
+            policy_listener.shutdown(audit)
 
     @staticmethod
     def shutdown(audit):
@@ -98,4 +100,7 @@
 
         PolicyReceiver._policy_updater.start()
 
-        PolicyReceiver.catch_up(audit)
+        if Config.is_pdp_api_default():
+            audit.audit_done(result="will catch_up after draining the policy-update queue")
+        else:
+            PolicyReceiver.catch_up(audit)
diff --git a/policyhandler/policy_updater.py b/policyhandler/policy_updater.py
index 3fcde40..42c5ee6 100644
--- a/policyhandler/policy_updater.py
+++ b/policyhandler/policy_updater.py
@@ -1,5 +1,5 @@
 # ================================================================================
-# Copyright (c) 2017-2019 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2017-2020 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.
@@ -40,7 +40,7 @@
         self._reconfigure_receiver = on_reconfigure_receiver
 
         self._lock = Lock()
-        self._run = Event()
+        self._run_event = Event()
         self._settings = Settings(CATCH_UP, Config.RECONFIGURE)
 
         self._catch_up_timer = None
@@ -74,11 +74,11 @@
         self._settings.commit_change()
         return True
 
-    def policy_update(self, policies_updated, policies_removed):
+    def policy_update(self, *args):
         """enqueue the policy-updates"""
         with self._lock:
-            self._policy_updates.push_policy_updates(policies_updated, policies_removed)
-            self._run.set()
+            self._policy_updates.push_policy_updates(*args)
+            self._run_event.set()
 
     def catch_up(self, audit=None):
         """need to bring the latest policies to DCAE-Controller"""
@@ -89,7 +89,7 @@
                     "catch_up %s request_id %s",
                     self._aud_catch_up.req_message, self._aud_catch_up.request_id
                 )
-            self._run.set()
+            self._run_event.set()
 
     def reconfigure(self, audit=None):
         """job to check for and bring in the updated config for policy-handler"""
@@ -100,7 +100,7 @@
                     "%s request_id %s",
                     self._aud_reconfigure.req_message, self._aud_reconfigure.request_id
                 )
-            self._run.set()
+            self._run_event.set()
 
     def run(self):
         """wait and run the policy-update in thread"""
@@ -108,10 +108,10 @@
         self._run_reconfigure_timer()
         while True:
             _LOGGER.info("waiting for policy-updates...")
-            self._run.wait()
+            self._run_event.wait()
 
             with self._lock:
-                self._run.clear()
+                self._run_event.clear()
 
             if not self._keep_running():
                 break
@@ -126,7 +126,7 @@
 
             self._on_policy_update()
 
-        _LOGGER.info("exit policy-updater")
+        _LOGGER.info("exit policy_updater")
 
     def _keep_running(self):
         """thread-safe check whether to continue running"""
@@ -235,7 +235,7 @@
 
                 if self._reconfigure_receiver(aud_reconfigure):
                     need_to_catch_up = True
-                    changed_configs.append("web-socket")
+                    changed_configs.append("policy-receiver")
 
                 reconfigure_result = " -- config changed on {} changes: {}".format(
                     json.dumps(changed_configs), Config.discovered_config)
@@ -246,7 +246,7 @@
 
             Config.discovered_config.commit_change()
             aud_reconfigure.audit_done(result=reconfigure_result)
-            _LOGGER.info(log_line + reconfigure_result)
+            _LOGGER.info("%s%s", log_line, reconfigure_result)
 
             if need_to_catch_up:
                 self._pause_catch_up_timer()
@@ -300,8 +300,7 @@
             _LOGGER.info(log_line)
             self._pause_catch_up_timer()
 
-            (_, policies,
-             policy_filters) = pdp_client.PolicyMatcher.get_deployed_policies(aud_catch_up)
+            (_, policies, policy_filters) = DeployHandler.get_deployed_policies(aud_catch_up)
 
             catch_up_message = None
             if aud_catch_up.is_not_found():
@@ -422,11 +421,11 @@
 
 
     def shutdown(self, audit):
-        """Shutdown the policy-updater"""
-        _LOGGER.info("shutdown policy-updater")
+        """Shutdown the policy_updater"""
+        _LOGGER.info("shutdown policy_updater")
         with self._lock:
             self._aud_shutdown = audit
-            self._run.set()
+            self._run_event.set()
 
         self._stop_timers()
 
diff --git a/policyhandler/service_activator.py b/policyhandler/service_activator.py
index c1e5b8c..1fab5c6 100644
--- a/policyhandler/service_activator.py
+++ b/policyhandler/service_activator.py
@@ -1,5 +1,5 @@
 # ================================================================================
-# Copyright (c) 2019 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2019-2020 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.
@@ -36,8 +36,7 @@
 
 from .config import Config, Settings
 from .discovery import DiscoveryClient
-from .onap.audit import (REQUEST_X_ECOMP_REQUESTID, Audit, AuditHttpCode,
-                         Metrics)
+from .onap.audit import Audit, AuditHttpCode, Metrics
 from .policy_consts import TARGET_ENTITY
 from .utils import Utils
 
@@ -153,16 +152,11 @@
         mode_of_operation - whether the service is
             active == True or passive == False
             based on the current value of the mode_of_operation
-
-        temporary for R4 Dublin - passive for new PDP API
         """
         active = (ServiceActivator._mode_of_operation is None
                   or ServiceActivator._mode_of_operation
                   == ServiceActivator.MODE_OF_OPERATION_ACTIVE)
 
-        if active and Config.is_pdp_api_default():
-            active = False
-
         if audit:
             _LOGGER.info(audit.info("mode_of_operation = {} active = {}".format(
                 ServiceActivator._mode_of_operation, active)))
@@ -188,7 +182,7 @@
             metrics = Metrics(aud_parent=audit,
                               targetEntity="{} determine_mode_of_operation".format(target_entity),
                               targetServiceName=url)
-            headers = {REQUEST_X_ECOMP_REQUESTID : metrics.request_id}
+            headers = metrics.put_request_id_into_headers()
 
             log_action = "post to {} at {}".format(target_entity, url)
             log_data = "headers={}, json_body={}, timeout_in_secs={}, custom_kwargs({})".format(
@@ -209,7 +203,7 @@
                               else AuditHttpCode.SERVER_INTERNAL_ERROR.value)
                 error_msg = "failed to {} {}: {} {}".format(
                     log_action, type(ex).__name__, str(ex), log_data)
-                _LOGGER.exception(error_msg)
+                _LOGGER.exception(metrics.fatal(error_msg))
                 metrics.set_http_status_code(error_code)
                 audit.set_http_status_code(error_code)
                 metrics.metrics(error_msg)
diff --git a/policyhandler/utils.py b/policyhandler/utils.py
index d728e48..685d7d8 100644
--- a/policyhandler/utils.py
+++ b/policyhandler/utils.py
@@ -1,5 +1,5 @@
 # ================================================================================
-# Copyright (c) 2018-2019 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2018-2020 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.
@@ -23,11 +23,6 @@
 from copy import deepcopy
 from typing import Pattern
 
-class ToBeImplementedException(Exception):
-    """exception for to be implemented features of policy-handler"""
-    pass
-
-
 class Utils(object):
     """general purpose utils"""
     _logger = logging.getLogger("policy_handler.utils")
@@ -91,6 +86,14 @@
                 return False
 
             for key, val_1 in body_1.items():
+                val_2 = body_2[key]
+                if isinstance(val_1, str) or isinstance(val_2, str):
+                    if val_1 != val_2:
+                        Utils._logger.debug("key-values %s != %s",
+                                            json_dumps({key: val_1}), json_dumps({key: val_2}))
+                        return False
+                    continue
+
                 if not Utils.are_the_same(val_1, body_2[key], json_dumps):
                     return False
             return True
diff --git a/policyhandler/web_server.py b/policyhandler/web_server.py
index 9c2656e..f52f18e 100644
--- a/policyhandler/web_server.py
+++ b/policyhandler/web_server.py
@@ -1,5 +1,5 @@
 # ================================================================================
-# Copyright (c) 2017-2019 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2017-2020 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.
@@ -18,15 +18,15 @@
 """web-server for policy_handler"""
 
 import json
-from datetime import datetime
 import os
 import time
+from datetime import datetime
 
 import cherrypy
 
 from . import pdp_client
 from .config import Config
-from .deploy_handler import PolicyUpdateMessage
+from .deploy_handler import DeployHandler, PolicyUpdateMessage
 from .onap.audit import Audit, AuditHttpCode
 from .policy_receiver import PolicyReceiver
 from .utils import Utils
@@ -120,7 +120,7 @@
 
         PolicyWeb.logger.info("%s", req_info)
 
-        result, policies, policy_filters = pdp_client.PolicyMatcher.get_deployed_policies(audit)
+        result, policies, policy_filters = DeployHandler.get_deployed_policies(audit)
         if not result:
             result, policy_update = pdp_client.PolicyMatcher.build_catch_up_message(
                 audit, policies, policy_filters)
@@ -184,12 +184,12 @@
             }
         }
         """
-        if Config.is_pdp_api_default():
-            raise cherrypy.HTTPError(404, "temporarily unsupported due to the new pdp API")
-
         if cherrypy.request.method == "GET":
             return self._get_all_policies_latest()
 
+        if Config.is_pdp_api_default():
+            raise cherrypy.HTTPError(404, "temporarily unsupported due to the new pdp API")
+
         if cherrypy.request.method != "POST":
             raise cherrypy.HTTPError(404, "unexpected method {0}".format(cherrypy.request.method))
 
diff --git a/pom.xml b/pom.xml
index ea01cb0..956e17d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,7 +29,7 @@
   <groupId>org.onap.dcaegen2.platform</groupId>
   <artifactId>policy-handler</artifactId>
   <name>dcaegen2-platform-policy-handler</name>
-  <version>5.0.1-SNAPSHOT</version>
+  <version>5.1.0-SNAPSHOT</version>
   <url>http://maven.apache.org</url>
   <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
diff --git a/setup.py b/setup.py
index 3bfc162..ab0189a 100644
--- a/setup.py
+++ b/setup.py
@@ -1,5 +1,5 @@
 # ================================================================================

-# Copyright (c) 2017-2019 AT&T Intellectual Property. All rights reserved.

+# Copyright (c) 2017-2020 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.

@@ -22,7 +22,7 @@
 setup(

     name='policyhandler',

     description='DCAE-Controller policy-handler to communicate with policy-engine',

-    version="5.0.1",

+    version="5.1.0",

     author='Alex Shatov',

     packages=['policyhandler'],

     zip_safe=False,

diff --git a/tests/conftest.py b/tests/conftest.py
index c3f4100..cbd6264 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -1,5 +1,5 @@
 # ============LICENSE_START=======================================================
-# Copyright (c) 2018-2019 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2018-2020 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.
@@ -15,30 +15,27 @@
 # ============LICENSE_END=========================================================
 #
 """
-startdard pytest file that contains the shared fixtures
+standard pytest file that contains the shared fixtures
 https://docs.pytest.org/en/latest/fixture.html
 """
 import base64
 import copy
 import json
+import os
 
 import pytest
 
 from policyhandler.config import Config
-from policyhandler.deploy_handler import DeployHandler
 from policyhandler.discovery import DiscoveryClient
-from policyhandler.onap.audit import Audit
 from policyhandler.policy_consts import CATCH_UP, TARGET_ENTITY
 from policyhandler.utils import Utils
 
-from .mock_deploy_handler import MockDeploymentHandler
 from .mock_settings import MockSettings
 from .mock_tracker import MockHttpResponse, Tracker
 
 _LOGGER = Utils.get_logger(__file__)
 
-_LOGGER.info("init MockSettings")
-MockSettings.init()
+MockSettings.init_mock_config()
 
 @pytest.fixture(scope="session", autouse=True)
 def _auto_setup__global():
@@ -50,9 +47,19 @@
     _LOGGER.info("teardown _auto_setup__global")
 
 
+@pytest.fixture(autouse=True, scope="module")
+def _auto_module_cycle(request):
+    """log all the test starts and ends"""
+    module_name = request.module.__name__.replace(".", "/")
+
+    _LOGGER.info("start_module: %s %s", module_name, "->"*25)
+    yield _auto_module_cycle
+    _LOGGER.info("end_module: %s %s", module_name, "<-"*25)
+
 @pytest.fixture(autouse=True)
 def _auto_test_cycle(request):
     """log all the test starts and ends"""
+    _LOGGER.info("-"*75)
     module_name = request.module.__name__.replace(".", "/")
     if request.cls:
         test_name = "%s.py::%s::%s" % (module_name, request.cls.__name__,
@@ -61,7 +68,6 @@
         test_name = "%s.py::%s" % (module_name, request.function.__name__)
 
     Tracker.reset(test_name)
-    _LOGGER.info("-"*75)
     _LOGGER.info(">>>>>>> start [%s]: %s", len(Tracker.test_names), test_name)
     yield _auto_test_cycle
     _LOGGER.info(">>>>>>> tracked messages: %s", Tracker.to_string())
@@ -84,35 +90,6 @@
     _LOGGER.info("teardown fix_cherrypy_engine_exit")
 
 
-@pytest.fixture()
-def fix_deploy_handler(monkeypatch):
-    """monkeyed requests to deployment-handler"""
-    def monkeyed_deploy_handler_put(uri, **kwargs):
-        """monkeypatch for policy-update request.put to deploy_handler"""
-        return MockHttpResponse("put", uri, MockDeploymentHandler.default_response(),
-                                **kwargs)
-
-    def monkeyed_deploy_handler_get(uri, **kwargs):
-        """monkeypatch policy-update request.get to deploy_handler"""
-        return MockHttpResponse("get", uri, MockDeploymentHandler.get_deployed_policies(),
-                                **kwargs)
-
-    _LOGGER.info("setup fix_deploy_handler")
-    audit = None
-    if DeployHandler._lazy_inited is False:
-        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
-    if audit:
-        audit.audit_done("teardown")
-    _LOGGER.info("teardown fix_deploy_handler")
-
 
 @pytest.fixture()
 def fix_discovery(monkeypatch):
@@ -134,7 +111,7 @@
                 Config.consul_url, Config.system_name):
             res_json = [{"Value": base64.b64encode(
                 json.dumps(MockSettings.mock_config).encode()).decode("utf-8")}]
-        return MockHttpResponse("get", uri, res_json)
+        return MockHttpResponse("get", uri, res_json=res_json)
 
     _LOGGER.info("setup fix_discovery")
     monkeypatch.setattr('policyhandler.discovery.requests.get', monkeyed_discovery)
@@ -156,65 +133,42 @@
     MockSettings.rediscover_config(prev_config)
     _LOGGER.info("teardown fix_auto_catch_up")
 
+@pytest.fixture(scope="module")
+def fix_pdp_authorization():
+    """set env vars that overwrite the headers.Authorization on pdp and dmaap_mr clients"""
+    _LOGGER.info("setup fix_pdp_authorization %s", json.dumps(MockSettings.mock_config))
+    prev_config = copy.deepcopy(MockSettings.mock_config)
 
-@pytest.fixture()
-def fix_deploy_handler_413(monkeypatch):
-    """monkeyed failed discovery request.get"""
-    def monkeyed_deploy_handler_put(uri, **kwargs):
-        """monkeypatch for deploy_handler"""
-        return MockHttpResponse(
-            "put", uri,
-            {"server_instance_uuid": MockSettings.deploy_handler_instance_uuid},
-            status_code=413, **kwargs
-        )
+    os.environ.update({
+        Config.PDP_USER: "alex-PDP_USER",
+        Config.PDP_PWD: "alex-PDP_PWD",
+        Config.DMAAP_MR_USER: "alex-DMAAP_MR_USER",
+        Config.DMAAP_MR_PWD: "alex-DMAAP_MR_PWD"
+    })
+    Config._local_config._config = None
+    Config._pdp_authorization = None
+    Config._dmaap_mr_authorization = None
+    MockSettings.reinit_mock_config()
+    MockSettings.rediscover_config()
 
-    def monkeyed_deploy_handler_get(uri, **kwargs):
-        """monkeypatch policy-update request.get to deploy_handler"""
-        return MockHttpResponse("get", uri, MockDeploymentHandler.get_deployed_policies(),
-                                **kwargs)
+    _LOGGER.info("fix_pdp_authorization %s, %s: %s:%s %s:%s",
+                 json.dumps(Config._pdp_authorization), json.dumps(Config._dmaap_mr_authorization),
+                 os.environ.get(Config.PDP_USER), os.environ.get(Config.PDP_PWD),
+                 os.environ.get(Config.DMAAP_MR_USER), os.environ.get(Config.DMAAP_MR_PWD))
 
-    _LOGGER.info("setup fix_deploy_handler_413")
-    audit = None
-    if DeployHandler._lazy_inited is False:
-        audit = Audit(req_message="fix_deploy_handler_413")
-        DeployHandler._lazy_init(audit)
+    yield fix_pdp_authorization
 
-    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)
+    del os.environ[Config.PDP_USER]
+    del os.environ[Config.PDP_PWD]
+    del os.environ[Config.DMAAP_MR_USER]
+    del os.environ[Config.DMAAP_MR_PWD]
 
-    yield fix_deploy_handler_413
-    if audit:
-        audit.audit_done("teardown")
-    _LOGGER.info("teardown fix_deploy_handler_413")
-
-
-@pytest.fixture()
-def fix_deploy_handler_404(monkeypatch):
-    """monkeyed failed discovery request.get"""
-    def monkeyed_deploy_handler_put(uri, **kwargs):
-        """monkeypatch for deploy_handler"""
-        return MockHttpResponse("put", uri, MockDeploymentHandler.default_response(),
-                                **kwargs)
-
-    def monkeyed_deploy_handler_get(uri, **kwargs):
-        """monkeypatch policy-update request.get to deploy_handler"""
-        return MockHttpResponse("get", uri, MockDeploymentHandler.default_response(),
-                                **kwargs)
-
-    _LOGGER.info("setup fix_deploy_handler_404")
-    audit = None
-    if DeployHandler._lazy_inited is False:
-        audit = Audit(req_message="fix_deploy_handler_404")
-        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_404
-    if audit:
-        audit.audit_done("teardown")
-    _LOGGER.info("teardown fix_deploy_handler_404")
+    Config._local_config._config = None
+    Config._pdp_authorization = None
+    Config._dmaap_mr_authorization = None
+    MockSettings.reinit_mock_config()
+    MockSettings.rediscover_config(prev_config)
+    _LOGGER.info("teardown fix_pdp_authorization %s, %s: %s:%s %s:%s",
+                 json.dumps(Config._pdp_authorization), json.dumps(Config._dmaap_mr_authorization),
+                 os.environ.get(Config.PDP_USER), os.environ.get(Config.PDP_PWD),
+                 os.environ.get(Config.DMAAP_MR_USER), os.environ.get(Config.DMAAP_MR_PWD))
diff --git a/tests/etc_config.json b/tests/etc_config.json
index d7715b2..c5df55c 100644
--- a/tests/etc_config.json
+++ b/tests/etc_config.json
@@ -7,7 +7,7 @@
         "system" : "policy_handler",
         "tls" : {
             "cert_directory" : "etc/tls/certs/",
-            "cacert" : "att_internal_root.crt",
+            "cacert" : "cacert.crt",
             "private_key" : "key.pem",
             "server_cert" : "cert.pem",
             "server_ca_chain" : "ca_chain.pem"
diff --git a/tests/main/conftest.py b/tests/main/conftest.py
index c985380..11f5d0b 100644
--- a/tests/main/conftest.py
+++ b/tests/main/conftest.py
@@ -1,5 +1,5 @@
 # ============LICENSE_START=======================================================
-# Copyright (c) 2019 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2019-2020 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.
@@ -15,42 +15,87 @@
 # ============LICENSE_END=========================================================
 #
 """
-startdard pytest file that contains the shared fixtures
+standard pytest file that contains the shared fixtures
 https://docs.pytest.org/en/latest/fixture.html
 """
 
-import pytest
+import time
 
+import pytest
 from policyhandler import pdp_client
-from policyhandler.pdp_api.pdp_consts import PDP_POLICY_ID, PDP_REQ_RESOURCE
+from policyhandler.deploy_handler import DeployHandler
+from policyhandler.onap.audit import Audit
+from policyhandler.pdp_api.dmaap_mr import DmaapMr
 from policyhandler.utils import Utils
 
 from ..mock_tracker import MockHttpResponse
-from .mock_policy_engine import MockPolicyEngine
 
 _LOGGER = Utils.get_logger(__file__)
 
-@pytest.fixture(scope="session", autouse=True)
-def _auto_setup_policy_engine():
-    """initialize the mock-policy-engine per the whole test session"""
-    _LOGGER.info("create _auto_setup_policy_engine")
-    MockPolicyEngine.init()
-    yield _auto_setup_policy_engine
-    _LOGGER.info("teardown _auto_setup_policy_engine")
-
 @pytest.fixture()
 def fix_pdp_post(monkeypatch):
     """monkeyed request /decision/v1 to PDP"""
     def monkeyed_policy_rest_post(uri, json=None, **kwargs):
         """monkeypatch for the POST to policy-engine"""
-        policy_ids = json.get(PDP_REQ_RESOURCE, {}).get(PDP_POLICY_ID)
-        policy_id = policy_ids and policy_ids[0]
-        res_json = MockPolicyEngine.get_policy(policy_id)
-        return MockHttpResponse("post", uri, res_json, json=json, **kwargs)
+        return MockHttpResponse("post", uri, json=json, **kwargs)
 
     _LOGGER.info("setup fix_pdp_post")
+    pdp_client.PolicyRest._lazy_inited = False
     pdp_client.PolicyRest._lazy_init()
     monkeypatch.setattr('policyhandler.pdp_client.PolicyRest._requests_session.post',
                         monkeyed_policy_rest_post)
     yield fix_pdp_post
     _LOGGER.info("teardown fix_pdp_post")
+
+@pytest.fixture()
+def fix_deploy_handler(monkeypatch):
+    """monkeyed requests to deployment-handler"""
+    def monkeyed_deploy_handler_put(uri, **kwargs):
+        """monkeypatch for policy-update request.put to deploy_handler"""
+        return MockHttpResponse("put", uri, **kwargs)
+
+    def monkeyed_deploy_handler_get(uri, **kwargs):
+        """monkeypatch policy-update request.get to deploy_handler"""
+        return MockHttpResponse("get", uri, **kwargs)
+
+    _LOGGER.info("setup fix_deploy_handler")
+    audit = None
+    if DeployHandler._lazy_inited is False:
+        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
+    if audit:
+        audit.audit_done("teardown")
+    _LOGGER.info("teardown fix_deploy_handler")
+
+@pytest.fixture()
+def fix_dmaap_mr(monkeypatch):
+    """monkeyed requests to dmaap_mr"""
+    def monkeyed_dmaap_mr_get(uri, **kwargs):
+        """monkeypatch policy-update request.get to dmaap_mr"""
+        if kwargs.get("params"):
+            _LOGGER.info("--- fix_dmaap_mr --- sleeping 3 secs...")
+            time.sleep(3)
+        else:
+            _LOGGER.info("--- fix_dmaap_mr --- sleeping 0.5 secs...")
+            time.sleep(0.5)
+        _LOGGER.info("--- fix_dmaap_mr --- send back the response")
+        return MockHttpResponse("get", uri, **kwargs)
+
+    _LOGGER.info("setup fix_dmaap_mr")
+    audit = Audit(req_message="fix_dmaap_mr")
+    DmaapMr._lazy_inited = False
+    DmaapMr._lazy_init(audit)
+
+    monkeypatch.setattr('policyhandler.pdp_api.dmaap_mr.DmaapMr._requests_session.get',
+                        monkeyed_dmaap_mr_get)
+
+    yield fix_dmaap_mr
+    audit.audit_done("teardown")
+    _LOGGER.info("teardown fix_dmaap_mr")
diff --git a/tests/main/expectations.json b/tests/main/expectations.json
new file mode 100644
index 0000000..4f93930
--- /dev/null
+++ b/tests/main/expectations.json
@@ -0,0 +1,2839 @@
+{
+    "tests/main/test_policyhandler.py::WebServerTest::test_web_all_policies_latest": [
+        {
+            "request": {
+                "headers": {
+                    "X-ONAP-RequestID": "*",
+                    "X-ECOMP-RequestID": "*"
+                },
+                "json": null,
+                "method": "get",
+                "params": {
+                    "cfy_tenant_name": "default_tenant"
+                },
+                "uri": "http://unit-test-deployment_handler:8188000/policy"
+            },
+            "res": {
+                "policies": {
+                    "test_scope_prefix.pdp_decision_Lorem": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_Lorem",
+                        "policy_versions": {
+                            "0": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_amet": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_amet",
+                        "policy_versions": {
+                            "5.5.5": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_ametist": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_ametist",
+                        "policy_versions": {
+                            "6": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_consectetur": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_consectetur",
+                        "policy_versions": {
+                            "5": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_dolor": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_dolor",
+                        "policy_versions": {
+                            "2": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_ipsum": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_ipsum",
+                        "policy_versions": {
+                            "1": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_sit": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_sit",
+                        "policy_versions": {
+                            "3": true
+                        }
+                    }
+                },
+                "server_instance_uuid": "e17fc584-7b06-4777-81c5-5da4337d6d16"
+            },
+            "status_code": 200
+        },
+        {
+            "request": {
+                "headers": {
+                    "Accept": "application/json",
+                    "Authorization": "Basic auth",
+                    "ClientAuth": "Basic user",
+                    "Content-Type": "application/json",
+                    "Environment": "TEST",
+                    "X-ONAP-RequestID": "*",
+                    "X-ECOMP-RequestID": "*"
+                },
+                "json": {
+                    "ONAPComponent": "policy_handler",
+                    "ONAPInstance": "*",
+                    "ONAPName": "DCAE",
+                    "action": "configure",
+                    "resource": {
+                        "policy-id": [
+                            "test_scope_prefix.pdp_decision_Lorem",
+                            "test_scope_prefix.pdp_decision_amet",
+                            "test_scope_prefix.pdp_decision_ametist",
+                            "test_scope_prefix.pdp_decision_consectetur",
+                            "test_scope_prefix.pdp_decision_dolor",
+                            "test_scope_prefix.pdp_decision_ipsum",
+                            "test_scope_prefix.pdp_decision_sit"
+                        ]
+                    }
+                },
+                "method": "post",
+                "params": null,
+                "uri": "https://unit-test-pdp-server:8081000/decision/v1/"
+            },
+            "res": {
+                "policies": {
+                    "test_scope_prefix.pdp_decision_Lorem": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_Lorem",
+                            "policy-id": "test_scope_prefix.pdp_decision_Lorem",
+                            "policy-version": "1.1.1"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 0,
+                            "policy_updated_to_ver": 1,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_Lorem"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    },
+                    "test_scope_prefix.pdp_decision_amet": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_amet",
+                            "policy-id": "test_scope_prefix.pdp_decision_amet",
+                            "policy-version": "5.5.5"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 4,
+                            "policy_updated_to_ver": 5,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_amet"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    },
+                    "test_scope_prefix.pdp_decision_ametist": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_ametist",
+                            "policy-id": "test_scope_prefix.pdp_decision_ametist",
+                            "policy-version": "7.7.7"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 6,
+                            "policy_updated_to_ver": 7,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_ametist"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    },
+                    "test_scope_prefix.pdp_decision_consectetur": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_consectetur",
+                            "policy-id": "test_scope_prefix.pdp_decision_consectetur",
+                            "policy-version": "6.6.6"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 5,
+                            "policy_updated_to_ver": 6,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_consectetur"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    },
+                    "test_scope_prefix.pdp_decision_dolor": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_dolor",
+                            "policy-id": "test_scope_prefix.pdp_decision_dolor",
+                            "policy-version": "3.3.3"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 2,
+                            "policy_updated_to_ver": 3,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_dolor"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    },
+                    "test_scope_prefix.pdp_decision_ipsum": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_ipsum",
+                            "policy-id": "test_scope_prefix.pdp_decision_ipsum",
+                            "policy-version": "2.2.2"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 1,
+                            "policy_updated_to_ver": 2,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_ipsum"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    },
+                    "test_scope_prefix.pdp_decision_sit": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_sit",
+                            "policy-id": "test_scope_prefix.pdp_decision_sit",
+                            "policy-version": "4.4.4"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 3,
+                            "policy_updated_to_ver": 4,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_sit"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    }
+                }
+            },
+            "status_code": 200
+        }
+    ],
+    "tests/main/test_policyhandler.py::WebServerTest::test_web_policies_latest": [
+        {
+            "request": {
+                "headers": {
+                    "Accept": "application/json",
+                    "Authorization": "Basic auth",
+                    "ClientAuth": "Basic user",
+                    "Content-Type": "application/json",
+                    "Environment": "TEST",
+                    "X-ONAP-RequestID": "*",
+                    "X-ECOMP-RequestID": "*"
+                },
+                "json": {
+                    "policyName": "test_scope_prefix.Config_amet.*"
+                },
+                "method": "post",
+                "params": null,
+                "uri": "https://unit-test-pdp-server:8081000/decision/v1/"
+            },
+            "res": "*",
+            "status_code": 200
+        }
+    ],
+    "tests/main/test_policyhandler.py::WebServerTest::test_web_policy_latest": [
+        {
+            "request": {
+                "headers": {
+                    "Accept": "application/json",
+                    "Authorization": "Basic auth",
+                    "ClientAuth": "Basic user",
+                    "Content-Type": "application/json",
+                    "Environment": "TEST",
+                    "X-ONAP-RequestID": "*",
+                    "X-ECOMP-RequestID": "*"
+                },
+                "json": {
+                    "ONAPComponent": "policy_handler",
+                    "ONAPInstance": "*",
+                    "ONAPName": "DCAE",
+                    "action": "configure",
+                    "resource": {
+                        "policy-id": [
+                            "test_scope_prefix.pdp_decision_sit"
+                        ]
+                    }
+                },
+                "method": "post",
+                "params": null,
+                "uri": "https://unit-test-pdp-server:8081000/decision/v1/"
+            },
+            "res": {
+                "policies": {
+                    "test_scope_prefix.pdp_decision_sit": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_sit",
+                            "policy-id": "test_scope_prefix.pdp_decision_sit",
+                            "policy-version": "4.4.4"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 3,
+                            "policy_updated_to_ver": 4,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_sit"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    }
+                }
+            },
+            "status_code": 200
+        }
+    ],
+    "tests/main/test_policyhandler.py::WebServerTest::test_zzzzz_shutdown": [
+        {
+            "request": {
+                "headers": {
+                    "Authorization": "Basic auth",
+                    "Content-Type": "application/json",
+                    "X-ONAP-RequestID": "*",
+                    "X-ECOMP-RequestID": "*"
+                },
+                "json": null,
+                "method": "get",
+                "params": null,
+                "uri": "https://unit-test-dmaap-mr:280800000/events/unit-test-topicname/unit-test-consumegroup/unit-test-consumerid"
+                },
+            "res": ["garbage-to-be-ignored"],
+            "status_code": 200
+        },
+        {
+            "request": {
+                "headers": {
+                    "X-ONAP-RequestID": "*",
+                    "X-ECOMP-RequestID": "*"
+                },
+                "json": null,
+                "method": "get",
+                "params": {
+                    "cfy_tenant_name": "default_tenant"
+                },
+                "uri": "http://unit-test-deployment_handler:8188000/policy"
+            },
+            "res": {
+                "policies": {
+                    "test_scope_prefix.pdp_decision_Lorem": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_Lorem",
+                        "policy_versions": {
+                            "0": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_amet": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_amet",
+                        "policy_versions": {
+                            "5.5.5": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_ametist": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_ametist",
+                        "policy_versions": {
+                            "6": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_consectetur": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_consectetur",
+                        "policy_versions": {
+                            "5": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_dolor": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_dolor",
+                        "policy_versions": {
+                            "2": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_ipsum": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_ipsum",
+                        "policy_versions": {
+                            "1": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_sit": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_sit",
+                        "policy_versions": {
+                            "3": true
+                        }
+                    }
+                },
+                "server_instance_uuid": "e17fc584-7b06-4777-81c5-5da4337d6d16"
+            },
+            "status_code": 200
+        },
+        {
+            "request": {
+                "headers": {
+                    "Accept": "application/json",
+                    "Authorization": "Basic auth",
+                    "ClientAuth": "Basic user",
+                    "Content-Type": "application/json",
+                    "Environment": "TEST",
+                    "X-ECOMP-RequestID": "*",
+                    "X-ONAP-RequestID": "*"
+                },
+                "json": {
+                    "ONAPComponent": "policy_handler",
+                    "ONAPInstance": "*",
+                    "ONAPName": "DCAE",
+                    "action": "configure",
+                    "resource": {
+                        "policy-id": [
+                            "test_scope_prefix.pdp_decision_Lorem",
+                            "test_scope_prefix.pdp_decision_amet",
+                            "test_scope_prefix.pdp_decision_ametist",
+                            "test_scope_prefix.pdp_decision_consectetur",
+                            "test_scope_prefix.pdp_decision_dolor",
+                            "test_scope_prefix.pdp_decision_ipsum",
+                            "test_scope_prefix.pdp_decision_sit"
+                        ]
+                    }
+                },
+                "method": "post",
+                "params": null,
+                "uri": "https://unit-test-pdp-server:8081000/decision/v1/"
+            },
+            "res": {
+                "policies": {
+                    "test_scope_prefix.pdp_decision_Lorem": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_Lorem",
+                            "policy-id": "test_scope_prefix.pdp_decision_Lorem",
+                            "policy-version": "1.1.1"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 0,
+                            "policy_updated_to_ver": 1,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_Lorem"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    },
+                    "test_scope_prefix.pdp_decision_amet": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_amet",
+                            "policy-id": "test_scope_prefix.pdp_decision_amet",
+                            "policy-version": "5.5.5"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 4,
+                            "policy_updated_to_ver": 5,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_amet"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    },
+                    "test_scope_prefix.pdp_decision_ametist": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_ametist",
+                            "policy-id": "test_scope_prefix.pdp_decision_ametist",
+                            "policy-version": "7.7.7"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 6,
+                            "policy_updated_to_ver": 7,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_ametist"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    },
+                    "test_scope_prefix.pdp_decision_consectetur": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_consectetur",
+                            "policy-id": "test_scope_prefix.pdp_decision_consectetur",
+                            "policy-version": "6.6.6"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 5,
+                            "policy_updated_to_ver": 6,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_consectetur"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    },
+                    "test_scope_prefix.pdp_decision_dolor": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_dolor",
+                            "policy-id": "test_scope_prefix.pdp_decision_dolor",
+                            "policy-version": "3.3.3"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 2,
+                            "policy_updated_to_ver": 3,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_dolor"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    },
+                    "test_scope_prefix.pdp_decision_ipsum": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_ipsum",
+                            "policy-id": "test_scope_prefix.pdp_decision_ipsum",
+                            "policy-version": "2.2.2"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 1,
+                            "policy_updated_to_ver": 2,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_ipsum"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    },
+                    "test_scope_prefix.pdp_decision_sit": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_sit",
+                            "policy-id": "test_scope_prefix.pdp_decision_sit",
+                            "policy-version": "4.4.4"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 3,
+                            "policy_updated_to_ver": 4,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_sit"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    }
+                }
+            },
+            "status_code": 200
+        },
+        {
+            "request": {
+                "headers": {
+                    "X-ECOMP-RequestID": "*",
+                    "X-ONAP-RequestID": "*"
+                },
+                "json": {
+                    "catch_up": true,
+                    "latest_policies": {
+                        "test_scope_prefix.pdp_decision_Lorem": {
+                            "policy_body": {
+                                "config": {
+                                    "policy_hello": "world!",
+                                    "policy_updated_from_ver": 0,
+                                    "policy_updated_to_ver": 1,
+                                    "updated_policy_id": "test_scope_prefix.pdp_decision_Lorem"
+                                },
+                                "metadata": {
+                                    "description": "description for test_scope_prefix.pdp_decision_Lorem",
+                                    "policy-id": "test_scope_prefix.pdp_decision_Lorem",
+                                    "policy-version": "1.1.1"
+                                },
+                                "policyName": "test_scope_prefix.pdp_decision_Lorem.1-1-1.xml",
+                                "policyVersion": "1.1.1",
+                                "type": "unit.test.type.policies",
+                                "version": "1.0.0"
+                            },
+                            "policy_id": "test_scope_prefix.pdp_decision_Lorem"
+                        },
+                        "test_scope_prefix.pdp_decision_ametist": {
+                            "policy_body": {
+                                "config": {
+                                    "policy_hello": "world!",
+                                    "policy_updated_from_ver": 6,
+                                    "policy_updated_to_ver": 7,
+                                    "updated_policy_id": "test_scope_prefix.pdp_decision_ametist"
+                                },
+                                "metadata": {
+                                    "description": "description for test_scope_prefix.pdp_decision_ametist",
+                                    "policy-id": "test_scope_prefix.pdp_decision_ametist",
+                                    "policy-version": "7.7.7"
+                                },
+                                "policyName": "test_scope_prefix.pdp_decision_ametist.7-7-7.xml",
+                                "policyVersion": "7.7.7",
+                                "type": "unit.test.type.policies",
+                                "version": "1.0.0"
+                            },
+                            "policy_id": "test_scope_prefix.pdp_decision_ametist"
+                        },
+                        "test_scope_prefix.pdp_decision_consectetur": {
+                            "policy_body": {
+                                "config": {
+                                    "policy_hello": "world!",
+                                    "policy_updated_from_ver": 5,
+                                    "policy_updated_to_ver": 6,
+                                    "updated_policy_id": "test_scope_prefix.pdp_decision_consectetur"
+                                },
+                                "metadata": {
+                                    "description": "description for test_scope_prefix.pdp_decision_consectetur",
+                                    "policy-id": "test_scope_prefix.pdp_decision_consectetur",
+                                    "policy-version": "6.6.6"
+                                },
+                                "policyName": "test_scope_prefix.pdp_decision_consectetur.6-6-6.xml",
+                                "policyVersion": "6.6.6",
+                                "type": "unit.test.type.policies",
+                                "version": "1.0.0"
+                            },
+                            "policy_id": "test_scope_prefix.pdp_decision_consectetur"
+                        },
+                        "test_scope_prefix.pdp_decision_dolor": {
+                            "policy_body": {
+                                "config": {
+                                    "policy_hello": "world!",
+                                    "policy_updated_from_ver": 2,
+                                    "policy_updated_to_ver": 3,
+                                    "updated_policy_id": "test_scope_prefix.pdp_decision_dolor"
+                                },
+                                "metadata": {
+                                    "description": "description for test_scope_prefix.pdp_decision_dolor",
+                                    "policy-id": "test_scope_prefix.pdp_decision_dolor",
+                                    "policy-version": "3.3.3"
+                                },
+                                "policyName": "test_scope_prefix.pdp_decision_dolor.3-3-3.xml",
+                                "policyVersion": "3.3.3",
+                                "type": "unit.test.type.policies",
+                                "version": "1.0.0"
+                            },
+                            "policy_id": "test_scope_prefix.pdp_decision_dolor"
+                        },
+                        "test_scope_prefix.pdp_decision_ipsum": {
+                            "policy_body": {
+                                "config": {
+                                    "policy_hello": "world!",
+                                    "policy_updated_from_ver": 1,
+                                    "policy_updated_to_ver": 2,
+                                    "updated_policy_id": "test_scope_prefix.pdp_decision_ipsum"
+                                },
+                                "metadata": {
+                                    "description": "description for test_scope_prefix.pdp_decision_ipsum",
+                                    "policy-id": "test_scope_prefix.pdp_decision_ipsum",
+                                    "policy-version": "2.2.2"
+                                },
+                                "policyName": "test_scope_prefix.pdp_decision_ipsum.2-2-2.xml",
+                                "policyVersion": "2.2.2",
+                                "type": "unit.test.type.policies",
+                                "version": "1.0.0"
+                            },
+                            "policy_id": "test_scope_prefix.pdp_decision_ipsum"
+                        },
+                        "test_scope_prefix.pdp_decision_sit": {
+                            "policy_body": {
+                                "config": {
+                                    "policy_hello": "world!",
+                                    "policy_updated_from_ver": 3,
+                                    "policy_updated_to_ver": 4,
+                                    "updated_policy_id": "test_scope_prefix.pdp_decision_sit"
+                                },
+                                "metadata": {
+                                    "description": "description for test_scope_prefix.pdp_decision_sit",
+                                    "policy-id": "test_scope_prefix.pdp_decision_sit",
+                                    "policy-version": "4.4.4"
+                                },
+                                "policyName": "test_scope_prefix.pdp_decision_sit.4-4-4.xml",
+                                "policyVersion": "4.4.4",
+                                "type": "unit.test.type.policies",
+                                "version": "1.0.0"
+                            },
+                            "policy_id": "test_scope_prefix.pdp_decision_sit"
+                        }
+                    },
+                    "policy_filter_matches": {},
+                    "removed_policies": {}
+                },
+                "method": "put",
+                "params": {
+                    "cfy_tenant_name": "default_tenant"
+                },
+                "uri": "http://unit-test-deployment_handler:8188000/policy"
+            },
+            "res": {
+                "server_instance_uuid": "e17fc584-7b06-4777-81c5-5da4337d6d16"
+            },
+            "status_code": 200
+        },
+        {
+            "request": {
+                "headers": {
+                    "Authorization": "Basic auth",
+                    "Content-Type": "application/json",
+                    "X-ONAP-RequestID": "*",
+                    "X-ECOMP-RequestID": "*"
+                },
+                "json": null,
+                "method": "get",
+                "params": {
+                    "timeout": 15000
+                },
+                "uri": "https://unit-test-dmaap-mr:280800000/events/unit-test-topicname/unit-test-consumegroup/unit-test-consumerid"
+                },
+            "res": [],
+            "status_code": 200
+        }
+    ],
+    "tests/main/test_policyhandler.py::WebServerTest::test_zzz_policy_updates_and_catch_ups": [
+        {
+            "request": {
+                "headers": {
+                    "Authorization": "Basic auth",
+                    "Content-Type": "application/json",
+                    "X-ONAP-RequestID": "*",
+                    "X-ECOMP-RequestID": "*"
+                },
+                "json": null,
+                "method": "get",
+                "params": null,
+                "uri": "https://unit-test-dmaap-mr:280800000/events/unit-test-topicname/unit-test-consumegroup/unit-test-consumerid"
+                },
+            "res": ["garbage-to-be-ignored"],
+            "status_code": 200
+        },
+        {
+            "request": {
+                "headers": {
+                    "X-ONAP-RequestID": "*",
+                    "X-ECOMP-RequestID": "*"
+                },
+                "json": null,
+                "method": "get",
+                "params": {
+                    "cfy_tenant_name": "default_tenant"
+                },
+                "uri": "http://unit-test-deployment_handler:8188000/policy"
+            },
+            "res": {
+                "policies": {
+                    "test_scope_prefix.pdp_decision_Lorem": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_Lorem",
+                        "policy_versions": {
+                            "0": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_amet": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_amet",
+                        "policy_versions": {
+                            "5.5.5": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_ametist": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_ametist",
+                        "policy_versions": {
+                            "6": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_consectetur": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_consectetur",
+                        "policy_versions": {
+                            "5": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_dolor": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_dolor",
+                        "policy_versions": {
+                            "2": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_ipsum": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_ipsum",
+                        "policy_versions": {
+                            "1": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_sit": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_sit",
+                        "policy_versions": {
+                            "3": true
+                        }
+                    }
+                },
+                "server_instance_uuid": "e17fc584-7b06-4777-81c5-5da4337d6d16"
+            },
+            "status_code": 200
+        },
+        {
+            "request": {
+                "headers": {
+                    "Accept": "application/json",
+                    "Authorization": "Basic auth",
+                    "ClientAuth": "Basic user",
+                    "Content-Type": "application/json",
+                    "Environment": "TEST",
+                    "X-ECOMP-RequestID": "*",
+                    "X-ONAP-RequestID": "*"
+                },
+                "json": {
+                    "ONAPComponent": "policy_handler",
+                    "ONAPInstance": "*",
+                    "ONAPName": "DCAE",
+                    "action": "configure",
+                    "resource": {
+                        "policy-id": [
+                            "test_scope_prefix.pdp_decision_Lorem",
+                            "test_scope_prefix.pdp_decision_amet",
+                            "test_scope_prefix.pdp_decision_ametist",
+                            "test_scope_prefix.pdp_decision_consectetur",
+                            "test_scope_prefix.pdp_decision_dolor",
+                            "test_scope_prefix.pdp_decision_ipsum",
+                            "test_scope_prefix.pdp_decision_sit"
+                        ]
+                    }
+                },
+                "method": "post",
+                "params": null,
+                "uri": "https://unit-test-pdp-server:8081000/decision/v1/"
+            },
+            "res": {
+                "policies": {
+                    "test_scope_prefix.pdp_decision_Lorem": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_Lorem",
+                            "policy-id": "test_scope_prefix.pdp_decision_Lorem",
+                            "policy-version": "1.1.1"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 0,
+                            "policy_updated_to_ver": 1,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_Lorem"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    },
+                    "test_scope_prefix.pdp_decision_amet": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_amet",
+                            "policy-id": "test_scope_prefix.pdp_decision_amet",
+                            "policy-version": "5.5.5"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 4,
+                            "policy_updated_to_ver": 5,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_amet"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    },
+                    "test_scope_prefix.pdp_decision_ametist": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_ametist",
+                            "policy-id": "test_scope_prefix.pdp_decision_ametist",
+                            "policy-version": "7.7.7"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 6,
+                            "policy_updated_to_ver": 7,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_ametist"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    },
+                    "test_scope_prefix.pdp_decision_consectetur": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_consectetur",
+                            "policy-id": "test_scope_prefix.pdp_decision_consectetur",
+                            "policy-version": "6.6.6"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 5,
+                            "policy_updated_to_ver": 6,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_consectetur"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    },
+                    "test_scope_prefix.pdp_decision_dolor": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_dolor",
+                            "policy-id": "test_scope_prefix.pdp_decision_dolor",
+                            "policy-version": "3.3.3"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 2,
+                            "policy_updated_to_ver": 3,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_dolor"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    },
+                    "test_scope_prefix.pdp_decision_ipsum": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_ipsum",
+                            "policy-id": "test_scope_prefix.pdp_decision_ipsum",
+                            "policy-version": "2.2.2"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 1,
+                            "policy_updated_to_ver": 2,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_ipsum"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    },
+                    "test_scope_prefix.pdp_decision_sit": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_sit",
+                            "policy-id": "test_scope_prefix.pdp_decision_sit",
+                            "policy-version": "4.4.4"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 3,
+                            "policy_updated_to_ver": 4,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_sit"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    }
+                }
+            },
+            "status_code": 200
+        },
+        {
+            "request": {
+                "headers": {
+                    "X-ECOMP-RequestID": "*",
+                    "X-ONAP-RequestID": "*"
+                },
+                "json": {
+                    "catch_up": true,
+                    "latest_policies": {
+                        "test_scope_prefix.pdp_decision_Lorem": {
+                            "policy_body": {
+                                "config": {
+                                    "policy_hello": "world!",
+                                    "policy_updated_from_ver": 0,
+                                    "policy_updated_to_ver": 1,
+                                    "updated_policy_id": "test_scope_prefix.pdp_decision_Lorem"
+                                },
+                                "metadata": {
+                                    "description": "description for test_scope_prefix.pdp_decision_Lorem",
+                                    "policy-id": "test_scope_prefix.pdp_decision_Lorem",
+                                    "policy-version": "1.1.1"
+                                },
+                                "policyName": "test_scope_prefix.pdp_decision_Lorem.1-1-1.xml",
+                                "policyVersion": "1.1.1",
+                                "type": "unit.test.type.policies",
+                                "version": "1.0.0"
+                            },
+                            "policy_id": "test_scope_prefix.pdp_decision_Lorem"
+                        },
+                        "test_scope_prefix.pdp_decision_ametist": {
+                            "policy_body": {
+                                "config": {
+                                    "policy_hello": "world!",
+                                    "policy_updated_from_ver": 6,
+                                    "policy_updated_to_ver": 7,
+                                    "updated_policy_id": "test_scope_prefix.pdp_decision_ametist"
+                                },
+                                "metadata": {
+                                    "description": "description for test_scope_prefix.pdp_decision_ametist",
+                                    "policy-id": "test_scope_prefix.pdp_decision_ametist",
+                                    "policy-version": "7.7.7"
+                                },
+                                "policyName": "test_scope_prefix.pdp_decision_ametist.7-7-7.xml",
+                                "policyVersion": "7.7.7",
+                                "type": "unit.test.type.policies",
+                                "version": "1.0.0"
+                            },
+                            "policy_id": "test_scope_prefix.pdp_decision_ametist"
+                        },
+                        "test_scope_prefix.pdp_decision_consectetur": {
+                            "policy_body": {
+                                "config": {
+                                    "policy_hello": "world!",
+                                    "policy_updated_from_ver": 5,
+                                    "policy_updated_to_ver": 6,
+                                    "updated_policy_id": "test_scope_prefix.pdp_decision_consectetur"
+                                },
+                                "metadata": {
+                                    "description": "description for test_scope_prefix.pdp_decision_consectetur",
+                                    "policy-id": "test_scope_prefix.pdp_decision_consectetur",
+                                    "policy-version": "6.6.6"
+                                },
+                                "policyName": "test_scope_prefix.pdp_decision_consectetur.6-6-6.xml",
+                                "policyVersion": "6.6.6",
+                                "type": "unit.test.type.policies",
+                                "version": "1.0.0"
+                            },
+                            "policy_id": "test_scope_prefix.pdp_decision_consectetur"
+                        },
+                        "test_scope_prefix.pdp_decision_dolor": {
+                            "policy_body": {
+                                "config": {
+                                    "policy_hello": "world!",
+                                    "policy_updated_from_ver": 2,
+                                    "policy_updated_to_ver": 3,
+                                    "updated_policy_id": "test_scope_prefix.pdp_decision_dolor"
+                                },
+                                "metadata": {
+                                    "description": "description for test_scope_prefix.pdp_decision_dolor",
+                                    "policy-id": "test_scope_prefix.pdp_decision_dolor",
+                                    "policy-version": "3.3.3"
+                                },
+                                "policyName": "test_scope_prefix.pdp_decision_dolor.3-3-3.xml",
+                                "policyVersion": "3.3.3",
+                                "type": "unit.test.type.policies",
+                                "version": "1.0.0"
+                            },
+                            "policy_id": "test_scope_prefix.pdp_decision_dolor"
+                        },
+                        "test_scope_prefix.pdp_decision_ipsum": {
+                            "policy_body": {
+                                "config": {
+                                    "policy_hello": "world!",
+                                    "policy_updated_from_ver": 1,
+                                    "policy_updated_to_ver": 2,
+                                    "updated_policy_id": "test_scope_prefix.pdp_decision_ipsum"
+                                },
+                                "metadata": {
+                                    "description": "description for test_scope_prefix.pdp_decision_ipsum",
+                                    "policy-id": "test_scope_prefix.pdp_decision_ipsum",
+                                    "policy-version": "2.2.2"
+                                },
+                                "policyName": "test_scope_prefix.pdp_decision_ipsum.2-2-2.xml",
+                                "policyVersion": "2.2.2",
+                                "type": "unit.test.type.policies",
+                                "version": "1.0.0"
+                            },
+                            "policy_id": "test_scope_prefix.pdp_decision_ipsum"
+                        },
+                        "test_scope_prefix.pdp_decision_sit": {
+                            "policy_body": {
+                                "config": {
+                                    "policy_hello": "world!",
+                                    "policy_updated_from_ver": 3,
+                                    "policy_updated_to_ver": 4,
+                                    "updated_policy_id": "test_scope_prefix.pdp_decision_sit"
+                                },
+                                "metadata": {
+                                    "description": "description for test_scope_prefix.pdp_decision_sit",
+                                    "policy-id": "test_scope_prefix.pdp_decision_sit",
+                                    "policy-version": "4.4.4"
+                                },
+                                "policyName": "test_scope_prefix.pdp_decision_sit.4-4-4.xml",
+                                "policyVersion": "4.4.4",
+                                "type": "unit.test.type.policies",
+                                "version": "1.0.0"
+                            },
+                            "policy_id": "test_scope_prefix.pdp_decision_sit"
+                        }
+                    },
+                    "policy_filter_matches": {},
+                    "removed_policies": {}
+                },
+                "method": "put",
+                "params": {
+                    "cfy_tenant_name": "default_tenant"
+                },
+                "uri": "http://unit-test-deployment_handler:8188000/policy"
+            },
+            "res": {
+                "server_instance_uuid": "e17fc584-7b06-4777-81c5-5da4337d6d16"
+            },
+            "status_code": 200
+        },
+        {
+            "request": {
+                "headers": {
+                    "Authorization": "Basic auth",
+                    "Content-Type": "application/json",
+                    "X-ONAP-RequestID": "*",
+                    "X-ECOMP-RequestID": "*"
+                },
+                "json": null,
+                "method": "get",
+                "params": {
+                    "timeout": 15000
+                },
+                "uri": "https://unit-test-dmaap-mr:280800000/events/unit-test-topicname/unit-test-consumegroup/unit-test-consumerid"
+            },
+            "res": [
+                "{\"deployed-policies\":[{\"policy-type\":\"onap.policies.monitoring.cdap.tca.hi.lo.app\",\"policy-type-version\":\"1.0.0\",\"policy-id\":\"test_scope_prefix.pdp_decision_Lorem\",\"policy-version\":\"1.1.1-update1\",\"success-count\":3,\"failure-count\":0}],\"undeployed-policies\":[{\"policy-type\":\"onap.policies.monitoring.cdap.tca.hi.lo.app\",\"policy-type-version\":\"1.0.0\",\"policy-id\":\"test_scope_prefix.pdp_decision_Lorem\",\"policy-version\":\"1.1.1\",\"success-count\":3,\"failure-count\":0}]}"
+            ],
+            "status_code": 200
+        },
+        {
+            "request": {
+                "headers": {
+                    "X-ONAP-RequestID": "*",
+                    "X-ECOMP-RequestID": "*"
+                },
+                "json": null,
+                "method": "get",
+                "params": {
+                    "cfy_tenant_name": "default_tenant"
+                },
+                "uri": "http://unit-test-deployment_handler:8188000/policy"
+            },
+            "res": {
+                "policies": {
+                    "test_scope_prefix.pdp_decision_Lorem": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_Lorem",
+                        "policy_versions": {
+                            "1.1.1": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_amet": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_amet",
+                        "policy_versions": {
+                            "5.5.5": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_ametist": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_ametist",
+                        "policy_versions": {
+                            "7.7.7": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_consectetur": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_consectetur",
+                        "policy_versions": {
+                            "6.6.6": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_dolor": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_dolor",
+                        "policy_versions": {
+                            "3.3.3": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_ipsum": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_ipsum",
+                        "policy_versions": {
+                            "2.2.2": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_sit": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_sit",
+                        "policy_versions": {
+                            "4.4.4": true
+                        }
+                    }
+                },
+                "server_instance_uuid": "e17fc584-7b06-4777-81c5-5da4337d6d16"
+            },
+            "status_code": 200
+        },
+        {
+            "request": {
+                "headers": {
+                    "Accept": "application/json",
+                    "Authorization": "Basic auth",
+                    "ClientAuth": "Basic user",
+                    "Content-Type": "application/json",
+                    "Environment": "TEST",
+                    "X-ECOMP-RequestID": "*",
+                    "X-ONAP-RequestID": "*"
+                },
+                "json": {
+                    "ONAPComponent": "policy_handler",
+                    "ONAPInstance": "*",
+                    "ONAPName": "DCAE",
+                    "action": "configure",
+                    "resource": {
+                        "policy-id": [
+                            "test_scope_prefix.pdp_decision_Lorem"
+                        ]
+                    }
+                },
+                "method": "post",
+                "params": null,
+                "uri": "https://unit-test-pdp-server:8081000/decision/v1/"
+            },
+            "res": {
+                "policies": {
+                    "test_scope_prefix.pdp_decision_Lorem": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_Lorem",
+                            "policy-id": "test_scope_prefix.pdp_decision_Lorem",
+                            "policy-version": "1.1.1"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 0,
+                            "policy_updated_to_ver": 1,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_Lorem"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    }
+                }
+            },
+            "status_code": 200
+        },
+        {
+            "request": {
+                "headers": {
+                    "Authorization": "Basic auth",
+                    "Content-Type": "application/json",
+                    "X-ONAP-RequestID": "*",
+                    "X-ECOMP-RequestID": "*"
+                },
+                "json": null,
+                "method": "get",
+                "params": {
+                    "timeout": 15000
+                },
+                "uri": "https://unit-test-dmaap-mr:280800000/events/unit-test-topicname/unit-test-consumegroup/unit-test-consumerid"
+                },
+            "res": [],
+            "status_code": 200
+        },
+        {
+            "request": {
+                "headers": {
+                    "Accept": "application/json",
+                    "Authorization": "Basic auth",
+                    "ClientAuth": "Basic user",
+                    "Content-Type": "application/json",
+                    "Environment": "TEST",
+                    "X-ECOMP-RequestID": "*",
+                    "X-ONAP-RequestID": "*"
+                },
+                "json": {
+                    "ONAPComponent": "policy_handler",
+                    "ONAPInstance": "*",
+                    "ONAPName": "DCAE",
+                    "action": "configure",
+                    "resource": {
+                        "policy-id": [
+                            "test_scope_prefix.pdp_decision_Lorem"
+                        ]
+                    }
+                },
+                "method": "post",
+                "params": null,
+                "uri": "https://unit-test-pdp-server:8081000/decision/v1/"
+            },
+            "res": {
+                "policies": {
+                    "test_scope_prefix.pdp_decision_Lorem": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_Lorem",
+                            "policy-id": "test_scope_prefix.pdp_decision_Lorem",
+                            "policy-version": "1.1.1-update1"
+                        },
+                        "properties": {
+                            "policy_hello": "world! - updated 1",
+                            "policy_updated_from_ver": "1.1.1",
+                            "policy_updated_to_ver": "1.1.1-update1",
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_Lorem"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    }
+                }
+            },
+            "status_code": 200
+        },
+        {
+            "request": {
+                "headers": {
+                    "X-ECOMP-RequestID": "*",
+                    "X-ONAP-RequestID": "*"
+                },
+                "json": {
+                    "catch_up": false,
+                    "latest_policies": {
+                        "test_scope_prefix.pdp_decision_Lorem": {
+                            "policy_body": {
+                                "config": {
+                                    "policy_hello": "world! - updated 1",
+                                    "policy_updated_from_ver": "1.1.1",
+                                    "policy_updated_to_ver": "1.1.1-update1",
+                                    "updated_policy_id": "test_scope_prefix.pdp_decision_Lorem"
+                                },
+                                "metadata": {
+                                    "description": "description for test_scope_prefix.pdp_decision_Lorem",
+                                    "policy-id": "test_scope_prefix.pdp_decision_Lorem",
+                                    "policy-version": "1.1.1-update1"
+                                },
+                                "policyName": "test_scope_prefix.pdp_decision_Lorem.1-1-1-update1.xml",
+                                "policyVersion": "1.1.1-update1",
+                                "type": "unit.test.type.policies",
+                                "version": "1.0.0"
+                            },
+                            "policy_id": "test_scope_prefix.pdp_decision_Lorem"
+                        }
+                    },
+                    "policy_filter_matches": {},
+                    "removed_policies": {}
+                },
+                "method": "put",
+                "params": {
+                    "cfy_tenant_name": "default_tenant"
+                },
+                "uri": "http://unit-test-deployment_handler:8188000/policy"
+            },
+            "res": {
+                "server_instance_uuid": "e17fc584-7b06-4777-81c5-5da4337d6d16"
+            },
+            "status_code": 200
+        },
+        {
+            "request": {
+                "headers": {
+                    "Authorization": "Basic auth",
+                    "Content-Type": "application/json",
+                    "X-ONAP-RequestID": "*",
+                    "X-ECOMP-RequestID": "*"
+                },
+                "json": null,
+                "method": "get",
+                "params": {
+                    "timeout": 15000
+                },
+                "uri": "https://unit-test-dmaap-mr:280800000/events/unit-test-topicname/unit-test-consumegroup/unit-test-consumerid"
+                },
+            "res": [
+                "{\"deployed-policies\":[{\"policy-type\":\"onap.policies.testing\",\"policy-type-version\":\"99.0.0\",\"policy-id\":\"not-dcae.expect-be-ignored-55\",\"policy-version\":\"522.522.522\",\"success-count\":3,\"failure-count\":0}],\"undeployed-policies\":[{\"policy-type\":\"onap.policies.testing\",\"policy-type-version\":\"9.0.0\",\"policy-id\":\"test_scope_prefix.pdp_decision_ipsum\",\"policy-version\":\"2.2.2\",\"success-count\":3,\"failure-count\":0},{\"policy-type\":\"onap.policies.testing\",\"policy-type-version\":\"9.0.0\",\"policy-id\":\"not-dcae.expect-be-ignored\",\"policy-version\":\"22.22.22\",\"success-count\":3,\"failure-count\":0}]}",
+                "{\"deployed-policies\":[{\"policy-type\":\"onap.policies.testing\",\"policy-type-version\":\"99.9.9\",\"policy-id\":\"not-dcae.expect-be-ignored-55\",\"policy-version\":\"5522.5522.522\",\"success-count\":3,\"failure-count\":0}],\"undeployed-policies\":[{\"policy-type\":\"onap.policies.testing\",\"policy-type-version\":\"9.0.0\",\"policy-id\":\"not-dcae.expect-be-ignored\",\"policy-version\":\"22.22.22\",\"success-count\":3,\"failure-count\":0}]}"
+            ],
+            "status_code": 200
+        },
+        {
+            "request": {
+                "headers": {
+                    "X-ONAP-RequestID": "*",
+                    "X-ECOMP-RequestID": "*"
+                },
+                "json": null,
+                "method": "get",
+                "params": {
+                    "cfy_tenant_name": "default_tenant"
+                },
+                "uri": "http://unit-test-deployment_handler:8188000/policy"
+            },
+            "res": {
+                "policies": {
+                    "test_scope_prefix.pdp_decision_Lorem": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_Lorem",
+                        "policy_versions": {
+                            "1.1.1-update1": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_amet": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_amet",
+                        "policy_versions": {
+                            "5.5.5": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_ametist": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_ametist",
+                        "policy_versions": {
+                            "7.7.7": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_consectetur": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_consectetur",
+                        "policy_versions": {
+                            "6.6.6": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_dolor": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_dolor",
+                        "policy_versions": {
+                            "3.3.3": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_ipsum": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_ipsum",
+                        "policy_versions": {
+                            "2.2.2": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_sit": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_sit",
+                        "policy_versions": {
+                            "4.4.4": true
+                        }
+                    }
+                },
+                "server_instance_uuid": "e17fc584-7b06-4777-81c5-5da4337d6d16"
+            },
+            "status_code": 200
+        },
+        {
+            "request": {
+                "headers": {
+                    "Accept": "application/json",
+                    "Authorization": "Basic auth",
+                    "ClientAuth": "Basic user",
+                    "Content-Type": "application/json",
+                    "Environment": "TEST",
+                    "X-ECOMP-RequestID": "*",
+                    "X-ONAP-RequestID": "*"
+                },
+                "json": {
+                    "ONAPComponent": "policy_handler",
+                    "ONAPInstance": "*",
+                    "ONAPName": "DCAE",
+                    "action": "configure",
+                    "resource": {
+                        "policy-id": [
+                            "test_scope_prefix.pdp_decision_ipsum"
+                        ]
+                    }
+                },
+                "method": "post",
+                "params": null,
+                "uri": "https://unit-test-pdp-server:8081000/decision/v1/"
+            },
+            "res": {
+                "policies": {}
+            },
+            "status_code": 200
+        },
+        {
+            "request": {
+                "headers": {
+                    "X-ECOMP-RequestID": "*",
+                    "X-ONAP-RequestID": "*"
+                },
+                "json": {
+                    "catch_up": false,
+                    "latest_policies": {},
+                    "policy_filter_matches": {},
+                    "removed_policies": {
+                        "test_scope_prefix.pdp_decision_ipsum": true
+                    }
+                },
+                "method": "put",
+                "params": {
+                    "cfy_tenant_name": "default_tenant"
+                },
+                "uri": "http://unit-test-deployment_handler:8188000/policy"
+            },
+            "res": {
+                "server_instance_uuid": "e17fc584-7b06-4777-81c5-5da4337d6d16"
+            },
+            "status_code": 200
+        },
+        {
+            "request": {
+                "headers": {
+                    "Authorization": "Basic auth",
+                    "Content-Type": "application/json",
+                    "X-ONAP-RequestID": "*",
+                    "X-ECOMP-RequestID": "*"
+                },
+                "json": null,
+                "method": "get",
+                "params": {
+                    "timeout": 15000
+                },
+                "uri": "https://unit-test-dmaap-mr:280800000/events/unit-test-topicname/unit-test-consumegroup/unit-test-consumerid"
+                },
+            "res": [
+                "{\"deployed-policies\":[{\"policy-type\":\"onap.policies.monitoring.cdap.tca.hi.lo.app\",\"policy-type-version\":\"1.0.0\",\"policy-id\":\"test_scope_prefix.pdp_decision_Lorem\",\"policy-version\":\"1.1.1-update1\",\"success-count\":3,\"failure-count\":0}],\"undeployed-policies\":[{\"policy-type\":\"onap.policies.monitoring.cdap.tca.hi.lo.app\",\"policy-type-version\":\"1.0.0\",\"policy-id\":\"test_scope_prefix.pdp_decision_Lorem\",\"policy-version\":\"1.1.1\",\"success-count\":3,\"failure-count\":0}]}",
+                "{\"deployed-policies\":[{\"policy-type\":\"onap.policies.monitoring.cdap.tca.hi.lo.app\",\"policy-type-version\":\"1.0.0\",\"policy-id\":\"test_scope_prefix.pdp_decision_Lorem\",\"policy-version\":\"1.1.1-update2\",\"success-count\":3,\"failure-count\":0}],\"undeployed-policies\":[{\"policy-type\":\"onap.policies.monitoring.cdap.tca.hi.lo.app\",\"policy-type-version\":\"1.0.0\",\"policy-id\":\"test_scope_prefix.pdp_decision_Lorem\",\"policy-version\":\"1.1.1-update1\",\"success-count\":3,\"failure-count\":0}]}",
+                "{\"deployed-policies\":[{\"policy-type\":\"onap.policies.monitoring.cdap.tca.hi.lo.app\",\"policy-type-version\":\"1.0.0\",\"policy-id\":\"test_scope_prefix.pdp_decision_Lorem\",\"policy-version\":\"1.1.1-update3\",\"success-count\":3,\"failure-count\":0}],\"undeployed-policies\":[{\"policy-type\":\"onap.policies.monitoring.cdap.tca.hi.lo.app\",\"policy-type-version\":\"1.0.0\",\"policy-id\":\"test_scope_prefix.pdp_decision_Lorem\",\"policy-version\":\"1.1.1-update2\",\"success-count\":3,\"failure-count\":0}]}"
+            ],
+            "status_code": 200
+        },
+        {
+            "request": {
+                "headers": {
+                    "X-ONAP-RequestID": "*",
+                    "X-ECOMP-RequestID": "*"
+                },
+                "json": null,
+                "method": "get",
+                "params": {
+                    "cfy_tenant_name": "default_tenant"
+                },
+                "uri": "http://unit-test-deployment_handler:8188000/policy"
+            },
+            "res": {
+                "policies": {
+                    "test_scope_prefix.pdp_decision_Lorem": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_Lorem",
+                        "policy_versions": {
+                            "1.1.1": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_amet": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_amet",
+                        "policy_versions": {
+                            "5.5.5": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_ametist": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_ametist",
+                        "policy_versions": {
+                            "7.7.7": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_consectetur": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_consectetur",
+                        "policy_versions": {
+                            "6.6.6": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_dolor": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_dolor",
+                        "policy_versions": {
+                            "3.3.3": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_ipsum": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_ipsum",
+                        "policy_versions": {
+                            "2.2.2": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_sit": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_sit",
+                        "policy_versions": {
+                            "4.4.4": true
+                        }
+                    }
+                },
+                "server_instance_uuid": "e17fc584-7b06-4777-81c5-5da4337d6d16"
+            },
+            "status_code": 200
+        },
+        {
+            "request": {
+                "headers": {
+                    "Accept": "application/json",
+                    "Authorization": "Basic auth",
+                    "ClientAuth": "Basic user",
+                    "Content-Type": "application/json",
+                    "Environment": "TEST",
+                    "X-ECOMP-RequestID": "*",
+                    "X-ONAP-RequestID": "*"
+                },
+                "json": {
+                    "ONAPComponent": "policy_handler",
+                    "ONAPInstance": "*",
+                    "ONAPName": "DCAE",
+                    "action": "configure",
+                    "resource": {
+                        "policy-id": [
+                            "test_scope_prefix.pdp_decision_Lorem"
+                        ]
+                    }
+                },
+                "method": "post",
+                "params": null,
+                "uri": "https://unit-test-pdp-server:8081000/decision/v1/"
+            },
+            "res": {
+                "policies": {
+                    "test_scope_prefix.pdp_decision_Lorem": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_Lorem",
+                            "policy-id": "test_scope_prefix.pdp_decision_Lorem",
+                            "policy-version": "1.1.1-update3"
+                        },
+                        "properties": {
+                            "policy_hello": "world! - updated 3",
+                            "policy_updated_from_ver": "1.1.1-update2",
+                            "policy_updated_to_ver": "1.1.1-update3",
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_Lorem"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    }
+                }
+            },
+            "status_code": 200
+        },
+        {
+            "request": {
+                "headers": {
+                    "X-ECOMP-RequestID": "*",
+                    "X-ONAP-RequestID": "*"
+                },
+                "json": {
+                    "catch_up": false,
+                    "latest_policies": {
+                        "test_scope_prefix.pdp_decision_Lorem": {
+                            "policy_body": {
+                                "config": {
+                                    "policy_hello": "world! - updated 3",
+                                    "policy_updated_from_ver": "1.1.1-update2",
+                                    "policy_updated_to_ver": "1.1.1-update3",
+                                    "updated_policy_id": "test_scope_prefix.pdp_decision_Lorem"
+                                },
+                                "metadata": {
+                                    "description": "description for test_scope_prefix.pdp_decision_Lorem",
+                                    "policy-id": "test_scope_prefix.pdp_decision_Lorem",
+                                    "policy-version": "1.1.1-update3"
+                                },
+                                "policyName": "test_scope_prefix.pdp_decision_Lorem.1-1-1-update3.xml",
+                                "policyVersion": "1.1.1-update3",
+                                "type": "unit.test.type.policies",
+                                "version": "1.0.0"
+                            },
+                            "policy_id": "test_scope_prefix.pdp_decision_Lorem"
+                        }
+                    },
+                    "policy_filter_matches": {},
+                    "removed_policies": {}
+                },
+                "method": "put",
+                "params": {
+                    "cfy_tenant_name": "default_tenant"
+                },
+                "uri": "http://unit-test-deployment_handler:8188000/policy"
+            },
+            "res": {
+                "server_instance_uuid": "e17fc584-7b06-4777-81c5-5da4337d6d16"
+            },
+            "status_code": 200
+        },
+        {
+            "request": {
+                "headers": {
+                    "Authorization": "Basic auth",
+                    "Content-Type": "application/json",
+                    "X-ONAP-RequestID": "*",
+                    "X-ECOMP-RequestID": "*"
+                },
+                "json": null,
+                "method": "get",
+                "params": {
+                    "timeout": 15000
+                },
+                "uri": "https://unit-test-dmaap-mr:280800000/events/unit-test-topicname/unit-test-consumegroup/unit-test-consumerid"
+                },
+            "res": [],
+            "status_code": 200
+        },
+        {
+            "request": {
+                "headers": {
+                    "Authorization": "Basic auth",
+                    "Content-Type": "application/json",
+                    "X-ONAP-RequestID": "*",
+                    "X-ECOMP-RequestID": "*"
+                },
+                "json": null,
+                "method": "get",
+                "params": {
+                    "timeout": 15000
+                },
+                "uri": "https://unit-test-dmaap-mr:280800000/events/unit-test-topicname/unit-test-consumegroup/unit-test-consumerid"
+                },
+            "res": [],
+            "status_code": 200
+        },
+        {
+            "request": {
+                "headers": {
+                    "Authorization": "Basic auth",
+                    "Content-Type": "application/json",
+                    "X-ONAP-RequestID": "*",
+                    "X-ECOMP-RequestID": "*"
+                },
+                "json": null,
+                "method": "get",
+                "params": {
+                    "timeout": 15000
+                },
+                "uri": "https://unit-test-dmaap-mr:280800000/events/unit-test-topicname/unit-test-consumegroup/unit-test-consumerid"
+                },
+            "res": [],
+            "status_code": 200
+        }
+    ],
+    "tests/main/test_pz_catch_up.py::test_catch_up": [
+        {
+            "request": {
+                "headers": {
+                    "Authorization": "Basic YWxleC1ETUFBUF9NUl9VU0VSOmFsZXgtRE1BQVBfTVJfUFdE",
+                    "Content-Type": "application/json",
+                    "X-ONAP-RequestID": "*",
+                    "X-ECOMP-RequestID": "*"
+                },
+                "json": null,
+                "method": "get",
+                "params": null,
+                "uri": "https://unit-test-dmaap-mr:280800000/events/unit-test-topicname/unit-test-consumegroup/unit-test-consumerid"
+                },
+            "res": ["garbage-to-be-ignored"],
+            "status_code": 200
+        },
+        {
+            "request": {
+                "headers": {
+                    "X-ONAP-RequestID": "*",
+                    "X-ECOMP-RequestID": "*"
+                },
+                "json": null,
+                "method": "get",
+                "params": {
+                    "cfy_tenant_name": "default_tenant"
+                },
+                "uri": "http://unit-test-deployment_handler:8188000/policy"
+            },
+            "res": {
+                "policies": {
+                    "test_scope_prefix.pdp_decision_Lorem": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_Lorem",
+                        "policy_versions": {
+                            "0": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_amet": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_amet",
+                        "policy_versions": {
+                            "5.5.5": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_ametist": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_ametist",
+                        "policy_versions": {
+                            "6": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_consectetur": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_consectetur",
+                        "policy_versions": {
+                            "5": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_dolor": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_dolor",
+                        "policy_versions": {
+                            "2": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_ipsum": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_ipsum",
+                        "policy_versions": {
+                            "1": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_sit": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_sit",
+                        "policy_versions": {
+                            "3": true
+                        }
+                    }
+                },
+                "server_instance_uuid": "e17fc584-7b06-4777-81c5-5da4337d6d16"
+            },
+            "status_code": 200
+        },
+        {
+            "request": {
+                "headers": {
+                    "Accept": "application/json",
+                    "Authorization": "Basic YWxleC1QRFBfVVNFUjphbGV4LVBEUF9QV0Q=",
+                    "ClientAuth": "Basic user",
+                    "Content-Type": "application/json",
+                    "Environment": "TEST",
+                    "X-ECOMP-RequestID": "*",
+                    "X-ONAP-RequestID": "*"
+                },
+                "json": {
+                    "ONAPComponent": "policy_handler",
+                    "ONAPInstance": "*",
+                    "ONAPName": "DCAE",
+                    "action": "configure",
+                    "resource": {
+                        "policy-id": [
+                            "test_scope_prefix.pdp_decision_Lorem",
+                            "test_scope_prefix.pdp_decision_amet",
+                            "test_scope_prefix.pdp_decision_ametist",
+                            "test_scope_prefix.pdp_decision_consectetur",
+                            "test_scope_prefix.pdp_decision_dolor",
+                            "test_scope_prefix.pdp_decision_ipsum",
+                            "test_scope_prefix.pdp_decision_sit"
+                        ]
+                    }
+                },
+                "method": "post",
+                "params": null,
+                "uri": "https://unit-test-pdp-server:8081000/decision/v1/"
+            },
+            "res": {
+                "policies": {
+                    "test_scope_prefix.pdp_decision_Lorem": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_Lorem",
+                            "policy-id": "test_scope_prefix.pdp_decision_Lorem",
+                            "policy-version": "1.1.1"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 0,
+                            "policy_updated_to_ver": 1,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_Lorem"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    },
+                    "test_scope_prefix.pdp_decision_amet": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_amet",
+                            "policy-id": "test_scope_prefix.pdp_decision_amet",
+                            "policy-version": "5.5.5"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 4,
+                            "policy_updated_to_ver": 5,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_amet"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    },
+                    "test_scope_prefix.pdp_decision_ametist": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_ametist",
+                            "policy-id": "test_scope_prefix.pdp_decision_ametist",
+                            "policy-version": "7.7.7"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 6,
+                            "policy_updated_to_ver": 7,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_ametist"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    },
+                    "test_scope_prefix.pdp_decision_consectetur": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_consectetur",
+                            "policy-id": "test_scope_prefix.pdp_decision_consectetur",
+                            "policy-version": "6.6.6"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 5,
+                            "policy_updated_to_ver": 6,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_consectetur"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    },
+                    "test_scope_prefix.pdp_decision_dolor": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_dolor",
+                            "policy-id": "test_scope_prefix.pdp_decision_dolor",
+                            "policy-version": "3.3.3"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 2,
+                            "policy_updated_to_ver": 3,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_dolor"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    },
+                    "test_scope_prefix.pdp_decision_ipsum": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_ipsum",
+                            "policy-id": "test_scope_prefix.pdp_decision_ipsum",
+                            "policy-version": "2.2.2"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 1,
+                            "policy_updated_to_ver": 2,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_ipsum"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    },
+                    "test_scope_prefix.pdp_decision_sit": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_sit",
+                            "policy-id": "test_scope_prefix.pdp_decision_sit",
+                            "policy-version": "4.4.4"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 3,
+                            "policy_updated_to_ver": 4,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_sit"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    }
+                }
+            },
+            "status_code": 200
+        },
+        {
+            "request": {
+                "headers": {
+                    "X-ECOMP-RequestID": "*",
+                    "X-ONAP-RequestID": "*"
+                },
+                "json": {
+                    "catch_up": true,
+                    "latest_policies": {
+                        "test_scope_prefix.pdp_decision_Lorem": {
+                            "policy_body": {
+                                "config": {
+                                    "policy_hello": "world!",
+                                    "policy_updated_from_ver": 0,
+                                    "policy_updated_to_ver": 1,
+                                    "updated_policy_id": "test_scope_prefix.pdp_decision_Lorem"
+                                },
+                                "metadata": {
+                                    "description": "description for test_scope_prefix.pdp_decision_Lorem",
+                                    "policy-id": "test_scope_prefix.pdp_decision_Lorem",
+                                    "policy-version": "1.1.1"
+                                },
+                                "policyName": "test_scope_prefix.pdp_decision_Lorem.1-1-1.xml",
+                                "policyVersion": "1.1.1",
+                                "type": "unit.test.type.policies",
+                                "version": "1.0.0"
+                            },
+                            "policy_id": "test_scope_prefix.pdp_decision_Lorem"
+                        },
+                        "test_scope_prefix.pdp_decision_ametist": {
+                            "policy_body": {
+                                "config": {
+                                    "policy_hello": "world!",
+                                    "policy_updated_from_ver": 6,
+                                    "policy_updated_to_ver": 7,
+                                    "updated_policy_id": "test_scope_prefix.pdp_decision_ametist"
+                                },
+                                "metadata": {
+                                    "description": "description for test_scope_prefix.pdp_decision_ametist",
+                                    "policy-id": "test_scope_prefix.pdp_decision_ametist",
+                                    "policy-version": "7.7.7"
+                                },
+                                "policyName": "test_scope_prefix.pdp_decision_ametist.7-7-7.xml",
+                                "policyVersion": "7.7.7",
+                                "type": "unit.test.type.policies",
+                                "version": "1.0.0"
+                            },
+                            "policy_id": "test_scope_prefix.pdp_decision_ametist"
+                        },
+                        "test_scope_prefix.pdp_decision_consectetur": {
+                            "policy_body": {
+                                "config": {
+                                    "policy_hello": "world!",
+                                    "policy_updated_from_ver": 5,
+                                    "policy_updated_to_ver": 6,
+                                    "updated_policy_id": "test_scope_prefix.pdp_decision_consectetur"
+                                },
+                                "metadata": {
+                                    "description": "description for test_scope_prefix.pdp_decision_consectetur",
+                                    "policy-id": "test_scope_prefix.pdp_decision_consectetur",
+                                    "policy-version": "6.6.6"
+                                },
+                                "policyName": "test_scope_prefix.pdp_decision_consectetur.6-6-6.xml",
+                                "policyVersion": "6.6.6",
+                                "type": "unit.test.type.policies",
+                                "version": "1.0.0"
+                            },
+                            "policy_id": "test_scope_prefix.pdp_decision_consectetur"
+                        },
+                        "test_scope_prefix.pdp_decision_dolor": {
+                            "policy_body": {
+                                "config": {
+                                    "policy_hello": "world!",
+                                    "policy_updated_from_ver": 2,
+                                    "policy_updated_to_ver": 3,
+                                    "updated_policy_id": "test_scope_prefix.pdp_decision_dolor"
+                                },
+                                "metadata": {
+                                    "description": "description for test_scope_prefix.pdp_decision_dolor",
+                                    "policy-id": "test_scope_prefix.pdp_decision_dolor",
+                                    "policy-version": "3.3.3"
+                                },
+                                "policyName": "test_scope_prefix.pdp_decision_dolor.3-3-3.xml",
+                                "policyVersion": "3.3.3",
+                                "type": "unit.test.type.policies",
+                                "version": "1.0.0"
+                            },
+                            "policy_id": "test_scope_prefix.pdp_decision_dolor"
+                        },
+                        "test_scope_prefix.pdp_decision_ipsum": {
+                            "policy_body": {
+                                "config": {
+                                    "policy_hello": "world!",
+                                    "policy_updated_from_ver": 1,
+                                    "policy_updated_to_ver": 2,
+                                    "updated_policy_id": "test_scope_prefix.pdp_decision_ipsum"
+                                },
+                                "metadata": {
+                                    "description": "description for test_scope_prefix.pdp_decision_ipsum",
+                                    "policy-id": "test_scope_prefix.pdp_decision_ipsum",
+                                    "policy-version": "2.2.2"
+                                },
+                                "policyName": "test_scope_prefix.pdp_decision_ipsum.2-2-2.xml",
+                                "policyVersion": "2.2.2",
+                                "type": "unit.test.type.policies",
+                                "version": "1.0.0"
+                            },
+                            "policy_id": "test_scope_prefix.pdp_decision_ipsum"
+                        },
+                        "test_scope_prefix.pdp_decision_sit": {
+                            "policy_body": {
+                                "config": {
+                                    "policy_hello": "world!",
+                                    "policy_updated_from_ver": 3,
+                                    "policy_updated_to_ver": 4,
+                                    "updated_policy_id": "test_scope_prefix.pdp_decision_sit"
+                                },
+                                "metadata": {
+                                    "description": "description for test_scope_prefix.pdp_decision_sit",
+                                    "policy-id": "test_scope_prefix.pdp_decision_sit",
+                                    "policy-version": "4.4.4"
+                                },
+                                "policyName": "test_scope_prefix.pdp_decision_sit.4-4-4.xml",
+                                "policyVersion": "4.4.4",
+                                "type": "unit.test.type.policies",
+                                "version": "1.0.0"
+                            },
+                            "policy_id": "test_scope_prefix.pdp_decision_sit"
+                        }
+                    },
+                    "policy_filter_matches": {},
+                    "removed_policies": {}
+                },
+                "method": "put",
+                "params": {
+                    "cfy_tenant_name": "default_tenant"
+                },
+                "uri": "http://unit-test-deployment_handler:8188000/policy"
+            },
+            "res": {
+                "server_instance_uuid": "e17fc584-7b06-4777-81c5-5da4337d6d16"
+            },
+            "status_code": 200
+        },
+        {
+            "request": {
+                "headers": {
+                    "Authorization": "Basic YWxleC1ETUFBUF9NUl9VU0VSOmFsZXgtRE1BQVBfTVJfUFdE",
+                    "Content-Type": "application/json",
+                    "X-ONAP-RequestID": "*",
+                    "X-ECOMP-RequestID": "*"
+                },
+                "json": null,
+                "method": "get",
+                "params": {
+                    "timeout": 15000
+                },
+                "uri": "https://unit-test-dmaap-mr:280800000/events/unit-test-topicname/unit-test-consumegroup/unit-test-consumerid"
+            },
+            "res": [],
+            "status_code": 200
+        },
+        {
+            "request": {
+                "headers": {
+                    "X-ONAP-RequestID": "*",
+                    "X-ECOMP-RequestID": "*"
+                },
+                "json": null,
+                "method": "get",
+                "params": {
+                    "cfy_tenant_name": "default_tenant"
+                },
+                "uri": "http://unit-test-deployment_handler:8188000/policy"
+            },
+            "res": {
+                "policies": {
+                    "test_scope_prefix.pdp_decision_Lorem": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_Lorem",
+                        "policy_versions": {
+                            "0": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_amet": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_amet",
+                        "policy_versions": {
+                            "5.5.5": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_ametist": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_ametist",
+                        "policy_versions": {
+                            "6": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_consectetur": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_consectetur",
+                        "policy_versions": {
+                            "5": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_dolor": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_dolor",
+                        "policy_versions": {
+                            "2": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_ipsum": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_ipsum",
+                        "policy_versions": {
+                            "1": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_sit": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_sit",
+                        "policy_versions": {
+                            "3": true
+                        }
+                    }
+                },
+                "server_instance_uuid": "e17fc584-7b06-4777-81c5-5da4337d6d16"
+            },
+            "status_code": 200
+        },
+        {
+            "request": {
+                "headers": {
+                    "Accept": "application/json",
+                    "Authorization": "Basic YWxleC1QRFBfVVNFUjphbGV4LVBEUF9QV0Q=",
+                    "ClientAuth": "Basic user",
+                    "Content-Type": "application/json",
+                    "Environment": "TEST",
+                    "X-ECOMP-RequestID": "*",
+                    "X-ONAP-RequestID": "*"
+                },
+                "json": {
+                    "ONAPComponent": "policy_handler",
+                    "ONAPInstance": "*",
+                    "ONAPName": "DCAE",
+                    "action": "configure",
+                    "resource": {
+                        "policy-id": [
+                            "test_scope_prefix.pdp_decision_Lorem",
+                            "test_scope_prefix.pdp_decision_amet",
+                            "test_scope_prefix.pdp_decision_ametist",
+                            "test_scope_prefix.pdp_decision_consectetur",
+                            "test_scope_prefix.pdp_decision_dolor",
+                            "test_scope_prefix.pdp_decision_ipsum",
+                            "test_scope_prefix.pdp_decision_sit"
+                        ]
+                    }
+                },
+                "method": "post",
+                "params": null,
+                "uri": "https://unit-test-pdp-server:8081000/decision/v1/"
+            },
+            "res": {
+                "policies": {
+                    "test_scope_prefix.pdp_decision_Lorem": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_Lorem",
+                            "policy-id": "test_scope_prefix.pdp_decision_Lorem",
+                            "policy-version": "1.1.1"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 0,
+                            "policy_updated_to_ver": 1,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_Lorem"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    },
+                    "test_scope_prefix.pdp_decision_amet": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_amet",
+                            "policy-id": "test_scope_prefix.pdp_decision_amet",
+                            "policy-version": "5.5.5"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 4,
+                            "policy_updated_to_ver": 5,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_amet"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    },
+                    "test_scope_prefix.pdp_decision_ametist": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_ametist",
+                            "policy-id": "test_scope_prefix.pdp_decision_ametist",
+                            "policy-version": "7.7.7"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 6,
+                            "policy_updated_to_ver": 7,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_ametist"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    },
+                    "test_scope_prefix.pdp_decision_consectetur": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_consectetur",
+                            "policy-id": "test_scope_prefix.pdp_decision_consectetur",
+                            "policy-version": "6.6.6"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 5,
+                            "policy_updated_to_ver": 6,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_consectetur"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    },
+                    "test_scope_prefix.pdp_decision_dolor": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_dolor",
+                            "policy-id": "test_scope_prefix.pdp_decision_dolor",
+                            "policy-version": "3.3.3"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 2,
+                            "policy_updated_to_ver": 3,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_dolor"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    },
+                    "test_scope_prefix.pdp_decision_ipsum": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_ipsum",
+                            "policy-id": "test_scope_prefix.pdp_decision_ipsum",
+                            "policy-version": "2.2.2"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 1,
+                            "policy_updated_to_ver": 2,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_ipsum"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    },
+                    "test_scope_prefix.pdp_decision_sit": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_sit",
+                            "policy-id": "test_scope_prefix.pdp_decision_sit",
+                            "policy-version": "4.4.4"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 3,
+                            "policy_updated_to_ver": 4,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_sit"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    }
+                }
+            },
+            "status_code": 200
+        },
+        {
+            "request": {
+                "headers": {
+                    "X-ECOMP-RequestID": "*",
+                    "X-ONAP-RequestID": "*"
+                },
+                "json": {
+                    "catch_up": true,
+                    "latest_policies": {
+                        "test_scope_prefix.pdp_decision_Lorem": {
+                            "policy_body": {
+                                "config": {
+                                    "policy_hello": "world!",
+                                    "policy_updated_from_ver": 0,
+                                    "policy_updated_to_ver": 1,
+                                    "updated_policy_id": "test_scope_prefix.pdp_decision_Lorem"
+                                },
+                                "metadata": {
+                                    "description": "description for test_scope_prefix.pdp_decision_Lorem",
+                                    "policy-id": "test_scope_prefix.pdp_decision_Lorem",
+                                    "policy-version": "1.1.1"
+                                },
+                                "policyName": "test_scope_prefix.pdp_decision_Lorem.1-1-1.xml",
+                                "policyVersion": "1.1.1",
+                                "type": "unit.test.type.policies",
+                                "version": "1.0.0"
+                            },
+                            "policy_id": "test_scope_prefix.pdp_decision_Lorem"
+                        },
+                        "test_scope_prefix.pdp_decision_ametist": {
+                            "policy_body": {
+                                "config": {
+                                    "policy_hello": "world!",
+                                    "policy_updated_from_ver": 6,
+                                    "policy_updated_to_ver": 7,
+                                    "updated_policy_id": "test_scope_prefix.pdp_decision_ametist"
+                                },
+                                "metadata": {
+                                    "description": "description for test_scope_prefix.pdp_decision_ametist",
+                                    "policy-id": "test_scope_prefix.pdp_decision_ametist",
+                                    "policy-version": "7.7.7"
+                                },
+                                "policyName": "test_scope_prefix.pdp_decision_ametist.7-7-7.xml",
+                                "policyVersion": "7.7.7",
+                                "type": "unit.test.type.policies",
+                                "version": "1.0.0"
+                            },
+                            "policy_id": "test_scope_prefix.pdp_decision_ametist"
+                        },
+                        "test_scope_prefix.pdp_decision_consectetur": {
+                            "policy_body": {
+                                "config": {
+                                    "policy_hello": "world!",
+                                    "policy_updated_from_ver": 5,
+                                    "policy_updated_to_ver": 6,
+                                    "updated_policy_id": "test_scope_prefix.pdp_decision_consectetur"
+                                },
+                                "metadata": {
+                                    "description": "description for test_scope_prefix.pdp_decision_consectetur",
+                                    "policy-id": "test_scope_prefix.pdp_decision_consectetur",
+                                    "policy-version": "6.6.6"
+                                },
+                                "policyName": "test_scope_prefix.pdp_decision_consectetur.6-6-6.xml",
+                                "policyVersion": "6.6.6",
+                                "type": "unit.test.type.policies",
+                                "version": "1.0.0"
+                            },
+                            "policy_id": "test_scope_prefix.pdp_decision_consectetur"
+                        },
+                        "test_scope_prefix.pdp_decision_dolor": {
+                            "policy_body": {
+                                "config": {
+                                    "policy_hello": "world!",
+                                    "policy_updated_from_ver": 2,
+                                    "policy_updated_to_ver": 3,
+                                    "updated_policy_id": "test_scope_prefix.pdp_decision_dolor"
+                                },
+                                "metadata": {
+                                    "description": "description for test_scope_prefix.pdp_decision_dolor",
+                                    "policy-id": "test_scope_prefix.pdp_decision_dolor",
+                                    "policy-version": "3.3.3"
+                                },
+                                "policyName": "test_scope_prefix.pdp_decision_dolor.3-3-3.xml",
+                                "policyVersion": "3.3.3",
+                                "type": "unit.test.type.policies",
+                                "version": "1.0.0"
+                            },
+                            "policy_id": "test_scope_prefix.pdp_decision_dolor"
+                        },
+                        "test_scope_prefix.pdp_decision_ipsum": {
+                            "policy_body": {
+                                "config": {
+                                    "policy_hello": "world!",
+                                    "policy_updated_from_ver": 1,
+                                    "policy_updated_to_ver": 2,
+                                    "updated_policy_id": "test_scope_prefix.pdp_decision_ipsum"
+                                },
+                                "metadata": {
+                                    "description": "description for test_scope_prefix.pdp_decision_ipsum",
+                                    "policy-id": "test_scope_prefix.pdp_decision_ipsum",
+                                    "policy-version": "2.2.2"
+                                },
+                                "policyName": "test_scope_prefix.pdp_decision_ipsum.2-2-2.xml",
+                                "policyVersion": "2.2.2",
+                                "type": "unit.test.type.policies",
+                                "version": "1.0.0"
+                            },
+                            "policy_id": "test_scope_prefix.pdp_decision_ipsum"
+                        },
+                        "test_scope_prefix.pdp_decision_sit": {
+                            "policy_body": {
+                                "config": {
+                                    "policy_hello": "world!",
+                                    "policy_updated_from_ver": 3,
+                                    "policy_updated_to_ver": 4,
+                                    "updated_policy_id": "test_scope_prefix.pdp_decision_sit"
+                                },
+                                "metadata": {
+                                    "description": "description for test_scope_prefix.pdp_decision_sit",
+                                    "policy-id": "test_scope_prefix.pdp_decision_sit",
+                                    "policy-version": "4.4.4"
+                                },
+                                "policyName": "test_scope_prefix.pdp_decision_sit.4-4-4.xml",
+                                "policyVersion": "4.4.4",
+                                "type": "unit.test.type.policies",
+                                "version": "1.0.0"
+                            },
+                            "policy_id": "test_scope_prefix.pdp_decision_sit"
+                        }
+                    },
+                    "policy_filter_matches": {},
+                    "removed_policies": {}
+                },
+                "method": "put",
+                "params": {
+                    "cfy_tenant_name": "default_tenant"
+                },
+                "uri": "http://unit-test-deployment_handler:8188000/policy"
+            },
+            "res": {
+                "server_instance_uuid": "e17fc584-7b06-4777-81c5-5da4337d6d16"
+            },
+            "status_code": 200
+        },
+        {
+            "request": {
+                "headers": {
+                    "Authorization": "Basic YWxleC1ETUFBUF9NUl9VU0VSOmFsZXgtRE1BQVBfTVJfUFdE",
+                    "Content-Type": "application/json",
+                    "X-ONAP-RequestID": "*",
+                    "X-ECOMP-RequestID": "*"
+                },
+                "json": null,
+                "method": "get",
+                "params": {
+                    "timeout": 15000
+                },
+                "uri": "https://unit-test-dmaap-mr:280800000/events/unit-test-topicname/unit-test-consumegroup/unit-test-consumerid"
+                },
+            "res": ["garbage-to-be-ignored", "garbage-to-be-ignored"],
+            "status_code": 200
+        },
+        {
+            "request": {
+                "headers": {
+                    "Authorization": "Basic YWxleC1ETUFBUF9NUl9VU0VSOmFsZXgtRE1BQVBfTVJfUFdE",
+                    "Content-Type": "application/json",
+                    "X-ONAP-RequestID": "*",
+                    "X-ECOMP-RequestID": "*"
+                },
+                "json": null,
+                "method": "get",
+                "params": {
+                    "timeout": 15000
+                },
+                "uri": "https://unit-test-dmaap-mr:280800000/events/unit-test-topicname/unit-test-consumegroup/unit-test-consumerid"
+                },
+            "res": [],
+            "status_code": 200
+        },
+        {
+            "request": {
+                "headers": {
+                    "X-ONAP-RequestID": "*",
+                    "X-ECOMP-RequestID": "*"
+                },
+                "json": null,
+                "method": "get",
+                "params": {
+                    "cfy_tenant_name": "default_tenant"
+                },
+                "uri": "http://unit-test-deployment_handler:8188000/policy"
+            },
+            "res": {
+                "policies": {
+                    "test_scope_prefix.pdp_decision_Lorem": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_Lorem",
+                        "policy_versions": {
+                            "0": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_amet": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_amet",
+                        "policy_versions": {
+                            "5.5.5": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_ametist": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_ametist",
+                        "policy_versions": {
+                            "6": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_consectetur": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_consectetur",
+                        "policy_versions": {
+                            "5": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_dolor": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_dolor",
+                        "policy_versions": {
+                            "2": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_ipsum": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_ipsum",
+                        "policy_versions": {
+                            "1": true
+                        }
+                    },
+                    "test_scope_prefix.pdp_decision_sit": {
+                        "pending_update": false,
+                        "policy_id": "test_scope_prefix.pdp_decision_sit",
+                        "policy_versions": {
+                            "3": true
+                        }
+                    }
+                },
+                "server_instance_uuid": "e17fc584-7b06-4777-81c5-5da4337d6d16"
+            },
+            "status_code": 200
+        },
+        {
+            "request": {
+                "headers": {
+                    "Accept": "application/json",
+                    "Authorization": "Basic YWxleC1QRFBfVVNFUjphbGV4LVBEUF9QV0Q=",
+                    "ClientAuth": "Basic user",
+                    "Content-Type": "application/json",
+                    "Environment": "TEST",
+                    "X-ECOMP-RequestID": "*",
+                    "X-ONAP-RequestID": "*"
+                },
+                "json": {
+                    "ONAPComponent": "policy_handler",
+                    "ONAPInstance": "*",
+                    "ONAPName": "DCAE",
+                    "action": "configure",
+                    "resource": {
+                        "policy-id": [
+                            "test_scope_prefix.pdp_decision_Lorem",
+                            "test_scope_prefix.pdp_decision_amet",
+                            "test_scope_prefix.pdp_decision_ametist",
+                            "test_scope_prefix.pdp_decision_consectetur",
+                            "test_scope_prefix.pdp_decision_dolor",
+                            "test_scope_prefix.pdp_decision_ipsum",
+                            "test_scope_prefix.pdp_decision_sit"
+                        ]
+                    }
+                },
+                "method": "post",
+                "params": null,
+                "uri": "https://unit-test-pdp-server:8081000/decision/v1/"
+            },
+            "res": {
+                "policies": {
+                    "test_scope_prefix.pdp_decision_Lorem": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_Lorem",
+                            "policy-id": "test_scope_prefix.pdp_decision_Lorem",
+                            "policy-version": "1.1.1"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 0,
+                            "policy_updated_to_ver": 1,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_Lorem"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    },
+                    "test_scope_prefix.pdp_decision_amet": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_amet",
+                            "policy-id": "test_scope_prefix.pdp_decision_amet",
+                            "policy-version": "5.5.5"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 4,
+                            "policy_updated_to_ver": 5,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_amet"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    },
+                    "test_scope_prefix.pdp_decision_ametist": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_ametist",
+                            "policy-id": "test_scope_prefix.pdp_decision_ametist",
+                            "policy-version": "7.7.7"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 6,
+                            "policy_updated_to_ver": 7,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_ametist"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    },
+                    "test_scope_prefix.pdp_decision_consectetur": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_consectetur",
+                            "policy-id": "test_scope_prefix.pdp_decision_consectetur",
+                            "policy-version": "6.6.6"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 5,
+                            "policy_updated_to_ver": 6,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_consectetur"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    },
+                    "test_scope_prefix.pdp_decision_dolor": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_dolor",
+                            "policy-id": "test_scope_prefix.pdp_decision_dolor",
+                            "policy-version": "3.3.3"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 2,
+                            "policy_updated_to_ver": 3,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_dolor"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    },
+                    "test_scope_prefix.pdp_decision_ipsum": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_ipsum",
+                            "policy-id": "test_scope_prefix.pdp_decision_ipsum",
+                            "policy-version": "2.2.2"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 1,
+                            "policy_updated_to_ver": 2,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_ipsum"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    },
+                    "test_scope_prefix.pdp_decision_sit": {
+                        "metadata": {
+                            "description": "description for test_scope_prefix.pdp_decision_sit",
+                            "policy-id": "test_scope_prefix.pdp_decision_sit",
+                            "policy-version": "4.4.4"
+                        },
+                        "properties": {
+                            "policy_hello": "world!",
+                            "policy_updated_from_ver": 3,
+                            "policy_updated_to_ver": 4,
+                            "updated_policy_id": "test_scope_prefix.pdp_decision_sit"
+                        },
+                        "type": "unit.test.type.policies",
+                        "version": "1.0.0"
+                    }
+                }
+            },
+            "status_code": 200
+        },
+        {
+            "request": {
+                "headers": {
+                    "X-ECOMP-RequestID": "*",
+                    "X-ONAP-RequestID": "*"
+                },
+                "json": {
+                    "catch_up": true,
+                    "latest_policies": {
+                        "test_scope_prefix.pdp_decision_Lorem": {
+                            "policy_body": {
+                                "config": {
+                                    "policy_hello": "world!",
+                                    "policy_updated_from_ver": 0,
+                                    "policy_updated_to_ver": 1,
+                                    "updated_policy_id": "test_scope_prefix.pdp_decision_Lorem"
+                                },
+                                "metadata": {
+                                    "description": "description for test_scope_prefix.pdp_decision_Lorem",
+                                    "policy-id": "test_scope_prefix.pdp_decision_Lorem",
+                                    "policy-version": "1.1.1"
+                                },
+                                "policyName": "test_scope_prefix.pdp_decision_Lorem.1-1-1.xml",
+                                "policyVersion": "1.1.1",
+                                "type": "unit.test.type.policies",
+                                "version": "1.0.0"
+                            },
+                            "policy_id": "test_scope_prefix.pdp_decision_Lorem"
+                        },
+                        "test_scope_prefix.pdp_decision_ametist": {
+                            "policy_body": {
+                                "config": {
+                                    "policy_hello": "world!",
+                                    "policy_updated_from_ver": 6,
+                                    "policy_updated_to_ver": 7,
+                                    "updated_policy_id": "test_scope_prefix.pdp_decision_ametist"
+                                },
+                                "metadata": {
+                                    "description": "description for test_scope_prefix.pdp_decision_ametist",
+                                    "policy-id": "test_scope_prefix.pdp_decision_ametist",
+                                    "policy-version": "7.7.7"
+                                },
+                                "policyName": "test_scope_prefix.pdp_decision_ametist.7-7-7.xml",
+                                "policyVersion": "7.7.7",
+                                "type": "unit.test.type.policies",
+                                "version": "1.0.0"
+                            },
+                            "policy_id": "test_scope_prefix.pdp_decision_ametist"
+                        },
+                        "test_scope_prefix.pdp_decision_consectetur": {
+                            "policy_body": {
+                                "config": {
+                                    "policy_hello": "world!",
+                                    "policy_updated_from_ver": 5,
+                                    "policy_updated_to_ver": 6,
+                                    "updated_policy_id": "test_scope_prefix.pdp_decision_consectetur"
+                                },
+                                "metadata": {
+                                    "description": "description for test_scope_prefix.pdp_decision_consectetur",
+                                    "policy-id": "test_scope_prefix.pdp_decision_consectetur",
+                                    "policy-version": "6.6.6"
+                                },
+                                "policyName": "test_scope_prefix.pdp_decision_consectetur.6-6-6.xml",
+                                "policyVersion": "6.6.6",
+                                "type": "unit.test.type.policies",
+                                "version": "1.0.0"
+                            },
+                            "policy_id": "test_scope_prefix.pdp_decision_consectetur"
+                        },
+                        "test_scope_prefix.pdp_decision_dolor": {
+                            "policy_body": {
+                                "config": {
+                                    "policy_hello": "world!",
+                                    "policy_updated_from_ver": 2,
+                                    "policy_updated_to_ver": 3,
+                                    "updated_policy_id": "test_scope_prefix.pdp_decision_dolor"
+                                },
+                                "metadata": {
+                                    "description": "description for test_scope_prefix.pdp_decision_dolor",
+                                    "policy-id": "test_scope_prefix.pdp_decision_dolor",
+                                    "policy-version": "3.3.3"
+                                },
+                                "policyName": "test_scope_prefix.pdp_decision_dolor.3-3-3.xml",
+                                "policyVersion": "3.3.3",
+                                "type": "unit.test.type.policies",
+                                "version": "1.0.0"
+                            },
+                            "policy_id": "test_scope_prefix.pdp_decision_dolor"
+                        },
+                        "test_scope_prefix.pdp_decision_ipsum": {
+                            "policy_body": {
+                                "config": {
+                                    "policy_hello": "world!",
+                                    "policy_updated_from_ver": 1,
+                                    "policy_updated_to_ver": 2,
+                                    "updated_policy_id": "test_scope_prefix.pdp_decision_ipsum"
+                                },
+                                "metadata": {
+                                    "description": "description for test_scope_prefix.pdp_decision_ipsum",
+                                    "policy-id": "test_scope_prefix.pdp_decision_ipsum",
+                                    "policy-version": "2.2.2"
+                                },
+                                "policyName": "test_scope_prefix.pdp_decision_ipsum.2-2-2.xml",
+                                "policyVersion": "2.2.2",
+                                "type": "unit.test.type.policies",
+                                "version": "1.0.0"
+                            },
+                            "policy_id": "test_scope_prefix.pdp_decision_ipsum"
+                        },
+                        "test_scope_prefix.pdp_decision_sit": {
+                            "policy_body": {
+                                "config": {
+                                    "policy_hello": "world!",
+                                    "policy_updated_from_ver": 3,
+                                    "policy_updated_to_ver": 4,
+                                    "updated_policy_id": "test_scope_prefix.pdp_decision_sit"
+                                },
+                                "metadata": {
+                                    "description": "description for test_scope_prefix.pdp_decision_sit",
+                                    "policy-id": "test_scope_prefix.pdp_decision_sit",
+                                    "policy-version": "4.4.4"
+                                },
+                                "policyName": "test_scope_prefix.pdp_decision_sit.4-4-4.xml",
+                                "policyVersion": "4.4.4",
+                                "type": "unit.test.type.policies",
+                                "version": "1.0.0"
+                            },
+                            "policy_id": "test_scope_prefix.pdp_decision_sit"
+                        }
+                    },
+                    "policy_filter_matches": {},
+                    "removed_policies": {}
+                },
+                "method": "put",
+                "params": {
+                    "cfy_tenant_name": "default_tenant"
+                },
+                "uri": "http://unit-test-deployment_handler:8188000/policy"
+            },
+            "res": {
+                "server_instance_uuid": "e17fc584-7b06-4777-81c5-5da4337d6d16"
+            },
+            "status_code": 200
+        },
+        {
+            "request": {
+                "headers": {
+                    "Authorization": "Basic YWxleC1ETUFBUF9NUl9VU0VSOmFsZXgtRE1BQVBfTVJfUFdE",
+                    "Content-Type": "application/json",
+                    "X-ONAP-RequestID": "*",
+                    "X-ECOMP-RequestID": "*"
+                },
+                "json": null,
+                "method": "get",
+                "params": {
+                    "timeout": 15000
+                },
+                "uri": "https://unit-test-dmaap-mr:280800000/events/unit-test-topicname/unit-test-consumegroup/unit-test-consumerid"
+                },
+            "res": [],
+            "status_code": 200
+        }
+    ]
+}
\ No newline at end of file
diff --git a/tests/main/mock_expected.py b/tests/main/mock_expected.py
deleted file mode 100644
index 450394c..0000000
--- a/tests/main/mock_expected.py
+++ /dev/null
@@ -1,526 +0,0 @@
-# ============LICENSE_START=======================================================
-# Copyright (c) 2018-2019 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=========================================================
-#
-"""expected message history per test for pdp API 2019 and after"""
-
-
-HISTORY_EXPECTED = {
-    "tests/main/test_policy_rest.py::test_get_policy_latest" : [
-        {
-            "request": {
-                "headers": {
-                    "Accept": "application/json",
-                    "Authorization": "Basic auth",
-                    "ClientAuth": "Basic user",
-                    "Content-Type": "application/json",
-                    "Environment": "TEST",
-                    "X-ECOMP-RequestID": "*"
-                },
-                "json": {
-                    "ONAPComponent": "policy_handler",
-                    "ONAPInstance": "*",
-                    "ONAPName": "DCAE",
-                    "action": "configure",
-                    "resource": {
-                        "policy-id": [
-                            "test_scope_prefix.pdp_desition_sit"
-                        ]
-                    }
-                },
-                "method": "post",
-                "params": None,
-                "uri": "https://unit-test-pdp-server:8081000/decision/v1/"
-            },
-            "res": "*",
-            "status_code": 200
-        }
-    ],
-    "tests/main/test_policyhandler.py::WebServerTest::test_web_all_policies_latest": [
-        {
-            "request": {
-                "headers": {
-                    "X-ECOMP-RequestID": "*"
-                },
-                "json": None,
-                "method": "get",
-                "params": {
-                    "cfy_tenant_name": "default_tenant"
-                },
-                "uri": "http://unit-test-deployment_handler:8188000/policy"
-            },
-            "res": "*",
-            "status_code": 200
-        },
-        {
-            "request": {
-                "headers": {
-                    "Accept": "application/json",
-                    "Authorization": "Basic auth",
-                    "ClientAuth": "Basic user",
-                    "Content-Type": "application/json",
-                    "Environment": "TEST",
-                    "X-ECOMP-RequestID": "*"
-                },
-                "json": {
-                    "policyName": "test_scope_prefix.Config_.*"
-                },
-                "method": "post",
-                "params": None,
-                "uri": "https://unit-test-pdp-server:8081000/pdp/api/getConfig"
-            },
-            "res": "*",
-            "status_code": 200
-        }
-    ],
-    "tests/main/test_policyhandler.py::WebServerTest::test_web_policies_latest": [
-        {
-            "request": {
-                "headers": {
-                    "Accept": "application/json",
-                    "Authorization": "Basic auth",
-                    "ClientAuth": "Basic user",
-                    "Content-Type": "application/json",
-                    "Environment": "TEST",
-                    "X-ECOMP-RequestID": "*"
-                },
-                "json": {
-                    "policyName": "test_scope_prefix.Config_amet.*"
-                },
-                "method": "post",
-                "params": None,
-                "uri": "https://unit-test-pdp-server:8081000/pdp/api/getConfig"
-            },
-            "res": "*",
-            "status_code": 200
-        }
-    ],
-    "tests/main/test_policyhandler.py::WebServerTest::test_web_policy_latest": [
-        {
-            "request": {
-                "headers": {
-                    "Accept": "application/json",
-                    "Authorization": "Basic auth",
-                    "ClientAuth": "Basic user",
-                    "Content-Type": "application/json",
-                    "Environment": "TEST",
-                    "X-ECOMP-RequestID": "*"
-                },
-                "json": {
-                    "ONAPComponent": "policy_handler",
-                    "ONAPInstance": "*",
-                    "ONAPName": "DCAE",
-                    "action": "configure",
-                    "resource": {
-                        "policy-id": [
-                            "test_scope_prefix.pdp_desition_sit"
-                        ]
-                    }
-                },
-                "method": "post",
-                "params": None,
-                "uri": "https://unit-test-pdp-server:8081000/decision/v1/"
-            },
-            "res": "*",
-            "status_code": 200
-        }
-    ],
-    "tests/main/test_policyhandler.py::WebServerTest::test_zzzzz_shutdown": [
-        {
-            "request": {
-                "headers": {
-                    "X-ECOMP-RequestID": "*"
-                },
-                "json": None,
-                "method": "get",
-                "params": {
-                    "cfy_tenant_name": "default_tenant"
-                },
-                "uri": "http://unit-test-deployment_handler:8188000/policy"
-            },
-            "res": "*",
-            "status_code": 200
-        },
-        {
-            "request": {
-                "headers": {
-                    "Accept": "application/json",
-                    "Authorization": "Basic auth",
-                    "ClientAuth": "Basic user",
-                    "Content-Type": "application/json",
-                    "Environment": "TEST",
-                    "X-ECOMP-RequestID": "*"
-                },
-                "json": {
-                    "policyName": "test_scope_prefix.Config_.*"
-                },
-                "method": "post",
-                "params": None,
-                "uri": "https://unit-test-pdp-server:8081000/pdp/api/getConfig"
-            },
-            "res": "*",
-            "status_code": 200
-        },
-        {
-            "request": {
-                "headers": {
-                    "X-ECOMP-RequestID": "*"
-                },
-                "json": {
-                    "catch_up": True,
-                    "latest_policies": {
-                        "test_scope_prefix.Config_Lorem": {
-                            "policy_body": {
-                                "config": {
-                                    "policy_hello": "world!",
-                                    "policy_updated_from_ver": "0",
-                                    "policy_updated_to_ver": "1",
-                                    "updated_policy_id": "test_scope_prefix.Config_Lorem"
-                                },
-                                "matchingConditions": {
-                                    "ConfigName": "alex_config_name",
-                                    "ONAPName": "DCAE"
-                                },
-                                "policyConfigMessage": "Config Retrieved! ",
-                                "policyConfigStatus": "CONFIG_RETRIEVED",
-                                "policyName": "test_scope_prefix.Config_Lorem.1.xml",
-                                "policyVersion": "1",
-                                "property": None,
-                                "responseAttributes": {},
-                                "type": "JSON"
-                            },
-                            "policy_id": "test_scope_prefix.Config_Lorem"
-                        },
-                        "test_scope_prefix.Config_amet": {
-                            "policy_body": {
-                                "config": {
-                                    "policy_hello": "world!",
-                                    "policy_updated_from_ver": "4",
-                                    "policy_updated_to_ver": "5",
-                                    "updated_policy_id": "test_scope_prefix.Config_amet"
-                                },
-                                "matchingConditions": {
-                                    "ConfigName": "alex_config_name",
-                                    "ONAPName": "DCAE"
-                                },
-                                "policyConfigMessage": "Config Retrieved! ",
-                                "policyConfigStatus": "CONFIG_RETRIEVED",
-                                "policyName": "test_scope_prefix.Config_amet.5.xml",
-                                "policyVersion": "5",
-                                "property": None,
-                                "responseAttributes": {},
-                                "type": "JSON"
-                            },
-                            "policy_id": "test_scope_prefix.Config_amet"
-                        },
-                        "test_scope_prefix.Config_ametist": {
-                            "policy_body": {
-                                "config": {
-                                    "policy_hello": "world!",
-                                    "policy_updated_from_ver": "6",
-                                    "policy_updated_to_ver": "7",
-                                    "updated_policy_id": "test_scope_prefix.Config_ametist"
-                                },
-                                "matchingConditions": {
-                                    "ConfigName": "alex_config_name",
-                                    "ONAPName": "DCAE"
-                                },
-                                "policyConfigMessage": "Config Retrieved! ",
-                                "policyConfigStatus": "CONFIG_RETRIEVED",
-                                "policyName": "test_scope_prefix.Config_ametist.7.xml",
-                                "policyVersion": "7",
-                                "property": None,
-                                "responseAttributes": {},
-                                "type": "JSON"
-                            },
-                            "policy_id": "test_scope_prefix.Config_ametist"
-                        },
-                        "test_scope_prefix.Config_consectetur": {
-                            "policy_body": {
-                                "config": {
-                                    "policy_hello": "world!",
-                                    "policy_updated_from_ver": "5",
-                                    "policy_updated_to_ver": "6",
-                                    "updated_policy_id": "test_scope_prefix.Config_consectetur"
-                                },
-                                "matchingConditions": {
-                                    "ConfigName": "alex_config_name",
-                                    "ONAPName": "DCAE"
-                                },
-                                "policyConfigMessage": "Config Retrieved! ",
-                                "policyConfigStatus": "CONFIG_RETRIEVED",
-                                "policyName": "test_scope_prefix.Config_consectetur.6.xml",
-                                "policyVersion": "6",
-                                "property": None,
-                                "responseAttributes": {},
-                                "type": "JSON"
-                            },
-                            "policy_id": "test_scope_prefix.Config_consectetur"
-                        },
-                        "test_scope_prefix.Config_dolor": {
-                            "policy_body": {
-                                "config": {
-                                    "policy_hello": "world!",
-                                    "policy_updated_from_ver": "2",
-                                    "policy_updated_to_ver": "3",
-                                    "updated_policy_id": "test_scope_prefix.Config_dolor"
-                                },
-                                "matchingConditions": {
-                                    "ConfigName": "alex_config_name",
-                                    "ONAPName": "DCAE"
-                                },
-                                "policyConfigMessage": "Config Retrieved! ",
-                                "policyConfigStatus": "CONFIG_RETRIEVED",
-                                "policyName": "test_scope_prefix.Config_dolor.3.xml",
-                                "policyVersion": "3",
-                                "property": None,
-                                "responseAttributes": {},
-                                "type": "JSON"
-                            },
-                            "policy_id": "test_scope_prefix.Config_dolor"
-                        },
-                        "test_scope_prefix.Config_ipsum": {
-                            "policy_body": {
-                                "config": {
-                                    "policy_hello": "world!",
-                                    "policy_updated_from_ver": "1",
-                                    "policy_updated_to_ver": "2",
-                                    "updated_policy_id": "test_scope_prefix.Config_ipsum"
-                                },
-                                "matchingConditions": {
-                                    "ConfigName": "alex_config_name",
-                                    "ONAPName": "DCAE"
-                                },
-                                "policyConfigMessage": "Config Retrieved! ",
-                                "policyConfigStatus": "CONFIG_RETRIEVED",
-                                "policyName": "test_scope_prefix.Config_ipsum.2.xml",
-                                "policyVersion": "2",
-                                "property": None,
-                                "responseAttributes": {},
-                                "type": "JSON"
-                            },
-                            "policy_id": "test_scope_prefix.Config_ipsum"
-                        },
-                        "test_scope_prefix.Config_sit": {
-                            "policy_body": {
-                                "config": {
-                                    "policy_hello": "world!",
-                                    "policy_updated_from_ver": "3",
-                                    "policy_updated_to_ver": "4",
-                                    "updated_policy_id": "test_scope_prefix.Config_sit"
-                                },
-                                "matchingConditions": {
-                                    "ConfigName": "alex_config_name",
-                                    "ONAPName": "DCAE"
-                                },
-                                "policyConfigMessage": "Config Retrieved! ",
-                                "policyConfigStatus": "CONFIG_RETRIEVED",
-                                "policyName": "test_scope_prefix.Config_sit.4.xml",
-                                "policyVersion": "4",
-                                "property": None,
-                                "responseAttributes": {},
-                                "type": "JSON"
-                            },
-                            "policy_id": "test_scope_prefix.Config_sit"
-                        }
-                    },
-                    "policy_filter_matches": {
-                        "test_scope_prefix.Config_Lorem": {},
-                        "test_scope_prefix.Config_amet": {},
-                        "test_scope_prefix.Config_ametist": {},
-                        "test_scope_prefix.Config_consectetur": {},
-                        "test_scope_prefix.Config_dolor": {},
-                        "test_scope_prefix.Config_ipsum": {},
-                        "test_scope_prefix.Config_sit": {}
-                    },
-                    "removed_policies": {}
-                },
-                "method": "put",
-                "params": {
-                    "cfy_tenant_name": "default_tenant"
-                },
-                "uri": "http://unit-test-deployment_handler:8188000/policy"
-            },
-            "res": "*",
-            "status_code": 200
-        },
-        {
-            "request": {
-                "headers": {
-                    "X-ECOMP-RequestID": "*"
-                },
-                "json": None,
-                "method": "get",
-                "params": {
-                    "cfy_tenant_name": "default_tenant"
-                },
-                "uri": "http://unit-test-deployment_handler:8188000/policy"
-            },
-            "res": "*",
-            "status_code": 200
-        },
-        {
-            "request": {
-                "headers": {
-                    "Accept": "application/json",
-                    "Authorization": "Basic auth",
-                    "ClientAuth": "Basic user",
-                    "Content-Type": "application/json",
-                    "Environment": "TEST",
-                    "X-ECOMP-RequestID": "*"
-                },
-                "json": {
-                    "policyName": "test_scope_prefix.Config_ipsum"
-                },
-                "method": "post",
-                "params": None,
-                "uri": "https://unit-test-pdp-server:8081000/pdp/api/getConfig"
-            },
-            "res": "*",
-            "status_code": 200
-        },
-        {
-            "request": {
-                "headers": {
-                    "Accept": "application/json",
-                    "Authorization": "Basic auth",
-                    "ClientAuth": "Basic user",
-                    "Content-Type": "application/json",
-                    "Environment": "TEST",
-                    "X-ECOMP-RequestID": "*"
-                },
-                "json": {
-                    "policyName": "test_scope_prefix.Config_sit"
-                },
-                "method": "post",
-                "params": None,
-                "uri": "https://unit-test-pdp-server:8081000/pdp/api/getConfig"
-            },
-            "res": "*",
-            "status_code": 200
-        },
-        {
-            "request": {
-                "headers": {
-                    "Accept": "application/json",
-                    "Authorization": "Basic auth",
-                    "ClientAuth": "Basic user",
-                    "Content-Type": "application/json",
-                    "Environment": "TEST",
-                    "X-ECOMP-RequestID": "*"
-                },
-                "json": {
-                    "policyName": "test_scope_prefix.Config_consectetur"
-                },
-                "method": "post",
-                "params": None,
-                "uri": "https://unit-test-pdp-server:8081000/pdp/api/getConfig"
-            },
-            "res": "*",
-            "status_code": 200
-        },
-        {
-            "request": {
-                "headers": {
-                    "X-ECOMP-RequestID": "*"
-                },
-                "json": {
-                    "catch_up": False,
-                    "latest_policies": {
-                        "test_scope_prefix.Config_consectetur": {
-                            "policy_body": {
-                                "config": {
-                                    "policy_hello": "world!",
-                                    "policy_updated_from_ver": "5",
-                                    "policy_updated_to_ver": "6",
-                                    "updated_policy_id": "test_scope_prefix.Config_consectetur"
-                                },
-                                "matchingConditions": {
-                                    "ConfigName": "alex_config_name",
-                                    "ONAPName": "DCAE"
-                                },
-                                "policyConfigMessage": "Config Retrieved! ",
-                                "policyConfigStatus": "CONFIG_RETRIEVED",
-                                "policyName": "test_scope_prefix.Config_consectetur.6.xml",
-                                "policyVersion": "6",
-                                "property": None,
-                                "responseAttributes": {},
-                                "type": "JSON"
-                            },
-                            "policy_id": "test_scope_prefix.Config_consectetur"
-                        },
-                        "test_scope_prefix.Config_ipsum": {
-                            "policy_body": {
-                                "config": {
-                                    "policy_hello": "world!",
-                                    "policy_updated_from_ver": "1",
-                                    "policy_updated_to_ver": "2",
-                                    "updated_policy_id": "test_scope_prefix.Config_ipsum"
-                                },
-                                "matchingConditions": {
-                                    "ConfigName": "alex_config_name",
-                                    "ONAPName": "DCAE"
-                                },
-                                "policyConfigMessage": "Config Retrieved! ",
-                                "policyConfigStatus": "CONFIG_RETRIEVED",
-                                "policyName": "test_scope_prefix.Config_ipsum.2.xml",
-                                "policyVersion": "2",
-                                "property": None,
-                                "responseAttributes": {},
-                                "type": "JSON"
-                            },
-                            "policy_id": "test_scope_prefix.Config_ipsum"
-                        },
-                        "test_scope_prefix.Config_sit": {
-                            "policy_body": {
-                                "config": {
-                                    "policy_hello": "world!",
-                                    "policy_updated_from_ver": "3",
-                                    "policy_updated_to_ver": "4",
-                                    "updated_policy_id": "test_scope_prefix.Config_sit"
-                                },
-                                "matchingConditions": {
-                                    "ConfigName": "alex_config_name",
-                                    "ONAPName": "DCAE"
-                                },
-                                "policyConfigMessage": "Config Retrieved! ",
-                                "policyConfigStatus": "CONFIG_RETRIEVED",
-                                "policyName": "test_scope_prefix.Config_sit.4.xml",
-                                "policyVersion": "4",
-                                "property": None,
-                                "responseAttributes": {},
-                                "type": "JSON"
-                            },
-                            "policy_id": "test_scope_prefix.Config_sit"
-                        }
-                    },
-                    "policy_filter_matches": {
-                        "test_scope_prefix.Config_consectetur": {},
-                        "test_scope_prefix.Config_ipsum": {},
-                        "test_scope_prefix.Config_sit": {}
-                    },
-                    "removed_policies": {}
-                },
-                "method": "put",
-                "params": {
-                    "cfy_tenant_name": "default_tenant"
-                },
-                "uri": "http://unit-test-deployment_handler:8188000/policy"
-            },
-            "res": "*",
-            "status_code": 200
-        }
-    ]
-}
diff --git a/tests/main/mock_policy_engine.py b/tests/main/mock_policy_engine.py
deleted file mode 100644
index 1bac045..0000000
--- a/tests/main/mock_policy_engine.py
+++ /dev/null
@@ -1,96 +0,0 @@
-# ============LICENSE_START=======================================================
-# Copyright (c) 2018-2019 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=========================================================
-#
-"""mocking for the policy-engine - shared by many tests"""
-
-import copy
-import json
-
-from policyhandler.pdp_api.pdp_consts import (PDP_METADATA,
-                                              PDP_POLICY_ID,
-                                              PDP_POLICY_VERSION,
-                                              PDP_POLICIES, PDP_PROPERTIES)
-from policyhandler.pdp_api.policy_utils import PolicyUtils
-from policyhandler.utils import Utils
-
-_LOGGER = Utils.get_logger(__file__)
-
-
-class MockPolicyEngine(object):
-    """pretend this is the policy-engine"""
-    scope_prefix = "test_scope_prefix.pdp_desition_"
-    LOREM_IPSUM = """Lorem ipsum dolor sit amet consectetur ametist""".split()
-    LONG_TEXT = "0123456789" * 100
-    _policies = {}
-
-    _inited = False
-
-    @staticmethod
-    def init():
-        """init collection of policies: policy_version = policy_index + 1"""
-        if MockPolicyEngine._inited:
-            return
-        MockPolicyEngine._inited = True
-
-        MockPolicyEngine._policies = dict(
-            (policy_id, MockPolicyEngine._create_policy_body(policy_id, policy_version))
-            for policy_id, policy_version in
-            [(MockPolicyEngine.get_policy_id(policy_index), policy_index + 1)
-             for policy_index in range(1 + len(MockPolicyEngine.LOREM_IPSUM))]
-        )
-        _LOGGER.info("_policies: %s", json.dumps(MockPolicyEngine._policies))
-
-    @staticmethod
-    def get_policy_id(policy_index):
-        """get the policy_id by policy_index"""
-        return (MockPolicyEngine.scope_prefix
-                + MockPolicyEngine.LOREM_IPSUM[
-                    policy_index % len(MockPolicyEngine.LOREM_IPSUM)])
-
-    @staticmethod
-    def get_policy(policy_id):
-        """find policy the way the policy-engine finds"""
-        if policy_id not in MockPolicyEngine._policies:
-            return {}
-        return {PDP_POLICIES: {policy_id: copy.deepcopy(MockPolicyEngine._policies[policy_id])}}
-
-    @staticmethod
-    def gen_policy_latest(policy_index, version_offset=0):
-        """generate the policy response from policy-handler by policy_index = version - 1"""
-        policy_id = MockPolicyEngine.get_policy_id(policy_index)
-        policy = PolicyUtils.convert_to_policy(
-            MockPolicyEngine._create_policy_body(policy_id, policy_index + 1 - version_offset)
-        )
-        return policy_id, policy
-
-    @staticmethod
-    def _create_policy_body(policy_id, policy_version=1):
-        """returns a fake policy-body"""
-        return {
-            "type": "unit.test.type.policies",
-            "version": "1.0.0",
-            PDP_METADATA: {
-                PDP_POLICY_ID: policy_id,
-                PDP_POLICY_VERSION: policy_version,
-                "description": "description for {}".format(policy_id)
-            },
-            PDP_PROPERTIES: {
-                "policy_updated_from_ver": (policy_version - 1),
-                "policy_updated_to_ver": policy_version,
-                "policy_hello": "world!",
-                "updated_policy_id": policy_id
-            }
-        }
diff --git a/tests/main/pdp_policies.json b/tests/main/pdp_policies.json
deleted file mode 100644
index b7d0d9e..0000000
--- a/tests/main/pdp_policies.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
-    "policies": {
-        "onap.scaleout.tca": {
-            "type": "onap.policies.monitoring.cdap.tca.hi.lo.app",
-            "version": "1.0.0",
-            "metadata": {
-                "policy-id": "onap.scaleout.tca",
-                "policy-version": 1,
-                "description": "The scaleout policy for vDNS"
-            },
-            "properties": {
-                "tca_policy": {
-                    "domain": "measurementsForVfScaling",
-                    "metricsPerEventName": [
-                        {
-                            "eventName": "vLoadBalancer",
-                            "controlLoopSchemaType": "VNF",
-                            "policyScope": "type=configuration"
-                        }
-                    ]
-                }
-            }
-        }
-    }
-}
\ No newline at end of file
diff --git a/tests/main/test_policyhandler.py b/tests/main/test_policyhandler.py
index 73ab9ca..c474e29 100644
--- a/tests/main/test_policyhandler.py
+++ b/tests/main/test_policyhandler.py
@@ -1,5 +1,5 @@
 # ============LICENSE_START=======================================================
-# Copyright (c) 2017-2019 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2017-2020 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.
@@ -21,20 +21,17 @@
 import time
 import uuid
 
-import cherrypy
 import pytest
-from cherrypy.test.helper import CPWebCase
+import cherrypy
 
-from policyhandler.config import Config
-from policyhandler.onap.audit import REQUEST_X_ECOMP_REQUESTID, Audit
-from policyhandler.pdp_api.pdp_consts import POLICY_NAME
-from policyhandler.policy_consts import LATEST_POLICIES
+from cherrypy.test.helper import CPWebCase
+from policyhandler.onap.audit import (REQUEST_X_ECOMP_REQUESTID,
+                                      REQUEST_X_ONAP_REQUESTID, Audit)
 from policyhandler.policy_receiver import PolicyReceiver
 from policyhandler.utils import Utils
 from policyhandler.web_server import _PolicyWeb
 
 from ..mock_tracker import Tracker
-from .mock_policy_engine import MockPolicyEngine
 
 _LOGGER = Utils.get_logger(__file__)
 
@@ -59,7 +56,27 @@
 
     def test_web_policy_latest(self):
         """test /policy_latest/<policy-id>"""
-        policy_id, expected_policy = MockPolicyEngine.gen_policy_latest(3)
+        policy_id = "test_scope_prefix.pdp_decision_sit"
+        expected_policy = {
+            "policy_id": "test_scope_prefix.pdp_decision_sit",
+            "policy_body": {
+                "type": "unit.test.type.policies",
+                "version": "1.0.0",
+                "metadata": {
+                    "policy-id": "test_scope_prefix.pdp_decision_sit",
+                    "policy-version": "4.4.4",
+                    "description": "description for test_scope_prefix.pdp_decision_sit"
+                },
+                "policyName": "test_scope_prefix.pdp_decision_sit.4-4-4.xml",
+                "policyVersion": "4.4.4",
+                "config": {
+                    "policy_updated_from_ver": 3,
+                    "policy_updated_to_ver": 4,
+                    "policy_hello": "world!",
+                    "updated_policy_id": "test_scope_prefix.pdp_decision_sit"
+                }
+            }
+        }
 
         self.getPage("/policy_latest/{0}".format(policy_id or ""))
         self.assertStatus('200 OK')
@@ -83,15 +100,17 @@
         _LOGGER.info("result: %s", result)
         _LOGGER.info("body: %s", self.body)
 
-        self.assertStatus('404 Not Found')
+        self.assertStatus('200 OK')
 
     def test_web_policies_latest(self):
         """test POST /policies_latest with policyName"""
         body = json.dumps({"junk": "to-be-developed"})
+        request_id = str(uuid.uuid4())
         result = self.getPage("/policies_latest", method='POST',
                               body=body,
                               headers=[
-                                  (REQUEST_X_ECOMP_REQUESTID, str(uuid.uuid4())),
+                                  (REQUEST_X_ECOMP_REQUESTID, request_id),
+                                  (REQUEST_X_ONAP_REQUESTID, request_id),
                                   ("Content-Type", "application/json"),
                                   ('Content-Length', str(len(body)))
                               ])
@@ -102,17 +121,20 @@
 
     @pytest.mark.usefixtures(
         "fix_deploy_handler",
+        "fix_dmaap_mr",
         "fix_cherrypy_engine_exit")
     def test_zzzzz_shutdown(self):
         """test shutdown"""
-        _LOGGER.info("start shutdown")
+        _LOGGER.info("testing the shutdown")
         assert not PolicyReceiver.is_running()
-        audit = Audit(job_name="test_zzzzz_shutdown", req_message="start shutdown")
+        audit = Audit(job_name="test_zzzzz_shutdown", req_message="testing the shutdown")
         PolicyReceiver.run(audit)
 
         result = self.getPage("/healthcheck")
         _LOGGER.info("healthcheck result: %s", result)
 
+        time.sleep(1)
+
         WebServerTest.do_gc_test = False
         _LOGGER.info("shutdown...")
         audit.audit_done("shutdown")
@@ -120,11 +142,32 @@
         _LOGGER.info("shutdown result: %s", result)
         self.assertStatus('200 OK')
         _LOGGER.info("got shutdown: %s", self.body)
-        time.sleep(1)
+        time.sleep(5)
         assert not PolicyReceiver.is_running()
 
-        if Config.is_pdp_api_default():
-            _LOGGER.info("passive for new PDP API")
-            return
+        Tracker.validate()
+
+    @pytest.mark.usefixtures(
+        "fix_deploy_handler",
+        "fix_dmaap_mr",
+        "fix_cherrypy_engine_exit")
+    def test_zzz_policy_updates_and_catch_ups(self):
+        """test run policy handler with policy updates and catchups"""
+        _LOGGER.info("start policy_updates_and_catch_ups")
+        assert not PolicyReceiver.is_running()
+
+        audit = Audit(job_name="test_zzz_policy_updates_and_catch_ups",
+                      req_message="start policy_updates_and_catch_ups")
+        PolicyReceiver.run(audit)
+
+        _LOGGER.info("sleep 20 before shutdown...")
+        time.sleep(20)
+
+        result = self.getPage("/healthcheck")
+        _LOGGER.info("healthcheck result: %s", result)
+
+        PolicyReceiver.shutdown(audit)
+        time.sleep(5)
+        assert not PolicyReceiver.is_running()
 
         Tracker.validate()
diff --git a/tests/main/test_pz_catch_up.py b/tests/main/test_pz_catch_up.py
new file mode 100644
index 0000000..03f5957
--- /dev/null
+++ b/tests/main/test_pz_catch_up.py
@@ -0,0 +1,63 @@
+# ============LICENSE_START=======================================================
+# Copyright (c) 2020 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=========================================================
+#
+"""test policy catch_up methods directly"""
+
+import json
+import time
+
+import pytest
+
+from policyhandler.onap.audit import Audit
+from policyhandler.policy_receiver import PolicyReceiver
+from policyhandler.utils import Utils
+
+from ..mock_tracker import Tracker
+
+_LOGGER = Utils.get_logger(__file__)
+
+@pytest.mark.usefixtures(
+    "fix_pdp_authorization",
+    "fix_discovery",
+    "fix_pdp_post",
+    "fix_deploy_handler",
+    "fix_dmaap_mr",
+    "fix_auto_catch_up"
+)
+def test_catch_up():
+    """test run policy handler with catchups and failed deployment-handler"""
+    _LOGGER.info("start test_catch_up")
+    assert not PolicyReceiver.is_running()
+    audit = Audit(job_name="test_catch_up", req_message="start test_catch_up")
+    PolicyReceiver.run(audit)
+
+    _LOGGER.info("sleep 12 before shutdown...")
+    time.sleep(12)
+
+    health = audit.health(full=True)
+    audit.audit_done(result=json.dumps(health))
+
+    _LOGGER.info("healthcheck: %s", json.dumps(health))
+    assert bool(health)
+
+    PolicyReceiver.shutdown(audit)
+    time.sleep(5)
+    assert not PolicyReceiver.is_running()
+
+    health = audit.health(full=True)
+    _LOGGER.info("healthcheck: %s", json.dumps(health))
+
+    Tracker.validate()
diff --git a/tests/mock_config.json b/tests/mock_config.json
index 30e3251..50e8862 100644
--- a/tests/mock_config.json
+++ b/tests/mock_config.json
@@ -29,6 +29,19 @@
             "timeout_in_secs": 1,
             "ws_ping_interval_in_secs": 1800
         },
+        "dmaap_mr" : {
+            "url" : "https://unit-test-dmaap-mr:280800000/events/unit-test-topicname/unit-test-consumegroup/unit-test-consumerid",
+            "query": {
+                "timeout": 15000
+            },
+            "headers" : {
+                "Content-Type" : "application/json",
+                "Authorization" : "Basic auth"
+            },
+            "target_entity" : "dmaap_mr",
+            "tls_ca_mode" : "cert_directory",
+            "timeout_in_secs": 60
+        },
         "deploy_handler" : {
             "target_entity" : "deployment_handler",
             "url" : "http://unit-test-deployment_handler:8188000",
diff --git a/tests/mock_settings.py b/tests/mock_settings.py
index 9e99561..dcfebcb 100644
--- a/tests/mock_settings.py
+++ b/tests/mock_settings.py
@@ -1,5 +1,5 @@
 # ============LICENSE_START=======================================================
-# Copyright (c) 2018-2019 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2018-2020 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.
@@ -65,14 +65,16 @@
     deploy_handler_instance_uuid = str(uuid.uuid4())
 
     @staticmethod
-    def init():
+    def init_mock_config():
         """init configs"""
         if MockSettings._loaded:
             _LOGGER.info("testing policy_handler with config: %s", Config.discovered_config)
             return
         MockSettings._loaded = True
 
-        Config.init_config("tests/etc_config.json")
+        _LOGGER.info("init MockSettings")
+
+        MockSettings.reinit_mock_config()
 
         with open("tests/mock_config.json", 'r') as config_json:
             MockSettings.mock_config = json.load(config_json)
@@ -118,3 +120,8 @@
 
         importlib.reload(importlib.import_module("policyhandler.pdp_client"))
         _LOGGER.info("done setup_pdp_api %s", Config._pdp_api_version)
+
+    @staticmethod
+    def reinit_mock_config():
+        """reload the init configs"""
+        Config.init_config("tests/etc_config.json")
diff --git a/tests/mock_tracker.py b/tests/mock_tracker.py
index a5fffd5..2b51983 100644
--- a/tests/mock_tracker.py
+++ b/tests/mock_tracker.py
@@ -1,5 +1,5 @@
 # ============LICENSE_START=======================================================
-# Copyright (c) 2018-2019 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2018-2020 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.
@@ -20,9 +20,12 @@
 import json
 
 from policyhandler.config import Config
-from policyhandler.onap.audit import REQUEST_X_ECOMP_REQUESTID
+from policyhandler.onap.audit import (REQUEST_X_ECOMP_REQUESTID,
+                                      REQUEST_X_ONAP_REQUESTID)
 from policyhandler.utils import Utils
 
+REQUEST = "request"
+STATUS_CODE = "status_code"
 RESPONSE = "res"
 PEP_INSTANCE = "ONAPInstance"
 _LOGGER = Utils.get_logger(__file__)
@@ -49,15 +52,21 @@
 
 class MockHttpResponse(object):
     """Mock http response based on request"""
-    def __init__(self, method, uri, res_json, **kwargs):
+    def __init__(self, method, uri, res_json=None, **kwargs):
         """create response based on request"""
         self.request = _MockHttpRequestInResponse(method, uri, **kwargs)
+        self.headers = {}
 
-        self.status_code = kwargs.get("status_code", 200)
-        self.res = copy.deepcopy(res_json)
+        self.status_code, self.res = Tracker.get_response(self.request.to_json())
+        if self.status_code is None and res_json:
+            self.status_code = kwargs.get(STATUS_CODE, 200)
+        if res_json:
+            self.res = copy.deepcopy(res_json)
+        if self.status_code is None:
+            self.status_code = 500
         self.text = json.dumps(self.res)
 
-        self._track()
+        _LOGGER.info("MockHttpResponse: %s", self)
 
     def json(self):
         """returns json of response"""
@@ -70,15 +79,11 @@
     def to_json(self):
         """create json of the message"""
         return {
-            "request": self.request.to_json(),
-            "status_code": self.status_code,
+            REQUEST: self.request.to_json(),
+            STATUS_CODE: self.status_code,
             RESPONSE: self.res
         }
 
-    def _track(self):
-        """append the message to tracker's history"""
-        Tracker.track(self.to_json())
-
     def __str__(self):
         """stringify for logging"""
         return json.dumps(self.to_json(), sort_keys=True)
@@ -87,30 +92,88 @@
 class Tracker(object):
     """record all the messages going outside policy-handler during testing"""
     test_name = None
-    messages = []
     test_names = []
+
+    requests = []
+    expected = []
+
     validated_tests = {}
     valid_tests = {}
 
+    main_history = {}
+    pdp_api_v0_history = {}
+
+    @staticmethod
+    def _init():
+        """load expected data from json files"""
+        try:
+            with open("tests/main/expectations.json", 'r') as expectations:
+                Tracker.main_history = json.load(expectations)
+        except Exception:
+            Tracker.main_history = {}
+
+        try:
+            with open("tests/pdp_api_v0/expectations.json", 'r') as expectations:
+                Tracker.pdp_api_v0_history = json.load(expectations)
+        except Exception:
+            Tracker.pdp_api_v0_history = {}
+
     @staticmethod
     def reset(test_name=None):
         """remove all the messages from history"""
+        if not Tracker.test_names:
+            Tracker._init()
+
         Tracker.test_name = test_name
-        Tracker.messages.clear()
+        Tracker.requests.clear()
         Tracker.test_names.append(test_name)
 
+        if Config.is_pdp_api_default():
+            Tracker.expected = Tracker.main_history.get(Tracker.test_name, [])
+        else:
+            Tracker.expected = Tracker.pdp_api_v0_history.get(Tracker.test_name, [])
+
+
     @staticmethod
-    def track(message):
-        """append the tracked message to the history"""
-        message = copy.deepcopy(message)
-        Tracker.messages.append(message)
-        if _LOGGER:
-            _LOGGER.info("tracked_message: %s", json.dumps(message, sort_keys=True))
+    def get_response(request):
+        """
+        track the request to the history of requests
+        and return the response with the status_code from the expected history queue
+        """
+        request_idx = len(Tracker.requests)
+        request = copy.deepcopy(request)
+        Tracker.requests.append(request)
+
+        if request_idx < len(Tracker.expected):
+            expected = Tracker.expected[request_idx] or {}
+            masked_request = Tracker._hide_volatiles(copy.deepcopy(request))
+            expected_request = Tracker._hide_volatiles(copy.deepcopy(expected.get(REQUEST)))
+            if Utils.are_the_same(masked_request, expected_request):
+                _LOGGER.info("as expected[%s]: %s", request_idx,
+                             json.dumps(expected, sort_keys=True))
+                return expected.get(STATUS_CODE), expected.get(RESPONSE)
+
+            unexpected_request = {"unit-test-tracker": {
+                "request_idx": request_idx,
+                "received_request": copy.deepcopy(request),
+                "expected": copy.deepcopy(expected.get(REQUEST))
+            }}
+            _LOGGER.error("unexpected_request[%s]: %s", request_idx,
+                          json.dumps(unexpected_request, sort_keys=True))
+            return None, unexpected_request
+
+        unexpected_request = {"unit-test-tracker":{
+            "request_idx": request_idx, "out-of-range": len(Tracker.expected),
+            "received_request": copy.deepcopy(request)
+        }}
+        _LOGGER.error("unexpected_request[%s]: %s", request_idx,
+                      json.dumps(unexpected_request, sort_keys=True))
+        return None, unexpected_request
 
     @staticmethod
     def to_string():
         """stringify message history for logging"""
-        return json.dumps(Tracker.messages, sort_keys=True)
+        return json.dumps(Tracker.requests, sort_keys=True)
 
     @staticmethod
     def get_status(test_name=None):
@@ -131,15 +194,14 @@
         for idx, test_name in enumerate(Tracker.test_names):
             _LOGGER.info("%s[%s]: %s", Tracker.get_status(test_name), (idx + 1), test_name)
 
-        _LOGGER.info("not tracked test_names listed in main.mock_expected")
-        from .main.mock_expected import HISTORY_EXPECTED as main_history
-        for test_name in main_history:
+        _LOGGER.info("not tracked test_names listed in main.expectations")
+
+        for test_name in Tracker.main_history:
             if test_name not in Tracker.test_names:
                 _LOGGER.info("untracked: %s", test_name)
 
-        _LOGGER.info("not tracked test_names listed in pdp_api_v0.mock_expected")
-        from .pdp_api_v0.mock_expected import HISTORY_EXPECTED as pdp_api_v0_history
-        for test_name in pdp_api_v0_history:
+        _LOGGER.info("not tracked test_names listed in pdp_api_v0.expectations")
+        for test_name in Tracker.pdp_api_v0_history:
             if test_name not in Tracker.test_names:
                 _LOGGER.info("untracked: %s", test_name)
 
@@ -150,7 +212,7 @@
             return obj
 
         for key, value in obj.items():
-            if key in [REQUEST_X_ECOMP_REQUESTID, RESPONSE, PEP_INSTANCE]:
+            if key in [REQUEST_X_ONAP_REQUESTID, REQUEST_X_ECOMP_REQUESTID, RESPONSE, PEP_INSTANCE]:
                 obj[key] = "*"
             elif isinstance(value, dict):
                 obj[key] = Tracker._hide_volatiles(value)
@@ -161,20 +223,15 @@
     def validate():
         """validate that the message history is as expected"""
         _LOGGER.info("Tracker.validate(%s)", Tracker.test_name)
-        messages = [Tracker._hide_volatiles(copy.deepcopy(message))
-                    for message in Tracker.messages]
         Tracker.validated_tests[Tracker.test_name] = True
+        requests = [Tracker._hide_volatiles(copy.deepcopy(request))
+                    for request in Tracker.requests]
+        expected_reqs = [Tracker._hide_volatiles(copy.deepcopy(expected.get(REQUEST)))
+                         for expected in Tracker.expected]
 
-        if Config.is_pdp_api_default():
-            from .main.mock_expected import HISTORY_EXPECTED as main_history
-            expected = main_history.get(Tracker.test_name, [])
-        else:
-            from .pdp_api_v0.mock_expected import HISTORY_EXPECTED as pdp_api_v0_history
-            expected = pdp_api_v0_history.get(Tracker.test_name, [])
-
-        _LOGGER.info("messages: %s", json.dumps(messages, sort_keys=True))
-        _LOGGER.info("expected: %s", json.dumps(expected, sort_keys=True))
-        assert Utils.are_the_same(messages, expected)
+        _LOGGER.info("requests: %s", json.dumps(requests, sort_keys=True))
+        _LOGGER.info("expected: %s", json.dumps(expected_reqs, sort_keys=True))
+        assert Utils.are_the_same(requests, expected_reqs)
 
         _LOGGER.info("history valid for Tracker.validate(%s)", Tracker.test_name)
         Tracker.valid_tests[Tracker.test_name] = True
diff --git a/tests/pdp_api_v0/conftest.py b/tests/pdp_api_v0/conftest.py
index 07e566f..8220778 100644
--- a/tests/pdp_api_v0/conftest.py
+++ b/tests/pdp_api_v0/conftest.py
@@ -1,5 +1,5 @@
 # ============LICENSE_START=======================================================
-# Copyright (c) 2018-2019 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2018-2020 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.
@@ -22,11 +22,14 @@
 import pytest
 
 from policyhandler import pdp_client
+from policyhandler.deploy_handler import DeployHandler
+from policyhandler.onap.audit import Audit
 from policyhandler.pdp_api_v0.pdp_consts import POLICY_NAME
 from policyhandler.utils import Utils
 
 from ..mock_settings import MockSettings
 from ..mock_tracker import MockHttpResponse
+from .mock_deploy_handler import MockDeploymentHandler
 from .mock_policy_engine import MockPolicyEngine2018
 from .mock_websocket import MockWebSocket
 
@@ -57,9 +60,10 @@
     def monkeyed_policy_rest_post(uri, json=None, **kwargs):
         """monkeypatch for the POST to policy-engine"""
         res_json = MockPolicyEngine2018.get_config(json.get(POLICY_NAME))
-        return MockHttpResponse("post", uri, res_json, json=json, **kwargs)
+        return MockHttpResponse("post", uri, res_json=res_json, json=json, **kwargs)
 
     _LOGGER.info("setup fix_pdp_post")
+    pdp_client.PolicyRest._lazy_inited = False
     pdp_client.PolicyRest._lazy_init()
     monkeypatch.setattr('policyhandler.pdp_client.PolicyRest._requests_session.post',
                         monkeyed_policy_rest_post)
@@ -72,9 +76,10 @@
     def monkeyed_policy_rest_post(uri, **kwargs):
         """monkeypatch for the POST to policy-engine"""
         res_json = MockPolicyEngine2018.get_configs_all()
-        return MockHttpResponse("post", uri, res_json, **kwargs)
+        return MockHttpResponse("post", uri, res_json=res_json, **kwargs)
 
     _LOGGER.info("setup fix_pdp_post_big")
+    pdp_client.PolicyRest._lazy_inited = False
     pdp_client.PolicyRest._lazy_init()
     monkeypatch.setattr('policyhandler.pdp_client.PolicyRest._requests_session.post',
                         monkeyed_policy_rest_post)
@@ -94,6 +99,7 @@
         raise MockException("fix_pdp_post_boom {}".format(uri))
 
     _LOGGER.info("setup fix_pdp_post_boom")
+    pdp_client.PolicyRest._lazy_inited = False
     pdp_client.PolicyRest._lazy_init()
     monkeypatch.setattr('policyhandler.pdp_client.PolicyRest._requests_session.post',
                         monkeyed_policy_rest_post_boom)
@@ -131,3 +137,96 @@
 
     yield fix_select_latest_policies_boom
     _LOGGER.info("teardown fix_select_latest_policies_boom at %s", policy_utils_path)
+
+@pytest.fixture()
+def fix_deploy_handler(monkeypatch):
+    """monkeyed requests to deployment-handler"""
+    def monkeyed_deploy_handler_put(uri, **kwargs):
+        """monkeypatch for policy-update request.put to deploy_handler"""
+        return MockHttpResponse("put", uri, res_json=MockDeploymentHandler.default_response(),
+                                **kwargs)
+
+    def monkeyed_deploy_handler_get(uri, **kwargs):
+        """monkeypatch policy-update request.get to deploy_handler"""
+        return MockHttpResponse("get", uri,
+                                res_json=MockDeploymentHandler.get_deployed_policies(),
+                                **kwargs)
+
+    _LOGGER.info("setup fix_deploy_handler")
+    audit = None
+    if DeployHandler._lazy_inited is False:
+        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
+    if audit:
+        audit.audit_done("teardown")
+    _LOGGER.info("teardown fix_deploy_handler")
+
+
+@pytest.fixture()
+def fix_deploy_handler_413(monkeypatch):
+    """monkeyed failed discovery request.get"""
+    def monkeyed_deploy_handler_put(uri, **kwargs):
+        """monkeypatch for deploy_handler"""
+        return MockHttpResponse(
+            "put", uri,
+            res_json={"server_instance_uuid": MockSettings.deploy_handler_instance_uuid},
+            status_code=413, **kwargs
+        )
+
+    def monkeyed_deploy_handler_get(uri, **kwargs):
+        """monkeypatch policy-update request.get to deploy_handler"""
+        return MockHttpResponse("get", uri, res_json=MockDeploymentHandler.get_deployed_policies(),
+                                **kwargs)
+
+    _LOGGER.info("setup fix_deploy_handler_413")
+    audit = None
+    if DeployHandler._lazy_inited is False:
+        audit = Audit(req_message="fix_deploy_handler_413")
+        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_413
+    if audit:
+        audit.audit_done("teardown")
+    _LOGGER.info("teardown fix_deploy_handler_413")
+
+
+@pytest.fixture()
+def fix_deploy_handler_404(monkeypatch):
+    """monkeyed failed discovery request.get"""
+    def monkeyed_deploy_handler_put(uri, **kwargs):
+        """monkeypatch for deploy_handler"""
+        return MockHttpResponse("put", uri, res_json=MockDeploymentHandler.default_response(),
+                                **kwargs)
+
+    def monkeyed_deploy_handler_get(uri, **kwargs):
+        """monkeypatch policy-update request.get to deploy_handler"""
+        return MockHttpResponse("get", uri, res_json=MockDeploymentHandler.default_response(),
+                                **kwargs)
+
+    _LOGGER.info("setup fix_deploy_handler_404")
+    audit = None
+    if DeployHandler._lazy_inited is False:
+        audit = Audit(req_message="fix_deploy_handler_404")
+        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_404
+    if audit:
+        audit.audit_done("teardown")
+    _LOGGER.info("teardown fix_deploy_handler_404")
diff --git a/tests/pdp_api_v0/mock_expected.py b/tests/pdp_api_v0/expectations.json
similarity index 87%
rename from tests/pdp_api_v0/mock_expected.py
rename to tests/pdp_api_v0/expectations.json
index 6210e10..9c7a285 100644
--- a/tests/pdp_api_v0/mock_expected.py
+++ b/tests/pdp_api_v0/expectations.json
@@ -1,24 +1,5 @@
-# ============LICENSE_START=======================================================
-# Copyright (c) 2018-2019 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=========================================================
-#
-"""expected message history per test for pdp API 2018 and before"""
-
-
-HISTORY_EXPECTED = {
-    "tests/pdp_api_v0/test_policy_rest.py::test_get_policy_latest" : [
+{
+    "tests/pdp_api_v0/test_policy_rest.py::test_get_policy_latest": [
         {
             "request": {
                 "headers": {
@@ -27,13 +8,37 @@
                     "ClientAuth": "Basic user",
                     "Content-Type": "application/json",
                     "Environment": "TEST",
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
                 "json": {
                     "policyName": "test_scope_prefix.Config_sit"
                 },
                 "method": "post",
-                "params": None,
+                "params": null,
+                "uri": "https://unit-test-pdp-server:8081000/pdp/api/getConfig"
+            },
+            "res": "*",
+            "status_code": 200
+        }
+    ],
+    "tests/pdp_api_v0/test_policy_rest_auth.py::test_get_policy_latest": [
+        {
+            "request": {
+                "headers": {
+                    "Accept": "application/json",
+                    "Authorization": "Basic YWxleC1QRFBfVVNFUjphbGV4LVBEUF9QV0Q=",
+                    "ClientAuth": "Basic user",
+                    "Content-Type": "application/json",
+                    "Environment": "TEST",
+                    "X-ONAP-RequestID": "*",
+                    "X-ECOMP-RequestID": "*"
+                },
+                "json": {
+                    "policyName": "test_scope_prefix.Config_sit"
+                },
+                "method": "post",
+                "params": null,
                 "uri": "https://unit-test-pdp-server:8081000/pdp/api/getConfig"
             },
             "res": "*",
@@ -44,9 +49,10 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
-                "json": None,
+                "json": null,
                 "method": "get",
                 "params": {
                     "cfy_tenant_name": "default_tenant"
@@ -64,13 +70,14 @@
                     "ClientAuth": "Basic user",
                     "Content-Type": "application/json",
                     "Environment": "TEST",
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
                 "json": {
                     "policyName": "test_scope_prefix.Config_.*"
                 },
                 "method": "post",
-                "params": None,
+                "params": null,
                 "uri": "https://unit-test-pdp-server:8081000/pdp/api/getConfig"
             },
             "res": "*",
@@ -86,13 +93,14 @@
                     "ClientAuth": "Basic user",
                     "Content-Type": "application/json",
                     "Environment": "TEST",
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
                 "json": {
                     "policyName": "test_scope_prefix.Config_amet.*"
                 },
                 "method": "post",
-                "params": None,
+                "params": null,
                 "uri": "https://unit-test-pdp-server:8081000/pdp/api/getConfig"
             },
             "res": "*",
@@ -108,13 +116,14 @@
                     "ClientAuth": "Basic user",
                     "Content-Type": "application/json",
                     "Environment": "TEST",
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
                 "json": {
                     "policyName": "test_scope_prefix.Config_sit"
                 },
                 "method": "post",
-                "params": None,
+                "params": null,
                 "uri": "https://unit-test-pdp-server:8081000/pdp/api/getConfig"
             },
             "res": "*",
@@ -125,9 +134,10 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
-                "json": None,
+                "json": null,
                 "method": "get",
                 "params": {
                     "cfy_tenant_name": "default_tenant"
@@ -145,13 +155,14 @@
                     "ClientAuth": "Basic user",
                     "Content-Type": "application/json",
                     "Environment": "TEST",
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
                 "json": {
                     "policyName": "test_scope_prefix.Config_.*"
                 },
                 "method": "post",
-                "params": None,
+                "params": null,
                 "uri": "https://unit-test-pdp-server:8081000/pdp/api/getConfig"
             },
             "res": "*",
@@ -160,10 +171,11 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
                 "json": {
-                    "catch_up": True,
+                    "catch_up": true,
                     "latest_policies": {
                         "test_scope_prefix.Config_Lorem": {
                             "policy_body": {
@@ -181,7 +193,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_Lorem.1.xml",
                                 "policyVersion": "1",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -203,7 +215,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_amet.5.xml",
                                 "policyVersion": "5",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -225,7 +237,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_ametist.7.xml",
                                 "policyVersion": "7",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -247,7 +259,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_consectetur.6.xml",
                                 "policyVersion": "6",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -269,7 +281,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_dolor.3.xml",
                                 "policyVersion": "3",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -291,7 +303,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_ipsum.2.xml",
                                 "policyVersion": "2",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -313,7 +325,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_sit.4.xml",
                                 "policyVersion": "4",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -343,9 +355,10 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
-                "json": None,
+                "json": null,
                 "method": "get",
                 "params": {
                     "cfy_tenant_name": "default_tenant"
@@ -363,13 +376,14 @@
                     "ClientAuth": "Basic user",
                     "Content-Type": "application/json",
                     "Environment": "TEST",
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
                 "json": {
                     "policyName": "test_scope_prefix.Config_.*"
                 },
                 "method": "post",
-                "params": None,
+                "params": null,
                 "uri": "https://unit-test-pdp-server:8081000/pdp/api/getConfig"
             },
             "res": "*",
@@ -378,10 +392,11 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
                 "json": {
-                    "catch_up": True,
+                    "catch_up": true,
                     "latest_policies": {
                         "test_scope_prefix.Config_Lorem": {
                             "policy_body": {
@@ -399,7 +414,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_Lorem.1.xml",
                                 "policyVersion": "1",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -421,7 +436,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_amet.5.xml",
                                 "policyVersion": "5",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -443,7 +458,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_ametist.7.xml",
                                 "policyVersion": "7",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -465,7 +480,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_consectetur.6.xml",
                                 "policyVersion": "6",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -487,7 +502,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_dolor.3.xml",
                                 "policyVersion": "3",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -509,7 +524,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_ipsum.2.xml",
                                 "policyVersion": "2",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -531,7 +546,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_sit.4.xml",
                                 "policyVersion": "4",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -563,9 +578,10 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
-                "json": None,
+                "json": null,
                 "method": "get",
                 "params": {
                     "cfy_tenant_name": "default_tenant"
@@ -583,13 +599,14 @@
                     "ClientAuth": "Basic user",
                     "Content-Type": "application/json",
                     "Environment": "TEST",
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
                 "json": {
                     "policyName": "test_scope_prefix.Config_.*"
                 },
                 "method": "post",
-                "params": None,
+                "params": null,
                 "uri": "https://unit-test-pdp-server:8081000/pdp/api/getConfig"
             },
             "res": "*",
@@ -598,10 +615,11 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
                 "json": {
-                    "catch_up": True,
+                    "catch_up": true,
                     "latest_policies": {
                         "test_scope_prefix.Config_Lorem": {
                             "policy_body": {
@@ -619,7 +637,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_Lorem.1.xml",
                                 "policyVersion": "1",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -641,7 +659,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_amet.5.xml",
                                 "policyVersion": "5",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -663,7 +681,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_ametist.7.xml",
                                 "policyVersion": "7",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -685,7 +703,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_consectetur.6.xml",
                                 "policyVersion": "6",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -707,7 +725,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_dolor.3.xml",
                                 "policyVersion": "3",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -729,7 +747,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_ipsum.2.xml",
                                 "policyVersion": "2",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -751,7 +769,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_sit.4.xml",
                                 "policyVersion": "4",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -781,9 +799,10 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
-                "json": None,
+                "json": null,
                 "method": "get",
                 "params": {
                     "cfy_tenant_name": "default_tenant"
@@ -801,13 +820,14 @@
                     "ClientAuth": "Basic user",
                     "Content-Type": "application/json",
                     "Environment": "TEST",
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
                 "json": {
                     "policyName": "test_scope_prefix.Config_ipsum"
                 },
                 "method": "post",
-                "params": None,
+                "params": null,
                 "uri": "https://unit-test-pdp-server:8081000/pdp/api/getConfig"
             },
             "res": "*",
@@ -821,13 +841,14 @@
                     "ClientAuth": "Basic user",
                     "Content-Type": "application/json",
                     "Environment": "TEST",
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
                 "json": {
                     "policyName": "test_scope_prefix.Config_sit"
                 },
                 "method": "post",
-                "params": None,
+                "params": null,
                 "uri": "https://unit-test-pdp-server:8081000/pdp/api/getConfig"
             },
             "res": "*",
@@ -841,13 +862,14 @@
                     "ClientAuth": "Basic user",
                     "Content-Type": "application/json",
                     "Environment": "TEST",
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
                 "json": {
                     "policyName": "test_scope_prefix.Config_consectetur"
                 },
                 "method": "post",
-                "params": None,
+                "params": null,
                 "uri": "https://unit-test-pdp-server:8081000/pdp/api/getConfig"
             },
             "res": "*",
@@ -856,10 +878,11 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
                 "json": {
-                    "catch_up": False,
+                    "catch_up": false,
                     "latest_policies": {
                         "test_scope_prefix.Config_consectetur": {
                             "policy_body": {
@@ -877,7 +900,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_consectetur.6.xml",
                                 "policyVersion": "6",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -899,7 +922,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_ipsum.2.xml",
                                 "policyVersion": "2",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -921,7 +944,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_sit.4.xml",
                                 "policyVersion": "4",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -949,9 +972,10 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
-                "json": None,
+                "json": null,
                 "method": "get",
                 "params": {
                     "cfy_tenant_name": "default_tenant"
@@ -969,13 +993,14 @@
                     "ClientAuth": "Basic user",
                     "Content-Type": "application/json",
                     "Environment": "TEST",
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
                 "json": {
                     "policyName": "test_scope_prefix.Config_.*"
                 },
                 "method": "post",
-                "params": None,
+                "params": null,
                 "uri": "https://unit-test-pdp-server:8081000/pdp/api/getConfig"
             },
             "res": "*",
@@ -984,10 +1009,11 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
                 "json": {
-                    "catch_up": True,
+                    "catch_up": true,
                     "latest_policies": {
                         "test_scope_prefix.Config_Lorem": {
                             "policy_body": {
@@ -1005,7 +1031,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_Lorem.1.xml",
                                 "policyVersion": "1",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -1027,7 +1053,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_amet.5.xml",
                                 "policyVersion": "5",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -1049,7 +1075,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_ametist.7.xml",
                                 "policyVersion": "7",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -1071,7 +1097,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_consectetur.6.xml",
                                 "policyVersion": "6",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -1093,7 +1119,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_dolor.3.xml",
                                 "policyVersion": "3",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -1115,7 +1141,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_ipsum.2.xml",
                                 "policyVersion": "2",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -1137,7 +1163,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_sit.4.xml",
                                 "policyVersion": "4",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -1167,9 +1193,10 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
-                "json": None,
+                "json": null,
                 "method": "get",
                 "params": {
                     "cfy_tenant_name": "default_tenant"
@@ -1187,13 +1214,14 @@
                     "ClientAuth": "Basic user",
                     "Content-Type": "application/json",
                     "Environment": "TEST",
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
                 "json": {
                     "policyName": "test_scope_prefix.Config_ipsum"
                 },
                 "method": "post",
-                "params": None,
+                "params": null,
                 "uri": "https://unit-test-pdp-server:8081000/pdp/api/getConfig"
             },
             "res": "*",
@@ -1207,13 +1235,14 @@
                     "ClientAuth": "Basic user",
                     "Content-Type": "application/json",
                     "Environment": "TEST",
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
                 "json": {
                     "policyName": "test_scope_prefix.Config_sit"
                 },
                 "method": "post",
-                "params": None,
+                "params": null,
                 "uri": "https://unit-test-pdp-server:8081000/pdp/api/getConfig"
             },
             "res": "*",
@@ -1227,13 +1256,14 @@
                     "ClientAuth": "Basic user",
                     "Content-Type": "application/json",
                     "Environment": "TEST",
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
                 "json": {
                     "policyName": "test_scope_prefix.Config_consectetur"
                 },
                 "method": "post",
-                "params": None,
+                "params": null,
                 "uri": "https://unit-test-pdp-server:8081000/pdp/api/getConfig"
             },
             "res": "*",
@@ -1242,10 +1272,11 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
                 "json": {
-                    "catch_up": False,
+                    "catch_up": false,
                     "latest_policies": {
                         "test_scope_prefix.Config_consectetur": {
                             "policy_body": {
@@ -1263,7 +1294,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_consectetur.6.xml",
                                 "policyVersion": "6",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -1285,7 +1316,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_ipsum.2.xml",
                                 "policyVersion": "2",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -1307,7 +1338,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_sit.4.xml",
                                 "policyVersion": "4",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -1335,9 +1366,10 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
-                "json": None,
+                "json": null,
                 "method": "get",
                 "params": {
                     "cfy_tenant_name": "default_tenant"
@@ -1355,13 +1387,14 @@
                     "ClientAuth": "Basic user",
                     "Content-Type": "application/json",
                     "Environment": "TEST",
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
                 "json": {
                     "policyName": "test_scope_prefix.Config_.*"
                 },
                 "method": "post",
-                "params": None,
+                "params": null,
                 "uri": "https://unit-test-pdp-server:8081000/pdp/api/getConfig"
             },
             "res": "*",
@@ -1370,10 +1403,11 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
                 "json": {
-                    "catch_up": True,
+                    "catch_up": true,
                     "latest_policies": {
                         "test_scope_prefix.Config_Lorem": {
                             "policy_body": {
@@ -1391,7 +1425,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_Lorem.1.xml",
                                 "policyVersion": "1",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -1413,7 +1447,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_amet.5.xml",
                                 "policyVersion": "5",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -1435,7 +1469,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_ametist.7.xml",
                                 "policyVersion": "7",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -1457,7 +1491,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_consectetur.6.xml",
                                 "policyVersion": "6",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -1479,7 +1513,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_dolor.3.xml",
                                 "policyVersion": "3",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -1501,7 +1535,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_ipsum.2.xml",
                                 "policyVersion": "2",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -1523,7 +1557,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_sit.4.xml",
                                 "policyVersion": "4",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -1553,9 +1587,10 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
-                "json": None,
+                "json": null,
                 "method": "get",
                 "params": {
                     "cfy_tenant_name": "default_tenant"
@@ -1573,13 +1608,14 @@
                     "ClientAuth": "Basic user",
                     "Content-Type": "application/json",
                     "Environment": "TEST",
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
                 "json": {
                     "policyName": "test_scope_prefix.Config_ipsum"
                 },
                 "method": "post",
-                "params": None,
+                "params": null,
                 "uri": "https://unit-test-pdp-server:8081000/pdp/api/getConfig"
             },
             "res": "*",
@@ -1588,10 +1624,11 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
                 "json": {
-                    "catch_up": False,
+                    "catch_up": false,
                     "latest_policies": {
                         "test_scope_prefix.Config_ipsum": {
                             "policy_body": {
@@ -1609,7 +1646,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_ipsum.2.xml",
                                 "policyVersion": "2",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -1633,9 +1670,10 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
-                "json": None,
+                "json": null,
                 "method": "get",
                 "params": {
                     "cfy_tenant_name": "default_tenant"
@@ -1653,13 +1691,235 @@
                     "ClientAuth": "Basic user",
                     "Content-Type": "application/json",
                     "Environment": "TEST",
+                    "X-ONAP-RequestID": "*",
+                    "X-ECOMP-RequestID": "*"
+                },
+                "json": {
+                    "policyName": "test_scope_prefix.Config_.*"
+                },
+                "method": "post",
+                "params": null,
+                "uri": "https://unit-test-pdp-server:8081000/pdp/api/getConfig"
+            },
+            "res": "*",
+            "status_code": 200
+        },
+        {
+            "request": {
+                "headers": {
+                    "X-ONAP-RequestID": "*",
+                    "X-ECOMP-RequestID": "*"
+                },
+                "json": {
+                    "catch_up": true,
+                    "latest_policies": {
+                        "test_scope_prefix.Config_Lorem": {
+                            "policy_body": {
+                                "config": {
+                                    "policy_hello": "world!",
+                                    "policy_updated_from_ver": "0",
+                                    "policy_updated_to_ver": "1",
+                                    "updated_policy_id": "test_scope_prefix.Config_Lorem"
+                                },
+                                "matchingConditions": {
+                                    "ConfigName": "alex_config_name",
+                                    "ONAPName": "DCAE"
+                                },
+                                "policyConfigMessage": "Config Retrieved! ",
+                                "policyConfigStatus": "CONFIG_RETRIEVED",
+                                "policyName": "test_scope_prefix.Config_Lorem.1.xml",
+                                "policyVersion": "1",
+                                "property": null,
+                                "responseAttributes": {},
+                                "type": "JSON"
+                            },
+                            "policy_id": "test_scope_prefix.Config_Lorem"
+                        },
+                        "test_scope_prefix.Config_amet": {
+                            "policy_body": {
+                                "config": {
+                                    "policy_hello": "world!",
+                                    "policy_updated_from_ver": "4",
+                                    "policy_updated_to_ver": "5",
+                                    "updated_policy_id": "test_scope_prefix.Config_amet"
+                                },
+                                "matchingConditions": {
+                                    "ConfigName": "alex_config_name",
+                                    "ONAPName": "DCAE"
+                                },
+                                "policyConfigMessage": "Config Retrieved! ",
+                                "policyConfigStatus": "CONFIG_RETRIEVED",
+                                "policyName": "test_scope_prefix.Config_amet.5.xml",
+                                "policyVersion": "5",
+                                "property": null,
+                                "responseAttributes": {},
+                                "type": "JSON"
+                            },
+                            "policy_id": "test_scope_prefix.Config_amet"
+                        },
+                        "test_scope_prefix.Config_ametist": {
+                            "policy_body": {
+                                "config": {
+                                    "policy_hello": "world!",
+                                    "policy_updated_from_ver": "6",
+                                    "policy_updated_to_ver": "7",
+                                    "updated_policy_id": "test_scope_prefix.Config_ametist"
+                                },
+                                "matchingConditions": {
+                                    "ConfigName": "alex_config_name",
+                                    "ONAPName": "DCAE"
+                                },
+                                "policyConfigMessage": "Config Retrieved! ",
+                                "policyConfigStatus": "CONFIG_RETRIEVED",
+                                "policyName": "test_scope_prefix.Config_ametist.7.xml",
+                                "policyVersion": "7",
+                                "property": null,
+                                "responseAttributes": {},
+                                "type": "JSON"
+                            },
+                            "policy_id": "test_scope_prefix.Config_ametist"
+                        },
+                        "test_scope_prefix.Config_consectetur": {
+                            "policy_body": {
+                                "config": {
+                                    "policy_hello": "world!",
+                                    "policy_updated_from_ver": "5",
+                                    "policy_updated_to_ver": "6",
+                                    "updated_policy_id": "test_scope_prefix.Config_consectetur"
+                                },
+                                "matchingConditions": {
+                                    "ConfigName": "alex_config_name",
+                                    "ONAPName": "DCAE"
+                                },
+                                "policyConfigMessage": "Config Retrieved! ",
+                                "policyConfigStatus": "CONFIG_RETRIEVED",
+                                "policyName": "test_scope_prefix.Config_consectetur.6.xml",
+                                "policyVersion": "6",
+                                "property": null,
+                                "responseAttributes": {},
+                                "type": "JSON"
+                            },
+                            "policy_id": "test_scope_prefix.Config_consectetur"
+                        },
+                        "test_scope_prefix.Config_dolor": {
+                            "policy_body": {
+                                "config": {
+                                    "policy_hello": "world!",
+                                    "policy_updated_from_ver": "2",
+                                    "policy_updated_to_ver": "3",
+                                    "updated_policy_id": "test_scope_prefix.Config_dolor"
+                                },
+                                "matchingConditions": {
+                                    "ConfigName": "alex_config_name",
+                                    "ONAPName": "DCAE"
+                                },
+                                "policyConfigMessage": "Config Retrieved! ",
+                                "policyConfigStatus": "CONFIG_RETRIEVED",
+                                "policyName": "test_scope_prefix.Config_dolor.3.xml",
+                                "policyVersion": "3",
+                                "property": null,
+                                "responseAttributes": {},
+                                "type": "JSON"
+                            },
+                            "policy_id": "test_scope_prefix.Config_dolor"
+                        },
+                        "test_scope_prefix.Config_ipsum": {
+                            "policy_body": {
+                                "config": {
+                                    "policy_hello": "world!",
+                                    "policy_updated_from_ver": "1",
+                                    "policy_updated_to_ver": "2",
+                                    "updated_policy_id": "test_scope_prefix.Config_ipsum"
+                                },
+                                "matchingConditions": {
+                                    "ConfigName": "alex_config_name",
+                                    "ONAPName": "DCAE"
+                                },
+                                "policyConfigMessage": "Config Retrieved! ",
+                                "policyConfigStatus": "CONFIG_RETRIEVED",
+                                "policyName": "test_scope_prefix.Config_ipsum.2.xml",
+                                "policyVersion": "2",
+                                "property": null,
+                                "responseAttributes": {},
+                                "type": "JSON"
+                            },
+                            "policy_id": "test_scope_prefix.Config_ipsum"
+                        },
+                        "test_scope_prefix.Config_sit": {
+                            "policy_body": {
+                                "config": {
+                                    "policy_hello": "world!",
+                                    "policy_updated_from_ver": "3",
+                                    "policy_updated_to_ver": "4",
+                                    "updated_policy_id": "test_scope_prefix.Config_sit"
+                                },
+                                "matchingConditions": {
+                                    "ConfigName": "alex_config_name",
+                                    "ONAPName": "DCAE"
+                                },
+                                "policyConfigMessage": "Config Retrieved! ",
+                                "policyConfigStatus": "CONFIG_RETRIEVED",
+                                "policyName": "test_scope_prefix.Config_sit.4.xml",
+                                "policyVersion": "4",
+                                "property": null,
+                                "responseAttributes": {},
+                                "type": "JSON"
+                            },
+                            "policy_id": "test_scope_prefix.Config_sit"
+                        }
+                    },
+                    "policy_filter_matches": {
+                        "test_scope_prefix.Config_Lorem": {},
+                        "test_scope_prefix.Config_amet": {},
+                        "test_scope_prefix.Config_ametist": {},
+                        "test_scope_prefix.Config_consectetur": {},
+                        "test_scope_prefix.Config_dolor": {},
+                        "test_scope_prefix.Config_ipsum": {},
+                        "test_scope_prefix.Config_sit": {}
+                    },
+                    "removed_policies": {}
+                },
+                "method": "put",
+                "params": {
+                    "cfy_tenant_name": "default_tenant"
+                },
+                "uri": "http://unit-test-deployment_handler:8188000/policy"
+            },
+            "res": "*",
+            "status_code": 200
+        },
+        {
+            "request": {
+                "headers": {
+                    "X-ONAP-RequestID": "*",
+                    "X-ECOMP-RequestID": "*"
+                },
+                "json": null,
+                "method": "get",
+                "params": {
+                    "cfy_tenant_name": "default_tenant"
+                },
+                "uri": "http://unit-test-deployment_handler:8188000/policy"
+            },
+            "res": "*",
+            "status_code": 200
+        },
+        {
+            "request": {
+                "headers": {
+                    "Accept": "application/json",
+                    "Authorization": "Basic auth",
+                    "ClientAuth": "Basic user",
+                    "Content-Type": "application/json",
+                    "Environment": "TEST",
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
                 "json": {
                     "policyName": "test_scope_prefix.Config_dolor"
                 },
                 "method": "post",
-                "params": None,
+                "params": null,
                 "uri": "https://unit-test-pdp-server:8081000/pdp/api/getConfig"
             },
             "res": "*",
@@ -1673,13 +1933,14 @@
                     "ClientAuth": "Basic user",
                     "Content-Type": "application/json",
                     "Environment": "TEST",
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
                 "json": {
                     "policyName": "test_scope_prefix.Config_amet"
                 },
                 "method": "post",
-                "params": None,
+                "params": null,
                 "uri": "https://unit-test-pdp-server:8081000/pdp/api/getConfig"
             },
             "res": "*",
@@ -1688,10 +1949,11 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
                 "json": {
-                    "catch_up": False,
+                    "catch_up": false,
                     "latest_policies": {
                         "test_scope_prefix.Config_amet": {
                             "policy_body": {
@@ -1709,7 +1971,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_amet.5.xml",
                                 "policyVersion": "5",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -1731,7 +1993,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_dolor.3.xml",
                                 "policyVersion": "3",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -1756,9 +2018,10 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
-                "json": None,
+                "json": null,
                 "method": "get",
                 "params": {
                     "cfy_tenant_name": "default_tenant"
@@ -1776,13 +2039,14 @@
                     "ClientAuth": "Basic user",
                     "Content-Type": "application/json",
                     "Environment": "TEST",
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
                 "json": {
                     "policyName": "test_scope_prefix.Config_.*"
                 },
                 "method": "post",
-                "params": None,
+                "params": null,
                 "uri": "https://unit-test-pdp-server:8081000/pdp/api/getConfig"
             },
             "res": "*",
@@ -1791,10 +2055,11 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
                 "json": {
-                    "catch_up": True,
+                    "catch_up": true,
                     "latest_policies": {
                         "test_scope_prefix.Config_Lorem": {
                             "policy_body": {
@@ -1812,7 +2077,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_Lorem.1.xml",
                                 "policyVersion": "1",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -1834,7 +2099,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_amet.5.xml",
                                 "policyVersion": "5",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -1856,7 +2121,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_ametist.7.xml",
                                 "policyVersion": "7",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -1878,7 +2143,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_consectetur.6.xml",
                                 "policyVersion": "6",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -1900,7 +2165,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_dolor.3.xml",
                                 "policyVersion": "3",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -1922,7 +2187,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_ipsum.2.xml",
                                 "policyVersion": "2",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -1944,7 +2209,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_sit.4.xml",
                                 "policyVersion": "4",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -1976,9 +2241,10 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
-                "json": None,
+                "json": null,
                 "method": "get",
                 "params": {
                     "cfy_tenant_name": "default_tenant"
@@ -1996,13 +2262,14 @@
                     "ClientAuth": "Basic user",
                     "Content-Type": "application/json",
                     "Environment": "TEST",
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
                 "json": {
                     "policyName": "test_scope_prefix.Config_.*"
                 },
                 "method": "post",
-                "params": None,
+                "params": null,
                 "uri": "https://unit-test-pdp-server:8081000/pdp/api/getConfig"
             },
             "res": "*",
@@ -2011,10 +2278,11 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
                 "json": {
-                    "catch_up": True,
+                    "catch_up": true,
                     "latest_policies": {
                         "test_scope_prefix.Config_Lorem": {
                             "policy_body": {
@@ -2027,7 +2295,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_Lorem.1.xml",
                                 "policyVersion": "1",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -2044,7 +2312,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_amet.5.xml",
                                 "policyVersion": "5",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -2061,7 +2329,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_ametist.7.xml",
                                 "policyVersion": "7",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -2078,7 +2346,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_consectetur.6.xml",
                                 "policyVersion": "6",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -2095,7 +2363,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_dolor.3.xml",
                                 "policyVersion": "3",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -2112,7 +2380,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_ipsum.2.xml",
                                 "policyVersion": "2",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -2129,7 +2397,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_sit.4.xml",
                                 "policyVersion": "4",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -2159,9 +2427,10 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
-                "json": None,
+                "json": null,
                 "method": "get",
                 "params": {
                     "cfy_tenant_name": "default_tenant"
@@ -2179,13 +2448,14 @@
                     "ClientAuth": "Basic user",
                     "Content-Type": "application/json",
                     "Environment": "TEST",
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
                 "json": {
                     "policyName": "test_scope_prefix.Config_.*"
                 },
                 "method": "post",
-                "params": None,
+                "params": null,
                 "uri": "https://unit-test-pdp-server:8081000/pdp/api/getConfig"
             },
             "res": "*",
@@ -2194,10 +2464,11 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
                 "json": {
-                    "catch_up": True,
+                    "catch_up": true,
                     "latest_policies": {
                         "test_scope_prefix.Config_Lorem": {
                             "policy_body": {
@@ -2210,7 +2481,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_Lorem.1.xml",
                                 "policyVersion": "1",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -2227,7 +2498,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_amet.5.xml",
                                 "policyVersion": "5",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -2244,7 +2515,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_ametist.7.xml",
                                 "policyVersion": "7",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -2261,7 +2532,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_consectetur.6.xml",
                                 "policyVersion": "6",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -2278,7 +2549,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_dolor.3.xml",
                                 "policyVersion": "3",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -2295,7 +2566,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_ipsum.2.xml",
                                 "policyVersion": "2",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -2312,7 +2583,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_sit.4.xml",
                                 "policyVersion": "4",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -2342,9 +2613,10 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
-                "json": None,
+                "json": null,
                 "method": "get",
                 "params": {
                     "cfy_tenant_name": "default_tenant"
@@ -2362,13 +2634,14 @@
                     "ClientAuth": "Basic user",
                     "Content-Type": "application/json",
                     "Environment": "TEST",
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
                 "json": {
                     "policyName": "test_scope_prefix.Config_.*"
                 },
                 "method": "post",
-                "params": None,
+                "params": null,
                 "uri": "https://unit-test-pdp-server:8081000/pdp/api/getConfig"
             },
             "res": "*",
@@ -2377,10 +2650,11 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
                 "json": {
-                    "catch_up": True,
+                    "catch_up": true,
                     "latest_policies": {
                         "test_scope_prefix.Config_Lorem": {
                             "policy_body": {
@@ -2393,7 +2667,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_Lorem.1.xml",
                                 "policyVersion": "1",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -2410,7 +2684,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_amet.5.xml",
                                 "policyVersion": "5",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -2427,7 +2701,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_ametist.7.xml",
                                 "policyVersion": "7",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -2444,7 +2718,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_consectetur.6.xml",
                                 "policyVersion": "6",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -2461,7 +2735,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_dolor.3.xml",
                                 "policyVersion": "3",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -2478,7 +2752,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_ipsum.2.xml",
                                 "policyVersion": "2",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -2495,7 +2769,7 @@
                                 "policyConfigStatus": "CONFIG_RETRIEVED",
                                 "policyName": "test_scope_prefix.Config_sit.4.xml",
                                 "policyVersion": "4",
-                                "property": None,
+                                "property": null,
                                 "responseAttributes": {},
                                 "type": "JSON"
                             },
@@ -2527,9 +2801,10 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
-                "json": None,
+                "json": null,
                 "method": "get",
                 "params": {
                     "cfy_tenant_name": "default_tenant"
@@ -2542,9 +2817,10 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
-                "json": None,
+                "json": null,
                 "method": "get",
                 "params": {
                     "cfy_tenant_name": "default_tenant"
@@ -2557,9 +2833,10 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
-                "json": None,
+                "json": null,
                 "method": "get",
                 "params": {
                     "cfy_tenant_name": "default_tenant"
@@ -2574,9 +2851,10 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
-                "json": None,
+                "json": null,
                 "method": "get",
                 "params": {
                     "cfy_tenant_name": "default_tenant"
@@ -2591,9 +2869,10 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
-                "json": None,
+                "json": null,
                 "method": "get",
                 "params": {
                     "cfy_tenant_name": "default_tenant"
@@ -2606,9 +2885,10 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
-                "json": None,
+                "json": null,
                 "method": "get",
                 "params": {
                     "cfy_tenant_name": "default_tenant"
@@ -2621,9 +2901,10 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
-                "json": None,
+                "json": null,
                 "method": "get",
                 "params": {
                     "cfy_tenant_name": "default_tenant"
@@ -2636,9 +2917,10 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
-                "json": None,
+                "json": null,
                 "method": "get",
                 "params": {
                     "cfy_tenant_name": "default_tenant"
@@ -2653,9 +2935,10 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
-                "json": None,
+                "json": null,
                 "method": "get",
                 "params": {
                     "cfy_tenant_name": "default_tenant"
@@ -2668,9 +2951,10 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
-                "json": None,
+                "json": null,
                 "method": "get",
                 "params": {
                     "cfy_tenant_name": "default_tenant"
@@ -2685,9 +2969,10 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
-                "json": None,
+                "json": null,
                 "method": "get",
                 "params": {
                     "cfy_tenant_name": "default_tenant"
@@ -2700,9 +2985,10 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
-                "json": None,
+                "json": null,
                 "method": "get",
                 "params": {
                     "cfy_tenant_name": "default_tenant"
@@ -2717,9 +3003,10 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
-                "json": None,
+                "json": null,
                 "method": "get",
                 "params": {
                     "cfy_tenant_name": "default_tenant"
@@ -2732,9 +3019,10 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
-                "json": None,
+                "json": null,
                 "method": "get",
                 "params": {
                     "cfy_tenant_name": "default_tenant"
@@ -2749,9 +3037,10 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
-                "json": None,
+                "json": null,
                 "method": "get",
                 "params": {
                     "cfy_tenant_name": "default_tenant"
@@ -2769,13 +3058,14 @@
                     "ClientAuth": "Basic user",
                     "Content-Type": "application/json",
                     "Environment": "TEST",
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
                 "json": {
                     "policyName": "test_scope_prefix.Config_.*"
                 },
                 "method": "post",
-                "params": None,
+                "params": null,
                 "uri": "https://unit-test-pdp-server:8081000/pdp/api/getConfig"
             },
             "res": "*",
@@ -2791,13 +3081,14 @@
                     "ClientAuth": "Basic user",
                     "Content-Type": "application/json",
                     "Environment": "TEST",
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
                 "json": {
                     "policyName": "test_scope_prefix.Config_amet.*"
                 },
                 "method": "post",
-                "params": None,
+                "params": null,
                 "uri": "https://unit-test-pdp-server:8081000/pdp/api/getConfig"
             },
             "res": "*",
@@ -2813,13 +3104,14 @@
                     "ClientAuth": "Basic user",
                     "Content-Type": "application/json",
                     "Environment": "TEST",
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
                 "json": {
                     "policyName": "test_scope_prefix.Config_sit"
                 },
                 "method": "post",
-                "params": None,
+                "params": null,
                 "uri": "https://unit-test-pdp-server:8081000/pdp/api/getConfig"
             },
             "res": "*",
@@ -2830,9 +3122,10 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
-                "json": None,
+                "json": null,
                 "method": "get",
                 "params": {
                     "cfy_tenant_name": "default_tenant"
@@ -2850,13 +3143,14 @@
                     "ClientAuth": "Basic user",
                     "Content-Type": "application/json",
                     "Environment": "TEST",
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
                 "json": {
                     "policyName": "test_scope_prefix.Config_.*"
                 },
                 "method": "post",
-                "params": None,
+                "params": null,
                 "uri": "https://unit-test-pdp-server:8081000/pdp/api/getConfig"
             },
             "res": "*",
@@ -2867,9 +3161,10 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
-                "json": None,
+                "json": null,
                 "method": "get",
                 "params": {
                     "cfy_tenant_name": "default_tenant"
@@ -2887,13 +3182,14 @@
                     "ClientAuth": "Basic user",
                     "Content-Type": "application/json",
                     "Environment": "TEST",
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
                 "json": {
                     "policyName": "test_scope_prefix.Config_.*"
                 },
                 "method": "post",
-                "params": None,
+                "params": null,
                 "uri": "https://unit-test-pdp-server:8081000/pdp/api/getConfig"
             },
             "res": "*",
@@ -2902,9 +3198,10 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
-                "json": None,
+                "json": null,
                 "method": "get",
                 "params": {
                     "cfy_tenant_name": "default_tenant"
@@ -2922,13 +3219,14 @@
                     "ClientAuth": "Basic user",
                     "Content-Type": "application/json",
                     "Environment": "TEST",
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
                 "json": {
                     "policyName": "test_scope_prefix.Config_.*"
                 },
                 "method": "post",
-                "params": None,
+                "params": null,
                 "uri": "https://unit-test-pdp-server:8081000/pdp/api/getConfig"
             },
             "res": "*",
@@ -2939,9 +3237,10 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
-                "json": None,
+                "json": null,
                 "method": "get",
                 "params": {
                     "cfy_tenant_name": "default_tenant"
@@ -2959,13 +3258,14 @@
                     "ClientAuth": "Basic user",
                     "Content-Type": "application/json",
                     "Environment": "TEST",
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
                 "json": {
                     "policyName": "test_scope_prefix.Config_.*"
                 },
                 "method": "post",
-                "params": None,
+                "params": null,
                 "uri": "https://unit-test-pdp-server:8081000/pdp/api/getConfig"
             },
             "res": "*",
@@ -2976,9 +3276,10 @@
         {
             "request": {
                 "headers": {
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
-                "json": None,
+                "json": null,
                 "method": "get",
                 "params": {
                     "cfy_tenant_name": "default_tenant"
@@ -2996,17 +3297,18 @@
                     "ClientAuth": "Basic user",
                     "Content-Type": "application/json",
                     "Environment": "TEST",
+                    "X-ONAP-RequestID": "*",
                     "X-ECOMP-RequestID": "*"
                 },
                 "json": {
                     "policyName": "test_scope_prefix.Config_.*"
                 },
                 "method": "post",
-                "params": None,
+                "params": null,
                 "uri": "https://unit-test-pdp-server:8081000/pdp/api/getConfig"
             },
             "res": "*",
             "status_code": 200
         }
     ]
-}
+}
\ No newline at end of file
diff --git a/tests/mock_deploy_handler.py b/tests/pdp_api_v0/mock_deploy_handler.py
similarity index 78%
rename from tests/mock_deploy_handler.py
rename to tests/pdp_api_v0/mock_deploy_handler.py
index cd8e791..5446070 100644
--- a/tests/mock_deploy_handler.py
+++ b/tests/pdp_api_v0/mock_deploy_handler.py
@@ -1,5 +1,5 @@
 # ============LICENSE_START=======================================================
-# Copyright (c) 2018-2019 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2018-2020 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.
@@ -16,12 +16,16 @@
 #
 """mocking for the deployment-handler - shared by many tests"""
 
+import json
+
 from policyhandler.pdp_api_v0.pdp_consts import POLICY_VERSION
 from policyhandler.policy_consts import POLICY_BODY, POLICY_ID, POLICY_VERSIONS
+from policyhandler.utils import Utils
 
-from .mock_settings import MockSettings
-from .pdp_api_v0.mock_policy_engine import MockPolicyEngine2018
+from ..mock_settings import MockSettings
+from .mock_policy_engine import MockPolicyEngine2018
 
+_LOGGER = Utils.get_logger(__file__)
 
 class MockDeploymentHandler(object):
     """pretend this is the deployment-handler"""
@@ -34,14 +38,16 @@
     @staticmethod
     def get_deployed_policies():
         """generate the deployed policies message"""
+        all_policies = MockPolicyEngine2018.gen_all_policies_latest(version_offset=1)
+        _LOGGER.info("all_policies: %s", json.dumps(all_policies))
+
         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 (
-                MockPolicyEngine2018.gen_all_policies_latest(version_offset=1).items()))
+            for policy_id, policy in all_policies.items())
         response["policies"] = policies
 
         return response
diff --git a/tests/pdp_api_v0/mock_websocket.py b/tests/pdp_api_v0/mock_websocket.py
index 17f3bbe..3e3e63b 100644
--- a/tests/pdp_api_v0/mock_websocket.py
+++ b/tests/pdp_api_v0/mock_websocket.py
@@ -1,5 +1,5 @@
 # ============LICENSE_START=======================================================
-# Copyright (c) 2018-2019 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2018-2020 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.
@@ -21,8 +21,8 @@
 
 from policyhandler.pdp_api_v0.pdp_consts import POLICY_NAME
 from policyhandler.pdp_api_v0.policy_listener import (LOADED_POLICIES,
-                                                        POLICY_VER,
-                                                        REMOVED_POLICIES)
+                                                      POLICY_VER,
+                                                      REMOVED_POLICIES)
 from policyhandler.utils import Utils
 
 from .mock_policy_engine import MockPolicyEngine2018
diff --git a/tests/main/test_policy_rest.py b/tests/pdp_api_v0/test_policy_rest_auth.py
similarity index 84%
rename from tests/main/test_policy_rest.py
rename to tests/pdp_api_v0/test_policy_rest_auth.py
index 964a21d..dd8dc83 100644
--- a/tests/main/test_policy_rest.py
+++ b/tests/pdp_api_v0/test_policy_rest_auth.py
@@ -1,5 +1,5 @@
 # ============LICENSE_START=======================================================
-# Copyright (c) 2018-2019 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2020 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.
@@ -25,14 +25,14 @@
 from policyhandler.utils import Utils
 
 from ..mock_tracker import Tracker
-from .mock_policy_engine import MockPolicyEngine
+from .mock_policy_engine import MockPolicyEngine2018
 
 _LOGGER = Utils.get_logger(__file__)
 
-@pytest.mark.usefixtures("fix_pdp_post")
+@pytest.mark.usefixtures("fix_pdp_authorization", "fix_pdp_api_v0", "fix_pdp_post")
 def test_get_policy_latest():
     """test /policy_latest/<policy-id>"""
-    policy_id, expected_policy = MockPolicyEngine.gen_policy_latest(3)
+    policy_id, expected_policy = MockPolicyEngine2018.gen_policy_latest(3)
 
     audit = Audit(job_name="test_get_policy_latest",
                   req_message="get /policy_latest/{}".format(policy_id or ""))
diff --git a/tests/pdp_api_v0/test_policyhandler.py b/tests/pdp_api_v0/test_policyhandler.py
index 2b2629b..06de265 100644
--- a/tests/pdp_api_v0/test_policyhandler.py
+++ b/tests/pdp_api_v0/test_policyhandler.py
@@ -1,5 +1,5 @@
 # ============LICENSE_START=======================================================
-# Copyright (c) 2017-2019 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2017-2020 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.
@@ -21,12 +21,13 @@
 import time
 import uuid
 
-import cherrypy
 import pytest
-from cherrypy.test.helper import CPWebCase
 
+import cherrypy
+from cherrypy.test.helper import CPWebCase
 from policyhandler.config import Config
-from policyhandler.onap.audit import REQUEST_X_ECOMP_REQUESTID, Audit
+from policyhandler.onap.audit import (REQUEST_X_ECOMP_REQUESTID,
+                                      REQUEST_X_ONAP_REQUESTID, Audit)
 from policyhandler.pdp_api_v0.pdp_consts import POLICY_NAME
 from policyhandler.policy_consts import LATEST_POLICIES
 from policyhandler.policy_receiver import PolicyReceiver
@@ -89,10 +90,6 @@
         _LOGGER.info("result: %s", result)
         _LOGGER.info("body: %s", self.body)
 
-        if Config.is_pdp_api_default():
-            self.assertStatus('404 Not Found')
-            return
-
         self.assertStatus('200 OK')
 
         policies_latest = json.loads(self.body)
@@ -114,20 +111,18 @@
         expected_policies = MockPolicyEngine2018.gen_policies_latest(match_to_policy_name)
 
         body = json.dumps({POLICY_NAME: match_to_policy_name})
+        request_id = str(uuid.uuid4())
         result = self.getPage("/policies_latest", method='POST',
                               body=body,
                               headers=[
-                                  (REQUEST_X_ECOMP_REQUESTID, str(uuid.uuid4())),
+                                  (REQUEST_X_ECOMP_REQUESTID, request_id),
+                                  (REQUEST_X_ONAP_REQUESTID, request_id),
                                   ("Content-Type", "application/json"),
                                   ('Content-Length', str(len(body)))
                               ])
         _LOGGER.info("result: %s", result)
         _LOGGER.info("body: %s", self.body)
 
-        if Config.is_pdp_api_default():
-            self.assertStatus('404 Not Found')
-            return
-
         self.assertStatus('200 OK')
 
         policies_latest = json.loads(self.body)[LATEST_POLICIES]
@@ -144,10 +139,6 @@
     @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"""
-        if Config.is_pdp_api_default():
-            _LOGGER.info("passive for new PDP API")
-            return
-
         _LOGGER.info("start policy_updates_and_catch_ups")
         assert not PolicyReceiver.is_running()
 
@@ -177,10 +168,6 @@
     @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"""
-        if Config.is_pdp_api_default():
-            _LOGGER.info("passive for new PDP API")
-            return
-
         _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",
@@ -201,8 +188,8 @@
         _LOGGER.info("sleep after send_notification...")
         time.sleep(3)
 
-        _LOGGER.info("sleep 5 before shutdown...")
-        time.sleep(5)
+        _LOGGER.info("sleep 3 before shutdown...")
+        time.sleep(3)
 
         result = self.getPage("/healthcheck")
         _LOGGER.info("healthcheck result: %s", result)
@@ -216,10 +203,6 @@
     @pytest.mark.usefixtures("fix_deploy_handler", "fix_policy_receiver_websocket")
     def test_zzz_get_catch_up(self):
         """test /catch_up"""
-        if Config.is_pdp_api_default():
-            _LOGGER.info("passive for new PDP API")
-            return
-
         _LOGGER.info("start /catch_up")
         assert not PolicyReceiver.is_running()
         audit = Audit(job_name="test_zzz_get_catch_up", req_message="start /catch_up")
@@ -273,8 +256,4 @@
         time.sleep(1)
         assert not PolicyReceiver.is_running()
 
-        if Config.is_pdp_api_default():
-            _LOGGER.info("passive for new PDP API")
-            return
-
         Tracker.validate()
diff --git a/tests/pdp_api_v0/test_pz_catch_up.py b/tests/pdp_api_v0/test_pz_catch_up.py
index 3b37af5..8d461e8 100644
--- a/tests/pdp_api_v0/test_pz_catch_up.py
+++ b/tests/pdp_api_v0/test_pz_catch_up.py
@@ -1,5 +1,5 @@
 # ============LICENSE_START=======================================================
-# Copyright (c) 2018-2019 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2018-2020 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.
@@ -21,7 +21,6 @@
 
 import pytest
 
-from policyhandler.config import Config
 from policyhandler.onap.audit import Audit
 from policyhandler.policy_receiver import PolicyReceiver
 from policyhandler.utils import Utils
@@ -40,10 +39,6 @@
 )
 def test_catch_up_failed_dh():
     """test run policy handler with catchups and failed deployment-handler"""
-    if Config.is_pdp_api_default():
-        _LOGGER.info("passive for new PDP API")
-        return
-
     _LOGGER.info("start test_catch_up_failed_dh")
     assert not PolicyReceiver.is_running()
     audit = Audit(job_name="test_catch_up_failed_dh",
@@ -78,10 +73,6 @@
 )
 def test_catch_up_dh_404():
     """test run policy handler with catchups and failed deployment-handler"""
-    if Config.is_pdp_api_default():
-        _LOGGER.info("passive for new PDP API")
-        return
-
     _LOGGER.info("start test_catch_up_dh_404")
     assert not PolicyReceiver.is_running()
     audit = Audit(job_name="test_catch_up_dh_404",
diff --git a/tests/pdp_api_v0/test_pz_pdp_boom.py b/tests/pdp_api_v0/test_pz_pdp_boom.py
index effadc2..8ce42a7 100644
--- a/tests/pdp_api_v0/test_pz_pdp_boom.py
+++ b/tests/pdp_api_v0/test_pz_pdp_boom.py
@@ -1,5 +1,5 @@
 # ============LICENSE_START=======================================================
-# Copyright (c) 2018-2019 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2018-2020 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.
@@ -23,9 +23,9 @@
 import cherrypy
 import pytest
 from cherrypy.test.helper import CPWebCase
-
 from policyhandler.config import Config
-from policyhandler.onap.audit import (REQUEST_X_ECOMP_REQUESTID, Audit,
+from policyhandler.onap.audit import (REQUEST_X_ECOMP_REQUESTID,
+                                      REQUEST_X_ONAP_REQUESTID, Audit,
                                       AuditHttpCode)
 from policyhandler.pdp_api_v0.pdp_consts import POLICY_NAME
 from policyhandler.policy_receiver import PolicyReceiver
@@ -80,10 +80,6 @@
         _LOGGER.info("result: %s", result)
         _LOGGER.info("body: %s", self.body)
 
-        if Config.is_pdp_api_default():
-            self.assertStatus('404 Not Found')
-            return
-
         self.assertStatus(AuditHttpCode.SERVER_INTERNAL_ERROR.value)
 
         result = self.getPage("/healthcheck")
@@ -96,20 +92,18 @@
         match_to_policy_name = MockPolicyEngine2018.scope_prefix + "amet.*"
 
         body = json.dumps({POLICY_NAME: match_to_policy_name})
+        request_id = str(uuid.uuid4())
         result = self.getPage("/policies_latest", method='POST',
                               body=body,
                               headers=[
-                                  (REQUEST_X_ECOMP_REQUESTID, str(uuid.uuid4())),
+                                  (REQUEST_X_ECOMP_REQUESTID, request_id),
+                                  (REQUEST_X_ONAP_REQUESTID, request_id),
                                   ("Content-Type", "application/json"),
                                   ('Content-Length', str(len(body)))
                               ])
         _LOGGER.info("result: %s", result)
         _LOGGER.info("body: %s", self.body)
 
-        if Config.is_pdp_api_default():
-            self.assertStatus('404 Not Found')
-            return
-
         self.assertStatus(AuditHttpCode.SERVER_INTERNAL_ERROR.value)
 
         result = self.getPage("/healthcheck")
@@ -120,10 +114,6 @@
     @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"""
-        if Config.is_pdp_api_default():
-            _LOGGER.info("passive for new PDP API")
-            return
-
         _LOGGER.info("start policy_updates_and_catch_ups")
         assert not PolicyReceiver.is_running()
         audit = Audit(job_name="test_zzz_policy_updates_and_catch_ups",
@@ -152,10 +142,6 @@
     @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"""
-        if Config.is_pdp_api_default():
-            _LOGGER.info("passive for new PDP API")
-            return
-
         _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",
@@ -191,10 +177,6 @@
     @pytest.mark.usefixtures("fix_deploy_handler", "fix_policy_receiver_websocket")
     def test_zzz_get_catch_up(self):
         """test /catch_up"""
-        if Config.is_pdp_api_default():
-            _LOGGER.info("passive for new PDP API")
-            return
-
         _LOGGER.info("start /catch_up")
         assert not PolicyReceiver.is_running()
         audit = Audit(job_name="test_zzz_get_catch_up", req_message="start /catch_up")
@@ -248,8 +230,4 @@
         time.sleep(1)
         assert not PolicyReceiver.is_running()
 
-        if Config.is_pdp_api_default():
-            _LOGGER.info("passive for new PDP API")
-            return
-
         Tracker.validate()
diff --git a/tests/pdp_api_v0/test_pz_ph_boom.py b/tests/pdp_api_v0/test_pz_ph_boom.py
index 4203110..432450c 100644
--- a/tests/pdp_api_v0/test_pz_ph_boom.py
+++ b/tests/pdp_api_v0/test_pz_ph_boom.py
@@ -1,5 +1,5 @@
 # ============LICENSE_START=======================================================
-# Copyright (c) 2018-2019 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2018-2020 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.
@@ -23,9 +23,9 @@
 import cherrypy
 import pytest
 from cherrypy.test.helper import CPWebCase
-
 from policyhandler.config import Config
-from policyhandler.onap.audit import (REQUEST_X_ECOMP_REQUESTID, Audit,
+from policyhandler.onap.audit import (REQUEST_X_ECOMP_REQUESTID,
+                                      REQUEST_X_ONAP_REQUESTID, Audit,
                                       AuditHttpCode)
 from policyhandler.pdp_api_v0.pdp_consts import POLICY_NAME
 from policyhandler.policy_receiver import PolicyReceiver
@@ -81,10 +81,6 @@
         _LOGGER.info("result: %s", result)
         _LOGGER.info("body: %s", self.body)
 
-        if Config.is_pdp_api_default():
-            self.assertStatus('404 Not Found')
-            return
-
         self.assertStatus(AuditHttpCode.SERVER_INTERNAL_ERROR.value)
 
         result = self.getPage("/healthcheck")
@@ -97,20 +93,18 @@
         match_to_policy_name = MockPolicyEngine2018.scope_prefix + "amet.*"
 
         body = json.dumps({POLICY_NAME: match_to_policy_name})
+        request_id = str(uuid.uuid4())
         result = self.getPage("/policies_latest", method='POST',
                               body=body,
                               headers=[
-                                  (REQUEST_X_ECOMP_REQUESTID, str(uuid.uuid4())),
+                                  (REQUEST_X_ECOMP_REQUESTID, request_id),
+                                  (REQUEST_X_ONAP_REQUESTID, request_id),
                                   ("Content-Type", "application/json"),
                                   ('Content-Length', str(len(body)))
                               ])
         _LOGGER.info("result: %s", result)
         _LOGGER.info("body: %s", self.body)
 
-        if Config.is_pdp_api_default():
-            self.assertStatus('404 Not Found')
-            return
-
         self.assertStatus(AuditHttpCode.SERVER_INTERNAL_ERROR.value)
 
         result = self.getPage("/healthcheck")
@@ -121,10 +115,6 @@
     @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"""
-        if Config.is_pdp_api_default():
-            _LOGGER.info("passive for new PDP API")
-            return
-
         _LOGGER.info("start policy_updates_and_catch_ups")
         assert not PolicyReceiver.is_running()
         audit = Audit(job_name="test_zzz_policy_updates_and_catch_ups",
@@ -153,10 +143,6 @@
     @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"""
-        if Config.is_pdp_api_default():
-            _LOGGER.info("passive for new PDP API")
-            return
-
         _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",
@@ -192,10 +178,6 @@
     @pytest.mark.usefixtures("fix_deploy_handler", "fix_policy_receiver_websocket")
     def test_zzz_get_catch_up(self):
         """test /catch_up"""
-        if Config.is_pdp_api_default():
-            _LOGGER.info("passive for new PDP API")
-            return
-
         _LOGGER.info("start /catch_up")
         assert not PolicyReceiver.is_running()
         audit = Audit(job_name="test_zzz_get_catch_up", req_message="start /catch_up")
@@ -249,8 +231,4 @@
         time.sleep(1)
         assert not PolicyReceiver.is_running()
 
-        if Config.is_pdp_api_default():
-            _LOGGER.info("passive for new PDP API")
-            return
-
         Tracker.validate()
diff --git a/version.properties b/version.properties
index d49fe4b..cf34660 100644
--- a/version.properties
+++ b/version.properties
@@ -1,6 +1,6 @@
 major=5

-minor=0

-patch=1

+minor=1

+patch=0

 base_version=${major}.${minor}.${patch}

 release_version=${base_version}

 snapshot_version=${base_version}-SNAPSHOT