Files

71 lines
2.1 KiB
Python

"""Tests for stevedore.extension
"""
import mock
import pkg_resources
from stevedore import driver
from stevedore.tests import test_extension
def test_detect_plugins():
em = driver.DriverManager('stevedore.test.extension', 't1')
names = sorted(em.names())
assert names == ['t1']
def test_call():
def invoke(ext, *args, **kwds):
return (ext.name, args, kwds)
em = driver.DriverManager('stevedore.test.extension', 't1')
result = em(invoke, 'a', b='C')
assert result == ('t1', ('a',), {'b': 'C'})
def test_driver_property_not_invoked_on_load():
em = driver.DriverManager('stevedore.test.extension', 't1',
invoke_on_load=False)
d = em.driver
assert d is test_extension.FauxExtension
def test_driver_property_invoked_on_load():
em = driver.DriverManager('stevedore.test.extension', 't1',
invoke_on_load=True)
d = em.driver
assert isinstance(d, test_extension.FauxExtension)
def test_no_drivers():
try:
driver.DriverManager('stevedore.test.extension.none', 't1')
except RuntimeError as err:
assert "No 'stevedore.test.extension.none' driver found" in str(err)
def test_bad_driver():
try:
driver.DriverManager('stevedore.test.extension', 'e2')
except ImportError:
pass
else:
assert False, "No error raised"
def test_multiple_drivers():
# The idea for this test was contributed by clayg:
# https://gist.github.com/clayg/6311348
fep_name = 'stevedore.extension.ExtensionManager._find_entry_points'
with mock.patch(fep_name) as fep:
fep.return_value = [
pkg_resources.EntryPoint.parse('backend = pkg1:driver'),
pkg_resources.EntryPoint.parse('backend = pkg2:driver'),
]
for ep in fep.return_value:
ep.load = lambda *args, **kwds: 'pkg backend'
try:
driver.DriverManager('stevedore.test.multiple_drivers', 'backend')
except RuntimeError as err:
assert "Multiple" in str(err), str(err)
fep.assert_called_with('stevedore.test.multiple_drivers')