OLD | NEW |
| 1 #!/usr/bin/env python |
1 # Copyright 2014 The Chromium Authors. All rights reserved. | 2 # Copyright 2014 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 4 # found in the LICENSE file. |
4 | 5 |
5 """ | 6 """ |
6 Unit tests for the contents of device_utils.py (mostly DeviceUtils). | 7 Unit tests for the contents of device_utils.py (mostly DeviceUtils). |
7 """ | 8 """ |
8 | 9 |
9 # pylint: disable=C0321 | 10 # pylint: disable=C0321 |
10 # pylint: disable=W0212 | 11 # pylint: disable=W0212 |
11 # pylint: disable=W0613 | 12 # pylint: disable=W0613 |
12 | 13 |
13 import collections | 14 import collections |
14 import datetime | 15 import datetime |
15 import logging | 16 import logging |
16 import os | 17 import os |
17 import re | 18 import re |
18 import signal | 19 import signal |
19 import sys | 20 import sys |
20 import unittest | 21 import unittest |
21 | 22 |
22 from pylib import android_commands | 23 from pylib import android_commands |
23 from pylib import constants | 24 from pylib import constants |
24 from pylib.device import adb_wrapper | 25 from pylib.device import adb_wrapper |
25 from pylib.device import device_errors | 26 from pylib.device import device_errors |
26 from pylib.device import device_utils | 27 from pylib.device import device_utils |
27 from pylib.device import intent | 28 from pylib.device import intent |
28 | 29 |
| 30 # RunCommand from third_party/android_testrunner/run_command.py is mocked |
| 31 # below, so its path needs to be in sys.path. |
29 sys.path.append(os.path.join( | 32 sys.path.append(os.path.join( |
30 constants.DIR_SOURCE_ROOT, 'third_party', 'android_testrunner')) | 33 constants.DIR_SOURCE_ROOT, 'third_party', 'android_testrunner')) |
31 import run_command as atr_run_command | |
32 | 34 |
33 sys.path.append(os.path.join( | 35 sys.path.append(os.path.join( |
34 constants.DIR_SOURCE_ROOT, 'third_party', 'pymock')) | 36 constants.DIR_SOURCE_ROOT, 'third_party', 'pymock')) |
35 import mock # pylint: disable=F0401 | 37 import mock # pylint: disable=F0401 |
36 | 38 |
37 | 39 |
38 class DeviceUtilsTest(unittest.TestCase): | 40 class DeviceUtilsTest(unittest.TestCase): |
39 | 41 |
40 def testInitWithStr(self): | 42 def testInitWithStr(self): |
41 serial_as_str = str('0123456789abcdef') | 43 serial_as_str = str('0123456789abcdef') |
(...skipping 15 matching lines...) Expand all Loading... |
57 serial = '0fedcba987654321' | 59 serial = '0fedcba987654321' |
58 a = android_commands.AndroidCommands(device=serial) | 60 a = android_commands.AndroidCommands(device=serial) |
59 d = device_utils.DeviceUtils(a) | 61 d = device_utils.DeviceUtils(a) |
60 self.assertEqual(serial, d.old_interface.GetDevice()) | 62 self.assertEqual(serial, d.old_interface.GetDevice()) |
61 | 63 |
62 def testInitWithNone(self): | 64 def testInitWithNone(self): |
63 d = device_utils.DeviceUtils(None) | 65 d = device_utils.DeviceUtils(None) |
64 self.assertIsNone(d.old_interface.GetDevice()) | 66 self.assertIsNone(d.old_interface.GetDevice()) |
65 | 67 |
66 | 68 |
67 # TODO(jbudorick) Split this into separate classes by DeviceUtils function. | 69 class _PatchedFunction(object): |
| 70 def __init__(self, patched=None, mocked=None): |
| 71 self.patched = patched |
| 72 self.mocked = mocked |
| 73 |
| 74 |
68 class DeviceUtilsOldImplTest(unittest.TestCase): | 75 class DeviceUtilsOldImplTest(unittest.TestCase): |
69 | 76 |
70 class AndroidCommandsCalls(object): | 77 class AndroidCommandsCalls(object): |
71 | 78 |
72 def __init__(self, test_case, cmd_ret, comp): | 79 def __init__(self, test_case, cmd_ret, comp): |
73 self._cmds = cmd_ret | 80 self._cmds = cmd_ret |
74 self._comp = comp | 81 self._comp = comp |
| 82 self._run_command = _PatchedFunction() |
75 self._test_case = test_case | 83 self._test_case = test_case |
76 self._total_received = 0 | 84 self._total_received = 0 |
77 | 85 |
78 def __enter__(self): | 86 def __enter__(self): |
79 atr_run_command.RunCommand = mock.Mock() | 87 self._run_command.patched = mock.patch( |
80 atr_run_command.RunCommand.side_effect = lambda c, **kw: self._ret(c) | 88 'run_command.RunCommand', |
| 89 side_effect=lambda c, **kw: self._ret(c)) |
| 90 self._run_command.mocked = self._run_command.patched.__enter__() |
81 | 91 |
82 def _ret(self, actual_cmd): | 92 def _ret(self, actual_cmd): |
83 if sys.exc_info()[0] is None: | 93 if sys.exc_info()[0] is None: |
84 on_failure_fmt = ('\n' | 94 on_failure_fmt = ('\n' |
85 ' received command: %s\n' | 95 ' received command: %s\n' |
86 ' expected command: %s') | 96 ' expected command: %s') |
87 self._test_case.assertGreater( | 97 self._test_case.assertGreater( |
88 len(self._cmds), self._total_received, | 98 len(self._cmds), self._total_received, |
89 msg=on_failure_fmt % (actual_cmd, None)) | 99 msg=on_failure_fmt % (actual_cmd, None)) |
90 expected_cmd, ret = self._cmds[self._total_received] | 100 expected_cmd, ret = self._cmds[self._total_received] |
91 self._total_received += 1 | 101 self._total_received += 1 |
92 self._test_case.assertTrue( | 102 self._test_case.assertTrue( |
93 self._comp(expected_cmd, actual_cmd), | 103 self._comp(expected_cmd, actual_cmd), |
94 msg=on_failure_fmt % (actual_cmd, expected_cmd)) | 104 msg=on_failure_fmt % (actual_cmd, expected_cmd)) |
95 return ret | 105 return ret |
96 return '' | 106 return '' |
97 | 107 |
98 def __exit__(self, exc_type, _exc_val, exc_trace): | 108 def __exit__(self, exc_type, exc_val, exc_tb): |
| 109 self._run_command.patched.__exit__(exc_type, exc_val, exc_tb) |
99 if exc_type is None: | 110 if exc_type is None: |
100 on_failure = "adb commands don't match.\nExpected:%s\nActual:%s" % ( | 111 on_failure = "adb commands don't match.\nExpected:%s\nActual:%s" % ( |
101 ''.join('\n %s' % c for c, _ in self._cmds), | 112 ''.join('\n %s' % c for c, _ in self._cmds), |
102 ''.join('\n %s' % a[0] | 113 ''.join('\n %s' % a[0] |
103 for _, a, kw in atr_run_command.RunCommand.mock_calls)) | 114 for _, a, kw in self._run_command.mocked.mock_calls)) |
104 self._test_case.assertEqual( | 115 self._test_case.assertEqual( |
105 len(self._cmds), len(atr_run_command.RunCommand.mock_calls), | 116 len(self._cmds), len(self._run_command.mocked.mock_calls), |
106 msg=on_failure) | 117 msg=on_failure) |
107 for (expected_cmd, _r), (_n, actual_args, actual_kwargs) in zip( | 118 for (expected_cmd, _r), (_n, actual_args, actual_kwargs) in zip( |
108 self._cmds, atr_run_command.RunCommand.mock_calls): | 119 self._cmds, self._run_command.mocked.mock_calls): |
109 self._test_case.assertEqual(1, len(actual_args), msg=on_failure) | 120 self._test_case.assertEqual(1, len(actual_args), msg=on_failure) |
110 self._test_case.assertTrue(self._comp(expected_cmd, actual_args[0]), | 121 self._test_case.assertTrue(self._comp(expected_cmd, actual_args[0]), |
111 msg=on_failure) | 122 msg=on_failure) |
112 self._test_case.assertTrue('timeout_time' in actual_kwargs, | 123 self._test_case.assertTrue('timeout_time' in actual_kwargs, |
113 msg=on_failure) | 124 msg=on_failure) |
114 self._test_case.assertTrue('retry_count' in actual_kwargs, | 125 self._test_case.assertTrue('retry_count' in actual_kwargs, |
115 msg=on_failure) | 126 msg=on_failure) |
116 | 127 |
117 def assertNoAdbCalls(self): | 128 def assertNoAdbCalls(self): |
118 return type(self).AndroidCommandsCalls(self, [], str.__eq__) | 129 return type(self).AndroidCommandsCalls(self, [], str.__eq__) |
119 | 130 |
120 def assertOldImplCalls(self, cmd, ret, comp=str.__eq__): | 131 def assertCalls(self, cmd, ret, comp=str.__eq__): |
121 return type(self).AndroidCommandsCalls(self, [(cmd, ret)], comp) | 132 return type(self).AndroidCommandsCalls(self, [(cmd, ret)], comp) |
122 | 133 |
123 def assertOldImplCallsSequence(self, cmd_ret, comp=str.__eq__): | 134 def assertCallsSequence(self, cmd_ret, comp=str.__eq__): |
124 return type(self).AndroidCommandsCalls(self, cmd_ret, comp) | 135 return type(self).AndroidCommandsCalls(self, cmd_ret, comp) |
125 | 136 |
126 def setUp(self): | 137 def setUp(self): |
127 self.device = device_utils.DeviceUtils( | 138 self.device = device_utils.DeviceUtils( |
128 '0123456789abcdef', default_timeout=1, default_retries=0) | 139 '0123456789abcdef', default_timeout=1, default_retries=0) |
129 | 140 |
| 141 |
| 142 class DeviceUtilsIsOnlineTest(DeviceUtilsOldImplTest): |
| 143 |
130 def testIsOnline_true(self): | 144 def testIsOnline_true(self): |
131 with self.assertOldImplCalls('adb -s 0123456789abcdef get-state', | 145 with self.assertCalls('adb -s 0123456789abcdef get-state', |
132 'device\r\n'): | 146 'device\r\n'): |
133 self.assertTrue(self.device.IsOnline()) | 147 self.assertTrue(self.device.IsOnline()) |
134 | 148 |
135 def testIsOnline_false(self): | 149 def testIsOnline_false(self): |
136 with self.assertOldImplCalls('adb -s 0123456789abcdef get-state', '\r\n'): | 150 with self.assertCalls('adb -s 0123456789abcdef get-state', '\r\n'): |
137 self.assertFalse(self.device.IsOnline()) | 151 self.assertFalse(self.device.IsOnline()) |
138 | 152 |
| 153 |
| 154 class DeviceUtilsHasRootTest(DeviceUtilsOldImplTest): |
| 155 |
139 def testHasRoot_true(self): | 156 def testHasRoot_true(self): |
140 with self.assertOldImplCalls("adb -s 0123456789abcdef shell 'ls /root'", | 157 with self.assertCalls("adb -s 0123456789abcdef shell 'ls /root'", |
141 'foo\r\n'): | 158 'foo\r\n'): |
142 self.assertTrue(self.device.HasRoot()) | 159 self.assertTrue(self.device.HasRoot()) |
143 | 160 |
144 def testHasRoot_false(self): | 161 def testHasRoot_false(self): |
145 with self.assertOldImplCalls("adb -s 0123456789abcdef shell 'ls /root'", | 162 with self.assertCalls("adb -s 0123456789abcdef shell 'ls /root'", |
146 'Permission denied\r\n'): | 163 'Permission denied\r\n'): |
147 self.assertFalse(self.device.HasRoot()) | 164 self.assertFalse(self.device.HasRoot()) |
148 | 165 |
| 166 |
| 167 class DeviceUtilsEnableRootTest(DeviceUtilsOldImplTest): |
| 168 |
149 def testEnableRoot_succeeds(self): | 169 def testEnableRoot_succeeds(self): |
150 with self.assertOldImplCallsSequence([ | 170 with self.assertCallsSequence([ |
151 ('adb -s 0123456789abcdef shell getprop ro.build.type', | 171 ('adb -s 0123456789abcdef shell getprop ro.build.type', |
152 'userdebug\r\n'), | 172 'userdebug\r\n'), |
153 ('adb -s 0123456789abcdef root', 'restarting adbd as root\r\n'), | 173 ('adb -s 0123456789abcdef root', 'restarting adbd as root\r\n'), |
154 ('adb -s 0123456789abcdef wait-for-device', ''), | 174 ('adb -s 0123456789abcdef wait-for-device', ''), |
155 ('adb -s 0123456789abcdef wait-for-device', '')]): | 175 ('adb -s 0123456789abcdef wait-for-device', '')]): |
156 self.device.EnableRoot() | 176 self.device.EnableRoot() |
157 | 177 |
158 def testEnableRoot_userBuild(self): | 178 def testEnableRoot_userBuild(self): |
159 with self.assertOldImplCallsSequence([ | 179 with self.assertCallsSequence([ |
160 ('adb -s 0123456789abcdef shell getprop ro.build.type', 'user\r\n')]): | 180 ('adb -s 0123456789abcdef shell getprop ro.build.type', 'user\r\n')]): |
161 with self.assertRaises(device_errors.CommandFailedError): | 181 with self.assertRaises(device_errors.CommandFailedError): |
162 self.device.EnableRoot() | 182 self.device.EnableRoot() |
163 | 183 |
164 def testEnableRoot_rootFails(self): | 184 def testEnableRoot_rootFails(self): |
165 with self.assertOldImplCallsSequence([ | 185 with self.assertCallsSequence([ |
166 ('adb -s 0123456789abcdef shell getprop ro.build.type', | 186 ('adb -s 0123456789abcdef shell getprop ro.build.type', |
167 'userdebug\r\n'), | 187 'userdebug\r\n'), |
168 ('adb -s 0123456789abcdef root', 'no\r\n'), | 188 ('adb -s 0123456789abcdef root', 'no\r\n'), |
169 ('adb -s 0123456789abcdef wait-for-device', '')]): | 189 ('adb -s 0123456789abcdef wait-for-device', '')]): |
170 with self.assertRaises(device_errors.CommandFailedError): | 190 with self.assertRaises(device_errors.CommandFailedError): |
171 self.device.EnableRoot() | 191 self.device.EnableRoot() |
172 | 192 |
| 193 |
| 194 class DeviceUtilsGetExternalStoragePathTest(DeviceUtilsOldImplTest): |
| 195 |
173 def testGetExternalStoragePath_succeeds(self): | 196 def testGetExternalStoragePath_succeeds(self): |
174 fakeStoragePath = '/fake/storage/path' | 197 fakeStoragePath = '/fake/storage/path' |
175 with self.assertOldImplCalls( | 198 with self.assertCalls( |
176 "adb -s 0123456789abcdef shell 'echo $EXTERNAL_STORAGE'", | 199 "adb -s 0123456789abcdef shell 'echo $EXTERNAL_STORAGE'", |
177 '%s\r\n' % fakeStoragePath): | 200 '%s\r\n' % fakeStoragePath): |
178 self.assertEquals(fakeStoragePath, | 201 self.assertEquals(fakeStoragePath, |
179 self.device.GetExternalStoragePath()) | 202 self.device.GetExternalStoragePath()) |
180 | 203 |
181 def testGetExternalStoragePath_fails(self): | 204 def testGetExternalStoragePath_fails(self): |
182 with self.assertOldImplCalls( | 205 with self.assertCalls( |
183 "adb -s 0123456789abcdef shell 'echo $EXTERNAL_STORAGE'", '\r\n'): | 206 "adb -s 0123456789abcdef shell 'echo $EXTERNAL_STORAGE'", '\r\n'): |
184 with self.assertRaises(device_errors.CommandFailedError): | 207 with self.assertRaises(device_errors.CommandFailedError): |
185 self.device.GetExternalStoragePath() | 208 self.device.GetExternalStoragePath() |
186 | 209 |
| 210 |
| 211 class DeviceUtilsWaitUntilFullyBootedTest(DeviceUtilsOldImplTest): |
| 212 |
187 def testWaitUntilFullyBooted_succeedsNoWifi(self): | 213 def testWaitUntilFullyBooted_succeedsNoWifi(self): |
188 with self.assertOldImplCallsSequence([ | 214 with self.assertCallsSequence([ |
189 # AndroidCommands.WaitForSystemBootCompleted | 215 # AndroidCommands.WaitForSystemBootCompleted |
190 ('adb -s 0123456789abcdef wait-for-device', ''), | 216 ('adb -s 0123456789abcdef wait-for-device', ''), |
191 ('adb -s 0123456789abcdef shell getprop sys.boot_completed', '1\r\n'), | 217 ('adb -s 0123456789abcdef shell getprop sys.boot_completed', '1\r\n'), |
192 # AndroidCommands.WaitForDevicePm | 218 # AndroidCommands.WaitForDevicePm |
193 ('adb -s 0123456789abcdef wait-for-device', ''), | 219 ('adb -s 0123456789abcdef wait-for-device', ''), |
194 ('adb -s 0123456789abcdef shell pm path android', | 220 ('adb -s 0123456789abcdef shell pm path android', |
195 'package:this.is.a.test.package'), | 221 'package:this.is.a.test.package'), |
196 # AndroidCommands.WaitForSdCardReady | 222 # AndroidCommands.WaitForSdCardReady |
197 ("adb -s 0123456789abcdef shell 'echo $EXTERNAL_STORAGE'", | 223 ("adb -s 0123456789abcdef shell 'echo $EXTERNAL_STORAGE'", |
198 '/fake/storage/path'), | 224 '/fake/storage/path'), |
199 ("adb -s 0123456789abcdef shell 'ls /fake/storage/path'", | 225 ("adb -s 0123456789abcdef shell 'ls /fake/storage/path'", |
200 'nothing\r\n') | 226 'nothing\r\n') |
201 ]): | 227 ]): |
202 self.device.WaitUntilFullyBooted(wifi=False) | 228 self.device.WaitUntilFullyBooted(wifi=False) |
203 | 229 |
204 def testWaitUntilFullyBooted_succeedsWithWifi(self): | 230 def testWaitUntilFullyBooted_succeedsWithWifi(self): |
205 with self.assertOldImplCallsSequence([ | 231 with self.assertCallsSequence([ |
206 # AndroidCommands.WaitForSystemBootCompleted | 232 # AndroidCommands.WaitForSystemBootCompleted |
207 ('adb -s 0123456789abcdef wait-for-device', ''), | 233 ('adb -s 0123456789abcdef wait-for-device', ''), |
208 ('adb -s 0123456789abcdef shell getprop sys.boot_completed', '1\r\n'), | 234 ('adb -s 0123456789abcdef shell getprop sys.boot_completed', '1\r\n'), |
209 # AndroidCommands.WaitForDevicePm | 235 # AndroidCommands.WaitForDevicePm |
210 ('adb -s 0123456789abcdef wait-for-device', ''), | 236 ('adb -s 0123456789abcdef wait-for-device', ''), |
211 ('adb -s 0123456789abcdef shell pm path android', | 237 ('adb -s 0123456789abcdef shell pm path android', |
212 'package:this.is.a.test.package'), | 238 'package:this.is.a.test.package'), |
213 # AndroidCommands.WaitForSdCardReady | 239 # AndroidCommands.WaitForSdCardReady |
214 ("adb -s 0123456789abcdef shell 'echo $EXTERNAL_STORAGE'", | 240 ("adb -s 0123456789abcdef shell 'echo $EXTERNAL_STORAGE'", |
215 '/fake/storage/path'), | 241 '/fake/storage/path'), |
216 ("adb -s 0123456789abcdef shell 'ls /fake/storage/path'", | 242 ("adb -s 0123456789abcdef shell 'ls /fake/storage/path'", |
217 'nothing\r\n'), | 243 'nothing\r\n'), |
218 # wait for wifi | 244 # wait for wifi |
219 ("adb -s 0123456789abcdef shell 'dumpsys wifi'", 'Wi-Fi is enabled')]): | 245 ("adb -s 0123456789abcdef shell 'dumpsys wifi'", 'Wi-Fi is enabled')]): |
220 self.device.WaitUntilFullyBooted(wifi=True) | 246 self.device.WaitUntilFullyBooted(wifi=True) |
221 | 247 |
222 def testWaitUntilFullyBooted_bootFails(self): | 248 def testWaitUntilFullyBooted_bootFails(self): |
223 with mock.patch('time.sleep'): | 249 with mock.patch('time.sleep'): |
224 with self.assertOldImplCallsSequence([ | 250 with self.assertCallsSequence([ |
225 # AndroidCommands.WaitForSystemBootCompleted | 251 # AndroidCommands.WaitForSystemBootCompleted |
226 ('adb -s 0123456789abcdef wait-for-device', ''), | 252 ('adb -s 0123456789abcdef wait-for-device', ''), |
227 ('adb -s 0123456789abcdef shell getprop sys.boot_completed', | 253 ('adb -s 0123456789abcdef shell getprop sys.boot_completed', |
228 '0\r\n')]): | 254 '0\r\n')]): |
229 with self.assertRaises(device_errors.CommandTimeoutError): | 255 with self.assertRaises(device_errors.CommandTimeoutError): |
230 self.device.WaitUntilFullyBooted(wifi=False) | 256 self.device.WaitUntilFullyBooted(wifi=False) |
231 | 257 |
232 def testWaitUntilFullyBooted_devicePmFails(self): | 258 def testWaitUntilFullyBooted_devicePmFails(self): |
233 with mock.patch('time.sleep'): | 259 with mock.patch('time.sleep'): |
234 with self.assertOldImplCallsSequence([ | 260 with self.assertCallsSequence([ |
235 # AndroidCommands.WaitForSystemBootCompleted | 261 # AndroidCommands.WaitForSystemBootCompleted |
236 ('adb -s 0123456789abcdef wait-for-device', ''), | 262 ('adb -s 0123456789abcdef wait-for-device', ''), |
237 ('adb -s 0123456789abcdef shell getprop sys.boot_completed', | 263 ('adb -s 0123456789abcdef shell getprop sys.boot_completed', |
238 '1\r\n')] | 264 '1\r\n')] |
239 # AndroidCommands.WaitForDevicePm | 265 # AndroidCommands.WaitForDevicePm |
240 + 3 * ([('adb -s 0123456789abcdef wait-for-device', '')] | 266 + 3 * ([('adb -s 0123456789abcdef wait-for-device', '')] |
241 + 24 * [('adb -s 0123456789abcdef shell pm path android', '\r\n')] | 267 + 24 * [('adb -s 0123456789abcdef shell pm path android', '\r\n')] |
242 + [("adb -s 0123456789abcdef shell 'stop'", '\r\n'), | 268 + [("adb -s 0123456789abcdef shell 'stop'", '\r\n'), |
243 ("adb -s 0123456789abcdef shell 'start'", '\r\n')])): | 269 ("adb -s 0123456789abcdef shell 'start'", '\r\n')])): |
244 with self.assertRaises(device_errors.CommandTimeoutError): | 270 with self.assertRaises(device_errors.CommandTimeoutError): |
245 self.device.WaitUntilFullyBooted(wifi=False) | 271 self.device.WaitUntilFullyBooted(wifi=False) |
246 | 272 |
247 def testWaitUntilFullyBooted_sdCardReadyFails_noPath(self): | 273 def testWaitUntilFullyBooted_sdCardReadyFails_noPath(self): |
248 with mock.patch('time.sleep'): | 274 with mock.patch('time.sleep'): |
249 with self.assertOldImplCallsSequence([ | 275 with self.assertCallsSequence([ |
250 # AndroidCommands.WaitForSystemBootCompleted | 276 # AndroidCommands.WaitForSystemBootCompleted |
251 ('adb -s 0123456789abcdef wait-for-device', ''), | 277 ('adb -s 0123456789abcdef wait-for-device', ''), |
252 ('adb -s 0123456789abcdef shell getprop sys.boot_completed', | 278 ('adb -s 0123456789abcdef shell getprop sys.boot_completed', |
253 '1\r\n'), | 279 '1\r\n'), |
254 # AndroidCommands.WaitForDevicePm | 280 # AndroidCommands.WaitForDevicePm |
255 ('adb -s 0123456789abcdef wait-for-device', ''), | 281 ('adb -s 0123456789abcdef wait-for-device', ''), |
256 ('adb -s 0123456789abcdef shell pm path android', | 282 ('adb -s 0123456789abcdef shell pm path android', |
257 'package:this.is.a.test.package'), | 283 'package:this.is.a.test.package'), |
258 ("adb -s 0123456789abcdef shell 'echo $EXTERNAL_STORAGE'", '\r\n')]): | 284 ("adb -s 0123456789abcdef shell 'echo $EXTERNAL_STORAGE'", '\r\n')]): |
259 with self.assertRaises(device_errors.CommandFailedError): | 285 with self.assertRaises(device_errors.CommandFailedError): |
260 self.device.WaitUntilFullyBooted(wifi=False) | 286 self.device.WaitUntilFullyBooted(wifi=False) |
261 | 287 |
262 def testWaitUntilFullyBooted_sdCardReadyFails_emptyPath(self): | 288 def testWaitUntilFullyBooted_sdCardReadyFails_emptyPath(self): |
263 with mock.patch('time.sleep'): | 289 with mock.patch('time.sleep'): |
264 with self.assertOldImplCallsSequence([ | 290 with self.assertCallsSequence([ |
265 # AndroidCommands.WaitForSystemBootCompleted | 291 # AndroidCommands.WaitForSystemBootCompleted |
266 ('adb -s 0123456789abcdef wait-for-device', ''), | 292 ('adb -s 0123456789abcdef wait-for-device', ''), |
267 ('adb -s 0123456789abcdef shell getprop sys.boot_completed', | 293 ('adb -s 0123456789abcdef shell getprop sys.boot_completed', |
268 '1\r\n'), | 294 '1\r\n'), |
269 # AndroidCommands.WaitForDevicePm | 295 # AndroidCommands.WaitForDevicePm |
270 ('adb -s 0123456789abcdef wait-for-device', ''), | 296 ('adb -s 0123456789abcdef wait-for-device', ''), |
271 ('adb -s 0123456789abcdef shell pm path android', | 297 ('adb -s 0123456789abcdef shell pm path android', |
272 'package:this.is.a.test.package'), | 298 'package:this.is.a.test.package'), |
273 ("adb -s 0123456789abcdef shell 'echo $EXTERNAL_STORAGE'", | 299 ("adb -s 0123456789abcdef shell 'echo $EXTERNAL_STORAGE'", |
274 '/fake/storage/path\r\n'), | 300 '/fake/storage/path\r\n'), |
275 ("adb -s 0123456789abcdef shell 'ls /fake/storage/path'", '')]): | 301 ("adb -s 0123456789abcdef shell 'ls /fake/storage/path'", '')]): |
276 with self.assertRaises(device_errors.CommandTimeoutError): | 302 with self.assertRaises(device_errors.CommandTimeoutError): |
277 self.device.WaitUntilFullyBooted(wifi=False) | 303 self.device.WaitUntilFullyBooted(wifi=False) |
278 | 304 |
| 305 |
| 306 class DeviceUtilsRebootTest(DeviceUtilsOldImplTest): |
| 307 |
279 def testReboot_nonBlocking(self): | 308 def testReboot_nonBlocking(self): |
280 with mock.patch('time.sleep'): | 309 with mock.patch('time.sleep'): |
281 with self.assertOldImplCallsSequence([ | 310 with self.assertCallsSequence([ |
282 ('adb -s 0123456789abcdef reboot', ''), | 311 ('adb -s 0123456789abcdef reboot', ''), |
283 ('adb -s 0123456789abcdef get-state', 'unknown\r\n'), | 312 ('adb -s 0123456789abcdef get-state', 'unknown\r\n'), |
284 ('adb -s 0123456789abcdef wait-for-device', ''), | 313 ('adb -s 0123456789abcdef wait-for-device', ''), |
285 ('adb -s 0123456789abcdef shell pm path android', | 314 ('adb -s 0123456789abcdef shell pm path android', |
286 'package:this.is.a.test.package'), | 315 'package:this.is.a.test.package'), |
287 ("adb -s 0123456789abcdef shell 'echo $EXTERNAL_STORAGE'", | 316 ("adb -s 0123456789abcdef shell 'echo $EXTERNAL_STORAGE'", |
288 '/fake/storage/path\r\n'), | 317 '/fake/storage/path\r\n'), |
289 ("adb -s 0123456789abcdef shell 'ls /fake/storage/path'", | 318 ("adb -s 0123456789abcdef shell 'ls /fake/storage/path'", |
290 'nothing\r\n')]): | 319 'nothing\r\n')]): |
291 self.device.Reboot(block=False) | 320 self.device.Reboot(block=False) |
292 | 321 |
293 def testReboot_blocking(self): | 322 def testReboot_blocking(self): |
294 with mock.patch('time.sleep'): | 323 with mock.patch('time.sleep'): |
295 with self.assertOldImplCallsSequence([ | 324 with self.assertCallsSequence([ |
296 ('adb -s 0123456789abcdef reboot', ''), | 325 ('adb -s 0123456789abcdef reboot', ''), |
297 ('adb -s 0123456789abcdef get-state', 'unknown\r\n'), | 326 ('adb -s 0123456789abcdef get-state', 'unknown\r\n'), |
298 ('adb -s 0123456789abcdef wait-for-device', ''), | 327 ('adb -s 0123456789abcdef wait-for-device', ''), |
299 ('adb -s 0123456789abcdef shell pm path android', | 328 ('adb -s 0123456789abcdef shell pm path android', |
300 'package:this.is.a.test.package'), | 329 'package:this.is.a.test.package'), |
301 ("adb -s 0123456789abcdef shell 'echo $EXTERNAL_STORAGE'", | 330 ("adb -s 0123456789abcdef shell 'echo $EXTERNAL_STORAGE'", |
302 '/fake/storage/path\r\n'), | 331 '/fake/storage/path\r\n'), |
303 ("adb -s 0123456789abcdef shell 'ls /fake/storage/path'", | 332 ("adb -s 0123456789abcdef shell 'ls /fake/storage/path'", |
304 'nothing\r\n'), | 333 'nothing\r\n'), |
305 ('adb -s 0123456789abcdef wait-for-device', ''), | 334 ('adb -s 0123456789abcdef wait-for-device', ''), |
306 ('adb -s 0123456789abcdef shell getprop sys.boot_completed', | 335 ('adb -s 0123456789abcdef shell getprop sys.boot_completed', |
307 '1\r\n'), | 336 '1\r\n'), |
308 ('adb -s 0123456789abcdef wait-for-device', ''), | 337 ('adb -s 0123456789abcdef wait-for-device', ''), |
309 ('adb -s 0123456789abcdef shell pm path android', | 338 ('adb -s 0123456789abcdef shell pm path android', |
310 'package:this.is.a.test.package'), | 339 'package:this.is.a.test.package'), |
311 ("adb -s 0123456789abcdef shell 'ls /fake/storage/path'", | 340 ("adb -s 0123456789abcdef shell 'ls /fake/storage/path'", |
312 'nothing\r\n')]): | 341 'nothing\r\n')]): |
313 self.device.Reboot(block=True) | 342 self.device.Reboot(block=True) |
314 | 343 |
| 344 |
| 345 class DeviceUtilsInstallTest(DeviceUtilsOldImplTest): |
| 346 |
315 def testInstall_noPriorInstall(self): | 347 def testInstall_noPriorInstall(self): |
316 with mock.patch('os.path.isfile', return_value=True), ( | 348 with mock.patch('os.path.isfile', return_value=True), ( |
317 mock.patch('pylib.utils.apk_helper.GetPackageName', | 349 mock.patch('pylib.utils.apk_helper.GetPackageName', |
318 return_value='this.is.a.test.package')): | 350 return_value='this.is.a.test.package')): |
319 with self.assertOldImplCallsSequence([ | 351 with self.assertCallsSequence([ |
320 ("adb -s 0123456789abcdef shell 'pm path this.is.a.test.package'", | 352 ("adb -s 0123456789abcdef shell 'pm path this.is.a.test.package'", |
321 ''), | 353 ''), |
322 ("adb -s 0123456789abcdef install /fake/test/app.apk", | 354 ("adb -s 0123456789abcdef install /fake/test/app.apk", |
323 'Success\r\n')]): | 355 'Success\r\n')]): |
324 self.device.Install('/fake/test/app.apk', retries=0) | 356 self.device.Install('/fake/test/app.apk', retries=0) |
325 | 357 |
326 def testInstall_differentPriorInstall(self): | 358 def testInstall_differentPriorInstall(self): |
327 def mockGetFilesChanged(host_path, device_path, ignore_filenames): | 359 def mockGetFilesChanged(host_path, device_path, ignore_filenames): |
328 return [(host_path, device_path)] | 360 return [(host_path, device_path)] |
329 | 361 |
330 # Pylint raises a false positive "operator not preceded by a space" | 362 # Pylint raises a false positive "operator not preceded by a space" |
331 # warning below. | 363 # warning below. |
332 # pylint: disable=C0322 | 364 # pylint: disable=C0322 |
333 with mock.patch('os.path.isfile', return_value=True), ( | 365 with mock.patch('os.path.isfile', return_value=True), ( |
334 mock.patch('os.path.exists', return_value=True)), ( | 366 mock.patch('os.path.exists', return_value=True)), ( |
335 mock.patch('pylib.utils.apk_helper.GetPackageName', | 367 mock.patch('pylib.utils.apk_helper.GetPackageName', |
336 return_value='this.is.a.test.package')), ( | 368 return_value='this.is.a.test.package')), ( |
337 mock.patch('pylib.constants.GetOutDirectory', | 369 mock.patch('pylib.constants.GetOutDirectory', |
338 return_value='/fake/test/out')), ( | 370 return_value='/fake/test/out')), ( |
339 mock.patch('pylib.android_commands.AndroidCommands.GetFilesChanged', | 371 mock.patch('pylib.android_commands.AndroidCommands.GetFilesChanged', |
340 side_effect=mockGetFilesChanged)): | 372 side_effect=mockGetFilesChanged)): |
341 # pylint: enable=C0322 | 373 # pylint: enable=C0322 |
342 with self.assertOldImplCallsSequence([ | 374 with self.assertCallsSequence([ |
343 ("adb -s 0123456789abcdef shell 'pm path this.is.a.test.package'", | 375 ("adb -s 0123456789abcdef shell 'pm path this.is.a.test.package'", |
344 'package:/fake/data/app/this.is.a.test.package.apk\r\n'), | 376 'package:/fake/data/app/this.is.a.test.package.apk\r\n'), |
345 # GetFilesChanged is mocked, so its adb calls are omitted. | 377 # GetFilesChanged is mocked, so its adb calls are omitted. |
346 ('adb -s 0123456789abcdef uninstall this.is.a.test.package', | 378 ('adb -s 0123456789abcdef uninstall this.is.a.test.package', |
347 'Success\r\n'), | 379 'Success\r\n'), |
348 ('adb -s 0123456789abcdef install /fake/test/app.apk', | 380 ('adb -s 0123456789abcdef install /fake/test/app.apk', |
349 'Success\r\n')]): | 381 'Success\r\n')]): |
350 self.device.Install('/fake/test/app.apk', retries=0) | 382 self.device.Install('/fake/test/app.apk', retries=0) |
351 | 383 |
352 def testInstall_differentPriorInstall_reinstall(self): | 384 def testInstall_differentPriorInstall_reinstall(self): |
353 def mockGetFilesChanged(host_path, device_path, ignore_filenames): | 385 def mockGetFilesChanged(host_path, device_path, ignore_filenames): |
354 return [(host_path, device_path)] | 386 return [(host_path, device_path)] |
355 | 387 |
356 # Pylint raises a false positive "operator not preceded by a space" | 388 # Pylint raises a false positive "operator not preceded by a space" |
357 # warning below. | 389 # warning below. |
358 # pylint: disable=C0322 | 390 # pylint: disable=C0322 |
359 with mock.patch('os.path.isfile', return_value=True), ( | 391 with mock.patch('os.path.isfile', return_value=True), ( |
360 mock.patch('pylib.utils.apk_helper.GetPackageName', | 392 mock.patch('pylib.utils.apk_helper.GetPackageName', |
361 return_value='this.is.a.test.package')), ( | 393 return_value='this.is.a.test.package')), ( |
362 mock.patch('pylib.constants.GetOutDirectory', | 394 mock.patch('pylib.constants.GetOutDirectory', |
363 return_value='/fake/test/out')), ( | 395 return_value='/fake/test/out')), ( |
364 mock.patch('pylib.android_commands.AndroidCommands.GetFilesChanged', | 396 mock.patch('pylib.android_commands.AndroidCommands.GetFilesChanged', |
365 side_effect=mockGetFilesChanged)): | 397 side_effect=mockGetFilesChanged)): |
366 # pylint: enable=C0322 | 398 # pylint: enable=C0322 |
367 with self.assertOldImplCallsSequence([ | 399 with self.assertCallsSequence([ |
368 ("adb -s 0123456789abcdef shell 'pm path this.is.a.test.package'", | 400 ("adb -s 0123456789abcdef shell 'pm path this.is.a.test.package'", |
369 'package:/fake/data/app/this.is.a.test.package.apk\r\n'), | 401 'package:/fake/data/app/this.is.a.test.package.apk\r\n'), |
370 # GetFilesChanged is mocked, so its adb calls are omitted. | 402 # GetFilesChanged is mocked, so its adb calls are omitted. |
371 ('adb -s 0123456789abcdef install -r /fake/test/app.apk', | 403 ('adb -s 0123456789abcdef install -r /fake/test/app.apk', |
372 'Success\r\n')]): | 404 'Success\r\n')]): |
373 self.device.Install('/fake/test/app.apk', reinstall=True, retries=0) | 405 self.device.Install('/fake/test/app.apk', reinstall=True, retries=0) |
374 | 406 |
375 def testInstall_identicalPriorInstall(self): | 407 def testInstall_identicalPriorInstall(self): |
376 def mockGetFilesChanged(host_path, device_path, ignore_filenames): | 408 def mockGetFilesChanged(host_path, device_path, ignore_filenames): |
377 return [] | 409 return [] |
378 | 410 |
379 with mock.patch('pylib.utils.apk_helper.GetPackageName', | 411 with mock.patch('pylib.utils.apk_helper.GetPackageName', |
380 return_value='this.is.a.test.package'), ( | 412 return_value='this.is.a.test.package'), ( |
381 mock.patch('pylib.android_commands.AndroidCommands.GetFilesChanged', | 413 mock.patch('pylib.android_commands.AndroidCommands.GetFilesChanged', |
382 side_effect=mockGetFilesChanged)): | 414 side_effect=mockGetFilesChanged)): |
383 with self.assertOldImplCallsSequence([ | 415 with self.assertCallsSequence([ |
384 ("adb -s 0123456789abcdef shell 'pm path this.is.a.test.package'", | 416 ("adb -s 0123456789abcdef shell 'pm path this.is.a.test.package'", |
385 'package:/fake/data/app/this.is.a.test.package.apk\r\n') | 417 'package:/fake/data/app/this.is.a.test.package.apk\r\n') |
386 # GetFilesChanged is mocked, so its adb calls are omitted. | 418 # GetFilesChanged is mocked, so its adb calls are omitted. |
387 ]): | 419 ]): |
388 self.device.Install('/fake/test/app.apk', retries=0) | 420 self.device.Install('/fake/test/app.apk', retries=0) |
389 | 421 |
390 def testInstall_fails(self): | 422 def testInstall_fails(self): |
391 with mock.patch('os.path.isfile', return_value=True), ( | 423 with mock.patch('os.path.isfile', return_value=True), ( |
392 mock.patch('pylib.utils.apk_helper.GetPackageName', | 424 mock.patch('pylib.utils.apk_helper.GetPackageName', |
393 return_value='this.is.a.test.package')): | 425 return_value='this.is.a.test.package')): |
394 with self.assertOldImplCallsSequence([ | 426 with self.assertCallsSequence([ |
395 ("adb -s 0123456789abcdef shell 'pm path this.is.a.test.package'", | 427 ("adb -s 0123456789abcdef shell 'pm path this.is.a.test.package'", |
396 ''), | 428 ''), |
397 ("adb -s 0123456789abcdef install /fake/test/app.apk", | 429 ("adb -s 0123456789abcdef install /fake/test/app.apk", |
398 'Failure\r\n')]): | 430 'Failure\r\n')]): |
399 with self.assertRaises(device_errors.CommandFailedError): | 431 with self.assertRaises(device_errors.CommandFailedError): |
400 self.device.Install('/fake/test/app.apk', retries=0) | 432 self.device.Install('/fake/test/app.apk', retries=0) |
401 | 433 |
| 434 |
| 435 class DeviceUtilsRunShellCommandTest(DeviceUtilsOldImplTest): |
| 436 |
402 def testRunShellCommand_commandAsList(self): | 437 def testRunShellCommand_commandAsList(self): |
403 with self.assertOldImplCalls( | 438 with self.assertCalls( |
404 "adb -s 0123456789abcdef shell 'pm list packages'", | 439 "adb -s 0123456789abcdef shell 'pm list packages'", |
405 'pacakge:android\r\n'): | 440 'pacakge:android\r\n'): |
406 self.device.RunShellCommand(['pm', 'list', 'packages']) | 441 self.device.RunShellCommand(['pm', 'list', 'packages']) |
407 | 442 |
408 def testRunShellCommand_commandAsString(self): | 443 def testRunShellCommand_commandAsString(self): |
409 with self.assertOldImplCalls( | 444 with self.assertCalls( |
410 "adb -s 0123456789abcdef shell 'dumpsys wifi'", | 445 "adb -s 0123456789abcdef shell 'dumpsys wifi'", |
411 'Wi-Fi is enabled\r\n'): | 446 'Wi-Fi is enabled\r\n'): |
412 self.device.RunShellCommand('dumpsys wifi') | 447 self.device.RunShellCommand('dumpsys wifi') |
413 | 448 |
414 def testRunShellCommand_withSu(self): | 449 def testRunShellCommand_withSu(self): |
415 with self.assertOldImplCallsSequence([ | 450 with self.assertCallsSequence([ |
416 ("adb -s 0123456789abcdef shell 'ls /root'", 'Permission denied\r\n'), | 451 ("adb -s 0123456789abcdef shell 'ls /root'", 'Permission denied\r\n'), |
417 ("adb -s 0123456789abcdef shell 'su -c setprop service.adb.root 0'", | 452 ("adb -s 0123456789abcdef shell 'su -c setprop service.adb.root 0'", |
418 '')]): | 453 '')]): |
419 self.device.RunShellCommand('setprop service.adb.root 0', as_root=True) | 454 self.device.RunShellCommand('setprop service.adb.root 0', as_root=True) |
420 | 455 |
421 def testRunShellCommand_withRoot(self): | 456 def testRunShellCommand_withRoot(self): |
422 with self.assertOldImplCallsSequence([ | 457 with self.assertCallsSequence([ |
423 ("adb -s 0123456789abcdef shell 'ls /root'", 'hello\r\nworld\r\n'), | 458 ("adb -s 0123456789abcdef shell 'ls /root'", 'hello\r\nworld\r\n'), |
424 ("adb -s 0123456789abcdef shell 'setprop service.adb.root 0'", '')]): | 459 ("adb -s 0123456789abcdef shell 'setprop service.adb.root 0'", '')]): |
425 self.device.RunShellCommand('setprop service.adb.root 0', as_root=True) | 460 self.device.RunShellCommand('setprop service.adb.root 0', as_root=True) |
426 | 461 |
427 def testRunShellCommand_checkReturn_success(self): | 462 def testRunShellCommand_checkReturn_success(self): |
428 with self.assertOldImplCalls( | 463 with self.assertCalls( |
429 "adb -s 0123456789abcdef shell 'echo $ANDROID_DATA; echo %$?'", | 464 "adb -s 0123456789abcdef shell 'echo $ANDROID_DATA; echo %$?'", |
430 '/data\r\n%0\r\n'): | 465 '/data\r\n%0\r\n'): |
431 self.device.RunShellCommand('echo $ANDROID_DATA', check_return=True) | 466 self.device.RunShellCommand('echo $ANDROID_DATA', check_return=True) |
432 | 467 |
433 def testRunShellCommand_checkReturn_failure(self): | 468 def testRunShellCommand_checkReturn_failure(self): |
434 with self.assertOldImplCalls( | 469 with self.assertCalls( |
435 "adb -s 0123456789abcdef shell 'echo $ANDROID_DATA; echo %$?'", | 470 "adb -s 0123456789abcdef shell 'echo $ANDROID_DATA; echo %$?'", |
436 '\r\n%1\r\n'): | 471 '\r\n%1\r\n'): |
437 with self.assertRaises(device_errors.CommandFailedError): | 472 with self.assertRaises(device_errors.CommandFailedError): |
438 self.device.RunShellCommand('echo $ANDROID_DATA', check_return=True) | 473 self.device.RunShellCommand('echo $ANDROID_DATA', check_return=True) |
439 | 474 |
| 475 |
| 476 class DeviceUtilsKillAllTest(DeviceUtilsOldImplTest): |
| 477 |
440 def testKillAll_noMatchingProcesses(self): | 478 def testKillAll_noMatchingProcesses(self): |
441 with self.assertOldImplCalls( | 479 with self.assertCalls( |
442 "adb -s 0123456789abcdef shell 'ps'", | 480 "adb -s 0123456789abcdef shell 'ps'", |
443 'USER PID PPID VSIZE RSS WCHAN PC NAME\r\n'): | 481 'USER PID PPID VSIZE RSS WCHAN PC NAME\r\n'): |
444 with self.assertRaises(device_errors.CommandFailedError): | 482 with self.assertRaises(device_errors.CommandFailedError): |
445 self.device.KillAll('test_process') | 483 self.device.KillAll('test_process') |
446 | 484 |
447 def testKillAll_nonblocking(self): | 485 def testKillAll_nonblocking(self): |
448 with self.assertOldImplCallsSequence([ | 486 with self.assertCallsSequence([ |
449 ("adb -s 0123456789abcdef shell 'ps'", | 487 ("adb -s 0123456789abcdef shell 'ps'", |
450 'USER PID PPID VSIZE RSS WCHAN PC NAME\r\n' | 488 'USER PID PPID VSIZE RSS WCHAN PC NAME\r\n' |
451 'u0_a1 1234 174 123456 54321 ffffffff 456789ab ' | 489 'u0_a1 1234 174 123456 54321 ffffffff 456789ab ' |
452 'this.is.a.test.process\r\n'), | 490 'this.is.a.test.process\r\n'), |
453 ("adb -s 0123456789abcdef shell 'ps'", | 491 ("adb -s 0123456789abcdef shell 'ps'", |
454 'USER PID PPID VSIZE RSS WCHAN PC NAME\r\n' | 492 'USER PID PPID VSIZE RSS WCHAN PC NAME\r\n' |
455 'u0_a1 1234 174 123456 54321 ffffffff 456789ab ' | 493 'u0_a1 1234 174 123456 54321 ffffffff 456789ab ' |
456 'this.is.a.test.process\r\n'), | 494 'this.is.a.test.process\r\n'), |
457 ("adb -s 0123456789abcdef shell 'kill -9 1234'", '')]): | 495 ("adb -s 0123456789abcdef shell 'kill -9 1234'", '')]): |
458 self.device.KillAll('this.is.a.test.process', blocking=False) | 496 self.device.KillAll('this.is.a.test.process', blocking=False) |
459 | 497 |
460 def testKillAll_blocking(self): | 498 def testKillAll_blocking(self): |
461 with mock.patch('time.sleep'): | 499 with mock.patch('time.sleep'): |
462 with self.assertOldImplCallsSequence([ | 500 with self.assertCallsSequence([ |
463 ("adb -s 0123456789abcdef shell 'ps'", | 501 ("adb -s 0123456789abcdef shell 'ps'", |
464 'USER PID PPID VSIZE RSS WCHAN PC NAME\r\n' | 502 'USER PID PPID VSIZE RSS WCHAN PC NAME\r\n' |
465 'u0_a1 1234 174 123456 54321 ffffffff 456789ab ' | 503 'u0_a1 1234 174 123456 54321 ffffffff 456789ab ' |
466 'this.is.a.test.process\r\n'), | 504 'this.is.a.test.process\r\n'), |
467 ("adb -s 0123456789abcdef shell 'ps'", | 505 ("adb -s 0123456789abcdef shell 'ps'", |
468 'USER PID PPID VSIZE RSS WCHAN PC NAME\r\n' | 506 'USER PID PPID VSIZE RSS WCHAN PC NAME\r\n' |
469 'u0_a1 1234 174 123456 54321 ffffffff 456789ab ' | 507 'u0_a1 1234 174 123456 54321 ffffffff 456789ab ' |
470 'this.is.a.test.process\r\n'), | 508 'this.is.a.test.process\r\n'), |
471 ("adb -s 0123456789abcdef shell 'kill -9 1234'", ''), | 509 ("adb -s 0123456789abcdef shell 'kill -9 1234'", ''), |
472 ("adb -s 0123456789abcdef shell 'ps'", | 510 ("adb -s 0123456789abcdef shell 'ps'", |
473 'USER PID PPID VSIZE RSS WCHAN PC NAME\r\n' | 511 'USER PID PPID VSIZE RSS WCHAN PC NAME\r\n' |
474 'u0_a1 1234 174 123456 54321 ffffffff 456789ab ' | 512 'u0_a1 1234 174 123456 54321 ffffffff 456789ab ' |
475 'this.is.a.test.process\r\n'), | 513 'this.is.a.test.process\r\n'), |
476 ("adb -s 0123456789abcdef shell 'ps'", | 514 ("adb -s 0123456789abcdef shell 'ps'", |
477 'USER PID PPID VSIZE RSS WCHAN PC NAME\r\n')]): | 515 'USER PID PPID VSIZE RSS WCHAN PC NAME\r\n')]): |
478 self.device.KillAll('this.is.a.test.process', blocking=True) | 516 self.device.KillAll('this.is.a.test.process', blocking=True) |
479 | 517 |
480 def testKillAll_root(self): | 518 def testKillAll_root(self): |
481 with self.assertOldImplCallsSequence([ | 519 with self.assertCallsSequence([ |
482 ("adb -s 0123456789abcdef shell 'ps'", | 520 ("adb -s 0123456789abcdef shell 'ps'", |
483 'USER PID PPID VSIZE RSS WCHAN PC NAME\r\n' | 521 'USER PID PPID VSIZE RSS WCHAN PC NAME\r\n' |
484 'u0_a1 1234 174 123456 54321 ffffffff 456789ab ' | 522 'u0_a1 1234 174 123456 54321 ffffffff 456789ab ' |
485 'this.is.a.test.process\r\n'), | 523 'this.is.a.test.process\r\n'), |
486 ("adb -s 0123456789abcdef shell 'ps'", | 524 ("adb -s 0123456789abcdef shell 'ps'", |
487 'USER PID PPID VSIZE RSS WCHAN PC NAME\r\n' | 525 'USER PID PPID VSIZE RSS WCHAN PC NAME\r\n' |
488 'u0_a1 1234 174 123456 54321 ffffffff 456789ab ' | 526 'u0_a1 1234 174 123456 54321 ffffffff 456789ab ' |
489 'this.is.a.test.process\r\n'), | 527 'this.is.a.test.process\r\n'), |
490 ("adb -s 0123456789abcdef shell 'su -c kill -9 1234'", '')]): | 528 ("adb -s 0123456789abcdef shell 'su -c kill -9 1234'", '')]): |
491 self.device.KillAll('this.is.a.test.process', as_root=True) | 529 self.device.KillAll('this.is.a.test.process', as_root=True) |
492 | 530 |
493 def testKillAll_sigterm(self): | 531 def testKillAll_sigterm(self): |
494 with self.assertOldImplCallsSequence([ | 532 with self.assertCallsSequence([ |
495 ("adb -s 0123456789abcdef shell 'ps'", | 533 ("adb -s 0123456789abcdef shell 'ps'", |
496 'USER PID PPID VSIZE RSS WCHAN PC NAME\r\n' | 534 'USER PID PPID VSIZE RSS WCHAN PC NAME\r\n' |
497 'u0_a1 1234 174 123456 54321 ffffffff 456789ab ' | 535 'u0_a1 1234 174 123456 54321 ffffffff 456789ab ' |
498 'this.is.a.test.process\r\n'), | 536 'this.is.a.test.process\r\n'), |
499 ("adb -s 0123456789abcdef shell 'ps'", | 537 ("adb -s 0123456789abcdef shell 'ps'", |
500 'USER PID PPID VSIZE RSS WCHAN PC NAME\r\n' | 538 'USER PID PPID VSIZE RSS WCHAN PC NAME\r\n' |
501 'u0_a1 1234 174 123456 54321 ffffffff 456789ab ' | 539 'u0_a1 1234 174 123456 54321 ffffffff 456789ab ' |
502 'this.is.a.test.process\r\n'), | 540 'this.is.a.test.process\r\n'), |
503 ("adb -s 0123456789abcdef shell 'kill -15 1234'", '')]): | 541 ("adb -s 0123456789abcdef shell 'kill -15 1234'", '')]): |
504 self.device.KillAll('this.is.a.test.process', signum=signal.SIGTERM) | 542 self.device.KillAll('this.is.a.test.process', signum=signal.SIGTERM) |
505 | 543 |
| 544 |
| 545 class DeviceUtilsStartActivityTest(DeviceUtilsOldImplTest): |
| 546 |
506 def testStartActivity_actionOnly(self): | 547 def testStartActivity_actionOnly(self): |
507 test_intent = intent.Intent(action='android.intent.action.VIEW') | 548 test_intent = intent.Intent(action='android.intent.action.VIEW') |
508 with self.assertOldImplCalls( | 549 with self.assertCalls( |
509 "adb -s 0123456789abcdef shell 'am start " | 550 "adb -s 0123456789abcdef shell 'am start " |
510 "-a android.intent.action.VIEW'", | 551 "-a android.intent.action.VIEW'", |
511 'Starting: Intent { act=android.intent.action.VIEW }'): | 552 'Starting: Intent { act=android.intent.action.VIEW }'): |
512 self.device.StartActivity(test_intent) | 553 self.device.StartActivity(test_intent) |
513 | 554 |
514 def testStartActivity_success(self): | 555 def testStartActivity_success(self): |
515 test_intent = intent.Intent(action='android.intent.action.VIEW', | 556 test_intent = intent.Intent(action='android.intent.action.VIEW', |
516 package='this.is.a.test.package', | 557 package='this.is.a.test.package', |
517 activity='.Main') | 558 activity='.Main') |
518 with self.assertOldImplCalls( | 559 with self.assertCalls( |
519 "adb -s 0123456789abcdef shell 'am start " | 560 "adb -s 0123456789abcdef shell 'am start " |
520 "-a android.intent.action.VIEW " | 561 "-a android.intent.action.VIEW " |
521 "-n this.is.a.test.package/.Main'", | 562 "-n this.is.a.test.package/.Main'", |
522 'Starting: Intent { act=android.intent.action.VIEW }'): | 563 'Starting: Intent { act=android.intent.action.VIEW }'): |
523 self.device.StartActivity(test_intent) | 564 self.device.StartActivity(test_intent) |
524 | 565 |
525 def testStartActivity_failure(self): | 566 def testStartActivity_failure(self): |
526 test_intent = intent.Intent(action='android.intent.action.VIEW', | 567 test_intent = intent.Intent(action='android.intent.action.VIEW', |
527 package='this.is.a.test.package', | 568 package='this.is.a.test.package', |
528 activity='.Main') | 569 activity='.Main') |
529 with self.assertOldImplCalls( | 570 with self.assertCalls( |
530 "adb -s 0123456789abcdef shell 'am start " | 571 "adb -s 0123456789abcdef shell 'am start " |
531 "-a android.intent.action.VIEW " | 572 "-a android.intent.action.VIEW " |
532 "-n this.is.a.test.package/.Main'", | 573 "-n this.is.a.test.package/.Main'", |
533 'Error: Failed to start test activity'): | 574 'Error: Failed to start test activity'): |
534 with self.assertRaises(device_errors.CommandFailedError): | 575 with self.assertRaises(device_errors.CommandFailedError): |
535 self.device.StartActivity(test_intent) | 576 self.device.StartActivity(test_intent) |
536 | 577 |
537 def testStartActivity_blocking(self): | 578 def testStartActivity_blocking(self): |
538 test_intent = intent.Intent(action='android.intent.action.VIEW', | 579 test_intent = intent.Intent(action='android.intent.action.VIEW', |
539 package='this.is.a.test.package', | 580 package='this.is.a.test.package', |
540 activity='.Main') | 581 activity='.Main') |
541 with self.assertOldImplCalls( | 582 with self.assertCalls( |
542 "adb -s 0123456789abcdef shell 'am start " | 583 "adb -s 0123456789abcdef shell 'am start " |
543 "-a android.intent.action.VIEW " | 584 "-a android.intent.action.VIEW " |
544 "-W " | 585 "-W " |
545 "-n this.is.a.test.package/.Main'", | 586 "-n this.is.a.test.package/.Main'", |
546 'Starting: Intent { act=android.intent.action.VIEW }'): | 587 'Starting: Intent { act=android.intent.action.VIEW }'): |
547 self.device.StartActivity(test_intent, blocking=True) | 588 self.device.StartActivity(test_intent, blocking=True) |
548 | 589 |
549 def testStartActivity_withCategory(self): | 590 def testStartActivity_withCategory(self): |
550 test_intent = intent.Intent(action='android.intent.action.VIEW', | 591 test_intent = intent.Intent(action='android.intent.action.VIEW', |
551 package='this.is.a.test.package', | 592 package='this.is.a.test.package', |
552 activity='.Main', | 593 activity='.Main', |
553 category='android.intent.category.HOME') | 594 category='android.intent.category.HOME') |
554 with self.assertOldImplCalls( | 595 with self.assertCalls( |
555 "adb -s 0123456789abcdef shell 'am start " | 596 "adb -s 0123456789abcdef shell 'am start " |
556 "-a android.intent.action.VIEW " | 597 "-a android.intent.action.VIEW " |
557 "-c android.intent.category.HOME " | 598 "-c android.intent.category.HOME " |
558 "-n this.is.a.test.package/.Main'", | 599 "-n this.is.a.test.package/.Main'", |
559 'Starting: Intent { act=android.intent.action.VIEW }'): | 600 'Starting: Intent { act=android.intent.action.VIEW }'): |
560 self.device.StartActivity(test_intent) | 601 self.device.StartActivity(test_intent) |
561 | 602 |
562 def testStartActivity_withMultipleCategories(self): | 603 def testStartActivity_withMultipleCategories(self): |
563 # The new implementation will start the activity with all provided | 604 # The new implementation will start the activity with all provided |
564 # categories. The old one only uses the first category. | 605 # categories. The old one only uses the first category. |
565 test_intent = intent.Intent(action='android.intent.action.VIEW', | 606 test_intent = intent.Intent(action='android.intent.action.VIEW', |
566 package='this.is.a.test.package', | 607 package='this.is.a.test.package', |
567 activity='.Main', | 608 activity='.Main', |
568 category=['android.intent.category.HOME', | 609 category=['android.intent.category.HOME', |
569 'android.intent.category.BROWSABLE']) | 610 'android.intent.category.BROWSABLE']) |
570 with self.assertOldImplCalls( | 611 with self.assertCalls( |
571 "adb -s 0123456789abcdef shell 'am start " | 612 "adb -s 0123456789abcdef shell 'am start " |
572 "-a android.intent.action.VIEW " | 613 "-a android.intent.action.VIEW " |
573 "-c android.intent.category.HOME " | 614 "-c android.intent.category.HOME " |
574 "-n this.is.a.test.package/.Main'", | 615 "-n this.is.a.test.package/.Main'", |
575 'Starting: Intent { act=android.intent.action.VIEW }'): | 616 'Starting: Intent { act=android.intent.action.VIEW }'): |
576 self.device.StartActivity(test_intent) | 617 self.device.StartActivity(test_intent) |
577 | 618 |
578 def testStartActivity_withData(self): | 619 def testStartActivity_withData(self): |
579 test_intent = intent.Intent(action='android.intent.action.VIEW', | 620 test_intent = intent.Intent(action='android.intent.action.VIEW', |
580 package='this.is.a.test.package', | 621 package='this.is.a.test.package', |
581 activity='.Main', | 622 activity='.Main', |
582 data='http://www.google.com/') | 623 data='http://www.google.com/') |
583 with self.assertOldImplCalls( | 624 with self.assertCalls( |
584 "adb -s 0123456789abcdef shell 'am start " | 625 "adb -s 0123456789abcdef shell 'am start " |
585 "-a android.intent.action.VIEW " | 626 "-a android.intent.action.VIEW " |
586 "-n this.is.a.test.package/.Main " | 627 "-n this.is.a.test.package/.Main " |
587 "-d \"http://www.google.com/\"'", | 628 "-d \"http://www.google.com/\"'", |
588 'Starting: Intent { act=android.intent.action.VIEW }'): | 629 'Starting: Intent { act=android.intent.action.VIEW }'): |
589 self.device.StartActivity(test_intent) | 630 self.device.StartActivity(test_intent) |
590 | 631 |
591 def testStartActivity_withStringExtra(self): | 632 def testStartActivity_withStringExtra(self): |
592 test_intent = intent.Intent(action='android.intent.action.VIEW', | 633 test_intent = intent.Intent(action='android.intent.action.VIEW', |
593 package='this.is.a.test.package', | 634 package='this.is.a.test.package', |
594 activity='.Main', | 635 activity='.Main', |
595 extras={'foo': 'test'}) | 636 extras={'foo': 'test'}) |
596 with self.assertOldImplCalls( | 637 with self.assertCalls( |
597 "adb -s 0123456789abcdef shell 'am start " | 638 "adb -s 0123456789abcdef shell 'am start " |
598 "-a android.intent.action.VIEW " | 639 "-a android.intent.action.VIEW " |
599 "-n this.is.a.test.package/.Main " | 640 "-n this.is.a.test.package/.Main " |
600 "--es foo test'", | 641 "--es foo test'", |
601 'Starting: Intent { act=android.intent.action.VIEW }'): | 642 'Starting: Intent { act=android.intent.action.VIEW }'): |
602 self.device.StartActivity(test_intent) | 643 self.device.StartActivity(test_intent) |
603 | 644 |
604 def testStartActivity_withBoolExtra(self): | 645 def testStartActivity_withBoolExtra(self): |
605 test_intent = intent.Intent(action='android.intent.action.VIEW', | 646 test_intent = intent.Intent(action='android.intent.action.VIEW', |
606 package='this.is.a.test.package', | 647 package='this.is.a.test.package', |
607 activity='.Main', | 648 activity='.Main', |
608 extras={'foo': True}) | 649 extras={'foo': True}) |
609 with self.assertOldImplCalls( | 650 with self.assertCalls( |
610 "adb -s 0123456789abcdef shell 'am start " | 651 "adb -s 0123456789abcdef shell 'am start " |
611 "-a android.intent.action.VIEW " | 652 "-a android.intent.action.VIEW " |
612 "-n this.is.a.test.package/.Main " | 653 "-n this.is.a.test.package/.Main " |
613 "--ez foo True'", | 654 "--ez foo True'", |
614 'Starting: Intent { act=android.intent.action.VIEW }'): | 655 'Starting: Intent { act=android.intent.action.VIEW }'): |
615 self.device.StartActivity(test_intent) | 656 self.device.StartActivity(test_intent) |
616 | 657 |
617 def testStartActivity_withIntExtra(self): | 658 def testStartActivity_withIntExtra(self): |
618 test_intent = intent.Intent(action='android.intent.action.VIEW', | 659 test_intent = intent.Intent(action='android.intent.action.VIEW', |
619 package='this.is.a.test.package', | 660 package='this.is.a.test.package', |
620 activity='.Main', | 661 activity='.Main', |
621 extras={'foo': 123}) | 662 extras={'foo': 123}) |
622 with self.assertOldImplCalls( | 663 with self.assertCalls( |
623 "adb -s 0123456789abcdef shell 'am start " | 664 "adb -s 0123456789abcdef shell 'am start " |
624 "-a android.intent.action.VIEW " | 665 "-a android.intent.action.VIEW " |
625 "-n this.is.a.test.package/.Main " | 666 "-n this.is.a.test.package/.Main " |
626 "--ei foo 123'", | 667 "--ei foo 123'", |
627 'Starting: Intent { act=android.intent.action.VIEW }'): | 668 'Starting: Intent { act=android.intent.action.VIEW }'): |
628 self.device.StartActivity(test_intent) | 669 self.device.StartActivity(test_intent) |
629 | 670 |
630 def testStartActivity_withTraceFile(self): | 671 def testStartActivity_withTraceFile(self): |
631 test_intent = intent.Intent(action='android.intent.action.VIEW', | 672 test_intent = intent.Intent(action='android.intent.action.VIEW', |
632 package='this.is.a.test.package', | 673 package='this.is.a.test.package', |
633 activity='.Main') | 674 activity='.Main') |
634 with self.assertOldImplCalls( | 675 with self.assertCalls( |
635 "adb -s 0123456789abcdef shell 'am start " | 676 "adb -s 0123456789abcdef shell 'am start " |
636 "-a android.intent.action.VIEW " | 677 "-a android.intent.action.VIEW " |
637 "-n this.is.a.test.package/.Main " | 678 "-n this.is.a.test.package/.Main " |
638 "--start-profiler test_trace_file.out'", | 679 "--start-profiler test_trace_file.out'", |
639 'Starting: Intent { act=android.intent.action.VIEW }'): | 680 'Starting: Intent { act=android.intent.action.VIEW }'): |
640 self.device.StartActivity(test_intent, | 681 self.device.StartActivity(test_intent, |
641 trace_file_name='test_trace_file.out') | 682 trace_file_name='test_trace_file.out') |
642 | 683 |
643 def testStartActivity_withForceStop(self): | 684 def testStartActivity_withForceStop(self): |
644 test_intent = intent.Intent(action='android.intent.action.VIEW', | 685 test_intent = intent.Intent(action='android.intent.action.VIEW', |
645 package='this.is.a.test.package', | 686 package='this.is.a.test.package', |
646 activity='.Main') | 687 activity='.Main') |
647 with self.assertOldImplCalls( | 688 with self.assertCalls( |
648 "adb -s 0123456789abcdef shell 'am start " | 689 "adb -s 0123456789abcdef shell 'am start " |
649 "-a android.intent.action.VIEW " | 690 "-a android.intent.action.VIEW " |
650 "-S " | 691 "-S " |
651 "-n this.is.a.test.package/.Main'", | 692 "-n this.is.a.test.package/.Main'", |
652 'Starting: Intent { act=android.intent.action.VIEW }'): | 693 'Starting: Intent { act=android.intent.action.VIEW }'): |
653 self.device.StartActivity(test_intent, force_stop=True) | 694 self.device.StartActivity(test_intent, force_stop=True) |
654 | 695 |
655 def testStartActivity_withFlags(self): | 696 def testStartActivity_withFlags(self): |
656 test_intent = intent.Intent(action='android.intent.action.VIEW', | 697 test_intent = intent.Intent(action='android.intent.action.VIEW', |
657 package='this.is.a.test.package', | 698 package='this.is.a.test.package', |
658 activity='.Main', | 699 activity='.Main', |
659 flags='0x10000000') | 700 flags='0x10000000') |
660 with self.assertOldImplCalls( | 701 with self.assertCalls( |
661 "adb -s 0123456789abcdef shell 'am start " | 702 "adb -s 0123456789abcdef shell 'am start " |
662 "-a android.intent.action.VIEW " | 703 "-a android.intent.action.VIEW " |
663 "-n this.is.a.test.package/.Main " | 704 "-n this.is.a.test.package/.Main " |
664 "-f 0x10000000'", | 705 "-f 0x10000000'", |
665 'Starting: Intent { act=android.intent.action.VIEW }'): | 706 'Starting: Intent { act=android.intent.action.VIEW }'): |
666 self.device.StartActivity(test_intent) | 707 self.device.StartActivity(test_intent) |
667 | 708 |
| 709 |
| 710 class DeviceUtilsBroadcastIntentTest(DeviceUtilsOldImplTest): |
| 711 |
668 def testBroadcastIntent_noExtras(self): | 712 def testBroadcastIntent_noExtras(self): |
669 test_intent = intent.Intent(action='test.package.with.an.INTENT') | 713 test_intent = intent.Intent(action='test.package.with.an.INTENT') |
670 with self.assertOldImplCalls( | 714 with self.assertCalls( |
671 "adb -s 0123456789abcdef shell 'am broadcast " | 715 "adb -s 0123456789abcdef shell 'am broadcast " |
672 "-a test.package.with.an.INTENT '", | 716 "-a test.package.with.an.INTENT '", |
673 'Broadcasting: Intent { act=test.package.with.an.INTENT } '): | 717 'Broadcasting: Intent { act=test.package.with.an.INTENT } '): |
674 self.device.BroadcastIntent(test_intent) | 718 self.device.BroadcastIntent(test_intent) |
675 | 719 |
676 def testBroadcastIntent_withExtra(self): | 720 def testBroadcastIntent_withExtra(self): |
677 test_intent = intent.Intent(action='test.package.with.an.INTENT', | 721 test_intent = intent.Intent(action='test.package.with.an.INTENT', |
678 extras={'foo': 'bar'}) | 722 extras={'foo': 'bar'}) |
679 with self.assertOldImplCalls( | 723 with self.assertCalls( |
680 "adb -s 0123456789abcdef shell 'am broadcast " | 724 "adb -s 0123456789abcdef shell 'am broadcast " |
681 "-a test.package.with.an.INTENT " | 725 "-a test.package.with.an.INTENT " |
682 "-e foo \"bar\"'", | 726 "-e foo \"bar\"'", |
683 'Broadcasting: Intent { act=test.package.with.an.INTENT } '): | 727 'Broadcasting: Intent { act=test.package.with.an.INTENT } '): |
684 self.device.BroadcastIntent(test_intent) | 728 self.device.BroadcastIntent(test_intent) |
685 | 729 |
686 def testBroadcastIntent_withExtra_noValue(self): | 730 def testBroadcastIntent_withExtra_noValue(self): |
687 test_intent = intent.Intent(action='test.package.with.an.INTENT', | 731 test_intent = intent.Intent(action='test.package.with.an.INTENT', |
688 extras={'foo': None}) | 732 extras={'foo': None}) |
689 with self.assertOldImplCalls( | 733 with self.assertCalls( |
690 "adb -s 0123456789abcdef shell 'am broadcast " | 734 "adb -s 0123456789abcdef shell 'am broadcast " |
691 "-a test.package.with.an.INTENT " | 735 "-a test.package.with.an.INTENT " |
692 "-e foo'", | 736 "-e foo'", |
693 'Broadcasting: Intent { act=test.package.with.an.INTENT } '): | 737 'Broadcasting: Intent { act=test.package.with.an.INTENT } '): |
694 self.device.BroadcastIntent(test_intent) | 738 self.device.BroadcastIntent(test_intent) |
695 | 739 |
| 740 |
| 741 class DeviceUtilsGoHomeTest(DeviceUtilsOldImplTest): |
| 742 |
696 def testGoHome(self): | 743 def testGoHome(self): |
697 with self.assertOldImplCalls( | 744 with self.assertCalls( |
698 "adb -s 0123456789abcdef shell 'am start " | 745 "adb -s 0123456789abcdef shell 'am start " |
699 "-W " | 746 "-W " |
700 "-a android.intent.action.MAIN " | 747 "-a android.intent.action.MAIN " |
701 "-c android.intent.category.HOME'", | 748 "-c android.intent.category.HOME'", |
702 'Starting: Intent { act=android.intent.action.MAIN }\r\n'): | 749 'Starting: Intent { act=android.intent.action.MAIN }\r\n'): |
703 self.device.GoHome() | 750 self.device.GoHome() |
704 | 751 |
| 752 |
| 753 class DeviceUtilsForceStopTest(DeviceUtilsOldImplTest): |
| 754 |
705 def testForceStop(self): | 755 def testForceStop(self): |
706 with self.assertOldImplCalls( | 756 with self.assertCalls( |
707 "adb -s 0123456789abcdef shell 'am force-stop this.is.a.test.package'", | 757 "adb -s 0123456789abcdef shell 'am force-stop this.is.a.test.package'", |
708 ''): | 758 ''): |
709 self.device.ForceStop('this.is.a.test.package') | 759 self.device.ForceStop('this.is.a.test.package') |
710 | 760 |
| 761 |
| 762 class DeviceUtilsClearApplicationStateTest(DeviceUtilsOldImplTest): |
| 763 |
711 def testClearApplicationState_packageExists(self): | 764 def testClearApplicationState_packageExists(self): |
712 with self.assertOldImplCalls( | 765 with self.assertCalls( |
713 "adb -s 0123456789abcdef shell 'pm path this.package.does.not.exist'", | 766 "adb -s 0123456789abcdef shell 'pm path this.package.does.not.exist'", |
714 ''): | 767 ''): |
715 self.device.ClearApplicationState('this.package.does.not.exist') | 768 self.device.ClearApplicationState('this.package.does.not.exist') |
716 | 769 |
717 def testClearApplicationState_packageDoesntExist(self): | 770 def testClearApplicationState_packageDoesntExist(self): |
718 with self.assertOldImplCallsSequence([ | 771 with self.assertCallsSequence([ |
719 ("adb -s 0123456789abcdef shell 'pm path this.package.exists'", | 772 ("adb -s 0123456789abcdef shell 'pm path this.package.exists'", |
720 'package:/data/app/this.package.exists.apk'), | 773 'package:/data/app/this.package.exists.apk'), |
721 ("adb -s 0123456789abcdef shell 'pm clear this.package.exists'", | 774 ("adb -s 0123456789abcdef shell 'pm clear this.package.exists'", |
722 'Success\r\n')]): | 775 'Success\r\n')]): |
723 self.device.ClearApplicationState('this.package.exists') | 776 self.device.ClearApplicationState('this.package.exists') |
724 | 777 |
| 778 |
| 779 class DeviceUtilsSendKeyEventTest(DeviceUtilsOldImplTest): |
| 780 |
725 def testSendKeyEvent(self): | 781 def testSendKeyEvent(self): |
726 with self.assertOldImplCalls( | 782 with self.assertCalls( |
727 "adb -s 0123456789abcdef shell 'input keyevent 66'", | 783 "adb -s 0123456789abcdef shell 'input keyevent 66'", |
728 ''): | 784 ''): |
729 self.device.SendKeyEvent(66) | 785 self.device.SendKeyEvent(66) |
730 | 786 |
| 787 |
| 788 class DeviceUtilsPushChangedFilesTest(DeviceUtilsOldImplTest): |
| 789 |
| 790 class MockFileSystem(object): |
| 791 |
| 792 @staticmethod |
| 793 def osStatResult( |
| 794 st_mode=None, st_ino=None, st_dev=None, st_nlink=None, st_uid=None, |
| 795 st_gid=None, st_size=None, st_atime=None, st_mtime=None, st_ctime=None): |
| 796 MockOSStatResult = collections.namedtuple('MockOSStatResult', [ |
| 797 'st_mode', 'st_ino', 'st_dev', 'st_nlink', 'st_uid', 'st_gid', |
| 798 'st_size', 'st_atime', 'st_mtime', 'st_ctime']) |
| 799 return MockOSStatResult(st_mode, st_ino, st_dev, st_nlink, st_uid, st_gid, |
| 800 st_size, st_atime, st_mtime, st_ctime) |
| 801 |
| 802 def _get(self, mocked, path, default_val): |
| 803 return (self.mock_file_info[path][mocked] |
| 804 if path in self.mock_file_info |
| 805 else default_val) |
| 806 |
| 807 def _patched(self, target, default_val=None): |
| 808 r = lambda f: self._get(target, f, default_val) |
| 809 return _PatchedFunction(patched=mock.patch(target, side_effect=r)) |
| 810 |
| 811 def __init__(self): |
| 812 self.mock_file_info = {} |
| 813 self._os_path_exists = self._patched('os.path.exists', default_val=False) |
| 814 self._os_path_getsize = self._patched('os.path.getsize', default_val=0) |
| 815 self._os_path_isdir = self._patched('os.path.isdir', default_val=False) |
| 816 self._os_stat = self._patched('os.stat', default_val=self.osStatResult()) |
| 817 self._os_walk = self._patched('os.walk', default_val=[]) |
| 818 |
| 819 def addMockFile(self, path, size, **kw): |
| 820 self._addMockThing(path, size, False, **kw) |
| 821 |
| 822 def addMockDirectory(self, path, size, **kw): |
| 823 self._addMockThing(path, size, True, **kw) |
| 824 |
| 825 def _addMockThing(self, path, size, is_dir, stat=None, walk=None): |
| 826 if stat is None: |
| 827 stat = self.osStatResult() |
| 828 if walk is None: |
| 829 walk = [] |
| 830 self.mock_file_info[path] = { |
| 831 'os.path.exists': True, |
| 832 'os.path.isdir': is_dir, |
| 833 'os.path.getsize': size, |
| 834 'os.stat': stat, |
| 835 'os.walk': walk, |
| 836 } |
| 837 |
| 838 def __enter__(self): |
| 839 self._os_path_exists.mocked = self._os_path_exists.patched.__enter__() |
| 840 self._os_path_getsize.mocked = self._os_path_getsize.patched.__enter__() |
| 841 self._os_path_isdir.mocked = self._os_path_isdir.patched.__enter__() |
| 842 self._os_stat.mocked = self._os_stat.patched.__enter__() |
| 843 self._os_walk.mocked = self._os_walk.patched.__enter__() |
| 844 |
| 845 def __exit__(self, exc_type, exc_val, exc_tb): |
| 846 self._os_walk.patched.__exit__() |
| 847 self._os_stat.patched.__exit__() |
| 848 self._os_path_isdir.patched.__exit__(exc_type, exc_val, exc_tb) |
| 849 self._os_path_getsize.patched.__exit__(exc_type, exc_val, exc_tb) |
| 850 self._os_path_exists.patched.__exit__(exc_type, exc_val, exc_tb) |
| 851 |
| 852 |
731 def testPushChangedFiles_noHostPath(self): | 853 def testPushChangedFiles_noHostPath(self): |
732 with mock.patch('os.path.exists', return_value=False): | 854 with mock.patch('os.path.exists', return_value=False): |
733 with self.assertRaises(device_errors.CommandFailedError): | 855 with self.assertRaises(device_errors.CommandFailedError): |
734 self.device.PushChangedFiles('/test/host/path', '/test/device/path') | 856 self.device.PushChangedFiles('/test/host/path', '/test/device/path') |
735 | 857 |
736 def testPushChangedFiles_file_noChange(self): | 858 def testPushChangedFiles_file_noChange(self): |
737 self.device.old_interface._push_if_needed_cache = {} | 859 self.device.old_interface._push_if_needed_cache = {} |
738 | 860 |
739 host_file_path = '/test/host/path' | 861 host_file_path = '/test/host/path' |
740 device_file_path = '/test/device/path' | 862 device_file_path = '/test/device/path' |
741 | 863 |
742 mock_file_info = { | 864 mock_fs = self.MockFileSystem() |
743 '/test/host/path': { | 865 mock_fs.addMockFile(host_file_path, 100) |
744 'os.path.exists': True, | |
745 'os.path.isdir': False, | |
746 'os.path.getsize': 100, | |
747 }, | |
748 } | |
749 | |
750 os_path_exists = mock.Mock() | |
751 os_path_exists.side_effect = lambda f: mock_file_info[f]['os.path.exists'] | |
752 | |
753 os_path_isdir = mock.Mock() | |
754 os_path_isdir.side_effect = lambda f: mock_file_info[f]['os.path.isdir'] | |
755 | |
756 os_path_getsize = mock.Mock() | |
757 os_path_getsize.side_effect = lambda f: mock_file_info[f]['os.path.getsize'] | |
758 | 866 |
759 self.device.old_interface.GetFilesChanged = mock.Mock(return_value=[]) | 867 self.device.old_interface.GetFilesChanged = mock.Mock(return_value=[]) |
760 | 868 |
761 with mock.patch('os.path.exists', new=os_path_exists), ( | 869 with mock_fs: |
762 mock.patch('os.path.isdir', new=os_path_isdir)), ( | |
763 mock.patch('os.path.getsize', new=os_path_getsize)): | |
764 # GetFilesChanged is mocked, so its adb calls are omitted. | 870 # GetFilesChanged is mocked, so its adb calls are omitted. |
765 with self.assertNoAdbCalls(): | 871 with self.assertNoAdbCalls(): |
766 self.device.PushChangedFiles(host_file_path, device_file_path) | 872 self.device.PushChangedFiles(host_file_path, device_file_path) |
767 | 873 |
768 @staticmethod | |
769 def createMockOSStatResult( | |
770 st_mode=None, st_ino=None, st_dev=None, st_nlink=None, st_uid=None, | |
771 st_gid=None, st_size=None, st_atime=None, st_mtime=None, st_ctime=None): | |
772 MockOSStatResult = collections.namedtuple('MockOSStatResult', [ | |
773 'st_mode', 'st_ino', 'st_dev', 'st_nlink', 'st_uid', 'st_gid', | |
774 'st_size', 'st_atime', 'st_mtime', 'st_ctime']) | |
775 return MockOSStatResult(st_mode, st_ino, st_dev, st_nlink, st_uid, st_gid, | |
776 st_size, st_atime, st_mtime, st_ctime) | |
777 | |
778 def testPushChangedFiles_file_changed(self): | 874 def testPushChangedFiles_file_changed(self): |
779 self.device.old_interface._push_if_needed_cache = {} | 875 self.device.old_interface._push_if_needed_cache = {} |
780 | 876 |
781 host_file_path = '/test/host/path' | 877 host_file_path = '/test/host/path' |
782 device_file_path = '/test/device/path' | 878 device_file_path = '/test/device/path' |
783 | 879 |
784 mock_file_info = { | 880 mock_fs = self.MockFileSystem() |
785 '/test/host/path': { | 881 mock_fs.addMockFile( |
786 'os.path.exists': True, | 882 host_file_path, 100, |
787 'os.path.isdir': False, | 883 stat=self.MockFileSystem.osStatResult(st_mtime=1000000000)) |
788 'os.path.getsize': 100, | |
789 'os.stat': self.createMockOSStatResult(st_mtime=1000000000) | |
790 }, | |
791 } | |
792 | |
793 os_path_exists = mock.Mock() | |
794 os_path_exists.side_effect = lambda f: mock_file_info[f]['os.path.exists'] | |
795 | |
796 os_path_isdir = mock.Mock() | |
797 os_path_isdir.side_effect = lambda f: mock_file_info[f]['os.path.isdir'] | |
798 | |
799 os_path_getsize = mock.Mock() | |
800 os_path_getsize.side_effect = lambda f: mock_file_info[f]['os.path.getsize'] | |
801 | |
802 os_stat = mock.Mock() | |
803 os_stat.side_effect = lambda f: mock_file_info[f]['os.stat'] | |
804 | 884 |
805 self.device.old_interface.GetFilesChanged = mock.Mock( | 885 self.device.old_interface.GetFilesChanged = mock.Mock( |
806 return_value=[('/test/host/path', '/test/device/path')]) | 886 return_value=[('/test/host/path', '/test/device/path')]) |
807 | 887 |
808 with mock.patch('os.path.exists', new=os_path_exists), ( | 888 with mock_fs: |
809 mock.patch('os.path.isdir', new=os_path_isdir)), ( | 889 with self.assertCalls('adb -s 0123456789abcdef push ' |
810 mock.patch('os.path.getsize', new=os_path_getsize)), ( | |
811 mock.patch('os.stat', new=os_stat)): | |
812 with self.assertOldImplCalls('adb -s 0123456789abcdef push ' | |
813 '/test/host/path /test/device/path', '100 B/s (100 B in 1.000s)\r\n'): | 890 '/test/host/path /test/device/path', '100 B/s (100 B in 1.000s)\r\n'): |
814 self.device.PushChangedFiles(host_file_path, device_file_path) | 891 self.device.PushChangedFiles(host_file_path, device_file_path) |
815 | 892 |
816 def testPushChangedFiles_directory_nothingChanged(self): | 893 def testPushChangedFiles_directory_nothingChanged(self): |
817 self.device.old_interface._push_if_needed_cache = {} | 894 self.device.old_interface._push_if_needed_cache = {} |
818 | 895 |
819 host_file_path = '/test/host/path' | 896 host_file_path = '/test/host/path' |
820 device_file_path = '/test/device/path' | 897 device_file_path = '/test/device/path' |
821 | 898 |
822 mock_file_info = { | 899 mock_fs = self.MockFileSystem() |
823 '/test/host/path': { | 900 mock_fs.addMockDirectory( |
824 'os.path.exists': True, | 901 host_file_path, 256, |
825 'os.path.isdir': True, | 902 stat=self.MockFileSystem.osStatResult(st_mtime=1000000000)) |
826 'os.path.getsize': 256, | 903 mock_fs.addMockFile( |
827 'os.stat': self.createMockOSStatResult(st_mtime=1000000000) | 904 host_file_path + '/file1', 251, |
828 }, | 905 stat=self.MockFileSystem.osStatResult(st_mtime=1000000001)) |
829 '/test/host/path/file1': { | 906 mock_fs.addMockFile( |
830 'os.path.exists': True, | 907 host_file_path + '/file2', 252, |
831 'os.path.isdir': False, | 908 stat=self.MockFileSystem.osStatResult(st_mtime=1000000002)) |
832 'os.path.getsize': 251, | |
833 'os.stat': self.createMockOSStatResult(st_mtime=1000000001) | |
834 }, | |
835 '/test/host/path/file2': { | |
836 'os.path.exists': True, | |
837 'os.path.isdir': False, | |
838 'os.path.getsize': 252, | |
839 'os.stat': self.createMockOSStatResult(st_mtime=1000000002) | |
840 }, | |
841 } | |
842 | |
843 os_path_exists = mock.Mock() | |
844 os_path_exists.side_effect = lambda f: mock_file_info[f]['os.path.exists'] | |
845 | |
846 os_path_isdir = mock.Mock() | |
847 os_path_isdir.side_effect = lambda f: mock_file_info[f]['os.path.isdir'] | |
848 | |
849 os_path_getsize = mock.Mock() | |
850 os_path_getsize.side_effect = lambda f: mock_file_info[f]['os.path.getsize'] | |
851 | |
852 os_stat = mock.Mock() | |
853 os_stat.side_effect = lambda f: mock_file_info[f]['os.stat'] | |
854 | 909 |
855 self.device.old_interface.GetFilesChanged = mock.Mock(return_value=[]) | 910 self.device.old_interface.GetFilesChanged = mock.Mock(return_value=[]) |
856 | 911 |
857 with mock.patch('os.path.exists', new=os_path_exists), ( | 912 with mock_fs: |
858 mock.patch('os.path.isdir', new=os_path_isdir)), ( | 913 with self.assertCallsSequence([ |
859 mock.patch('os.path.getsize', new=os_path_getsize)), ( | |
860 mock.patch('os.stat', new=os_stat)): | |
861 with self.assertOldImplCallsSequence([ | |
862 ("adb -s 0123456789abcdef shell 'mkdir -p \"/test/device/path\"'", | 914 ("adb -s 0123456789abcdef shell 'mkdir -p \"/test/device/path\"'", |
863 '')]): | 915 '')]): |
864 self.device.PushChangedFiles(host_file_path, device_file_path) | 916 self.device.PushChangedFiles(host_file_path, device_file_path) |
865 | 917 |
866 def testPushChangedFiles_directory_somethingChanged(self): | 918 def testPushChangedFiles_directory_somethingChanged(self): |
867 self.device.old_interface._push_if_needed_cache = {} | 919 self.device.old_interface._push_if_needed_cache = {} |
868 | 920 |
869 host_file_path = '/test/host/path' | 921 host_file_path = '/test/host/path' |
870 device_file_path = '/test/device/path' | 922 device_file_path = '/test/device/path' |
871 | 923 |
872 mock_file_info = { | 924 mock_fs = self.MockFileSystem() |
873 '/test/host/path': { | 925 mock_fs.addMockDirectory( |
874 'os.path.exists': True, | 926 host_file_path, 256, |
875 'os.path.isdir': True, | 927 stat=self.MockFileSystem.osStatResult(st_mtime=1000000000), |
876 'os.path.getsize': 256, | 928 walk=[('/test/host/path', [], ['file1', 'file2'])]) |
877 'os.stat': self.createMockOSStatResult(st_mtime=1000000000), | 929 mock_fs.addMockFile( |
878 'os.walk': [('/test/host/path', [], ['file1', 'file2'])] | 930 host_file_path + '/file1', 256, |
879 }, | 931 stat=self.MockFileSystem.osStatResult(st_mtime=1000000001)) |
880 '/test/host/path/file1': { | 932 mock_fs.addMockFile( |
881 'os.path.exists': True, | 933 host_file_path + '/file2', 256, |
882 'os.path.isdir': False, | 934 stat=self.MockFileSystem.osStatResult(st_mtime=1000000002)) |
883 'os.path.getsize': 256, | |
884 'os.stat': self.createMockOSStatResult(st_mtime=1000000001) | |
885 }, | |
886 '/test/host/path/file2': { | |
887 'os.path.exists': True, | |
888 'os.path.isdir': False, | |
889 'os.path.getsize': 256, | |
890 'os.stat': self.createMockOSStatResult(st_mtime=1000000002) | |
891 }, | |
892 } | |
893 | |
894 os_path_exists = mock.Mock() | |
895 os_path_exists.side_effect = lambda f: mock_file_info[f]['os.path.exists'] | |
896 | |
897 os_path_isdir = mock.Mock() | |
898 os_path_isdir.side_effect = lambda f: mock_file_info[f]['os.path.isdir'] | |
899 | |
900 os_path_getsize = mock.Mock() | |
901 os_path_getsize.side_effect = lambda f: mock_file_info[f]['os.path.getsize'] | |
902 | |
903 os_stat = mock.Mock() | |
904 os_stat.side_effect = lambda f: mock_file_info[f]['os.stat'] | |
905 | |
906 os_walk = mock.Mock() | |
907 os_walk.side_effect = lambda f: mock_file_info[f]['os.walk'] | |
908 | 935 |
909 self.device.old_interface.GetFilesChanged = mock.Mock( | 936 self.device.old_interface.GetFilesChanged = mock.Mock( |
910 return_value=[('/test/host/path/file1', '/test/device/path/file1')]) | 937 return_value=[('/test/host/path/file1', '/test/device/path/file1')]) |
911 | 938 |
912 with mock.patch('os.path.exists', new=os_path_exists), ( | 939 with mock_fs: |
913 mock.patch('os.path.isdir', new=os_path_isdir)), ( | 940 with self.assertCallsSequence([ |
914 mock.patch('os.path.getsize', new=os_path_getsize)), ( | |
915 mock.patch('os.stat', new=os_stat)), ( | |
916 mock.patch('os.walk', new=os_walk)): | |
917 with self.assertOldImplCallsSequence([ | |
918 ("adb -s 0123456789abcdef shell 'mkdir -p \"/test/device/path\"'", | 941 ("adb -s 0123456789abcdef shell 'mkdir -p \"/test/device/path\"'", |
919 ''), | 942 ''), |
920 ('adb -s 0123456789abcdef push ' | 943 ('adb -s 0123456789abcdef push ' |
921 '/test/host/path/file1 /test/device/path/file1', | 944 '/test/host/path/file1 /test/device/path/file1', |
922 '256 B/s (256 B in 1.000s)\r\n')]): | 945 '256 B/s (256 B in 1.000s)\r\n')]): |
923 self.device.PushChangedFiles(host_file_path, device_file_path) | 946 self.device.PushChangedFiles(host_file_path, device_file_path) |
924 | 947 |
925 def testPushChangedFiles_directory_everythingChanged(self): | 948 def testPushChangedFiles_directory_everythingChanged(self): |
926 self.device.old_interface._push_if_needed_cache = {} | 949 self.device.old_interface._push_if_needed_cache = {} |
927 | 950 |
928 host_file_path = '/test/host/path' | 951 host_file_path = '/test/host/path' |
929 device_file_path = '/test/device/path' | 952 device_file_path = '/test/device/path' |
930 | 953 |
931 mock_file_info = { | 954 mock_fs = self.MockFileSystem() |
932 '/test/host/path': { | 955 mock_fs.addMockDirectory( |
933 'os.path.exists': True, | 956 host_file_path, 256, |
934 'os.path.isdir': True, | 957 stat=self.MockFileSystem.osStatResult(st_mtime=1000000000)) |
935 'os.path.getsize': 256, | 958 mock_fs.addMockFile( |
936 'os.stat': self.createMockOSStatResult(st_mtime=1000000000) | 959 host_file_path + '/file1', 256, |
937 }, | 960 stat=self.MockFileSystem.osStatResult(st_mtime=1000000001)) |
938 '/test/host/path/file1': { | 961 mock_fs.addMockFile( |
939 'os.path.exists': True, | 962 host_file_path + '/file2', 256, |
940 'os.path.isdir': False, | 963 stat=self.MockFileSystem.osStatResult(st_mtime=1000000002)) |
941 'os.path.getsize': 256, | |
942 'os.stat': self.createMockOSStatResult(st_mtime=1000000001) | |
943 }, | |
944 '/test/host/path/file2': { | |
945 'os.path.exists': True, | |
946 'os.path.isdir': False, | |
947 'os.path.getsize': 256, | |
948 'os.stat': self.createMockOSStatResult(st_mtime=1000000002) | |
949 }, | |
950 } | |
951 | |
952 os_path_exists = mock.Mock() | |
953 os_path_exists.side_effect = lambda f: mock_file_info[f]['os.path.exists'] | |
954 | |
955 os_path_isdir = mock.Mock() | |
956 os_path_isdir.side_effect = lambda f: mock_file_info[f]['os.path.isdir'] | |
957 | |
958 os_path_getsize = mock.Mock() | |
959 os_path_getsize.side_effect = lambda f: mock_file_info[f]['os.path.getsize'] | |
960 | |
961 os_stat = mock.Mock() | |
962 os_stat.side_effect = lambda f: mock_file_info[f]['os.stat'] | |
963 | 964 |
964 self.device.old_interface.GetFilesChanged = mock.Mock( | 965 self.device.old_interface.GetFilesChanged = mock.Mock( |
965 return_value=[('/test/host/path/file1', '/test/device/path/file1'), | 966 return_value=[('/test/host/path/file1', '/test/device/path/file1'), |
966 ('/test/host/path/file2', '/test/device/path/file2')]) | 967 ('/test/host/path/file2', '/test/device/path/file2')]) |
967 | 968 |
968 with mock.patch('os.path.exists', new=os_path_exists), ( | 969 with mock_fs: |
969 mock.patch('os.path.isdir', new=os_path_isdir)), ( | 970 with self.assertCallsSequence([ |
970 mock.patch('os.path.getsize', new=os_path_getsize)), ( | |
971 mock.patch('os.stat', new=os_stat)): | |
972 with self.assertOldImplCallsSequence([ | |
973 ("adb -s 0123456789abcdef shell 'mkdir -p \"/test/device/path\"'", | 971 ("adb -s 0123456789abcdef shell 'mkdir -p \"/test/device/path\"'", |
974 ''), | 972 ''), |
975 ('adb -s 0123456789abcdef push /test/host/path /test/device/path', | 973 ('adb -s 0123456789abcdef push /test/host/path /test/device/path', |
976 '768 B/s (768 B in 1.000s)\r\n')]): | 974 '768 B/s (768 B in 1.000s)\r\n')]): |
977 self.device.PushChangedFiles(host_file_path, device_file_path) | 975 self.device.PushChangedFiles(host_file_path, device_file_path) |
978 | 976 |
| 977 |
| 978 class DeviceUtilsFileExistsTest(DeviceUtilsOldImplTest): |
| 979 |
979 def testFileExists_usingTest_fileExists(self): | 980 def testFileExists_usingTest_fileExists(self): |
980 with self.assertOldImplCalls( | 981 with self.assertCalls( |
981 "adb -s 0123456789abcdef shell " | 982 "adb -s 0123456789abcdef shell " |
982 "'test -e \"/data/app/test.file.exists\"; echo $?'", | 983 "'test -e \"/data/app/test.file.exists\"; echo $?'", |
983 '0\r\n'): | 984 '0\r\n'): |
984 self.assertTrue(self.device.FileExists('/data/app/test.file.exists')) | 985 self.assertTrue(self.device.FileExists('/data/app/test.file.exists')) |
985 | 986 |
986 def testFileExists_usingTest_fileDoesntExist(self): | 987 def testFileExists_usingTest_fileDoesntExist(self): |
987 with self.assertOldImplCalls( | 988 with self.assertCalls( |
988 "adb -s 0123456789abcdef shell " | 989 "adb -s 0123456789abcdef shell " |
989 "'test -e \"/data/app/test.file.does.not.exist\"; echo $?'", | 990 "'test -e \"/data/app/test.file.does.not.exist\"; echo $?'", |
990 '1\r\n'): | 991 '1\r\n'): |
991 self.assertFalse(self.device.FileExists( | 992 self.assertFalse(self.device.FileExists( |
992 '/data/app/test.file.does.not.exist')) | 993 '/data/app/test.file.does.not.exist')) |
993 | 994 |
994 def testFileExists_usingLs_fileExists(self): | 995 def testFileExists_usingLs_fileExists(self): |
995 with self.assertOldImplCallsSequence([ | 996 with self.assertCallsSequence([ |
996 ("adb -s 0123456789abcdef shell " | 997 ("adb -s 0123456789abcdef shell " |
997 "'test -e \"/data/app/test.file.exists\"; echo $?'", | 998 "'test -e \"/data/app/test.file.exists\"; echo $?'", |
998 'test: not found\r\n'), | 999 'test: not found\r\n'), |
999 ("adb -s 0123456789abcdef shell " | 1000 ("adb -s 0123456789abcdef shell " |
1000 "'ls \"/data/app/test.file.exists\" >/dev/null 2>&1; echo $?'", | 1001 "'ls \"/data/app/test.file.exists\" >/dev/null 2>&1; echo $?'", |
1001 '0\r\n')]): | 1002 '0\r\n')]): |
1002 self.assertTrue(self.device.FileExists('/data/app/test.file.exists')) | 1003 self.assertTrue(self.device.FileExists('/data/app/test.file.exists')) |
1003 | 1004 |
1004 def testFileExists_usingLs_fileDoesntExist(self): | 1005 def testFileExists_usingLs_fileDoesntExist(self): |
1005 with self.assertOldImplCallsSequence([ | 1006 with self.assertCallsSequence([ |
1006 ("adb -s 0123456789abcdef shell " | 1007 ("adb -s 0123456789abcdef shell " |
1007 "'test -e \"/data/app/test.file.does.not.exist\"; echo $?'", | 1008 "'test -e \"/data/app/test.file.does.not.exist\"; echo $?'", |
1008 'test: not found\r\n'), | 1009 'test: not found\r\n'), |
1009 ("adb -s 0123456789abcdef shell " | 1010 ("adb -s 0123456789abcdef shell " |
1010 "'ls \"/data/app/test.file.does.not.exist\" " | 1011 "'ls \"/data/app/test.file.does.not.exist\" " |
1011 ">/dev/null 2>&1; echo $?'", | 1012 ">/dev/null 2>&1; echo $?'", |
1012 '1\r\n')]): | 1013 '1\r\n')]): |
1013 self.assertFalse(self.device.FileExists( | 1014 self.assertFalse(self.device.FileExists( |
1014 '/data/app/test.file.does.not.exist')) | 1015 '/data/app/test.file.does.not.exist')) |
1015 | 1016 |
| 1017 |
| 1018 class DeviceUtilsPullFileTest(DeviceUtilsOldImplTest): |
| 1019 |
1016 def testPullFile_existsOnDevice(self): | 1020 def testPullFile_existsOnDevice(self): |
1017 with mock.patch('os.path.exists', return_value=True): | 1021 with mock.patch('os.path.exists', return_value=True): |
1018 with self.assertOldImplCallsSequence([ | 1022 with self.assertCallsSequence([ |
1019 ('adb -s 0123456789abcdef shell ' | 1023 ('adb -s 0123456789abcdef shell ' |
1020 'ls /data/app/test.file.exists', | 1024 'ls /data/app/test.file.exists', |
1021 '/data/app/test.file.exists'), | 1025 '/data/app/test.file.exists'), |
1022 ('adb -s 0123456789abcdef pull ' | 1026 ('adb -s 0123456789abcdef pull ' |
1023 '/data/app/test.file.exists /test/file/host/path', | 1027 '/data/app/test.file.exists /test/file/host/path', |
1024 '100 B/s (100 bytes in 1.000s)\r\n')]): | 1028 '100 B/s (100 bytes in 1.000s)\r\n')]): |
1025 self.device.PullFile('/data/app/test.file.exists', | 1029 self.device.PullFile('/data/app/test.file.exists', |
1026 '/test/file/host/path') | 1030 '/test/file/host/path') |
1027 | 1031 |
1028 def testPullFile_doesntExistOnDevice(self): | 1032 def testPullFile_doesntExistOnDevice(self): |
1029 with mock.patch('os.path.exists', return_value=True): | 1033 with mock.patch('os.path.exists', return_value=True): |
1030 with self.assertOldImplCalls( | 1034 with self.assertCalls( |
1031 'adb -s 0123456789abcdef shell ' | 1035 'adb -s 0123456789abcdef shell ' |
1032 'ls /data/app/test.file.does.not.exist', | 1036 'ls /data/app/test.file.does.not.exist', |
1033 '/data/app/test.file.does.not.exist: No such file or directory\r\n'): | 1037 '/data/app/test.file.does.not.exist: No such file or directory\r\n'): |
1034 with self.assertRaises(device_errors.CommandFailedError): | 1038 with self.assertRaises(device_errors.CommandFailedError): |
1035 self.device.PullFile('/data/app/test.file.does.not.exist', | 1039 self.device.PullFile('/data/app/test.file.does.not.exist', |
1036 '/test/file/host/path') | 1040 '/test/file/host/path') |
1037 | 1041 |
| 1042 |
| 1043 class DeviceUtilsReadFileTest(DeviceUtilsOldImplTest): |
| 1044 |
1038 def testReadFile_exists(self): | 1045 def testReadFile_exists(self): |
1039 with self.assertOldImplCallsSequence([ | 1046 with self.assertCallsSequence([ |
1040 ("adb -s 0123456789abcdef shell " | 1047 ("adb -s 0123456789abcdef shell " |
1041 "'cat \"/read/this/test/file\" 2>/dev/null'", | 1048 "'cat \"/read/this/test/file\" 2>/dev/null'", |
1042 'this is a test file')]): | 1049 'this is a test file')]): |
1043 self.assertEqual(['this is a test file'], | 1050 self.assertEqual(['this is a test file'], |
1044 self.device.ReadFile('/read/this/test/file')) | 1051 self.device.ReadFile('/read/this/test/file')) |
1045 | 1052 |
1046 def testReadFile_doesNotExist(self): | 1053 def testReadFile_doesNotExist(self): |
1047 with self.assertOldImplCalls( | 1054 with self.assertCalls( |
1048 "adb -s 0123456789abcdef shell " | 1055 "adb -s 0123456789abcdef shell " |
1049 "'cat \"/this/file/does.not.exist\" 2>/dev/null'", | 1056 "'cat \"/this/file/does.not.exist\" 2>/dev/null'", |
1050 ''): | 1057 ''): |
1051 self.device.ReadFile('/this/file/does.not.exist') | 1058 self.device.ReadFile('/this/file/does.not.exist') |
1052 | 1059 |
1053 def testReadFile_asRoot_withRoot(self): | 1060 def testReadFile_asRoot_withRoot(self): |
1054 self.device.old_interface._privileged_command_runner = ( | 1061 self.device.old_interface._privileged_command_runner = ( |
1055 self.device.old_interface.RunShellCommand) | 1062 self.device.old_interface.RunShellCommand) |
1056 self.device.old_interface._protected_file_access_method_initialized = True | 1063 self.device.old_interface._protected_file_access_method_initialized = True |
1057 with self.assertOldImplCallsSequence([ | 1064 with self.assertCallsSequence([ |
1058 ("adb -s 0123456789abcdef shell " | 1065 ("adb -s 0123456789abcdef shell " |
1059 "'cat \"/this/file/must.be.read.by.root\" 2> /dev/null'", | 1066 "'cat \"/this/file/must.be.read.by.root\" 2> /dev/null'", |
1060 'this is a test file\nread by root')]): | 1067 'this is a test file\nread by root')]): |
1061 self.assertEqual( | 1068 self.assertEqual( |
1062 ['this is a test file', 'read by root'], | 1069 ['this is a test file', 'read by root'], |
1063 self.device.ReadFile('/this/file/must.be.read.by.root', | 1070 self.device.ReadFile('/this/file/must.be.read.by.root', |
1064 as_root=True)) | 1071 as_root=True)) |
1065 | 1072 |
1066 def testReadFile_asRoot_withSu(self): | 1073 def testReadFile_asRoot_withSu(self): |
1067 self.device.old_interface._privileged_command_runner = ( | 1074 self.device.old_interface._privileged_command_runner = ( |
1068 self.device.old_interface.RunShellCommandWithSU) | 1075 self.device.old_interface.RunShellCommandWithSU) |
1069 self.device.old_interface._protected_file_access_method_initialized = True | 1076 self.device.old_interface._protected_file_access_method_initialized = True |
1070 with self.assertOldImplCallsSequence([ | 1077 with self.assertCallsSequence([ |
1071 ("adb -s 0123456789abcdef shell " | 1078 ("adb -s 0123456789abcdef shell " |
1072 "'su -c cat \"/this/file/can.be.read.with.su\" 2> /dev/null'", | 1079 "'su -c cat \"/this/file/can.be.read.with.su\" 2> /dev/null'", |
1073 'this is a test file\nread with su')]): | 1080 'this is a test file\nread with su')]): |
1074 self.assertEqual( | 1081 self.assertEqual( |
1075 ['this is a test file', 'read with su'], | 1082 ['this is a test file', 'read with su'], |
1076 self.device.ReadFile('/this/file/can.be.read.with.su', | 1083 self.device.ReadFile('/this/file/can.be.read.with.su', |
1077 as_root=True)) | 1084 as_root=True)) |
1078 | 1085 |
1079 def testReadFile_asRoot_rejected(self): | 1086 def testReadFile_asRoot_rejected(self): |
1080 self.device.old_interface._privileged_command_runner = None | 1087 self.device.old_interface._privileged_command_runner = None |
1081 self.device.old_interface._protected_file_access_method_initialized = True | 1088 self.device.old_interface._protected_file_access_method_initialized = True |
1082 with self.assertRaises(device_errors.CommandFailedError): | 1089 with self.assertRaises(device_errors.CommandFailedError): |
1083 self.device.ReadFile('/this/file/cannot.be.read.by.user', | 1090 self.device.ReadFile('/this/file/cannot.be.read.by.user', |
1084 as_root=True) | 1091 as_root=True) |
1085 | 1092 |
| 1093 |
| 1094 class DeviceUtilsWriteFileTest(DeviceUtilsOldImplTest): |
| 1095 |
1086 def testWriteFile_basic(self): | 1096 def testWriteFile_basic(self): |
1087 mock_file = mock.MagicMock(spec=file) | 1097 mock_file = mock.MagicMock(spec=file) |
1088 mock_file.name = '/tmp/file/to.be.pushed' | 1098 mock_file.name = '/tmp/file/to.be.pushed' |
1089 mock_file.__enter__.return_value = mock_file | 1099 mock_file.__enter__.return_value = mock_file |
1090 with mock.patch('tempfile.NamedTemporaryFile', | 1100 with mock.patch('tempfile.NamedTemporaryFile', |
1091 return_value=mock_file): | 1101 return_value=mock_file): |
1092 with self.assertOldImplCalls( | 1102 with self.assertCalls( |
1093 'adb -s 0123456789abcdef push ' | 1103 'adb -s 0123456789abcdef push ' |
1094 '/tmp/file/to.be.pushed /test/file/written.to.device', | 1104 '/tmp/file/to.be.pushed /test/file/written.to.device', |
1095 '100 B/s (100 bytes in 1.000s)\r\n'): | 1105 '100 B/s (100 bytes in 1.000s)\r\n'): |
1096 self.device.WriteFile('/test/file/written.to.device', | 1106 self.device.WriteFile('/test/file/written.to.device', |
1097 'new test file contents') | 1107 'new test file contents') |
1098 mock_file.write.assert_called_once_with('new test file contents') | 1108 mock_file.write.assert_called_once_with('new test file contents') |
1099 | 1109 |
1100 def testWriteFile_asRoot_withRoot(self): | 1110 def testWriteFile_asRoot_withRoot(self): |
1101 self.device.old_interface._external_storage = '/fake/storage/path' | 1111 self.device.old_interface._external_storage = '/fake/storage/path' |
1102 self.device.old_interface._privileged_command_runner = ( | 1112 self.device.old_interface._privileged_command_runner = ( |
1103 self.device.old_interface.RunShellCommand) | 1113 self.device.old_interface.RunShellCommand) |
1104 self.device.old_interface._protected_file_access_method_initialized = True | 1114 self.device.old_interface._protected_file_access_method_initialized = True |
1105 | 1115 |
1106 mock_file = mock.MagicMock(spec=file) | 1116 mock_file = mock.MagicMock(spec=file) |
1107 mock_file.name = '/tmp/file/to.be.pushed' | 1117 mock_file.name = '/tmp/file/to.be.pushed' |
1108 mock_file.__enter__.return_value = mock_file | 1118 mock_file.__enter__.return_value = mock_file |
1109 with mock.patch('tempfile.NamedTemporaryFile', | 1119 with mock.patch('tempfile.NamedTemporaryFile', |
1110 return_value=mock_file): | 1120 return_value=mock_file): |
1111 with self.assertOldImplCallsSequence( | 1121 with self.assertCallsSequence( |
1112 cmd_ret=[ | 1122 cmd_ret=[ |
1113 # Create temporary contents file | 1123 # Create temporary contents file |
1114 (r"adb -s 0123456789abcdef shell " | 1124 (r"adb -s 0123456789abcdef shell " |
1115 "'test -e \"/fake/storage/path/temp_file-\d+-\d+\"; " | 1125 "'test -e \"/fake/storage/path/temp_file-\d+-\d+\"; " |
1116 "echo \$\?'", | 1126 "echo \$\?'", |
1117 '1\r\n'), | 1127 '1\r\n'), |
1118 # Create temporary script file | 1128 # Create temporary script file |
1119 (r"adb -s 0123456789abcdef shell " | 1129 (r"adb -s 0123456789abcdef shell " |
1120 "'test -e \"/fake/storage/path/temp_file-\d+-\d+\.sh\"; " | 1130 "'test -e \"/fake/storage/path/temp_file-\d+-\d+\.sh\"; " |
1121 "echo \$\?'", | 1131 "echo \$\?'", |
(...skipping 22 matching lines...) Expand all Loading... |
1144 self.device.old_interface._external_storage = '/fake/storage/path' | 1154 self.device.old_interface._external_storage = '/fake/storage/path' |
1145 self.device.old_interface._privileged_command_runner = ( | 1155 self.device.old_interface._privileged_command_runner = ( |
1146 self.device.old_interface.RunShellCommandWithSU) | 1156 self.device.old_interface.RunShellCommandWithSU) |
1147 self.device.old_interface._protected_file_access_method_initialized = True | 1157 self.device.old_interface._protected_file_access_method_initialized = True |
1148 | 1158 |
1149 mock_file = mock.MagicMock(spec=file) | 1159 mock_file = mock.MagicMock(spec=file) |
1150 mock_file.name = '/tmp/file/to.be.pushed' | 1160 mock_file.name = '/tmp/file/to.be.pushed' |
1151 mock_file.__enter__.return_value = mock_file | 1161 mock_file.__enter__.return_value = mock_file |
1152 with mock.patch('tempfile.NamedTemporaryFile', | 1162 with mock.patch('tempfile.NamedTemporaryFile', |
1153 return_value=mock_file): | 1163 return_value=mock_file): |
1154 with self.assertOldImplCallsSequence( | 1164 with self.assertCallsSequence( |
1155 cmd_ret=[ | 1165 cmd_ret=[ |
1156 # Create temporary contents file | 1166 # Create temporary contents file |
1157 (r"adb -s 0123456789abcdef shell " | 1167 (r"adb -s 0123456789abcdef shell " |
1158 "'test -e \"/fake/storage/path/temp_file-\d+-\d+\"; " | 1168 "'test -e \"/fake/storage/path/temp_file-\d+-\d+\"; " |
1159 "echo \$\?'", | 1169 "echo \$\?'", |
1160 '1\r\n'), | 1170 '1\r\n'), |
1161 # Create temporary script file | 1171 # Create temporary script file |
1162 (r"adb -s 0123456789abcdef shell " | 1172 (r"adb -s 0123456789abcdef shell " |
1163 "'test -e \"/fake/storage/path/temp_file-\d+-\d+\.sh\"; " | 1173 "'test -e \"/fake/storage/path/temp_file-\d+-\d+\.sh\"; " |
1164 "echo \$\?'", | 1174 "echo \$\?'", |
(...skipping 18 matching lines...) Expand all Loading... |
1183 self.device.WriteFile('/test/file/written.to.device', | 1193 self.device.WriteFile('/test/file/written.to.device', |
1184 'new test file contents', as_root=True) | 1194 'new test file contents', as_root=True) |
1185 | 1195 |
1186 def testWriteFile_asRoot_rejected(self): | 1196 def testWriteFile_asRoot_rejected(self): |
1187 self.device.old_interface._privileged_command_runner = None | 1197 self.device.old_interface._privileged_command_runner = None |
1188 self.device.old_interface._protected_file_access_method_initialized = True | 1198 self.device.old_interface._protected_file_access_method_initialized = True |
1189 with self.assertRaises(device_errors.CommandFailedError): | 1199 with self.assertRaises(device_errors.CommandFailedError): |
1190 self.device.WriteFile('/test/file/no.permissions.to.write', | 1200 self.device.WriteFile('/test/file/no.permissions.to.write', |
1191 'new test file contents', as_root=True) | 1201 'new test file contents', as_root=True) |
1192 | 1202 |
| 1203 |
| 1204 class DeviceUtilsLsTest(DeviceUtilsOldImplTest): |
| 1205 |
1193 def testLs_nothing(self): | 1206 def testLs_nothing(self): |
1194 with self.assertOldImplCallsSequence([ | 1207 with self.assertCallsSequence([ |
1195 ("adb -s 0123456789abcdef shell 'ls -lR /this/file/does.not.exist'", | 1208 ("adb -s 0123456789abcdef shell 'ls -lR /this/file/does.not.exist'", |
1196 '/this/file/does.not.exist: No such file or directory\r\n'), | 1209 '/this/file/does.not.exist: No such file or directory\r\n'), |
1197 ("adb -s 0123456789abcdef shell 'date +%z'", '+0000')]): | 1210 ("adb -s 0123456789abcdef shell 'date +%z'", '+0000')]): |
1198 self.assertEqual({}, self.device.Ls('/this/file/does.not.exist')) | 1211 self.assertEqual({}, self.device.Ls('/this/file/does.not.exist')) |
1199 | 1212 |
1200 def testLs_file(self): | 1213 def testLs_file(self): |
1201 with self.assertOldImplCallsSequence([ | 1214 with self.assertCallsSequence([ |
1202 ("adb -s 0123456789abcdef shell 'ls -lR /this/is/a/test.file'", | 1215 ("adb -s 0123456789abcdef shell 'ls -lR /this/is/a/test.file'", |
1203 '-rw-rw---- testuser testgroup 4096 1970-01-01 00:00 test.file\r\n'), | 1216 '-rw-rw---- testuser testgroup 4096 1970-01-01 00:00 test.file\r\n'), |
1204 ("adb -s 0123456789abcdef shell 'date +%z'", '+0000')]): | 1217 ("adb -s 0123456789abcdef shell 'date +%z'", '+0000')]): |
1205 self.assertEqual( | 1218 self.assertEqual( |
1206 {'test.file': (4096, datetime.datetime(1970, 1, 1))}, | 1219 {'test.file': (4096, datetime.datetime(1970, 1, 1))}, |
1207 self.device.Ls('/this/is/a/test.file')) | 1220 self.device.Ls('/this/is/a/test.file')) |
1208 | 1221 |
1209 def testLs_directory(self): | 1222 def testLs_directory(self): |
1210 with self.assertOldImplCallsSequence([ | 1223 with self.assertCallsSequence([ |
1211 ("adb -s 0123456789abcdef shell 'ls -lR /this/is/a/test.directory'", | 1224 ("adb -s 0123456789abcdef shell 'ls -lR /this/is/a/test.directory'", |
1212 '\r\n' | 1225 '\r\n' |
1213 '/this/is/a/test.directory:\r\n' | 1226 '/this/is/a/test.directory:\r\n' |
1214 '-rw-rw---- testuser testgroup 4096 1970-01-01 18:19 test.file\r\n'), | 1227 '-rw-rw---- testuser testgroup 4096 1970-01-01 18:19 test.file\r\n'), |
1215 ("adb -s 0123456789abcdef shell 'date +%z'", '+0000')]): | 1228 ("adb -s 0123456789abcdef shell 'date +%z'", '+0000')]): |
1216 self.assertEqual( | 1229 self.assertEqual( |
1217 {'test.file': (4096, datetime.datetime(1970, 1, 1, 18, 19))}, | 1230 {'test.file': (4096, datetime.datetime(1970, 1, 1, 18, 19))}, |
1218 self.device.Ls('/this/is/a/test.directory')) | 1231 self.device.Ls('/this/is/a/test.directory')) |
1219 | 1232 |
1220 def testLs_directories(self): | 1233 def testLs_directories(self): |
1221 with self.assertOldImplCallsSequence([ | 1234 with self.assertCallsSequence([ |
1222 ("adb -s 0123456789abcdef shell 'ls -lR /this/is/a/test.directory'", | 1235 ("adb -s 0123456789abcdef shell 'ls -lR /this/is/a/test.directory'", |
1223 '\r\n' | 1236 '\r\n' |
1224 '/this/is/a/test.directory:\r\n' | 1237 '/this/is/a/test.directory:\r\n' |
1225 'drwxr-xr-x testuser testgroup 1970-01-01 00:00 test.subdirectory\r\n' | 1238 'drwxr-xr-x testuser testgroup 1970-01-01 00:00 test.subdirectory\r\n' |
1226 '\r\n' | 1239 '\r\n' |
1227 '/this/is/a/test.directory/test.subdirectory:\r\n' | 1240 '/this/is/a/test.directory/test.subdirectory:\r\n' |
1228 '-rw-rw---- testuser testgroup 4096 1970-01-01 00:00 test.file\r\n'), | 1241 '-rw-rw---- testuser testgroup 4096 1970-01-01 00:00 test.file\r\n'), |
1229 ("adb -s 0123456789abcdef shell 'date +%z'", '-0700')]): | 1242 ("adb -s 0123456789abcdef shell 'date +%z'", '-0700')]): |
1230 self.assertEqual( | 1243 self.assertEqual( |
1231 {'test.subdirectory/test.file': | 1244 {'test.subdirectory/test.file': |
1232 (4096, datetime.datetime(1970, 1, 1, 7, 0, 0))}, | 1245 (4096, datetime.datetime(1970, 1, 1, 7, 0, 0))}, |
1233 self.device.Ls('/this/is/a/test.directory')) | 1246 self.device.Ls('/this/is/a/test.directory')) |
1234 | 1247 |
| 1248 |
| 1249 class DeviceUtilsSetJavaAssertsTest(DeviceUtilsOldImplTest): |
| 1250 |
1235 @staticmethod | 1251 @staticmethod |
1236 def mockNamedTemporary(name='/tmp/file/property.file', | 1252 def mockNamedTemporary(name='/tmp/file/property.file', |
1237 read_contents=''): | 1253 read_contents=''): |
1238 mock_file = mock.MagicMock(spec=file) | 1254 mock_file = mock.MagicMock(spec=file) |
1239 mock_file.name = name | 1255 mock_file.name = name |
1240 mock_file.__enter__.return_value = mock_file | 1256 mock_file.__enter__.return_value = mock_file |
1241 mock_file.read.return_value = read_contents | 1257 mock_file.read.return_value = read_contents |
1242 return mock_file | 1258 return mock_file |
1243 | 1259 |
1244 def testSetJavaAsserts_enable(self): | 1260 def testSetJavaAsserts_enable(self): |
1245 mock_file = self.mockNamedTemporary() | 1261 mock_file = self.mockNamedTemporary() |
1246 with mock.patch('tempfile.NamedTemporaryFile', | 1262 with mock.patch('tempfile.NamedTemporaryFile', |
1247 return_value=mock_file), ( | 1263 return_value=mock_file), ( |
1248 mock.patch('__builtin__.open', return_value=mock_file)): | 1264 mock.patch('__builtin__.open', return_value=mock_file)): |
1249 with self.assertOldImplCallsSequence( | 1265 with self.assertCallsSequence( |
1250 [('adb -s 0123456789abcdef shell ls %s' % | 1266 [('adb -s 0123456789abcdef shell ls %s' % |
1251 constants.DEVICE_LOCAL_PROPERTIES_PATH, | 1267 constants.DEVICE_LOCAL_PROPERTIES_PATH, |
1252 '%s\r\n' % constants.DEVICE_LOCAL_PROPERTIES_PATH), | 1268 '%s\r\n' % constants.DEVICE_LOCAL_PROPERTIES_PATH), |
1253 ('adb -s 0123456789abcdef pull %s %s' % | 1269 ('adb -s 0123456789abcdef pull %s %s' % |
1254 (constants.DEVICE_LOCAL_PROPERTIES_PATH, mock_file.name), | 1270 (constants.DEVICE_LOCAL_PROPERTIES_PATH, mock_file.name), |
1255 '100 B/s (100 bytes in 1.000s)\r\n'), | 1271 '100 B/s (100 bytes in 1.000s)\r\n'), |
1256 ('adb -s 0123456789abcdef push %s %s' % | 1272 ('adb -s 0123456789abcdef push %s %s' % |
1257 (mock_file.name, constants.DEVICE_LOCAL_PROPERTIES_PATH), | 1273 (mock_file.name, constants.DEVICE_LOCAL_PROPERTIES_PATH), |
1258 '100 B/s (100 bytes in 1.000s)\r\n'), | 1274 '100 B/s (100 bytes in 1.000s)\r\n'), |
1259 ('adb -s 0123456789abcdef shell ' | 1275 ('adb -s 0123456789abcdef shell ' |
1260 'getprop dalvik.vm.enableassertions', | 1276 'getprop dalvik.vm.enableassertions', |
1261 '\r\n'), | 1277 '\r\n'), |
1262 ('adb -s 0123456789abcdef shell ' | 1278 ('adb -s 0123456789abcdef shell ' |
1263 'setprop dalvik.vm.enableassertions "all"', | 1279 'setprop dalvik.vm.enableassertions "all"', |
1264 '')]): | 1280 '')]): |
1265 self.device.SetJavaAsserts(True) | 1281 self.device.SetJavaAsserts(True) |
1266 | 1282 |
1267 def testSetJavaAsserts_disable(self): | 1283 def testSetJavaAsserts_disable(self): |
1268 mock_file = self.mockNamedTemporary( | 1284 mock_file = self.mockNamedTemporary( |
1269 read_contents='dalvik.vm.enableassertions=all\n') | 1285 read_contents='dalvik.vm.enableassertions=all\n') |
1270 with mock.patch('tempfile.NamedTemporaryFile', | 1286 with mock.patch('tempfile.NamedTemporaryFile', |
1271 return_value=mock_file), ( | 1287 return_value=mock_file), ( |
1272 mock.patch('__builtin__.open', return_value=mock_file)): | 1288 mock.patch('__builtin__.open', return_value=mock_file)): |
1273 with self.assertOldImplCallsSequence( | 1289 with self.assertCallsSequence( |
1274 [('adb -s 0123456789abcdef shell ls %s' % | 1290 [('adb -s 0123456789abcdef shell ls %s' % |
1275 constants.DEVICE_LOCAL_PROPERTIES_PATH, | 1291 constants.DEVICE_LOCAL_PROPERTIES_PATH, |
1276 '%s\r\n' % constants.DEVICE_LOCAL_PROPERTIES_PATH), | 1292 '%s\r\n' % constants.DEVICE_LOCAL_PROPERTIES_PATH), |
1277 ('adb -s 0123456789abcdef pull %s %s' % | 1293 ('adb -s 0123456789abcdef pull %s %s' % |
1278 (constants.DEVICE_LOCAL_PROPERTIES_PATH, mock_file.name), | 1294 (constants.DEVICE_LOCAL_PROPERTIES_PATH, mock_file.name), |
1279 '100 B/s (100 bytes in 1.000s)\r\n'), | 1295 '100 B/s (100 bytes in 1.000s)\r\n'), |
1280 ('adb -s 0123456789abcdef push %s %s' % | 1296 ('adb -s 0123456789abcdef push %s %s' % |
1281 (mock_file.name, constants.DEVICE_LOCAL_PROPERTIES_PATH), | 1297 (mock_file.name, constants.DEVICE_LOCAL_PROPERTIES_PATH), |
1282 '100 B/s (100 bytes in 1.000s)\r\n'), | 1298 '100 B/s (100 bytes in 1.000s)\r\n'), |
1283 ('adb -s 0123456789abcdef shell ' | 1299 ('adb -s 0123456789abcdef shell ' |
1284 'getprop dalvik.vm.enableassertions', | 1300 'getprop dalvik.vm.enableassertions', |
1285 'all\r\n'), | 1301 'all\r\n'), |
1286 ('adb -s 0123456789abcdef shell ' | 1302 ('adb -s 0123456789abcdef shell ' |
1287 'setprop dalvik.vm.enableassertions ""', | 1303 'setprop dalvik.vm.enableassertions ""', |
1288 '')]): | 1304 '')]): |
1289 self.device.SetJavaAsserts(False) | 1305 self.device.SetJavaAsserts(False) |
1290 | 1306 |
1291 def testSetJavaAsserts_alreadyEnabled(self): | 1307 def testSetJavaAsserts_alreadyEnabled(self): |
1292 mock_file = self.mockNamedTemporary( | 1308 mock_file = self.mockNamedTemporary( |
1293 read_contents='dalvik.vm.enableassertions=all\n') | 1309 read_contents='dalvik.vm.enableassertions=all\n') |
1294 with mock.patch('tempfile.NamedTemporaryFile', | 1310 with mock.patch('tempfile.NamedTemporaryFile', |
1295 return_value=mock_file), ( | 1311 return_value=mock_file), ( |
1296 mock.patch('__builtin__.open', return_value=mock_file)): | 1312 mock.patch('__builtin__.open', return_value=mock_file)): |
1297 with self.assertOldImplCallsSequence( | 1313 with self.assertCallsSequence( |
1298 [('adb -s 0123456789abcdef shell ls %s' % | 1314 [('adb -s 0123456789abcdef shell ls %s' % |
1299 constants.DEVICE_LOCAL_PROPERTIES_PATH, | 1315 constants.DEVICE_LOCAL_PROPERTIES_PATH, |
1300 '%s\r\n' % constants.DEVICE_LOCAL_PROPERTIES_PATH), | 1316 '%s\r\n' % constants.DEVICE_LOCAL_PROPERTIES_PATH), |
1301 ('adb -s 0123456789abcdef pull %s %s' % | 1317 ('adb -s 0123456789abcdef pull %s %s' % |
1302 (constants.DEVICE_LOCAL_PROPERTIES_PATH, mock_file.name), | 1318 (constants.DEVICE_LOCAL_PROPERTIES_PATH, mock_file.name), |
1303 '100 B/s (100 bytes in 1.000s)\r\n'), | 1319 '100 B/s (100 bytes in 1.000s)\r\n'), |
1304 ('adb -s 0123456789abcdef shell ' | 1320 ('adb -s 0123456789abcdef shell ' |
1305 'getprop dalvik.vm.enableassertions', | 1321 'getprop dalvik.vm.enableassertions', |
1306 'all\r\n')]): | 1322 'all\r\n')]): |
1307 self.assertFalse(self.device.SetJavaAsserts(True)) | 1323 self.assertFalse(self.device.SetJavaAsserts(True)) |
1308 | 1324 |
| 1325 |
| 1326 class DeviceUtilsGetPropTest(DeviceUtilsOldImplTest): |
| 1327 |
1309 def testGetProp_exists(self): | 1328 def testGetProp_exists(self): |
1310 with self.assertOldImplCalls( | 1329 with self.assertCalls( |
1311 'adb -s 0123456789abcdef shell getprop this.is.a.test.property', | 1330 'adb -s 0123456789abcdef shell getprop this.is.a.test.property', |
1312 'test_property_value\r\n'): | 1331 'test_property_value\r\n'): |
1313 self.assertEqual('test_property_value', | 1332 self.assertEqual('test_property_value', |
1314 self.device.GetProp('this.is.a.test.property')) | 1333 self.device.GetProp('this.is.a.test.property')) |
1315 | 1334 |
1316 def testGetProp_doesNotExist(self): | 1335 def testGetProp_doesNotExist(self): |
1317 with self.assertOldImplCalls( | 1336 with self.assertCalls( |
1318 'adb -s 0123456789abcdef shell ' | 1337 'adb -s 0123456789abcdef shell ' |
1319 'getprop this.property.does.not.exist', ''): | 1338 'getprop this.property.does.not.exist', ''): |
1320 self.assertEqual('', self.device.GetProp('this.property.does.not.exist')) | 1339 self.assertEqual('', self.device.GetProp('this.property.does.not.exist')) |
1321 | 1340 |
1322 def testGetProp_cachedRoProp(self): | 1341 def testGetProp_cachedRoProp(self): |
1323 with self.assertOldImplCalls( | 1342 with self.assertCalls( |
1324 'adb -s 0123456789abcdef shell ' | 1343 'adb -s 0123456789abcdef shell ' |
1325 'getprop ro.build.type', 'userdebug'): | 1344 'getprop ro.build.type', 'userdebug'): |
1326 self.assertEqual('userdebug', self.device.GetProp('ro.build.type')) | 1345 self.assertEqual('userdebug', self.device.GetProp('ro.build.type')) |
1327 self.assertEqual('userdebug', self.device.GetProp('ro.build.type')) | 1346 self.assertEqual('userdebug', self.device.GetProp('ro.build.type')) |
1328 | 1347 |
| 1348 |
| 1349 class DeviceUtilsSetPropTest(DeviceUtilsOldImplTest): |
| 1350 |
1329 def testSetProp(self): | 1351 def testSetProp(self): |
1330 with self.assertOldImplCalls( | 1352 with self.assertCalls( |
1331 'adb -s 0123456789abcdef shell ' | 1353 'adb -s 0123456789abcdef shell ' |
1332 'setprop this.is.a.test.property "test_property_value"', | 1354 'setprop this.is.a.test.property "test_property_value"', |
1333 ''): | 1355 ''): |
1334 self.device.SetProp('this.is.a.test.property', 'test_property_value') | 1356 self.device.SetProp('this.is.a.test.property', 'test_property_value') |
1335 | 1357 |
1336 | 1358 |
1337 if __name__ == '__main__': | 1359 if __name__ == '__main__': |
1338 logging.getLogger().setLevel(logging.DEBUG) | 1360 logging.getLogger().setLevel(logging.DEBUG) |
1339 unittest.main(verbosity=2) | 1361 unittest.main(verbosity=2) |
1340 | 1362 |
OLD | NEW |