def test_load_plugin_with_inappropriate_class_name(self): """Negative test load_extension. Check plugin that contains incorrect MuranoPL class name won't be loaded. """ name_map = {} ext = mock.MagicMock(name='ext') ext.entry_point.name = 'murano-pl-class' test_obj = extensions_loader.PluginLoader() test_obj.load_extension(ext, name_map) # No packages are loaded self.assertEqual(0, len(test_obj.packages))
def test_load_extension(self, ext): """Test PluginLoader.load_extension. Check that stevedore plugin loading creates instance of PackageDefinition class, new class are added to that package and name mapping between class and plugin are updated. """ ext.entry_point.dist.project_name = 'plugin1' ext.entry_point.name = 'Test' name_map = {} test_obj = extensions_loader.PluginLoader('test.namespace') test_obj.load_extension(ext, name_map) self.assertEqual(1, len(test_obj.packages)) loaded_pkg = list(test_obj.packages.values())[0] self.assertIsInstance(loaded_pkg, extensions_loader.PackageDefinition) self.assertEqual('Test', list(loaded_pkg.classes.keys())[0]) result = {'Test': list(test_obj.packages.keys())} self.assertEqual(result, name_map)
def test_cleanup_duplicates(self): """Test PluginLoader.cleanup_duplicates. Check loading two plugins with same 'Test1' classes inside initiates removing of all duplicated classes. """ name_map = {} ext1 = mock.MagicMock(name='ext1') ext1.entry_point.name = 'Test1' ext2 = mock.MagicMock(name='ext2') ext2.entry_point.name = 'Test1' test_obj = extensions_loader.PluginLoader() test_obj.load_extension(ext1, name_map) test_obj.load_extension(ext2, name_map) dist1 = ext1.entry_point.dist dist2 = ext2.entry_point.dist self.assertEqual(1, len(test_obj.packages[str(dist1)].classes)) self.assertEqual(1, len(test_obj.packages[str(dist2)].classes)) test_obj.cleanup_duplicates(name_map) self.assertEqual(0, len(test_obj.packages[str(dist1)].classes)) self.assertEqual(0, len(test_obj.packages[str(dist2)].classes))
def get_plugin_loader(): global PLUGIN_LOADER if PLUGIN_LOADER is None: PLUGIN_LOADER = extensions_loader.PluginLoader() return PLUGIN_LOADER