From 172b6b48b4216f6f86b3116c978d62ba2960c7a6 Mon Sep 17 00:00:00 2001 From: Akita Noek Date: Wed, 29 Jun 2016 14:36:25 -0400 Subject: [PATCH] Ported old redact.py tests --- .../{old/redact.py => unit/test_redact.py} | 124 +++++++++++------- 1 file changed, 76 insertions(+), 48 deletions(-) rename awx/main/tests/{old/redact.py => unit/test_redact.py} (54%) diff --git a/awx/main/tests/old/redact.py b/awx/main/tests/unit/test_redact.py similarity index 54% rename from awx/main/tests/old/redact.py rename to awx/main/tests/unit/test_redact.py index 3ce38bc7ad..47d6419642 100644 --- a/awx/main/tests/old/redact.py +++ b/awx/main/tests/unit/test_redact.py @@ -1,11 +1,9 @@ - import textwrap +import re # AWX from awx.main.redact import UriCleaner -from awx.main.tests.base import BaseTest, URI - -__all__ = ['UriCleanTests'] +from awx.main.tests.base import URI TEST_URIS = [ URI('no host', scheme='https', username='myusername', password='mypass', host=None), @@ -80,59 +78,89 @@ TEST_CLEARTEXT.append({ 'host_occurrences' : 4 }) -class UriCleanTests(BaseTest): - # should redact sensitive usernames and passwords - def test_uri_scm_simple_redacted(self): - for uri in TEST_URIS: - redacted_str = UriCleaner.remove_sensitive(str(uri)) - if uri.username: - self.check_not_found(redacted_str, uri.username, uri.description) - if uri.password: - self.check_not_found(redacted_str, uri.password, uri.description) +def check_found(string, substr, count=-1, description=None, word_boundary=False): + if word_boundary: + count_actual = len(re.findall(r'\b%s\b' % re.escape(substr), string)) + else: + count_actual = string.count(substr) - # should replace secret data with safe string, UriCleaner.REPLACE_STR - def test_uri_scm_simple_replaced(self): - for uri in TEST_URIS: - redacted_str = UriCleaner.remove_sensitive(str(uri)) - self.check_found(redacted_str, UriCleaner.REPLACE_STR, uri.get_secret_count()) + msg = '' + if description: + msg = 'Test "%s".\n' % description + if count == -1: + assert count_actual > 0 + else: + msg += 'Found %d occurances of "%s" instead of %d in: "%s"' % (count_actual, substr, count, string) + if count_actual != count: + raise Exception(msg) - # should redact multiple uris in text - def test_uri_scm_multiple(self): - cleartext = '' - for uri in TEST_URIS: - cleartext += str(uri) + ' ' - for uri in TEST_URIS: - cleartext += str(uri) + '\n' +def check_not_found(string, substr, description=None, word_boundary=False): + if word_boundary: + count = len(re.findall(r'\b%s\b' % re.escape(substr), string)) + else: + count = string.find(substr) + if count == -1: + count = 0 + msg = '' + if description: + msg = 'Test "%s".\n' % description + msg += '"%s" found in: "%s"' % (substr, string) + if count != 0: + raise Exception(msg) + + +# should redact sensitive usernames and passwords +def test_uri_scm_simple_redacted(): + for uri in TEST_URIS: redacted_str = UriCleaner.remove_sensitive(str(uri)) if uri.username: - self.check_not_found(redacted_str, uri.username, uri.description) + check_not_found(redacted_str, uri.username, uri.description) if uri.password: - self.check_not_found(redacted_str, uri.password, uri.description) + check_not_found(redacted_str, uri.password, uri.description) - # should replace multiple secret data with safe string - def test_uri_scm_multiple_replaced(self): - cleartext = '' - find_count = 0 - for uri in TEST_URIS: - cleartext += str(uri) + ' ' - find_count += uri.get_secret_count() +# should replace secret data with safe string, UriCleaner.REPLACE_STR +def test_uri_scm_simple_replaced(): + for uri in TEST_URIS: + redacted_str = UriCleaner.remove_sensitive(str(uri)) + check_found(redacted_str, UriCleaner.REPLACE_STR, uri.get_secret_count()) - for uri in TEST_URIS: - cleartext += str(uri) + '\n' - find_count += uri.get_secret_count() +# should redact multiple uris in text +def test_uri_scm_multiple(): + cleartext = '' + for uri in TEST_URIS: + cleartext += str(uri) + ' ' + for uri in TEST_URIS: + cleartext += str(uri) + '\n' - redacted_str = UriCleaner.remove_sensitive(cleartext) - self.check_found(redacted_str, UriCleaner.REPLACE_STR, find_count) + redacted_str = UriCleaner.remove_sensitive(str(uri)) + if uri.username: + check_not_found(redacted_str, uri.username, uri.description) + if uri.password: + check_not_found(redacted_str, uri.password, uri.description) - # should redact and replace multiple secret data within a complex cleartext blob - def test_uri_scm_cleartext_redact_and_replace(self): - for test_data in TEST_CLEARTEXT: - uri = test_data['uri'] - redacted_str = UriCleaner.remove_sensitive(test_data['text']) - self.check_not_found(redacted_str, uri.username, uri.description) - self.check_not_found(redacted_str, uri.password, uri.description) - # Ensure the host didn't get redacted - self.check_found(redacted_str, uri.host, test_data['host_occurrences'], uri.description) +# should replace multiple secret data with safe string +def test_uri_scm_multiple_replaced(): + cleartext = '' + find_count = 0 + for uri in TEST_URIS: + cleartext += str(uri) + ' ' + find_count += uri.get_secret_count() + for uri in TEST_URIS: + cleartext += str(uri) + '\n' + find_count += uri.get_secret_count() + + redacted_str = UriCleaner.remove_sensitive(cleartext) + check_found(redacted_str, UriCleaner.REPLACE_STR, find_count) + +# should redact and replace multiple secret data within a complex cleartext blob +def test_uri_scm_cleartext_redact_and_replace(): + for test_data in TEST_CLEARTEXT: + uri = test_data['uri'] + redacted_str = UriCleaner.remove_sensitive(test_data['text']) + check_not_found(redacted_str, uri.username, uri.description) + check_not_found(redacted_str, uri.password, uri.description) + # Ensure the host didn't get redacted + check_found(redacted_str, uri.host, test_data['host_occurrences'], uri.description)