Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3305)

Unified Diff: build/android/run_tests.py

Issue 8536051: Add xvfb option for running android tests on a bot. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix condition when not using xvfb Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: build/android/run_tests.py
diff --git a/build/android/run_tests.py b/build/android/run_tests.py
index 353429177df2ea515491acd38e6c43876a3fd8dc..a04dce642c313004b250a6e7891edb54d9f2e9ba 100755
--- a/build/android/run_tests.py
+++ b/build/android/run_tests.py
@@ -50,6 +50,7 @@ failed on device.
import logging
import os
import re
+import subprocess
import sys
import android_commands
@@ -63,6 +64,53 @@ from test_result import BaseTestResult, TestResults
_TEST_SUITES = ['base_unittests', 'sql_unittests', 'ipc_tests']
+
+class Xvfb(object):
+ """Class to start and stop Xvfb if relevant. Nop if not Linux."""
+
+ def __init__(self):
+ self._pid = 0
+
+ def _IsLinux(self):
+ """Return True if on Linux; else False."""
+ return sys.platform.startswith('linux')
+
+ def Start(self):
+ """Start Xvfb and set an appropriate DISPLAY environment. Linux only.
+
+ Copied from tools/code_coverage/coverage_posix.py
+ """
+ if not self._IsLinux():
+ return
+ proc = subprocess.Popen(["Xvfb", ":9", "-screen", "0", "1024x768x24",
+ "-ac"],
+ stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+ self._pid = proc.pid
+ if not self._pid:
+ raise Exception('Could not start Xvfb')
+ os.environ['DISPLAY'] = ":9"
+
+ # Now confirm, giving a chance for it to start if needed.
+ for test in range(10):
+ proc = subprocess.Popen('xdpyinfo >/dev/null', shell=True)
+ pid, retcode = os.waitpid(proc.pid, 0)
+ if retcode == 0:
+ break
+ time.sleep(0.25)
+ if retcode != 0:
+ raise Exception('Could not confirm Xvfb happiness')
+
+ def Stop(self):
+ """Stop Xvfb if needed. Linux only."""
+ if self._pid:
+ try:
+ os.kill(self._pid, signal.SIGKILL)
+ except:
+ pass
+ del os.environ['DISPLAY']
+ self._pid = 0
+
+
def RunTests(device, test_suite, gtest_filter, test_arguments, rebaseline,
timeout, performance_test, cleanup_test_files, tool,
log_dump_name):
@@ -140,6 +188,10 @@ def Dispatch(options):
buildbot_emulator = None
attached_devices = []
+ if options.use_xvfb:
+ xvfb = Xvfb()
+ xvfb.Start()
+
if options.use_emulator:
buildbot_emulator = emulator.Emulator()
buildbot_emulator.Launch()
@@ -159,6 +211,9 @@ def Dispatch(options):
options.log_dump)
if buildbot_emulator:
buildbot_emulator.Shutdown()
+ if options.use_xvfb:
+ xvfb.Stop()
+
return len(test_results.failed)
def ListTestSuites():
@@ -195,6 +250,9 @@ def main(argv):
help='Run tests in a new instance of emulator',
action='store_true',
default=False)
+ option_parser.add_option('-x', '--xvfb', dest='use_xvfb',
+ action='store_true', default=False,
+ help='Use Xvfb around tests (ignored if not Linux)')
options, args = option_parser.parse_args(argv)
if len(args) > 1:
print 'Unknown argument:', args[1:]
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698