aboutsummaryrefslogtreecommitdiffstats
path: root/tests/unittests/cleaner_tests.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unittests/cleaner_tests.py')
-rw-r--r--tests/unittests/cleaner_tests.py73
1 files changed, 73 insertions, 0 deletions
diff --git a/tests/unittests/cleaner_tests.py b/tests/unittests/cleaner_tests.py
index 9759b38a..8cf34341 100644
--- a/tests/unittests/cleaner_tests.py
+++ b/tests/unittests/cleaner_tests.py
@@ -13,10 +13,12 @@ from sos.cleaner.parsers.ip_parser import SoSIPParser
from sos.cleaner.parsers.mac_parser import SoSMacParser
from sos.cleaner.parsers.hostname_parser import SoSHostnameParser
from sos.cleaner.parsers.keyword_parser import SoSKeywordParser
+from sos.cleaner.parsers.ipv6_parser import SoSIPv6Parser
from sos.cleaner.mappings.ip_map import SoSIPMap
from sos.cleaner.mappings.mac_map import SoSMacMap
from sos.cleaner.mappings.hostname_map import SoSHostnameMap
from sos.cleaner.mappings.keyword_map import SoSKeywordMap
+from sos.cleaner.mappings.ipv6_map import SoSIPv6Map
class CleanerMapTests(unittest.TestCase):
@@ -27,6 +29,7 @@ class CleanerMapTests(unittest.TestCase):
self.host_map = SoSHostnameMap()
self.host_map.load_domains_from_options(['redhat.com'])
self.kw_map = SoSKeywordMap()
+ self.ipv6_map = SoSIPv6Map()
def test_mac_map_obfuscate_valid_v4(self):
_test = self.mac_map.get('12:34:56:78:90:ab')
@@ -96,11 +99,57 @@ class CleanerMapTests(unittest.TestCase):
_test = self.kw_map.get('foobar')
self.assertEqual(_test, 'obfuscatedword0')
+ def test_ipv6_obfuscate_global(self):
+ _net = '2022:1104:abcd::'
+ _ob_net = self.ipv6_map.get(_net)
+ self.assertNotEqual(_net, _ob_net, 'Address was unchanged')
+ self.assertTrue(_ob_net.startswith('534f'), 'Global address does not start with identifier')
+ _host = '2022:1104:abcd::1234'
+ _ob_host = self.ipv6_map.get(_host)
+ self.assertNotEqual(_host, _ob_host, 'Host address was unchanged')
+ self.assertTrue(_host.startswith(_net), 'Host address not in network')
+
+ def test_ipv6_link_local(self):
+ _test = 'fe80::1234'
+ _ob_test = self.ipv6_map.get(_test)
+ self.assertTrue(_ob_test.startswith('fe80'), 'Link-local identifier not maintained')
+ self.assertNotEqual(_test, _ob_test, 'Device address was unchanged')
+
+ def test_ipv6_private(self):
+ _net = 'fd00:abcd::'
+ _host = 'fd00:abcd::1234'
+ _ob_net = self.ipv6_map.get(_net).split('/')[0]
+ _ob_host = self.ipv6_map.get(_host)
+ self.assertTrue(_ob_net.startswith('fd53'), 'Private network does not start with identifier')
+ self.assertTrue(_ob_host.startswith(_ob_net), 'Private address not in same network')
+ self.assertNotEqual(_net, _ob_net, 'Private network was unchanged')
+
+ def test_ipv6_short_network(self):
+ _net = 'ff02::'
+ _ob_net = self.ipv6_map.get(_net)
+ self.assertTrue(_ob_net.startswith(('53', '54')), f'Short network does not start with identifier: {_ob_net}')
+
+ def test_ipv6_consistent_obfuscation(self):
+ _test = '2022:1104:abcd::ef09'
+ _new = self.ipv6_map.get(_test)
+ _second = self.ipv6_map.get(_test)
+ self.assertEqual(_new, _second, "Same address produced two different results")
+
+ def test_ipv6_global_no_collision(self):
+ """Tests that generating more than 256 global network obfuscations does
+ not produce any repeats"""
+ _nets = []
+ for i in range(1, 300):
+ _nets.append(self.ipv6_map.get(f"f{i:03}::abcd").split('::')[0])
+ # if there are any duplicates, then the length of the set will not match
+ self.assertTrue(len(set(_nets)) == len(_nets), "Duplicate global network obfuscations produced")
+ self.assertTrue(_nets[-1].startswith('54'), "First hextet of global network obfuscation over 256 not expected '54'")
class CleanerParserTests(unittest.TestCase):
def setUp(self):
self.ip_parser = SoSIPParser(config={})
+ self.ipv6_parser = SoSIPv6Parser(config={})
self.mac_parser = SoSMacParser(config={})
self.host_parser = SoSHostnameParser(config={},
opt_domains=['foobar.com'])
@@ -193,3 +242,27 @@ class CleanerParserTests(unittest.TestCase):
line = 'this is my foobar test line'
_test = self.kw_parser_none.parse_line(line)[0]
self.assertEqual(line, _test)
+
+ def test_ipv6_parser_strings(self):
+ t1 = 'testing abcd:ef01::1234 as a compressed address'
+ t2 = 'testing abcd:ef01::5678:1234 as a separate address'
+ t3 = 'testing 2607:c540:8c00:3318::34/64 as another address'
+ t4 = 'testing 2007:1234:5678:90ab:0987:6543:21fe:dcba as a full address'
+ t1_test = self.ipv6_parser.parse_line(t1)[0]
+ t2_test = self.ipv6_parser.parse_line(t2)[0]
+ t3_test = self.ipv6_parser.parse_line(t3)[0]
+ t4_test = self.ipv6_parser.parse_line(t4)[0]
+ self.assertNotEqual(t1, t1_test, f"Parser did not match and obfuscate '{t1}'")
+ self.assertNotEqual(t2, t2_test, f"Parser did not match and obfuscate '{t2}'")
+ self.assertNotEqual(t3, t3_test, f"Parser did not match and obfuscate '{t3}'")
+ self.assertNotEqual(t4, t4_test, f"Parser did not match and obfuscate '{t4}'")
+
+ def test_ipv6_no_match_signature(self):
+ modstr = '2D:4F:6E:55:4F:E8:5E:D2:D2:A3:73:62:AB:FD:F9:C5:A5:53:31:93'
+ mod_test = self.ipv6_parser.parse_line(modstr)[0]
+ self.assertEqual(modstr, mod_test, "Parser matched module signature, and should not")
+
+ def test_ipv6_no_match_log_false_positive(self):
+ logln = 'Automatically imported trusted_ca::ca from trusted_ca/ca into production'
+ log_test = self.ipv6_parser.parse_line(logln)[0]
+ self.assertEqual(logln, log_test, "IPv6 parser incorrectly matched a log line of 'trusted_ca::ca'")