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