Package elisa :: Package core :: Package tests :: Module test_media_manager
[hide private]
[frames] | no frames]

Source Code for Module elisa.core.tests.test_media_manager

  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 elisa.core.tests.elisa_test_case import ElisaTestCase 
 17  from elisa.core import plugin 
 18  from elisa.core import media_manager, metadata_manager, media_uri, media_scanner 
 19  from elisa.core import media_db, db_backend 
 20  from elisa.base_components import media_provider, metadata_provider 
 21  from elisa.core.tests.test_metadata_provider import FooMetadataProvider 
 22  import tempfile, shutil, os, tempfile 
 23   
 24  from twisted.internet import defer 
 25   
26 -class FooMediaProvider(media_provider.MediaProvider):
27
29 return {'foo': 0}
30
31 -class AnotherFooMediaProvider(media_provider.MediaProvider):
32
34 return {'foo': 2, 'bar': 0}
35
36 -class FooPlugin(plugin.Plugin):
37 name = 'foo' 38 components = {'foo_media_provider': {'path': FooMediaProvider}}
39
40 -class FooPlugin2(plugin.Plugin):
41 name = 'foo2' 42 components = {'another_foo_media_provider': {'path':AnotherFooMediaProvider}, 43 'foo_metadata_provider': {'path': FooMetadataProvider}}
44
45 -class LFS(plugin.Plugin):
46 name = 'lfs' 47 components = { 48 'local_media': 49 {'path': 'elisa.plugins.base.local_media:LocalMedia'}, 50 'gst_metadata': 51 {'path': 'elisa.plugins.good.gstreamer_plugin.gst_metadata:GstMetadata'} 52 }
53
54 -class TestMediaManager(ElisaTestCase):
55 - def __init__(self, methodName='runTest'):
56 ElisaTestCase.__init__(self, methodName=methodName) 57 self._db_file = os.path.join(tempfile.gettempdir(), 'test.db') 58 try: 59 db = db_backend.DBBackend(db_backend='sqlite', 60 database=self._db_file) 61 except db_backend.DBBackendError, error: 62 self.skip = error
63
64 - def setUp(self):
65 ElisaTestCase.setUp(self) 66 67 from elisa.core.common import application 68 application.plugin_registry.register_plugin(LFS) 69 application.plugin_registry.register_plugin(FooPlugin) 70 application.plugin_registry.register_plugin(FooPlugin2) 71 72 c = application.plugin_registry.create_component 73 74 self._metadata_manager = metadata_manager.MetadataManager() 75 self._metadata_manager.register_component(c('foo2:foo_metadata_provider')) 76 self._metadata_manager.register_component(c('lfs:gst_metadata')) 77 78 self._media_manager = media_manager.MediaManager(self._metadata_manager) 79 80 self._media_manager.register_component(c('foo:foo_media_provider')) 81 self._media_manager.register_component(c('foo2:another_foo_media_provider')) 82 self._media_manager.register_component(c('lfs:local_media')) 83 84 self._media_manager.start() 85 self._media_manager._media_scanner._main_loop_running = True 86 87 88 self._tmp_dir = tempfile.mkdtemp() 89 open(os.path.join(self._tmp_dir, 'test.mp3'), 'w').close() 90 91 self.tmp_uri = media_uri.MediaUri(u'file://%s' % self._tmp_dir)
92
93 - def tearDown(self):
94 self._metadata_manager.stop() 95 self._media_manager.stop() 96 shutil.rmtree(self._tmp_dir) 97 ElisaTestCase.tearDown(self)
98
100 # FIXME: looks like this could be tested through the public API? 101 self.assertEquals(len(self._media_manager._components), 3) 102 for provider in self._media_manager._components: 103 self.failUnless(isinstance(provider, media_provider.MediaProvider)) 104 105 foo_uri = media_uri.MediaUri(u'foo://bar') 106 foo_provider = self._media_manager._get_media_provider(foo_uri) 107 self.failUnless(isinstance(foo_provider, FooMediaProvider)) 108 109 bar_uri = media_uri.MediaUri(u'bar://boo') 110 bar_provider = self._media_manager._get_media_provider(bar_uri) 111 self.failUnless(isinstance(bar_provider, AnotherFooMediaProvider))
112 113
114 - def test_media_db_access(self):
115 self.failUnless(isinstance(self._media_manager.media_db, 116 media_db.MediaDB))
117
118 - def test_get_tags(self):
119 foo_uri = media_uri.MediaUri(u'foo://bar') 120 121 # TODO: test db caching 122 123 dfr = self._media_manager.get_metadata({'uri':foo_uri, 'artist':None, 124 'album': None}) 125 dfr.addCallback(lambda tags: self.assertEquals(tags, {'uri': foo_uri, 126 'artist':'foo', 127 'album': 'bar'})) 128 return dfr
129
130 - def test_add_source(self):
131 def add_source_done(result): 132 self.failUnless(self._media_manager.get_source_for_uri(self.tmp_uri))
133 134 dfr = self._media_manager.add_source(self.tmp_uri) 135 dfr.addCallback(add_source_done) 136 137 return dfr 138
139 - def test_remove_source(self):
140 def add_source_done(result): 141 self.failUnless(self._media_manager.get_source_for_uri(self.tmp_uri)) 142 source = self._media_manager.get_source_for_uri(self.tmp_uri) 143 144 dfr = self._media_manager.remove_source(self.tmp_uri) 145 dfr.addCallback(remove_source_done) 146 147 return dfr
148 149 def remove_source_done(result): 150 source = self._media_manager.get_source_for_uri(self.tmp_uri) 151 self.failIf(source.available) 152 153 dfr = self._media_manager.add_source(self.tmp_uri, ['audio']) 154 dfr.addCallback(add_source_done) 155 156 return dfr 157
158 - def test_update_source(self):
159 def add_source_done(result): 160 dfr = self._media_manager.update_source(self.tmp_uri) 161 dfr.addCallback(update_source_done) 162 163 return dfr
164 165 def update_source_done(result): 166 # ok, test completed 167 return 168 169 dfr = self._media_manager.add_source(self.tmp_uri) 170 dfr.addCallback(add_source_done) 171 172 return dfr 173
174 - def test_get_media(self):
175 def add_source_done(result): 176 source = self._media_manager.get_source_for_uri(self.tmp_uri) 177 self.failUnless(source) 178 179 db = self._media_manager.media_db 180 foo_uri = media_uri.MediaUri(u'file:///tmp/foo.avi') 181 r = db.add_media(foo_uri, 'foo', source, 'video') 182 self.assertEquals(r, True) 183 184 foo_row = self._media_manager.get_media_information(foo_uri) 185 self.assertEquals(foo_row.uri, str(foo_uri))
186 187 dfr = self._media_manager.add_source(self.tmp_uri, ['video']) 188 dfr.addCallback(add_source_done) 189 190 return dfr 191