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

Unified Diff: build/android/devil/android/logcat_monitor_test.py

Issue 1484253003: [Android] Add record functionality to logcat monitor. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Cleanup Created 5 years 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/devil/android/logcat_monitor_test.py
diff --git a/build/android/devil/android/logcat_monitor_test.py b/build/android/devil/android/logcat_monitor_test.py
index 61985607b399f45cea450c392f8b7596c167ab3f..00e1dd8e199b6aeafd9562032a004bceb4a7aa6e 100755
--- a/build/android/devil/android/logcat_monitor_test.py
+++ b/build/android/devil/android/logcat_monitor_test.py
@@ -5,7 +5,9 @@
# pylint: disable=protected-access
+import contextlib
import itertools
+import threading
import unittest
from devil import devil_env
@@ -16,30 +18,74 @@ with devil_env.SysPath(devil_env.config.LocalPath('pymock')):
import mock # pylint: disable=import-error
-def _CreateTestLog(raw_logcat=None):
+def _CreateTestLog(raw_logcat):
test_adb = adb_wrapper.AdbWrapper('0123456789abcdef')
- test_adb.Logcat = mock.Mock(return_value=(l for l in raw_logcat))
+ test_adb.Logcat = mock.Mock(return_value=raw_logcat)
test_log = logcat_monitor.LogcatMonitor(test_adb, clear=False)
return test_log
+@contextlib.contextmanager
+def _RunWaitForAsync(monitor, success_regex, failure_regex, output):
+ """Helper to let you run WaitFor asyncronously.
+
+ Args:
+ monitor: Logcat monitor to run |WaitFor|.
+ success_regex: success_regex to be passed forward to |WaitFor|.
+ failure_regex: failure_regex to be passed forward to |WaitFor|.
+ output: Return value of |WaitFor| will be stored in output[0].
+ """
+ def wait_for(success_regex, failure_regex, output):
+ output[0] = monitor.WaitFor(success_regex, failure_regex)
+ wait_for_thread = threading.Thread(
+ target=wait_for, args=[success_regex, failure_regex, output])
+ wait_for_thread.start()
+ yield
+ wait_for_thread.join()
+
+def _WaitForHelper(monitor, success_regex, failure_regex, output):
+ """Helper to let you run WaitFor.
+
+ Args:
+ monitor: Logcat monitor to run |WaitFor|.
+ success_regex: success_regex to be passed forward to |WaitFor|.
+ failure_regex: failure_regex to be passed forward to |WaitFor|.
+ output: Return value of |WaitFor| will be stored in output[0].
+ """
+ output[0] = monitor.WaitFor(success_regex, failure_regex)
+
class LogcatMonitorTest(unittest.TestCase):
_TEST_THREADTIME_LOGCAT_DATA = [
- '01-01 01:02:03.456 7890 0987 V LogcatMonitorTest: '
- 'verbose logcat monitor test message 1',
- '01-01 01:02:03.457 8901 1098 D LogcatMonitorTest: '
- 'debug logcat monitor test message 2',
- '01-01 01:02:03.458 9012 2109 I LogcatMonitorTest: '
- 'info logcat monitor test message 3',
- '01-01 01:02:03.459 0123 3210 W LogcatMonitorTest: '
- 'warning logcat monitor test message 4',
- '01-01 01:02:03.460 1234 4321 E LogcatMonitorTest: '
- 'error logcat monitor test message 5',
- '01-01 01:02:03.461 2345 5432 F LogcatMonitorTest: '
- 'fatal logcat monitor test message 6',
- '01-01 01:02:03.462 3456 6543 D LogcatMonitorTest: '
- 'ignore me',]
+ '01-01 00:00:00.000 7890 0987 V LogcatMonitorTest: '
+ 'verbose logcat monitor test message 1\n'
+ '02-01 00:00:00.000 8901 1098 D LogcatMonitorTest: '
+ 'debug logcat monitor test message 2\n'
+ '03-01 00:00:00.000 9012 2109 I LogcatMonitorTest: '
+ 'info logcat monitor test message 3\n'
+ '04-01 00:00:00.000 0123 3210 W LogcatMonitorTest: '
+ 'warning logcat monitor test message 4\n'
+ '05-01 00:00:00.000 1234 4321 E LogcatMonitorTest: '
+ 'error logcat monitor test message 5\n'
+ '06-01 00:00:00.000 3456 6543 D LogcatMonitorTest: '
+ 'ignore me\n']
+ _TEST_THREADTIME_WAITFOR_DATA = [
+ '01-01 00:00:00.000 7890 0987 V LogcatMonitorTest: '
+ 'fatal logcat monitor test message 1\n']
+
+ def setUp(self):
+ self.called_wait_for = False
+
+ def logcat_test_data(self):
+ """Helper function that yields sample logcat output for tests."""
+ for data in self._TEST_THREADTIME_LOGCAT_DATA:
+ yield data
+ while True:
+ if self.called_wait_for:
+ for data in self._TEST_THREADTIME_WAITFOR_DATA:
+ yield data
+ else:
+ yield ''
def assertIterEqual(self, expected_iter, actual_iter):
for expected, actual in itertools.izip_longest(expected_iter, actual_iter):
@@ -60,27 +106,55 @@ class LogcatMonitorTest(unittest.TestCase):
with self.assertRaises(StopIteration):
next(expected_iter)
+ @mock.patch('time.sleep', mock.Mock())
def testWaitFor_success(self):
test_log = _CreateTestLog(
- raw_logcat=type(self)._TEST_THREADTIME_LOGCAT_DATA)
- actual_match = test_log.WaitFor(r'.*(fatal|error) logcat monitor.*', None)
+ raw_logcat=self.logcat_test_data())
+ test_log.Start()
+
+ wait_for_output = [None]
+ wait_for_thread = threading.Thread(
+ target=_WaitForHelper,
+ args=[test_log, r'.*(fatal|error) logcat monitor.*',
+ None, wait_for_output])
+ wait_for_thread.start()
+ # Setting this causes the output returned by |logcat_test_data| to change.
+ self.called_wait_for = True
+ wait_for_thread.join()
+
+ actual_match = wait_for_output[0]
+ test_log.Stop()
self.assertTrue(actual_match)
self.assertEqual(
- '01-01 01:02:03.460 1234 4321 E LogcatMonitorTest: '
- 'error logcat monitor test message 5',
+ '01-01 00:00:00.000 7890 0987 V LogcatMonitorTest: '
+ 'fatal logcat monitor test message 1',
actual_match.group(0))
- self.assertEqual('error', actual_match.group(1))
+ self.assertEqual('fatal', actual_match.group(1))
+ @mock.patch('time.sleep', mock.Mock())
def testWaitFor_failure(self):
test_log = _CreateTestLog(
- raw_logcat=type(self)._TEST_THREADTIME_LOGCAT_DATA)
- actual_match = test_log.WaitFor(
- r'.*My Success Regex.*', r'.*(fatal|error) logcat monitor.*')
+ raw_logcat=self.logcat_test_data())
+ test_log.Start()
+
+ wait_for_output = [None]
+ wait_for_thread = threading.Thread(
+ target=_WaitForHelper,
+ args=[test_log, r'.*My Success Regex.*',
+ r'.*(fatal|error) logcat monitor.*', wait_for_output])
+ wait_for_thread.start()
+ # Setting this causes the output returned by |logcat_test_data| to change.
+ self.called_wait_for = True
+ wait_for_thread.join()
+
+ actual_match = wait_for_output[0]
+ test_log.Stop()
self.assertIsNone(actual_match)
def testFindAll_defaults(self):
test_log = _CreateTestLog(
- raw_logcat=type(self)._TEST_THREADTIME_LOGCAT_DATA)
+ raw_logcat=self.logcat_test_data())
+ test_log.Start()
expected_results = [
('7890', '0987', 'V', 'LogcatMonitorTest',
'verbose logcat monitor test message 1'),
@@ -91,42 +165,48 @@ class LogcatMonitorTest(unittest.TestCase):
('0123', '3210', 'W', 'LogcatMonitorTest',
'warning logcat monitor test message 4'),
('1234', '4321', 'E', 'LogcatMonitorTest',
- 'error logcat monitor test message 5'),
- ('2345', '5432', 'F', 'LogcatMonitorTest',
- 'fatal logcat monitor test message 6')]
+ 'error logcat monitor test message 5')]
actual_results = test_log.FindAll(r'\S* logcat monitor test message \d')
self.assertIterEqual(iter(expected_results), actual_results)
+ test_log.Stop()
def testFindAll_defaults_miss(self):
test_log = _CreateTestLog(
- raw_logcat=type(self)._TEST_THREADTIME_LOGCAT_DATA)
+ raw_logcat=self.logcat_test_data())
+ test_log.Start()
expected_results = []
actual_results = test_log.FindAll(r'\S* nothing should match this \d')
self.assertIterEqual(iter(expected_results), actual_results)
+ test_log.Stop()
def testFindAll_filterProcId(self):
test_log = _CreateTestLog(
- raw_logcat=type(self)._TEST_THREADTIME_LOGCAT_DATA)
+ raw_logcat=self.logcat_test_data())
+ test_log.Start()
actual_results = test_log.FindAll(
r'\S* logcat monitor test message \d', proc_id=1234)
expected_results = [
('1234', '4321', 'E', 'LogcatMonitorTest',
'error logcat monitor test message 5')]
self.assertIterEqual(iter(expected_results), actual_results)
+ test_log.Stop()
def testFindAll_filterThreadId(self):
test_log = _CreateTestLog(
- raw_logcat=type(self)._TEST_THREADTIME_LOGCAT_DATA)
+ raw_logcat=self.logcat_test_data())
+ test_log.Start()
actual_results = test_log.FindAll(
r'\S* logcat monitor test message \d', thread_id=2109)
expected_results = [
('9012', '2109', 'I', 'LogcatMonitorTest',
'info logcat monitor test message 3')]
self.assertIterEqual(iter(expected_results), actual_results)
+ test_log.Stop()
def testFindAll_filterLogLevel(self):
test_log = _CreateTestLog(
- raw_logcat=type(self)._TEST_THREADTIME_LOGCAT_DATA)
+ raw_logcat=self.logcat_test_data())
+ test_log.Start()
actual_results = test_log.FindAll(
r'\S* logcat monitor test message \d', log_level=r'[DW]')
expected_results = [
@@ -135,10 +215,12 @@ class LogcatMonitorTest(unittest.TestCase):
('0123', '3210', 'W', 'LogcatMonitorTest',
'warning logcat monitor test message 4'),]
self.assertIterEqual(iter(expected_results), actual_results)
+ test_log.Stop()
def testFindAll_filterComponent(self):
test_log = _CreateTestLog(
- raw_logcat=type(self)._TEST_THREADTIME_LOGCAT_DATA)
+ raw_logcat=self.logcat_test_data())
+ test_log.Start()
actual_results = test_log.FindAll(r'.*', component='LogcatMonitorTest')
expected_results = [
('7890', '0987', 'V', 'LogcatMonitorTest',
@@ -151,11 +233,10 @@ class LogcatMonitorTest(unittest.TestCase):
'warning logcat monitor test message 4'),
('1234', '4321', 'E', 'LogcatMonitorTest',
'error logcat monitor test message 5'),
- ('2345', '5432', 'F', 'LogcatMonitorTest',
- 'fatal logcat monitor test message 6'),
('3456', '6543', 'D', 'LogcatMonitorTest',
'ignore me'),]
self.assertIterEqual(iter(expected_results), actual_results)
+ test_log.Stop()
if __name__ == '__main__':

Powered by Google App Engine
This is Rietveld 408576698