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

Side by Side Diff: build/android/pylib/test_package_apk.py

Issue 10973004: Clean up fifo logcat watcher (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « build/android/pylib/android_commands.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 5
6 import os 6 import os
7 import re
8 import sys
9
10 import cmd_helper
11 import constants
12 import logging
13 import pexpect 7 import pexpect
14 import shlex 8 import shlex
15 import shutil 9 import sys
16 import tempfile 10 import tempfile
11 import time
12
13 import android_commands
14 import constants
17 from test_package import TestPackage 15 from test_package import TestPackage
18 import time
19 16
20 17
21 class TestPackageApk(TestPackage): 18 class TestPackageApk(TestPackage):
22 """A helper class for running APK-based native tests. 19 """A helper class for running APK-based native tests.
23 20
24 Args: 21 Args:
25 adb: ADB interface the tests are using. 22 adb: ADB interface the tests are using.
26 device: Device to run the tests. 23 device: Device to run the tests.
27 test_suite: A specific test suite to run, empty to run all. 24 test_suite: A specific test suite to run, empty to run all.
28 timeout: Timeout for each test. 25 timeout: Timeout for each test.
(...skipping 26 matching lines...) Expand all
55 def _GetFifo(self): 52 def _GetFifo(self):
56 # The test.fifo path is determined by: 53 # The test.fifo path is determined by:
57 # testing/android/java/src/org/chromium/native_test/ 54 # testing/android/java/src/org/chromium/native_test/
58 # ChromeNativeTestActivity.java and 55 # ChromeNativeTestActivity.java and
59 # testing/android/native_test_launcher.cc 56 # testing/android/native_test_launcher.cc
60 return '/data/data/org.chromium.native_test/files/test.fifo' 57 return '/data/data/org.chromium.native_test/files/test.fifo'
61 58
62 def _ClearFifo(self): 59 def _ClearFifo(self):
63 self.adb.RunShellCommand('rm -f ' + self._GetFifo()) 60 self.adb.RunShellCommand('rm -f ' + self._GetFifo())
64 61
65 def _WatchFifo(self, timeout): 62 def _WatchFifo(self, timeout, logfile=None):
66 for i in range(5): 63 for i in range(5):
67 if self.adb.FileExistsOnDevice(self._GetFifo()): 64 if self.adb.FileExistsOnDevice(self._GetFifo()):
68 print 'Fifo created...' 65 print 'Fifo created...'
69 break 66 break
70 time.sleep(i) 67 time.sleep(i)
71 else: 68 else:
72 raise Exception('Unable to find fifo on device %s ' % self._GetFifo()) 69 raise Exception('Unable to find fifo on device %s ' % self._GetFifo())
73 args = shlex.split(self.adb.Adb()._target_arg) 70 args = shlex.split(self.adb.Adb()._target_arg)
74 args += ['shell', 'cat', self._GetFifo()] 71 args += ['shell', 'cat', self._GetFifo()]
75 return pexpect.spawn('adb', args, timeout=timeout, logfile=sys.stdout) 72 return pexpect.spawn('adb', args, timeout=timeout, logfile=logfile)
76 73
77 def GetAllTests(self): 74 def GetAllTests(self):
78 """Returns a list of all tests available in the test suite.""" 75 """Returns a list of all tests available in the test suite."""
79 self._CreateTestRunnerScript('--gtest_list_tests') 76 self._CreateTestRunnerScript('--gtest_list_tests')
80 try: 77 try:
81 self.tool.SetupEnvironment() 78 self.tool.SetupEnvironment()
82 # Clear and start monitoring logcat. 79 # Clear and start monitoring logcat.
83 self._ClearFifo() 80 self._ClearFifo()
84 self.adb.RunShellCommand( 81 self.adb.RunShellCommand(
85 'am start -n ' 82 'am start -n '
86 'org.chromium.native_test/' 83 'org.chromium.native_test/'
87 'org.chromium.native_test.ChromeNativeTestActivity') 84 'org.chromium.native_test.ChromeNativeTestActivity')
88 # Wait for native test to complete. 85 # Wait for native test to complete.
89 p = self._WatchFifo(timeout=30 * self.tool.GetTimeoutScale()) 86 p = self._WatchFifo(timeout=30 * self.tool.GetTimeoutScale())
90 p.expect("<<ScopedMainEntryLogger") 87 p.expect("<<ScopedMainEntryLogger")
91 p.close() 88 p.close()
92 finally: 89 finally:
93 self.tool.CleanUpEnvironment() 90 self.tool.CleanUpEnvironment()
94 # We need to strip the trailing newline. 91 # We need to strip the trailing newline.
95 content = [line.rstrip() for line in p.before.splitlines()] 92 content = [line.rstrip() for line in p.before.splitlines()]
96 ret = self._ParseGTestListTests(content) 93 ret = self._ParseGTestListTests(content)
97 return ret 94 return ret
98 95
99 def CreateTestRunnerScript(self, gtest_filter, test_arguments): 96 def CreateTestRunnerScript(self, gtest_filter, test_arguments):
100 self._CreateTestRunnerScript('--gtest_filter=%s %s' % (gtest_filter, 97 self._CreateTestRunnerScript('--gtest_filter=%s %s' % (gtest_filter,
101 test_arguments)) 98 test_arguments))
102 99
103 def RunTestsAndListResults(self): 100 def RunTestsAndListResults(self):
104 try: 101 try:
105 self.tool.SetupEnvironment() 102 self.tool.SetupEnvironment()
106 self._ClearFifo() 103 self._ClearFifo()
107 self.adb.RunShellCommand( 104 self.adb.RunShellCommand(
108 'am start -n ' 105 'am start -n '
109 'org.chromium.native_test/' 106 'org.chromium.native_test/'
110 'org.chromium.native_test.ChromeNativeTestActivity') 107 'org.chromium.native_test.ChromeNativeTestActivity')
111 finally: 108 finally:
112 self.tool.CleanUpEnvironment() 109 self.tool.CleanUpEnvironment()
113 return self._WatchTestOutput(self._WatchFifo(timeout=10)) 110 logfile = android_commands.NewLineNormalizer(sys.stdout)
111 return self._WatchTestOutput(self._WatchFifo(timeout=10, logfile=logfile))
114 112
115 def StripAndCopyExecutable(self): 113 def StripAndCopyExecutable(self):
116 # Always uninstall the previous one (by activity name); we don't 114 # Always uninstall the previous one (by activity name); we don't
117 # know what was embedded in it. 115 # know what was embedded in it.
118 self.adb.ManagedInstall(self.test_suite_full, False, 116 self.adb.ManagedInstall(self.test_suite_full, False,
119 package_name='org.chromium.native_test') 117 package_name='org.chromium.native_test')
120 118
121 def _GetTestSuiteBaseName(self): 119 def _GetTestSuiteBaseName(self):
122 """Returns the base name of the test suite.""" 120 """Returns the base name of the test suite."""
123 # APK test suite names end with '-debug.apk' 121 # APK test suite names end with '-debug.apk'
124 return os.path.basename(self.test_suite).rsplit('-debug', 1)[0] 122 return os.path.basename(self.test_suite).rsplit('-debug', 1)[0]
OLDNEW
« no previous file with comments | « build/android/pylib/android_commands.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698