from stevedore import named import mock def test_named(): em = named.NamedExtensionManager( 'stevedore.test.extension', names=['t1'], invoke_on_load=True, invoke_args=('a',), invoke_kwds={'b': 'B'}, ) actual = em.names() assert actual == ['t1'] def test_enabled_before_load(): # Set up the constructor for the FauxExtension to cause an # AssertionError so the test fails if the class is instantiated, # which should only happen if it is loaded before the name of the # extension is compared against the names that should be loaded by # the manager. init_name = 'stevedore.tests.test_extension.FauxExtension.__init__' with mock.patch(init_name) as m: m.side_effect = AssertionError em = named.NamedExtensionManager( 'stevedore.test.extension', # Look for an extension that does not exist so the # __init__ we mocked should never be invoked. names=['no-such-extension'], invoke_on_load=True, invoke_args=('a',), invoke_kwds={'b': 'B'}, ) actual = em.names() assert actual == [] def test_extensions_listed_in_name_order(): # Since we don't know the "natural" order of the extensions, run # the test both ways: if the sorting is broken, one of them will # fail em = named.NamedExtensionManager( 'stevedore.test.extension', names=['t1', 't2'], name_order=True ) actual = em.names() assert actual == ['t1', 't2'] em = named.NamedExtensionManager( 'stevedore.test.extension', names=['t2', 't1'], name_order=True ) actual = em.names() assert actual == ['t2', 't1']