summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Thursfield <sam@afuera.me.uk>2016-06-13 22:32:48 +0100
committerSam Thursfield <sam@afuera.me.uk>2016-06-13 22:36:16 +0100
commite434c3691f6b0c301ea0099e66237130fee4eee3 (patch)
tree24d5f09f955c5354e13caa840c804351a3faa140
parentf39098e1729737b4f4e6a49bc8a42e75f01606a7 (diff)
downloadtracker-e434c3691f6b0c301ea0099e66237130fee4eee3.tar.gz
functional-tests: Fix crash in tests with multiple testsuites
For some reason the GLib main loop calls a timeout even after we've removed it, in some cases, leading to errors like this: [tracker-store] ready. test_journal_01 (__main__.JournalReplayTest) ... Traceback (most recent call last): File "/home/shared/gnome/src/tracker/tests/functional-tests/common/utils/helpers.py", line 110, in _process_watch_cb status = self.process.poll () AttributeError: 'NoneType' object has no attribute 'poll' All this does is workaround that problem.
-rw-r--r--tests/functional-tests/common/utils/helpers.py23
1 files changed, 16 insertions, 7 deletions
diff --git a/tests/functional-tests/common/utils/helpers.py b/tests/functional-tests/common/utils/helpers.py
index 381adbddd..a8c42e29a 100644
--- a/tests/functional-tests/common/utils/helpers.py
+++ b/tests/functional-tests/common/utils/helpers.py
@@ -106,15 +106,20 @@ class Helper:
self.loop.quit()
def _process_watch_cb (self):
+ if self.process_watch_timeout == 0:
+ # The GLib seems to call the timeout after we've removed it
+ # sometimes, which causes errors unless we detect it.
+ return False
+
status = self.process.poll ()
if status is None:
- return True
-
- if status == 0 and not self.abort_if_process_exits_with_status_0:
- return True
-
- raise Exception("%s exited with status: %i" % (self.PROCESS_NAME, status))
+ return True # continue
+ elif status == 0 and not self.abort_if_process_exits_with_status_0:
+ return True # continue
+ else:
+ self.process_watch_timeout = 0
+ raise Exception("%s exited with status: %i" % (self.PROCESS_NAME, status))
def _timeout_on_idle_cb (self):
log ("[%s] Timeout waiting... asumming idle." % self.PROCESS_NAME)
@@ -161,8 +166,8 @@ class Helper:
start = time.time()
if self.process.poll() == None:
- # It should step out of this loop when the miner disappear from the bus
GLib.source_remove(self.process_watch_timeout)
+ self.process_watch_timeout = 0
self.process.terminate()
@@ -183,6 +188,10 @@ class Helper:
self.process = None
def kill (self):
+ if options.is_manual_start():
+ log ("kill(): ignoring, because process was started manually.")
+ return
+
self.process.kill ()
# Name owner changed callback should take us out from this loop