diff -r 000000000000 -r 6474c204b198 media/webrtc/trunk/build/android/pylib/test_package_apk.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/media/webrtc/trunk/build/android/pylib/test_package_apk.py Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,121 @@ +# Copyright (c) 2012 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + + +import os +import shlex +import sys +import tempfile +import time + +import android_commands +import constants +from test_package import TestPackage +from pylib import pexpect + +class TestPackageApk(TestPackage): + """A helper class for running APK-based native tests. + + Args: + adb: ADB interface the tests are using. + device: Device to run the tests. + test_suite: A specific test suite to run, empty to run all. + timeout: Timeout for each test. + rebaseline: Whether or not to run tests in isolation and update the filter. + performance_test: Whether or not performance test(s). + cleanup_test_files: Whether or not to cleanup test files on device. + tool: Name of the Valgrind tool. + dump_debug_info: A debug_info object. + """ + + def __init__(self, adb, device, test_suite, timeout, rebaseline, + performance_test, cleanup_test_files, tool, + dump_debug_info): + TestPackage.__init__(self, adb, device, test_suite, timeout, + rebaseline, performance_test, cleanup_test_files, + tool, dump_debug_info) + + def _CreateTestRunnerScript(self, options): + command_line_file = tempfile.NamedTemporaryFile() + # GTest expects argv[0] to be the executable path. + command_line_file.write(self.test_suite_basename + ' ' + options) + command_line_file.flush() + self.adb.PushIfNeeded(command_line_file.name, + constants.TEST_EXECUTABLE_DIR + + '/chrome-native-tests-command-line') + + 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 '/data/data/org.chromium.native_test/files/test.fifo' + + def _ClearFifo(self): + self.adb.RunShellCommand('rm -f ' + self._GetFifo()) + + def _WatchFifo(self, timeout, logfile=None): + for i in range(10): + if self.adb.FileExistsOnDevice(self._GetFifo()): + print 'Fifo created...' + break + time.sleep(i) + else: + raise Exception('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=logfile) + + 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._ClearFifo() + self.adb.RunShellCommand( + 'am start -n ' + 'org.chromium.native_test/' + 'org.chromium.native_test.ChromeNativeTestActivity') + # Wait for native test to complete. + p = self._WatchFifo(timeout=30 * self.tool.GetTimeoutScale()) + p.expect("<