Source code for dhcpkit.tests.test_registry

"""
Test whether the basic stuff of Registry works as intended
"""
import logging
import unittest
from collections import OrderedDict

import pkg_resources
from dhcpkit.ipv6.options import ClientIdOption, ServerIdOption
from dhcpkit.registry import Registry


[docs]class TestRegistry(Registry): """ A registry that doesn't exist to test with """ entry_point = 'dhcpkit.tests.registry'
[docs]class ElementOccurrenceTestCase(unittest.TestCase):
[docs] def test_registry_loading(self): entry_map = pkg_resources.get_entry_map('dhcpkit') # Steal the distribution from an existing entry dist = entry_map['dhcpkit.ipv6.options']['1'].dist entry_map['dhcpkit.tests.registry'] = { # Test string ID 'one': pkg_resources.EntryPoint.parse('one = dhcpkit.ipv6.options:ClientIdOption', dist=dist), # Test numerical ID '1': pkg_resources.EntryPoint.parse('1 = dhcpkit.ipv6.options:ServerIdOption', dist=dist), } test_registry = TestRegistry() self.assertEqual(len(test_registry), 2) self.assertEqual(test_registry['one'], ClientIdOption) self.assertEqual(test_registry[1], ServerIdOption)
[docs] def test_duplicate_entries(self): entry_map = pkg_resources.get_entry_map('dhcpkit') # Steal the distribution from an existing entry dist = entry_map['dhcpkit.ipv6.options']['1'].dist # Test one ID appearing multiple times (can happen if other packages overwrite our keys) entry_map['dhcpkit.tests.registry'] = OrderedDict() entry_map['dhcpkit.tests.registry']['1'] = pkg_resources.EntryPoint.parse( '1 = dhcpkit.ipv6.options:ClientIdOption', dist=dist) entry_map['dhcpkit.tests.registry']['1 '] = pkg_resources.EntryPoint.parse( '1 = dhcpkit.ipv6.options:ServerIdOption', dist=dist) with self.assertLogs('dhcpkit.registry', logging.WARNING) as cm: test_registry = TestRegistry() self.assertEqual(len(cm.output), 1) self.assertRegex(cm.output[0], '^WARNING:.*:Multiple entry points found for TestRegistry 1') self.assertEqual(len(test_registry), 1) self.assertEqual(test_registry[1], ClientIdOption)
[docs] def test_version_mismatch(self): entry_map = pkg_resources.get_entry_map('dhcpkit') # noinspection PyAbstractClass class DummyProvider(pkg_resources.EmptyProvider): """ A dummy providers that gives a dummy dependency """ def has_metadata(self, name): """ Claim we have requirements """ if name == 'requires.txt': return True def get_metadata_lines(self, name): """ Fake requirements.txt """ if name == 'requires.txt': yield 'dhcpkit > 999.999' # Steal the distribution from an existing entry dist = pkg_resources.Distribution( project_name='dummy', location='/dummy', version='999.999.999', metadata=DummyProvider() ) entry_map['dhcpkit.tests.registry'] = { # Test something that doesn't exist 'bad': pkg_resources.EntryPoint.parse('bad = dhcpkit.tests.does_not_exist:DummyOption', dist=dist), } with self.assertLogs('dhcpkit.registry', logging.WARNING) as cm: test_registry = TestRegistry() self.assertEqual(len(cm.output), 1) self.assertRegex(cm.output[0], '^CRITICAL:.*:Entry point bad .* is not compatible') self.assertEqual(len(test_registry), 0)
[docs] def test_bad_entry(self): entry_map = pkg_resources.get_entry_map('dhcpkit') # Steal the distribution from an existing entry dist = entry_map['dhcpkit.ipv6.options']['1'].dist entry_map['dhcpkit.tests.registry'] = { # Test something that doesn't exist 'bad': pkg_resources.EntryPoint.parse('bad = dhcpkit.tests.does_not_exist:DummyOption', dist=dist), } with self.assertLogs('dhcpkit.registry', logging.WARNING) as cm: test_registry = TestRegistry() self.assertEqual(len(cm.output), 1) self.assertRegex(cm.output[0], '^ERROR:.*:Entry point bad .* could not be loaded') self.assertEqual(len(test_registry), 0)
if __name__ == '__main__': # pragma: no cover unittest.main()