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

Unified Diff: build/android/pylib/test_package_apk.py

Issue 10938014: Android: uses a fifo rather than logcat for the test runner. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Comments Created 8 years, 3 months 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
Index: build/android/pylib/test_package_apk.py
diff --git a/build/android/pylib/test_package_apk.py b/build/android/pylib/test_package_apk.py
index 6716f40c2151f1f418a9986bccb5618ed6296c71..6430f607500c6e2b522dd1eb44255f4578babecc 100644
--- a/build/android/pylib/test_package_apk.py
+++ b/build/android/pylib/test_package_apk.py
@@ -10,9 +10,12 @@ import sys
import cmd_helper
import constants
import logging
+import pexpect
+import shlex
import shutil
import tempfile
from test_package import TestPackage
+import time
class TestPackageApk(TestPackage):
@@ -30,11 +33,6 @@ class TestPackageApk(TestPackage):
dump_debug_info: A debug_info object.
"""
- # The stdout.txt path is determined by:
- # testing/android/java/src/org/chromium/native_test/
- # ChromeNativeTestActivity.java
- APK_STDOUT_FILE = '/sdcard/native_tests/stdout.txt'
-
def __init__(self, adb, device, test_suite, timeout, rebaseline,
performance_test, cleanup_test_files, tool,
dump_debug_info):
@@ -54,28 +52,49 @@ class TestPackageApk(TestPackage):
def _GetGTestReturnCode(self):
return None
+ def _GetFifo(self):
+ # The test.fifo path is determined by:
+ # testing/android/java/src/org/chromium/native_test/
+ # ChromeNativeTestActivity.java and
+ # testing/android/native_test_launcher.cc
+ return os.path.join(self.adb.GetExternalStorage(),
+ 'native_tests', 'test.fifo')
+
+ def _ClearFifo(self):
+ self.adb.RunShellCommand('rm -f ' + self._GetFifo())
+
+ def _WatchFifo(self, timeout):
+ i = 0
+ for i in range(5):
+ if self.adb.FileExistsOnDevice(self._GetFifo()):
+ print 'Fifo created...'
+ break
+ time.sleep(i)
+ else:
+ sys.exit('Unable to find fifo on device %s ' % self._GetFifo())
+ args = shlex.split(self.adb.Adb()._target_arg)
+ args += ['shell', 'cat', self._GetFifo()]
+ return pexpect.spawn('adb', args, timeout=timeout, logfile=sys.stdout)
+
def GetAllTests(self):
"""Returns a list of all tests available in the test suite."""
self._CreateTestRunnerScript('--gtest_list_tests')
try:
self.tool.SetupEnvironment()
# Clear and start monitoring logcat.
- self.adb.StartMonitoringLogcat(clear=True,
- timeout=30 * self.tool.GetTimeoutScale())
+ self._ClearFifo()
self.adb.RunShellCommand(
'am start -n '
'org.chromium.native_test/'
'org.chromium.native_test.ChromeNativeTestActivity')
# Wait for native test to complete.
- self.adb.WaitForLogMatch(re.compile('<<nativeRunTests'), None)
+ p = self._WatchFifo(timeout=30 * self.tool.GetTimeoutScale())
+ p.expect("<<ScopedMainEntryLogger")
+ p.close()
finally:
self.tool.CleanUpEnvironment()
- # Copy stdout.txt and read contents.
- stdout_file = tempfile.NamedTemporaryFile()
- ret = []
- self.adb.Adb().Pull(TestPackageApk.APK_STDOUT_FILE, stdout_file.name)
# We need to strip the trailing newline.
- content = [line.rstrip() for line in open(stdout_file.name)]
+ content = [line.rstrip() for line in p.before.splitlines()]
ret = self._ParseGTestListTests(content)
return ret
@@ -84,16 +103,16 @@ class TestPackageApk(TestPackage):
test_arguments))
def RunTestsAndListResults(self):
- self.adb.StartMonitoringLogcat(clear=True, logfile=sys.stdout)
try:
self.tool.SetupEnvironment()
+ self._ClearFifo()
self.adb.RunShellCommand(
'am start -n '
'org.chromium.native_test/'
'org.chromium.native_test.ChromeNativeTestActivity')
finally:
self.tool.CleanUpEnvironment()
- return self._WatchTestOutput(self.adb.GetMonitoredLogCat())
+ return self._WatchTestOutput(self._WatchFifo(timeout=10))
def StripAndCopyExecutable(self):
# Always uninstall the previous one (by activity name); we don't

Powered by Google App Engine
This is Rietveld 408576698