File: Add-a-2-minutes-timeout-on-xpcshell-tests.patch

package info (click to toggle)
firefox-esr 140.3.1esr-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 4,539,016 kB
  • sloc: cpp: 7,380,478; javascript: 6,388,099; ansic: 3,710,142; python: 1,393,715; xml: 628,165; asm: 426,918; java: 184,025; sh: 65,742; makefile: 19,302; objc: 13,059; perl: 12,912; yacc: 4,583; cs: 3,846; pascal: 3,352; lex: 1,720; ruby: 1,226; exp: 762; php: 436; lisp: 258; awk: 247; sql: 66; sed: 54; csh: 10
file content (47 lines) | stat: -rw-r--r-- 1,908 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
From: Mike Hommey <mh@glandium.org>
Date: Mon, 27 Dec 2010 10:44:28 +0100
Subject: Add a 2 minutes timeout on xpcshell tests

---
 testing/xpcshell/runxpcshelltests.py | 21 ++++++++++++++++++---
 1 file changed, 18 insertions(+), 3 deletions(-)

diff --git a/testing/xpcshell/runxpcshelltests.py b/testing/xpcshell/runxpcshelltests.py
index ed0885e..03d9d04 100755
--- a/testing/xpcshell/runxpcshelltests.py
+++ b/testing/xpcshell/runxpcshelltests.py
@@ -10,6 +10,7 @@ import os
 import platform
 import random
 import re
+import select
 import shlex
 import shutil
 import signal
@@ -922,9 +923,23 @@ class XPCShellTestThread(Thread):
             if self.interactive:
                 self.log.info("%s | Process ID: %d" % (name, self.proc_ident))
 
-            # Communicate returns a tuple of (stdout, stderr), however we always
-            # redirect stderr to stdout, so the second element is ignored.
-            process_output, _ = self.communicate(proc)
+            if self.pStdout == PIPE:
+                process_stdout = ""
+                while True:
+                    (r, w, e) = select.select([proc.stdout], [], [], 120)
+                    if len(r) == 0:
+                        process_stdout += "TEST-UNEXPECTED-FAIL | %s | application timed out after 120 seconds with no output" % (test)
+                        proc.kill()
+                        break
+                    line = proc.stdout.read(1)
+                    if line == "":
+                        break
+                    process_stdout += line
+                proc.wait()
+            else:
+                # Communicate returns a tuple of (stdout, stderr), however we always
+                # redirect stderr to stdout, so the second element is ignored.
+                process_output, _ = self.communicate(proc)
 
             if self.interactive:
                 # Not sure what else to do here...