OLD | NEW |
(Empty) | |
| 1 #!/usr/bin/env python |
| 2 # Copyright 2015 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. |
| 5 |
| 6 import itertools |
| 7 import os |
| 8 import sys |
| 9 import unittest |
| 10 |
| 11 from pylib import constants |
| 12 from pylib.device import adb_wrapper |
| 13 from pylib.device import decorators |
| 14 from pylib.device import logcat_monitor |
| 15 |
| 16 sys.path.append(os.path.join( |
| 17 constants.DIR_SOURCE_ROOT, 'third_party', 'pymock')) |
| 18 import mock # pylint: disable=F0401 |
| 19 |
| 20 |
| 21 class LogcatMonitorTest(unittest.TestCase): |
| 22 |
| 23 _TEST_THREADTIME_LOGCAT_DATA = [ |
| 24 '01-01 01:02:03.456 7890 0987 V LogcatMonitorTest: ' |
| 25 'verbose logcat monitor test message 1', |
| 26 '01-01 01:02:03.457 8901 1098 D LogcatMonitorTest: ' |
| 27 'debug logcat monitor test message 2', |
| 28 '01-01 01:02:03.458 9012 2109 I LogcatMonitorTest: ' |
| 29 'info logcat monitor test message 3', |
| 30 '01-01 01:02:03.459 0123 3210 W LogcatMonitorTest: ' |
| 31 'warning logcat monitor test message 4', |
| 32 '01-01 01:02:03.460 1234 4321 E LogcatMonitorTest: ' |
| 33 'error logcat monitor test message 5', |
| 34 '01-01 01:02:03.461 2345 5432 F LogcatMonitorTest: ' |
| 35 'fatal logcat monitor test message 6', |
| 36 '01-01 01:02:03.462 3456 6543 D LogcatMonitorTest: ' |
| 37 'ignore me',] |
| 38 |
| 39 def _createTestLog(self, raw_logcat=None): |
| 40 test_adb = adb_wrapper.AdbWrapper('0123456789abcdef') |
| 41 test_adb.Logcat = mock.Mock(return_value=(l for l in raw_logcat)) |
| 42 test_log = logcat_monitor.LogcatMonitor(test_adb, clear=False) |
| 43 return test_log |
| 44 |
| 45 def assertIterEqual(self, expected_iter, actual_iter): |
| 46 for expected, actual in itertools.izip_longest(expected_iter, actual_iter): |
| 47 self.assertIsNotNone( |
| 48 expected, |
| 49 msg='actual has unexpected elements starting with %s' % str(actual)) |
| 50 self.assertIsNotNone( |
| 51 actual, |
| 52 msg='actual is missing elements starting with %s' % str(expected)) |
| 53 self.assertEqual(actual.group('proc_id'), expected[0]) |
| 54 self.assertEqual(actual.group('thread_id'), expected[1]) |
| 55 self.assertEqual(actual.group('log_level'), expected[2]) |
| 56 self.assertEqual(actual.group('component'), expected[3]) |
| 57 self.assertEqual(actual.group('message'), expected[4]) |
| 58 |
| 59 with self.assertRaises(StopIteration): |
| 60 next(actual_iter) |
| 61 with self.assertRaises(StopIteration): |
| 62 next(expected_iter) |
| 63 |
| 64 def testWaitFor_success(self): |
| 65 test_log = self._createTestLog( |
| 66 raw_logcat=type(self)._TEST_THREADTIME_LOGCAT_DATA) |
| 67 actual_match = test_log.WaitFor(r'.*(fatal|error) logcat monitor.*', None) |
| 68 self.assertTrue(actual_match) |
| 69 self.assertEqual( |
| 70 '01-01 01:02:03.460 1234 4321 E LogcatMonitorTest: ' |
| 71 'error logcat monitor test message 5', |
| 72 actual_match.group(0)) |
| 73 self.assertEqual('error', actual_match.group(1)) |
| 74 |
| 75 def testWaitFor_failure(self): |
| 76 test_log = self._createTestLog( |
| 77 raw_logcat=type(self)._TEST_THREADTIME_LOGCAT_DATA) |
| 78 actual_match = test_log.WaitFor( |
| 79 r'.*My Success Regex.*', r'.*(fatal|error) logcat monitor.*') |
| 80 self.assertIsNone(actual_match) |
| 81 |
| 82 def testFindAll_defaults(self): |
| 83 test_log = self._createTestLog( |
| 84 raw_logcat=type(self)._TEST_THREADTIME_LOGCAT_DATA) |
| 85 expected_results = [ |
| 86 ('7890', '0987', 'V', 'LogcatMonitorTest', |
| 87 'verbose logcat monitor test message 1'), |
| 88 ('8901', '1098', 'D', 'LogcatMonitorTest', |
| 89 'debug logcat monitor test message 2'), |
| 90 ('9012', '2109', 'I', 'LogcatMonitorTest', |
| 91 'info logcat monitor test message 3'), |
| 92 ('0123', '3210', 'W', 'LogcatMonitorTest', |
| 93 'warning logcat monitor test message 4'), |
| 94 ('1234', '4321', 'E', 'LogcatMonitorTest', |
| 95 'error logcat monitor test message 5'), |
| 96 ('2345', '5432', 'F', 'LogcatMonitorTest', |
| 97 'fatal logcat monitor test message 6')] |
| 98 actual_results = test_log.FindAll(r'\S* logcat monitor test message \d') |
| 99 self.assertIterEqual(iter(expected_results), actual_results) |
| 100 |
| 101 def testFindAll_defaults_miss(self): |
| 102 test_log = self._createTestLog( |
| 103 raw_logcat=type(self)._TEST_THREADTIME_LOGCAT_DATA) |
| 104 expected_results = [] |
| 105 actual_results = test_log.FindAll(r'\S* nothing should match this \d') |
| 106 self.assertIterEqual(iter(expected_results), actual_results) |
| 107 |
| 108 def testFindAll_filterProcId(self): |
| 109 test_log = self._createTestLog( |
| 110 raw_logcat=type(self)._TEST_THREADTIME_LOGCAT_DATA) |
| 111 actual_results = test_log.FindAll( |
| 112 r'\S* logcat monitor test message \d', proc_id=1234) |
| 113 expected_results = [ |
| 114 ('1234', '4321', 'E', 'LogcatMonitorTest', |
| 115 'error logcat monitor test message 5')] |
| 116 self.assertIterEqual(iter(expected_results), actual_results) |
| 117 |
| 118 def testFindAll_filterThreadId(self): |
| 119 test_log = self._createTestLog( |
| 120 raw_logcat=type(self)._TEST_THREADTIME_LOGCAT_DATA) |
| 121 actual_results = test_log.FindAll( |
| 122 r'\S* logcat monitor test message \d', thread_id=2109) |
| 123 expected_results = [ |
| 124 ('9012', '2109', 'I', 'LogcatMonitorTest', |
| 125 'info logcat monitor test message 3')] |
| 126 self.assertIterEqual(iter(expected_results), actual_results) |
| 127 |
| 128 def testFindAll_filterLogLevel(self): |
| 129 test_log = self._createTestLog( |
| 130 raw_logcat=type(self)._TEST_THREADTIME_LOGCAT_DATA) |
| 131 actual_results = test_log.FindAll( |
| 132 r'\S* logcat monitor test message \d', log_level=r'[DW]') |
| 133 expected_results = [ |
| 134 ('8901', '1098', 'D', 'LogcatMonitorTest', |
| 135 'debug logcat monitor test message 2'), |
| 136 ('0123', '3210', 'W', 'LogcatMonitorTest', |
| 137 'warning logcat monitor test message 4'),] |
| 138 self.assertIterEqual(iter(expected_results), actual_results) |
| 139 |
| 140 def testFindAll_filterComponent(self): |
| 141 test_log = self._createTestLog( |
| 142 raw_logcat=type(self)._TEST_THREADTIME_LOGCAT_DATA) |
| 143 actual_results = test_log.FindAll(r'.*', component='LogcatMonitorTest') |
| 144 expected_results = [ |
| 145 ('7890', '0987', 'V', 'LogcatMonitorTest', |
| 146 'verbose logcat monitor test message 1'), |
| 147 ('8901', '1098', 'D', 'LogcatMonitorTest', |
| 148 'debug logcat monitor test message 2'), |
| 149 ('9012', '2109', 'I', 'LogcatMonitorTest', |
| 150 'info logcat monitor test message 3'), |
| 151 ('0123', '3210', 'W', 'LogcatMonitorTest', |
| 152 'warning logcat monitor test message 4'), |
| 153 ('1234', '4321', 'E', 'LogcatMonitorTest', |
| 154 'error logcat monitor test message 5'), |
| 155 ('2345', '5432', 'F', 'LogcatMonitorTest', |
| 156 'fatal logcat monitor test message 6'), |
| 157 ('3456', '6543', 'D', 'LogcatMonitorTest', |
| 158 'ignore me'),] |
| 159 self.assertIterEqual(iter(expected_results), actual_results) |
| 160 |
| 161 |
| 162 if __name__ == '__main__': |
| 163 unittest.main(verbosity=2) |
| 164 |
OLD | NEW |