aboutsummaryrefslogtreecommitdiffstats
path: root/tests/test_policy_utils.py
diff options
context:
space:
mode:
authorAlex Shatov <alexs@att.com>2019-04-01 11:32:06 -0400
committerAlex Shatov <alexs@att.com>2019-04-01 11:32:06 -0400
commit9a4d3c5b8dc9c7697275cab38ee45b014dff9e55 (patch)
treed4d55bcc8bc237ee3199d0e6a13f5e7cd95fadea /tests/test_policy_utils.py
parentebc1a062328e53e97e4d24ed111534cfc567a809 (diff)
5.0.0 policy-handler - new PDP API or old PDP API4.0.0-ONAPdublin
- in R4 Dublin the policy-engine introduced a totally new API - policy-handler now has a startup option to either use the new PDP API or the old PDP API that was created-updated before the end of 2018 - see README.md and README_pdp_api_v0.md for instructions on how to setup the policy-handler running either with the new PDP API or the old (pdp_api_v0) PDP API - this is a massive refactoring that changed almost all the source files, but kept the old logic when using the old (pdp_api_v0) PDP API - all the code related to PDP API version is split into two subfolders = pdp_api/ contains the new PDP API source code = pdp_api_v0/ contains the old (2018) PDP API source code = pdp_client.py imports from either pdp_api or pdp_api_v0 = the rest of the code is only affected when it needs to branch the logic - logging to policy_handler.log now shows the path of the source file to allow tracing which PDP API is actually used - when the new PDP API is used, the policy-update flow is disabled = passive mode of operation = no web-socket = no periodic catch_up = no policy-filters = reduced web-API - only a single /policy_latest endpoint is available /policies_latest returns 404 /catch_up request is accepted, but ignored - on new PDP API: http /policy_latest returns the new data from the new PDP API with the following fields added by the policy-handler to keep other policy related parts intact in R4 (see pdp_api/policy_utils.py) = "policyName" = policy_id + "." + "policyVersion" + ".xml" = "policyVersion" = str("metadata"."policy-version") = "config" - is the renamed "properties" from the new PDP API response - unit tests are split into two subfolders as well = main/ for the new PDP API testing = pdp_api_v0/ for the old (2018) PDP API - removed the following line from the license text of changed files ECOMP is a trademark and service mark of AT&T Intellectual Property. - the new PDP API is expected to be extended and redesigned in R5 El Alto - on retiring the old PDP API - the intention is to be able to remove the pdp_api_v0/ subfolder and minimal related cleanup of the code that imports that as well as the cleanup of the config.py, etc. Change-Id: Ief9a2ae4541300308caaf97377f4ed051535dbe4 Signed-off-by: Alex Shatov <alexs@att.com> Issue-ID: DCAEGEN2-1128
Diffstat (limited to 'tests/test_policy_utils.py')
-rw-r--r--tests/test_policy_utils.py186
1 files changed, 0 insertions, 186 deletions
diff --git a/tests/test_policy_utils.py b/tests/test_policy_utils.py
deleted file mode 100644
index dcf6ccb..0000000
--- a/tests/test_policy_utils.py
+++ /dev/null
@@ -1,186 +0,0 @@
-# ============LICENSE_START=======================================================
-# Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.
-# ================================================================================
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# ============LICENSE_END=========================================================
-#
-# ECOMP is a trademark and service mark of AT&T Intellectual Property.
-
-"""test of the policy_utils"""
-
-import json
-import logging
-import re
-
-from policyhandler.config import Config
-from policyhandler.policy_utils import RegexCoarser
-
-Config.init_config()
-LOGGER = logging.getLogger("policy_handler.unit_test_policy_utils")
-
-
-def check_coarse_regex(test_name, patterns, matching_strings=None, expected_subpatterns=None):
- """generic test"""
- regex_coarser = RegexCoarser(patterns)
- coarse_patterns = regex_coarser.get_coarse_regex_patterns(max_length=20)
- LOGGER.info("check_coarse_regex %s (%s) for [%s]",
- test_name, coarse_patterns, json.dumps(regex_coarser.patterns))
- coarse_regexes = [re.compile(coarse_pattern) for coarse_pattern in coarse_patterns]
- coarse_patterns_str = json.dumps(coarse_patterns)
- if matching_strings:
- for test_str in matching_strings:
- LOGGER.info(" match '%s' to %s (%s)", test_str, test_name, coarse_patterns_str)
- assert bool(list(filter(None, [
- coarse_regex.match(test_str) for coarse_regex in coarse_regexes
- ])))
-
- if expected_subpatterns:
- for subpattern in expected_subpatterns:
- LOGGER.info(" subpattern '%s' in %s", subpattern, coarse_patterns_str)
- assert subpattern in coarse_patterns_str
-
-def check_combined_regex(test_name, patterns, matching_strings=None, unmatching_strings=None):
- """generic test"""
- regex_coarser = RegexCoarser(patterns)
- combined_pattern = regex_coarser.get_combined_regex_pattern()
- LOGGER.info("check_combined_regex %s (%s) for [%s]",
- test_name, combined_pattern, json.dumps(regex_coarser.patterns))
- coarse_regex = re.compile(combined_pattern)
- if matching_strings:
- for test_str in matching_strings:
- LOGGER.info(" match '%s' to %s (%s)", test_str, test_name, combined_pattern)
- assert coarse_regex.match(test_str)
-
- if unmatching_strings:
- for test_str in unmatching_strings:
- LOGGER.info(" not match '%s' to %s (%s)", test_str, test_name, combined_pattern)
- assert not coarse_regex.match(test_str)
-
-def test_regex_coarser():
- """test variety of regex combinations"""
-
- test_data = [
- (
- "simple",
- [
- "plain text", "plain pick",
- "aaa (((a|b)|c)|d)",
- "aaa (((a|b)|c)|d zzz",
- "nested (expr[aeiou]ss(ions)?)",
- "nested (expr[aeiou]ss(?:ions|ion)?)",
- "^ (any expr|more|less|some|who cares)",
- " (any expr|more|less|some|who cares)",
- "(any expr|more|less|some|who cares)"
- ],
- [
- 'plain text',
- 'nested exprussions',
- 'nested expross',
- 'aaa c',
- 'aaa d',
- 'who cares',
- ' who cares'
- ],
- None,
- [
- "nested .*",
- "plain .*",
- "aaa .*",
- "(any expr|more|less|some|who cares)",
- "^ (any expr|more|less|some|who cares)",
- " (any expr|more|less|some|who cares)"]
- ),
- (
- "combination",
- [
- "plain text",
- "^with* modifiers?",
- "cha[ra][ra]cter classes",
- "^with (groups)",
- "^with (groups|more groups)",
- r"^with (mod+ifiers\s*|in groups{2,3}\s*)+",
- "sub",
- "substrings",
- "su.*bstrings",
- "char count{1,3}s",
- "nested (expr[aeiou]ss(ions)?)",
- r"escaped (\)) chars",
- r"escaped ([\)\]]) chars",
- r"escaped ([\)\]]){3} chars"
- ],
- [
- 'plain text',
- 'withhh modifier',
- 'character classes',
- 'with groups',
- 'with more groups',
- 'with modddifiers in groupss modifiers in groupsss',
- 'sub',
- 'substrings',
- 'char counttts',
- 'nested exprassions',
- 'nested express',
- 'escaped ) chars',
- 'escaped ] chars',
- 'escaped ]]] chars'
- ],
- [
- 'plain',
- 'text',
- 'something with modifiers',
- 'su',
- 'char counttttts',
- 'escaped ]] chars'
- ],
- [
- "nested .*",
- "escaped .*",
- "^wit.*",
- "plain text",
- "cha.*",
- "su.*"
- ]
- ),
- (
- "combined",
- [
- 'foo+',
- 'food',
- 'football',
- "ba[rh]",
- "bard"
- ],
- [
- 'foo',
- 'fooooo',
- 'football',
- 'food',
- 'bar',
- 'bah',
- 'bard'
- ],
- [
- 'fo',
- 'bat'
- ],
- [
- "fo.*",
- "ba.*"
- ]
- )
- ]
-
- for (test_name, patterns,
- matching_strings, unmatching_strings, expected_subpatterns) in test_data:
- check_combined_regex(test_name, patterns, matching_strings, unmatching_strings)
- check_coarse_regex(test_name, patterns, matching_strings, expected_subpatterns)