validate: launcher: Let the use debug on test fail
authorThibault Saunier <tsaunier@gnome.org>
Wed, 26 Mar 2014 18:37:44 +0000 (19:37 +0100)
committerThibault Saunier <tsaunier@gnome.org>
Wed, 26 Mar 2014 19:08:43 +0000 (20:08 +0100)
When a test timeouts, let the user know about the subprocess etc,
and let him possibly connect gdb to it.

validate/tools/launcher/baseclasses.py
validate/tools/launcher/main.py

index 413bd8afb60ab5f2cd76374fc0a664a5266e4726..d78a2b8ca7abbe18f56db3252429b03e48238df4 100644 (file)
@@ -94,6 +94,13 @@ class Test(Loggable):
     def set_result(self, result, message="", error=""):
         self.debug("Setting result: %s (message: %s, error: %s", result,
                    message, error)
+        if result is Result.TIMEOUT and self.options.debug is True:
+            pname = subprocess.check_output(("readlink -e /proc/%s/exe"
+                                             % self.process.pid).split(' ')).replace('\n', '')
+            raw_input("%sTimeout happened you can attach gdb doing: $gdb %s %d%s\n"
+                      "Press enter to continue" %(Colors.FAIL, pname, self.process.pid,
+                                                   Colors.ENDC))
+
         self.result = result
         self.message = message
         self.error_str = error
@@ -140,11 +147,11 @@ class Test(Loggable):
             if val is Result.NOT_RUN:
                 # The get_current_value logic is not implemented... dumb timeout
                 if time.time() - last_change_ts > self.timeout:
-                    self.result = Result.TIMEOUT
+                    self.set_result(Result.TIMEOUT)
                     break
                 continue
             elif val is Result.FAILED:
-                self.result = Result.FAILED
+                self.set_result(Result.FAILED)
                 break
             elif val is Result.KNOWN_ERROR:
                 break
@@ -155,10 +162,10 @@ class Test(Loggable):
                 delta = time.time() - last_change_ts
                 self.debug("%s: Same value for %d/%d seconds" % (self, delta, self.timeout))
                 if delta > self.timeout:
-                    self.result = Result.TIMEOUT
+                    self.set_result(Result.TIMEOUT)
                     break
             elif self.hard_timeout and time.time() - start_ts > self.hard_timeout:
-                self.result = Result.TIMEOUT
+                self.set_result(Result.TIMEOUT)
                 break
             else:
                 last_change_ts = time.time()
@@ -260,7 +267,7 @@ class GstValidateTest(Test):
         if self.result == Result.TIMEOUT:
             self.set_result(Result.TIMEOUT, "Application timed out", "timeout")
         elif self.process.returncode == 0:
-            self.result = Result.PASSED
+            self.set_result(Result.PASSED)
         else:
             if self.process.returncode == 139:
                 # FIXME Reimplement something like that if needed
@@ -632,3 +639,4 @@ class ScenarioManager(object):
             self.all_scenarios.append(Scenario(section,
                                                config.items(section)))
 
+        return [scenario for scenario in self.all_scenarios if scenario.name == name][0]
index 5ae31b44139c7a2ef3878e531326234119bc16e0..ea08c143f800fe4707472d5c3e8b6ff93f651cd3 100644 (file)
@@ -34,11 +34,10 @@ DEFAULT_GST_QA_ASSETS_REPO = "git://people.freedesktop.org/~tsaunier/gst-qa-asse
 
 def main():
     parser = OptionParser()
-    # FIXME:
-    #parser.add_option("-g", "--gdb", dest="gdb",
-                      #action="store_true",
-                      #default=False,
-                      #help="Run applications into gdb")
+    parser.add_option("-d", "--debug", dest="debug",
+                      action="store_true",
+                      default=False,
+                      help="Let user debug the process on timeout")
     parser.add_option("-f", "--forever", dest="forever",
                       action="store_true", default=False,
                       help="Keep running tests until one fails")