Home | Trees | Indices | Help |
---|
|
1 # Elisa - Home multimedia server 2 # Copyright (C) 2006-2008 Fluendo Embedded S.L. (www.fluendo.com). 3 # All rights reserved. 4 # 5 # This file is available under one of two license agreements. 6 # 7 # This file is licensed under the GPL version 3. 8 # See "LICENSE.GPL" in the root of this distribution including a special 9 # exception to use Elisa with Fluendo's plugins. 10 # 11 # The GPL part of Elisa is also available under a commercial licensing 12 # agreement from Fluendo. 13 # See "LICENSE.Elisa" in the root directory of this distribution package 14 # for details on that license. 15 16 from twisted.trial import unittest 17 from elisa.core.tests.elisa_test_case import ElisaTestCase 18 from elisa.core import plugin_registry 19 from elisa.core import config 20 from elisa.core import plugin 21 from elisa.core.component import Component, UnMetDependency 22 from elisa.base_components.activity import Activity 23 import inspect, os, platform 24 import tempfile, shutil 25 from twisted.internet import defer 2628 name = 'some_activity'29 3537 name = 'test' 38 components = { 39 'some_activity': {'path': SomeActivity}, 40 'deferred_initialize_activity': {'path': DeferredInitializeActivity} 41 }4244 name = 'foo'4547 name = 'missing_deps' 48 plugin_dependencies = ['unexistent_plugin'] 49 components = {'missing_deps_component': 50 {'path': 'fake:MissingDepsComponent', 51 'component_dependencies': ['unexistent_plugin:component']}, 52 'missing_external_deps_component': 53 {'path': 'fake:MissingDepsComponent', 54 'external_dependencies': ['fjezivfihahfue']} 55 }56 57 SOME_PLUGIN="""\ 58 from elisa.core import plugin 59 from elisa.base_components import activity 60 61 class SomeActivity(activity.Activity): 62 name = 'some_activity' 63 64 class SomePlugin(plugin.Plugin): 65 name = 'test' 66 components = {'some_activity':{'path':SomeActivity}} 67 """ 68 69 FOO_PLUGIN="""\ 70 from elisa.core import plugin 71 72 class FooPlugin(plugin.Plugin): 73 name = 'foo' 74 """ 7577 78 82 86 8720389 """ Check plugin classes registering/unregistering works 90 """ 91 manager = plugin_registry.PluginRegistry(config.Config('empty.conf')) 92 93 self.assertEquals(manager.plugins, {}) 94 self.assertEquals(manager.plugin_classes, {}) 95 96 manager.register_plugin(SomePlugin) 97 self.assertEquals(manager.plugin_classes, {'test': SomePlugin}) 98 99 manager.unregister_plugin(SomePlugin) 100 self.assertEquals(manager.plugin_classes, {})101103 """ Check the plugins declared in the config are loaded 104 """ 105 106 if platform.system() == 'Windows': 107 raise unittest.SkipTest("Does not works under windows, need investigation") 108 109 conf = config.Config('empty.conf') 110 os.environ['ELISA_PLUGIN_PATH'] = self._plugins_dir 111 section = {'plugins':['test', 'foo']} 112 conf.set_section('plugin_registry', section) 113 114 init = os.path.join(self._plugins_dir, '__init__.py') 115 open(init,'w').close() 116 117 118 # write plugins code to files 119 f = open(os.path.join(self._plugins_dir, 'foo.py'),'w') 120 f.write(FOO_PLUGIN) 121 f.close() 122 123 f = open(os.path.join(self._plugins_dir, 'some.py'),'w') 124 f.write(SOME_PLUGIN) 125 f.close() 126 127 manager = plugin_registry.PluginRegistry(conf) 128 129 # load plugins from files 130 manager.load_plugins() 131 132 self.assertEquals(manager.plugins, {}) 133 plugins = manager.plugin_classes.keys() 134 self.failUnless('test' in plugins) 135 self.failUnless('foo' in plugins) 136 137 test_plugin = manager.plugin_classes['test'] 138 foo_plugin = manager.plugin_classes['foo'] 139 self.assertEquals(test_plugin.__name__, 'SomePlugin') 140 self.assertEquals(foo_plugin.__name__, 'FooPlugin')141143 """ Check Plugin instances are lazily referenced by the manager 144 """ 145 conf = config.Config('empty.conf') 146 manager = plugin_registry.PluginRegistry(conf) 147 manager.register_plugin(SomePlugin) 148 149 plugin1 = manager.get_plugin_with_name('test') 150 plugin2 = manager.get_plugin_with_name('test') 151 152 self.failUnless(isinstance(plugin1, SomePlugin)) 153 self.failUnless(plugin1 == plugin2)154156 """ Test several error cases of plugin instantiation. 157 """ 158 conf = config.Config('empty.conf') 159 manager = plugin_registry.PluginRegistry(conf) 160 161 manager.register_plugin(MissingDepsPlugin) 162 plugin = manager.get_plugin_with_name('missing_deps') 163 164 self.failUnless(isinstance(plugin, MissingDepsPlugin)) 165 166 self.failUnlessRaises(UnMetDependency, 167 manager.check_interplugin_dependencies, plugin) 168 169 self.failUnlessRaises(UnMetDependency, 170 manager.check_intercomponent_dependencies, 171 plugin, 'missing_deps_component')172174 """ Check Components are correctly instantiated by the manager 175 """ 176 conf = config.Config('empty.conf') 177 conf.set_option('activities', ['test:some_activity',], 178 'plugin_registry') 179 manager = plugin_registry.PluginRegistry(conf) 180 manager.register_plugin(SomePlugin) 181 182 activity = manager.create_component('test:some_activity') 183 self.failUnless(isinstance(activity, Activity)) 184 self.failUnless(isinstance(activity, SomeActivity))185187 """Check components that return a deferred from Component.initialize() 188 """ 189 conf = config.Config('empty.conf') 190 conf.set_option('activities', ['test:deferred_initialize_activity',], 191 'plugin_registry') 192 manager = plugin_registry.PluginRegistry(conf) 193 manager.register_plugin(SomePlugin) 194 195 def create_component_done(activity): 196 self.failUnless(isinstance(activity, Activity)) 197 self.failUnless(isinstance(activity, DeferredInitializeActivity))198 199 dfr = manager.create_component('test:deferred_initialize_activity') 200 dfr.addCallback(create_component_done) 201 202 return dfr205 conf = config.Config('empty.conf') 206 manager = plugin_registry.PluginRegistry(conf) 207 208 manager.register_plugin(MissingDepsPlugin) 209 210 self.failUnlessRaises(UnMetDependency, 211 manager.create_component, 212 'missing_deps:missing_external_deps_component')213215 """ Check the manager can create multiple instance of the same component 216 """ 217 conf_activities = ['test:some_activity:1', 218 'test:some_activity:2'] 219 conf = config.Config('empty.conf') 220 conf.set_option('activities', conf_activities, 221 'plugin_registry') 222 manager = plugin_registry.PluginRegistry(conf) 223 manager.register_plugin(SomePlugin) 224 225 activities = [] 226 index = 1 227 for activity_path in conf_activities: 228 component = manager.create_component(activity_path) 229 self.assertEqual(component.id, index) 230 self.failUnless(isinstance(component, Activity)) 231 self.failUnless(isinstance(component, SomeActivity)) 232 index += 1 233 activities.append(component) 234 235 self.assertEqual(len(activities), 2)236238 """ 239 """ 240 conf = config.Config('empty.conf') 241 conf.set_option('activities', ['test:some_activity:1', 242 'test:some_activity:2', 243 ], 244 'plugin_registry') 245 manager = plugin_registry.PluginRegistry(conf) 246 manager.register_plugin(SomePlugin) 247 248 act = manager.create_component('test:some_activity') 249 self.failUnless(act) 250 self.failUnless(isinstance(act, Activity)) 251 self.failUnless(isinstance(act, SomeActivity))252254 """ 255 """ 256 conf = config.Config('empty.conf') 257 conf.set_option('activities', ['test:some_activity:1', 258 'test:some_activity:2', 259 ], 260 'plugin_registry') 261 manager = plugin_registry.PluginRegistry(conf) 262 manager.register_plugin(SomePlugin) 263 264 class App: 265 pass266 267 app = App() 268 app.plugin_registry = manager 269 270 from elisa.core import common 271 common.set_application(app) 272 273 c = plugin_registry.get_component_class('test:some_activity') 274 self.failUnless(c) 275 self.failUnless(issubclass(c, Activity)) 276 self.assertEqual(c, SomeActivity) 277 278280 """ 281 """ 282 conf = config.Config('empty.conf') 283 conf.set_option('activities', ['test:some_activity:1', 284 'test:some_activity:2', 285 ], 286 'plugin_registry') 287 manager = plugin_registry.PluginRegistry(conf) 288 289 self.assertEqual((), manager._split_component_path('Invalid')) 290 self.assertEqual(('A', 'B', 0, 'A:B'), manager._split_component_path('A:B')) 291 self.assertEqual(('A', 'B', 1, 'A:B:1'), manager._split_component_path('A:B:1')) 292 self.assertEqual((), manager._split_component_path('A:B:c'))293
Home | Trees | Indices | Help |
---|
Generated by Epydoc 3.0beta1 on Wed Jan 16 19:10:23 2008 | http://epydoc.sourceforge.net |