import sys
from awscli.testutils import mock, unittest
from awscli import plugin
from botocore import hooks
class FakeModule(object):
def __init__(self):
self.called = False
self.context = None
self.events_seen = []
def awscli_initialize(self, context):
self.called = True
self.context = context
self.context.register(
'before_operation',
(lambda **kwargs: self.events_seen.append(kwargs)))
class TestPlugins(unittest.TestCase):
def setUp(self):
self.fake_module = FakeModule()
sys.modules['__fake_plugin__'] = self.fake_module
def tearDown(self):
del sys.modules['__fake_plugin__']
def test_plugin_register(self):
emitter = plugin.load_plugins({'fake_plugin': '__fake_plugin__'})
self.assertTrue(self.fake_module.called)
self.assertTrue(isinstance(emitter, hooks.HierarchicalEmitter))
self.assertTrue(isinstance(self.fake_module.context,
hooks.HierarchicalEmitter))
def test_event_hooks_can_be_passed_in(self):
hooks = plugin.HierarchicalEmitter()
emitter = plugin.load_plugins({'fake_plugin': '__fake_plugin__'},
event_hooks=hooks)
emitter.emit('before_operation')
self.assertEqual(len(self.fake_module.events_seen), 1)
class TestPluginCanBePackage(unittest.TestCase):
def setUp(self):
self.fake_module = FakeModule()
self.fake_package = mock.Mock()
sys.modules['__fake_plugin__'] = self.fake_package
sys.modules['__fake_plugin__.__fake__'] = self.fake_package
sys.modules['__fake_plugin__.__fake__.bar'] = self.fake_module
def tearDown(self):
del sys.modules['__fake_plugin__.__fake__']
def test_plugin_register(self):
plugin.load_plugins(
{'fake_plugin': '__fake_plugin__.__fake__.bar'})
self.assertTrue(self.fake_module.called)
if __name__ == '__main__':
unittest.main()