Skip to content
Snippets Groups Projects
Commit 37593403 authored by Xavier Claessens's avatar Xavier Claessens Committed by Sjoerd Simons
Browse files

tracker: wait for tumbler to be done

Summary:
This fixes a race where thumbnails doesn't exist yet
when we are asserting that their filename exists.

Differential Revision: https://phabricator.apertis.org/D482
parent dddfedb6
No related branches found
No related tags found
No related merge requests found
......@@ -30,10 +30,60 @@ class TrackerTest(unittest.TestCase):
self.indexer = TrackerIndexer()
self.indexer.copy_medias(self.homedir)
# Monitor thumbnail creation to know when it's done. The DBus API
# doesn't have a method to query the initial state but we can be
# reasonably sure it's not thumbnailing anything at this point.
self.tumbler_queue = []
self.tumbler = Gio.DBusProxy.new_for_bus_sync(
Gio.BusType.SESSION,
Gio.DBusProxyFlags.DO_NOT_LOAD_PROPERTIES,
None,
'org.freedesktop.thumbnails.Thumbnailer1',
'/org/freedesktop/thumbnails/Thumbnailer1',
'org.freedesktop.thumbnails.Thumbnailer1',
None)
self.tumbler.connect('g-signal', self.tumbler_signal_cb)
# Spy on unicast signals that weren't meant for us, because
# the Thumbnailer API uses those, and we want to use them to
# determine when it has finished. GDBus doesn't have
# high-level API for this sort of nonsense so we do it the hard way.
match_rule = ("type=signal,"
"sender='org.freedesktop.thumbnails.Thumbnailer1',"
"eavesdrop=true")
conn = self.tumbler.get_connection()
conn.call_sync('org.freedesktop.DBus',
'/org/freedesktop/DBus',
'org.freedesktop.DBus',
'AddMatch',
GLib.Variant('(s)', (match_rule,)),
None, Gio.DBusCallFlags.NONE, -1, None)
def tearDown(self):
# Keep everything in place for further manual checks
pass
def tumbler_signal_cb(self, proxy, sender_name, signal_name, parameters):
print('TrackerTest: Received tumbler signal:', signal_name)
if signal_name == 'Started':
child = parameters.get_child_value(0)
self.tumbler_queue.append(child.get_uint32())
elif signal_name == 'Finished':
child = parameters.get_child_value(0)
self.tumbler_queue.remove(child.get_uint32())
elif signal_name == 'Error':
child = parameters.get_child_value(1)
uris = child.get_strv()
child = parameters.get_child_value(3)
msg = child.get_string()
raise Exception("Error creating thumbnail for %s: %s" %
', '.join(uris), msg)
def tumbler_get_supported_cb(self, source, result):
self.tumbler.call_finish(result)
self.loop.quit()
def tracker_config_tests(self):
print("TrackerTest: config tests")
settings = Gio.Settings.new("org.freedesktop.Tracker.Miner.Files")
......@@ -87,6 +137,20 @@ class TrackerTest(unittest.TestCase):
def thumbnail_tests(self):
print("TrackerTest: thumbnail tests")
# Drain the DBus queue to make sure we received all signals
self.tumbler.call('GetSupported',
GLib.Variant.new_tuple(),
Gio.DBusCallFlags.NONE,
-1,
None,
self.tumbler_get_supported_cb)
self.loop.run()
context = self.loop.get_context()
while len(self.tumbler_queue) >= 0:
context.iteration(False)
self.assert_has_thumbnail('Documents/lorem_presentation.odp')
self.assert_has_thumbnail('Documents/lorem_spreadsheet.ods')
self.assert_has_thumbnail('Documents/more_lorem_ipsum.odt')
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment