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

Side by Side Diff: build/android/pylib/device/device_utils_test.py

Issue 1841863002: Update monet. (Closed) Base URL: https://github.com/domokit/monet.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2014 The Chromium Authors. All rights reserved. 2 # Copyright 2014 The Chromium Authors. All rights reserved.
3 # 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
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """ 6 """
7 Unit tests for the contents of device_utils.py (mostly DeviceUtils). 7 Unit tests for the contents of device_utils.py (mostly DeviceUtils).
8 """ 8 """
9 9
10 # pylint: disable=C0321 10 # pylint: disable=C0321
11 # pylint: disable=W0212 11 # pylint: disable=W0212
12 # pylint: disable=W0613 12 # pylint: disable=W0613
13 13
14 import collections 14 import collections
15 import datetime 15 import datetime
16 import logging 16 import logging
17 import os 17 import os
18 import re 18 import re
19 import sys 19 import sys
20 import unittest 20 import unittest
21 21
22 from pylib import android_commands 22 from pylib import android_commands
23 from pylib import cmd_helper 23 from pylib import cmd_helper
24 from pylib import constants 24 from pylib import constants
25 from pylib import device_signal 25 from pylib import device_signal
26 from pylib.device import adb_wrapper 26 from pylib.device import adb_wrapper
27 from pylib.device import device_errors 27 from pylib.device import device_errors
28 from pylib.device import device_utils 28 from pylib.device import device_utils
29 from pylib.device import intent 29 from pylib.device import intent
30 from pylib.sdk import split_select
30 from pylib.utils import mock_calls 31 from pylib.utils import mock_calls
31 32
32 # RunCommand from third_party/android_testrunner/run_command.py is mocked 33 # RunCommand from third_party/android_testrunner/run_command.py is mocked
33 # below, so its path needs to be in sys.path. 34 # below, so its path needs to be in sys.path.
34 sys.path.append(os.path.join( 35 sys.path.append(os.path.join(
35 constants.DIR_SOURCE_ROOT, 'third_party', 'android_testrunner')) 36 constants.DIR_SOURCE_ROOT, 'third_party', 'android_testrunner'))
36 37
37 sys.path.append(os.path.join( 38 sys.path.append(os.path.join(
38 constants.DIR_SOURCE_ROOT, 'third_party', 'pymock')) 39 constants.DIR_SOURCE_ROOT, 'third_party', 'pymock'))
39 import mock # pylint: disable=F0401 40 import mock # pylint: disable=F0401
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 134
134 135
135 class DeviceUtilsTest(mock_calls.TestCase): 136 class DeviceUtilsTest(mock_calls.TestCase):
136 137
137 def setUp(self): 138 def setUp(self):
138 self.adb = _AdbWrapperMock('0123456789abcdef') 139 self.adb = _AdbWrapperMock('0123456789abcdef')
139 self.device = device_utils.DeviceUtils( 140 self.device = device_utils.DeviceUtils(
140 self.adb, default_timeout=10, default_retries=0) 141 self.adb, default_timeout=10, default_retries=0)
141 self.watchMethodCalls(self.call.adb, ignore=['GetDeviceSerial']) 142 self.watchMethodCalls(self.call.adb, ignore=['GetDeviceSerial'])
142 143
144 def AdbCommandError(self, args=None, output=None, status=None, msg=None):
145 if args is None:
146 args = ['[unspecified]']
147 return mock.Mock(side_effect=device_errors.AdbCommandFailedError(
148 args, output, status, msg, str(self.device)))
149
150 def CommandError(self, msg=None):
151 if msg is None:
152 msg = 'Command failed'
153 return mock.Mock(side_effect=device_errors.CommandFailedError(
154 msg, str(self.device)))
155
143 def ShellError(self, output=None, status=1): 156 def ShellError(self, output=None, status=1):
144 def action(cmd, *args, **kwargs): 157 def action(cmd, *args, **kwargs):
145 raise device_errors.AdbShellCommandFailedError( 158 raise device_errors.AdbShellCommandFailedError(
146 cmd, output, status, str(self.device)) 159 cmd, output, status, str(self.device))
147 if output is None: 160 if output is None:
148 output = 'Permission denied\n' 161 output = 'Permission denied\n'
149 return action 162 return action
150 163
151 def TimeoutError(self, msg=None): 164 def TimeoutError(self, msg=None):
152 if msg is None: 165 if msg is None:
153 msg = 'Operation timed out' 166 msg = 'Operation timed out'
154 return mock.Mock(side_effect=device_errors.CommandTimeoutError( 167 return mock.Mock(side_effect=device_errors.CommandTimeoutError(
155 msg, str(self.device))) 168 msg, str(self.device)))
156 169
157 def CommandError(self, msg=None):
158 if msg is None:
159 msg = 'Command failed'
160 return mock.Mock(side_effect=device_errors.CommandFailedError(
161 msg, str(self.device)))
162
163 170
164 class DeviceUtilsEqTest(DeviceUtilsTest): 171 class DeviceUtilsEqTest(DeviceUtilsTest):
165 172
166 def testEq_equal_deviceUtils(self): 173 def testEq_equal_deviceUtils(self):
167 other = device_utils.DeviceUtils(_AdbWrapperMock('0123456789abcdef')) 174 other = device_utils.DeviceUtils(_AdbWrapperMock('0123456789abcdef'))
168 self.assertTrue(self.device == other) 175 self.assertTrue(self.device == other)
169 self.assertTrue(other == self.device) 176 self.assertTrue(other == self.device)
170 177
171 def testEq_equal_adbWrapper(self): 178 def testEq_equal_adbWrapper(self):
172 other = adb_wrapper.AdbWrapper('0123456789abcdef') 179 other = adb_wrapper.AdbWrapper('0123456789abcdef')
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 def testHasRoot_false(self): 259 def testHasRoot_false(self):
253 with self.assertCall(self.call.adb.Shell('ls /root'), self.ShellError()): 260 with self.assertCall(self.call.adb.Shell('ls /root'), self.ShellError()):
254 self.assertFalse(self.device.HasRoot()) 261 self.assertFalse(self.device.HasRoot())
255 262
256 263
257 class DeviceUtilsEnableRootTest(DeviceUtilsTest): 264 class DeviceUtilsEnableRootTest(DeviceUtilsTest):
258 265
259 def testEnableRoot_succeeds(self): 266 def testEnableRoot_succeeds(self):
260 with self.assertCalls( 267 with self.assertCalls(
261 (self.call.device.IsUserBuild(), False), 268 (self.call.device.IsUserBuild(), False),
262 self.call.adb.Root(), 269 self.call.adb.Root(),
263 self.call.adb.WaitForDevice()): 270 self.call.device.WaitUntilFullyBooted()):
264 self.device.EnableRoot() 271 self.device.EnableRoot()
265 272
266 def testEnableRoot_userBuild(self): 273 def testEnableRoot_userBuild(self):
267 with self.assertCalls( 274 with self.assertCalls(
268 (self.call.device.IsUserBuild(), True)): 275 (self.call.device.IsUserBuild(), True)):
269 with self.assertRaises(device_errors.CommandFailedError): 276 with self.assertRaises(device_errors.CommandFailedError):
270 self.device.EnableRoot() 277 self.device.EnableRoot()
271 278
272 def testEnableRoot_rootFails(self): 279 def testEnableRoot_rootFails(self):
273 with self.assertCalls( 280 with self.assertCalls(
(...skipping 23 matching lines...) Expand all
297 self.call.adb.Shell('echo $EXTERNAL_STORAGE'), '/fake/storage/path\n'): 304 self.call.adb.Shell('echo $EXTERNAL_STORAGE'), '/fake/storage/path\n'):
298 self.assertEquals('/fake/storage/path', 305 self.assertEquals('/fake/storage/path',
299 self.device.GetExternalStoragePath()) 306 self.device.GetExternalStoragePath())
300 307
301 def testGetExternalStoragePath_fails(self): 308 def testGetExternalStoragePath_fails(self):
302 with self.assertCall(self.call.adb.Shell('echo $EXTERNAL_STORAGE'), '\n'): 309 with self.assertCall(self.call.adb.Shell('echo $EXTERNAL_STORAGE'), '\n'):
303 with self.assertRaises(device_errors.CommandFailedError): 310 with self.assertRaises(device_errors.CommandFailedError):
304 self.device.GetExternalStoragePath() 311 self.device.GetExternalStoragePath()
305 312
306 313
307 class DeviceUtilsGetApplicationPathTest(DeviceUtilsTest): 314 class DeviceUtilsGetApplicationPathsTest(DeviceUtilsTest):
308 315
309 def testGetApplicationPath_exists(self): 316 def testGetApplicationPaths_exists(self):
310 with self.assertCalls( 317 with self.assertCalls(
311 (self.call.adb.Shell('getprop ro.build.version.sdk'), '19\n'), 318 (self.call.adb.Shell('getprop ro.build.version.sdk'), '19\n'),
312 (self.call.adb.Shell('pm path android'), 319 (self.call.adb.Shell('pm path android'),
313 'package:/path/to/android.apk\n')): 320 'package:/path/to/android.apk\n')):
314 self.assertEquals('/path/to/android.apk', 321 self.assertEquals(['/path/to/android.apk'],
315 self.device.GetApplicationPath('android')) 322 self.device.GetApplicationPaths('android'))
316 323
317 def testGetApplicationPath_notExists(self): 324 def testGetApplicationPaths_notExists(self):
318 with self.assertCalls( 325 with self.assertCalls(
319 (self.call.adb.Shell('getprop ro.build.version.sdk'), '19\n'), 326 (self.call.adb.Shell('getprop ro.build.version.sdk'), '19\n'),
320 (self.call.adb.Shell('pm path not.installed.app'), '')): 327 (self.call.adb.Shell('pm path not.installed.app'), '')):
321 self.assertEquals(None, 328 self.assertEquals([],
322 self.device.GetApplicationPath('not.installed.app')) 329 self.device.GetApplicationPaths('not.installed.app'))
323 330
324 def testGetApplicationPath_fails(self): 331 def testGetApplicationPaths_fails(self):
325 with self.assertCalls( 332 with self.assertCalls(
326 (self.call.adb.Shell('getprop ro.build.version.sdk'), '19\n'), 333 (self.call.adb.Shell('getprop ro.build.version.sdk'), '19\n'),
327 (self.call.adb.Shell('pm path android'), 334 (self.call.adb.Shell('pm path android'),
328 self.CommandError('ERROR. Is package manager running?\n'))): 335 self.CommandError('ERROR. Is package manager running?\n'))):
329 with self.assertRaises(device_errors.CommandFailedError): 336 with self.assertRaises(device_errors.CommandFailedError):
330 self.device.GetApplicationPath('android') 337 self.device.GetApplicationPaths('android')
338
339
340 class DeviceUtilsGetApplicationDataDirectoryTest(DeviceUtilsTest):
341
342 def testGetApplicationDataDirectory_exists(self):
343 with self.assertCall(
344 self.call.device._RunPipedShellCommand(
345 'pm dump foo.bar.baz | grep dataDir='),
346 ['dataDir=/data/data/foo.bar.baz']):
347 self.assertEquals(
348 '/data/data/foo.bar.baz',
349 self.device.GetApplicationDataDirectory('foo.bar.baz'))
350
351 def testGetApplicationDataDirectory_notExists(self):
352 with self.assertCall(
353 self.call.device._RunPipedShellCommand(
354 'pm dump foo.bar.baz | grep dataDir='),
355 self.ShellError()):
356 self.assertIsNone(self.device.GetApplicationDataDirectory('foo.bar.baz'))
331 357
332 358
333 @mock.patch('time.sleep', mock.Mock()) 359 @mock.patch('time.sleep', mock.Mock())
334 class DeviceUtilsWaitUntilFullyBootedTest(DeviceUtilsTest): 360 class DeviceUtilsWaitUntilFullyBootedTest(DeviceUtilsTest):
335 361
336 def testWaitUntilFullyBooted_succeedsNoWifi(self): 362 def testWaitUntilFullyBooted_succeedsNoWifi(self):
337 with self.assertCalls( 363 with self.assertCalls(
338 self.call.adb.WaitForDevice(), 364 self.call.adb.WaitForDevice(),
339 # sd_card_ready 365 # sd_card_ready
340 (self.call.device.GetExternalStoragePath(), '/fake/storage/path'), 366 (self.call.device.GetExternalStoragePath(), '/fake/storage/path'),
341 (self.call.adb.Shell('test -d /fake/storage/path'), ''), 367 (self.call.adb.Shell('test -d /fake/storage/path'), ''),
342 # pm_ready 368 # pm_ready
343 (self.call.device.GetApplicationPath('android'), 369 (self.call.device.GetApplicationPaths('android'),
344 'package:/some/fake/path'), 370 ['package:/some/fake/path']),
345 # boot_completed 371 # boot_completed
346 (self.call.device.GetProp('sys.boot_completed'), '1')): 372 (self.call.device.GetProp('sys.boot_completed'), '1')):
347 self.device.WaitUntilFullyBooted(wifi=False) 373 self.device.WaitUntilFullyBooted(wifi=False)
348 374
349 def testWaitUntilFullyBooted_succeedsWithWifi(self): 375 def testWaitUntilFullyBooted_succeedsWithWifi(self):
350 with self.assertCalls( 376 with self.assertCalls(
351 self.call.adb.WaitForDevice(), 377 self.call.adb.WaitForDevice(),
352 # sd_card_ready 378 # sd_card_ready
353 (self.call.device.GetExternalStoragePath(), '/fake/storage/path'), 379 (self.call.device.GetExternalStoragePath(), '/fake/storage/path'),
354 (self.call.adb.Shell('test -d /fake/storage/path'), ''), 380 (self.call.adb.Shell('test -d /fake/storage/path'), ''),
355 # pm_ready 381 # pm_ready
356 (self.call.device.GetApplicationPath('android'), 382 (self.call.device.GetApplicationPaths('android'),
357 'package:/some/fake/path'), 383 ['package:/some/fake/path']),
358 # boot_completed 384 # boot_completed
359 (self.call.device.GetProp('sys.boot_completed'), '1'), 385 (self.call.device.GetProp('sys.boot_completed'), '1'),
360 # wifi_enabled 386 # wifi_enabled
361 (self.call.adb.Shell('dumpsys wifi'), 387 (self.call.adb.Shell('dumpsys wifi'),
362 'stuff\nWi-Fi is enabled\nmore stuff\n')): 388 'stuff\nWi-Fi is enabled\nmore stuff\n')):
363 self.device.WaitUntilFullyBooted(wifi=True) 389 self.device.WaitUntilFullyBooted(wifi=True)
364 390
391 def testWaitUntilFullyBooted_deviceNotInitiallyAvailable(self):
392 with self.assertCalls(
393 self.call.adb.WaitForDevice(),
394 # sd_card_ready
395 (self.call.device.GetExternalStoragePath(), self.AdbCommandError()),
396 # sd_card_ready
397 (self.call.device.GetExternalStoragePath(), self.AdbCommandError()),
398 # sd_card_ready
399 (self.call.device.GetExternalStoragePath(), self.AdbCommandError()),
400 # sd_card_ready
401 (self.call.device.GetExternalStoragePath(), self.AdbCommandError()),
402 # sd_card_ready
403 (self.call.device.GetExternalStoragePath(), '/fake/storage/path'),
404 (self.call.adb.Shell('test -d /fake/storage/path'), ''),
405 # pm_ready
406 (self.call.device.GetApplicationPaths('android'),
407 ['package:/some/fake/path']),
408 # boot_completed
409 (self.call.device.GetProp('sys.boot_completed'), '1')):
410 self.device.WaitUntilFullyBooted(wifi=False)
411
365 def testWaitUntilFullyBooted_sdCardReadyFails_noPath(self): 412 def testWaitUntilFullyBooted_sdCardReadyFails_noPath(self):
366 with self.assertCalls( 413 with self.assertCalls(
367 self.call.adb.WaitForDevice(), 414 self.call.adb.WaitForDevice(),
368 # sd_card_ready 415 # sd_card_ready
369 (self.call.device.GetExternalStoragePath(), self.CommandError())): 416 (self.call.device.GetExternalStoragePath(), self.CommandError())):
370 with self.assertRaises(device_errors.CommandFailedError): 417 with self.assertRaises(device_errors.CommandFailedError):
371 self.device.WaitUntilFullyBooted(wifi=False) 418 self.device.WaitUntilFullyBooted(wifi=False)
372 419
373 def testWaitUntilFullyBooted_sdCardReadyFails_notExists(self): 420 def testWaitUntilFullyBooted_sdCardReadyFails_notExists(self):
374 with self.assertCalls( 421 with self.assertCalls(
(...skipping 11 matching lines...) Expand all
386 with self.assertRaises(device_errors.CommandTimeoutError): 433 with self.assertRaises(device_errors.CommandTimeoutError):
387 self.device.WaitUntilFullyBooted(wifi=False) 434 self.device.WaitUntilFullyBooted(wifi=False)
388 435
389 def testWaitUntilFullyBooted_devicePmFails(self): 436 def testWaitUntilFullyBooted_devicePmFails(self):
390 with self.assertCalls( 437 with self.assertCalls(
391 self.call.adb.WaitForDevice(), 438 self.call.adb.WaitForDevice(),
392 # sd_card_ready 439 # sd_card_ready
393 (self.call.device.GetExternalStoragePath(), '/fake/storage/path'), 440 (self.call.device.GetExternalStoragePath(), '/fake/storage/path'),
394 (self.call.adb.Shell('test -d /fake/storage/path'), ''), 441 (self.call.adb.Shell('test -d /fake/storage/path'), ''),
395 # pm_ready 442 # pm_ready
396 (self.call.device.GetApplicationPath('android'), self.CommandError()), 443 (self.call.device.GetApplicationPaths('android'), self.CommandError()),
397 # pm_ready 444 # pm_ready
398 (self.call.device.GetApplicationPath('android'), self.CommandError()), 445 (self.call.device.GetApplicationPaths('android'), self.CommandError()),
399 # pm_ready 446 # pm_ready
400 (self.call.device.GetApplicationPath('android'), self.TimeoutError())): 447 (self.call.device.GetApplicationPaths('android'), self.TimeoutError())):
401 with self.assertRaises(device_errors.CommandTimeoutError): 448 with self.assertRaises(device_errors.CommandTimeoutError):
402 self.device.WaitUntilFullyBooted(wifi=False) 449 self.device.WaitUntilFullyBooted(wifi=False)
403 450
404 def testWaitUntilFullyBooted_bootFails(self): 451 def testWaitUntilFullyBooted_bootFails(self):
405 with self.assertCalls( 452 with self.assertCalls(
406 self.call.adb.WaitForDevice(), 453 self.call.adb.WaitForDevice(),
407 # sd_card_ready 454 # sd_card_ready
408 (self.call.device.GetExternalStoragePath(), '/fake/storage/path'), 455 (self.call.device.GetExternalStoragePath(), '/fake/storage/path'),
409 (self.call.adb.Shell('test -d /fake/storage/path'), ''), 456 (self.call.adb.Shell('test -d /fake/storage/path'), ''),
410 # pm_ready 457 # pm_ready
411 (self.call.device.GetApplicationPath('android'), 458 (self.call.device.GetApplicationPaths('android'),
412 'package:/some/fake/path'), 459 ['package:/some/fake/path']),
413 # boot_completed 460 # boot_completed
414 (self.call.device.GetProp('sys.boot_completed'), '0'), 461 (self.call.device.GetProp('sys.boot_completed'), '0'),
415 # boot_completed 462 # boot_completed
416 (self.call.device.GetProp('sys.boot_completed'), '0'), 463 (self.call.device.GetProp('sys.boot_completed'), '0'),
417 # boot_completed 464 # boot_completed
418 (self.call.device.GetProp('sys.boot_completed'), self.TimeoutError())): 465 (self.call.device.GetProp('sys.boot_completed'), self.TimeoutError())):
419 with self.assertRaises(device_errors.CommandTimeoutError): 466 with self.assertRaises(device_errors.CommandTimeoutError):
420 self.device.WaitUntilFullyBooted(wifi=False) 467 self.device.WaitUntilFullyBooted(wifi=False)
421 468
422 def testWaitUntilFullyBooted_wifiFails(self): 469 def testWaitUntilFullyBooted_wifiFails(self):
423 with self.assertCalls( 470 with self.assertCalls(
424 self.call.adb.WaitForDevice(), 471 self.call.adb.WaitForDevice(),
425 # sd_card_ready 472 # sd_card_ready
426 (self.call.device.GetExternalStoragePath(), '/fake/storage/path'), 473 (self.call.device.GetExternalStoragePath(), '/fake/storage/path'),
427 (self.call.adb.Shell('test -d /fake/storage/path'), ''), 474 (self.call.adb.Shell('test -d /fake/storage/path'), ''),
428 # pm_ready 475 # pm_ready
429 (self.call.device.GetApplicationPath('android'), 476 (self.call.device.GetApplicationPaths('android'),
430 'package:/some/fake/path'), 477 ['package:/some/fake/path']),
431 # boot_completed 478 # boot_completed
432 (self.call.device.GetProp('sys.boot_completed'), '1'), 479 (self.call.device.GetProp('sys.boot_completed'), '1'),
433 # wifi_enabled 480 # wifi_enabled
434 (self.call.adb.Shell('dumpsys wifi'), 'stuff\nmore stuff\n'), 481 (self.call.adb.Shell('dumpsys wifi'), 'stuff\nmore stuff\n'),
435 # wifi_enabled 482 # wifi_enabled
436 (self.call.adb.Shell('dumpsys wifi'), 'stuff\nmore stuff\n'), 483 (self.call.adb.Shell('dumpsys wifi'), 'stuff\nmore stuff\n'),
437 # wifi_enabled 484 # wifi_enabled
438 (self.call.adb.Shell('dumpsys wifi'), self.TimeoutError())): 485 (self.call.adb.Shell('dumpsys wifi'), self.TimeoutError())):
439 with self.assertRaises(device_errors.CommandTimeoutError): 486 with self.assertRaises(device_errors.CommandTimeoutError):
440 self.device.WaitUntilFullyBooted(wifi=True) 487 self.device.WaitUntilFullyBooted(wifi=True)
(...skipping 25 matching lines...) Expand all
466 self.call.device.WaitUntilFullyBooted(wifi=True)): 513 self.call.device.WaitUntilFullyBooted(wifi=True)):
467 self.device.Reboot(block=True, wifi=True) 514 self.device.Reboot(block=True, wifi=True)
468 515
469 516
470 class DeviceUtilsInstallTest(DeviceUtilsTest): 517 class DeviceUtilsInstallTest(DeviceUtilsTest):
471 518
472 def testInstall_noPriorInstall(self): 519 def testInstall_noPriorInstall(self):
473 with self.assertCalls( 520 with self.assertCalls(
474 (mock.call.pylib.utils.apk_helper.GetPackageName('/fake/test/app.apk'), 521 (mock.call.pylib.utils.apk_helper.GetPackageName('/fake/test/app.apk'),
475 'this.is.a.test.package'), 522 'this.is.a.test.package'),
476 (self.call.device.GetApplicationPath('this.is.a.test.package'), None), 523 (self.call.device.GetApplicationPaths('this.is.a.test.package'), []),
477 self.call.adb.Install('/fake/test/app.apk', reinstall=False)): 524 self.call.adb.Install('/fake/test/app.apk', reinstall=False)):
478 self.device.Install('/fake/test/app.apk', retries=0) 525 self.device.Install('/fake/test/app.apk', retries=0)
479 526
480 def testInstall_differentPriorInstall(self): 527 def testInstall_differentPriorInstall(self):
481 with self.assertCalls( 528 with self.assertCalls(
482 (mock.call.pylib.utils.apk_helper.GetPackageName('/fake/test/app.apk'), 529 (mock.call.pylib.utils.apk_helper.GetPackageName('/fake/test/app.apk'),
483 'this.is.a.test.package'), 530 'this.is.a.test.package'),
484 (self.call.device.GetApplicationPath('this.is.a.test.package'), 531 (self.call.device.GetApplicationPaths('this.is.a.test.package'),
485 '/fake/data/app/this.is.a.test.package.apk'), 532 ['/fake/data/app/this.is.a.test.package.apk']),
486 (self.call.device._GetChangedFilesImpl( 533 (self.call.device._GetChangedAndStaleFiles(
487 '/fake/test/app.apk', '/fake/data/app/this.is.a.test.package.apk'), 534 '/fake/test/app.apk', '/fake/data/app/this.is.a.test.package.apk'),
488 [('/fake/test/app.apk', '/fake/data/app/this.is.a.test.package.apk')]), 535 ([('/fake/test/app.apk', '/fake/data/app/this.is.a.test.package.apk')],
536 [])),
489 self.call.adb.Uninstall('this.is.a.test.package'), 537 self.call.adb.Uninstall('this.is.a.test.package'),
490 self.call.adb.Install('/fake/test/app.apk', reinstall=False)): 538 self.call.adb.Install('/fake/test/app.apk', reinstall=False)):
491 self.device.Install('/fake/test/app.apk', retries=0) 539 self.device.Install('/fake/test/app.apk', retries=0)
492 540
493 def testInstall_differentPriorInstall_reinstall(self): 541 def testInstall_differentPriorInstall_reinstall(self):
494 with self.assertCalls( 542 with self.assertCalls(
495 (mock.call.pylib.utils.apk_helper.GetPackageName('/fake/test/app.apk'), 543 (mock.call.pylib.utils.apk_helper.GetPackageName('/fake/test/app.apk'),
496 'this.is.a.test.package'), 544 'this.is.a.test.package'),
497 (self.call.device.GetApplicationPath('this.is.a.test.package'), 545 (self.call.device.GetApplicationPaths('this.is.a.test.package'),
498 '/fake/data/app/this.is.a.test.package.apk'), 546 ['/fake/data/app/this.is.a.test.package.apk']),
499 (self.call.device._GetChangedFilesImpl( 547 (self.call.device._GetChangedAndStaleFiles(
500 '/fake/test/app.apk', '/fake/data/app/this.is.a.test.package.apk'), 548 '/fake/test/app.apk', '/fake/data/app/this.is.a.test.package.apk'),
501 [('/fake/test/app.apk', '/fake/data/app/this.is.a.test.package.apk')]), 549 ([('/fake/test/app.apk', '/fake/data/app/this.is.a.test.package.apk')],
550 [])),
502 self.call.adb.Install('/fake/test/app.apk', reinstall=True)): 551 self.call.adb.Install('/fake/test/app.apk', reinstall=True)):
503 self.device.Install('/fake/test/app.apk', reinstall=True, retries=0) 552 self.device.Install('/fake/test/app.apk', reinstall=True, retries=0)
504 553
505 def testInstall_identicalPriorInstall(self): 554 def testInstall_identicalPriorInstall(self):
506 with self.assertCalls( 555 with self.assertCalls(
507 (mock.call.pylib.utils.apk_helper.GetPackageName('/fake/test/app.apk'), 556 (mock.call.pylib.utils.apk_helper.GetPackageName('/fake/test/app.apk'),
508 'this.is.a.test.package'), 557 'this.is.a.test.package'),
509 (self.call.device.GetApplicationPath('this.is.a.test.package'), 558 (self.call.device.GetApplicationPaths('this.is.a.test.package'),
510 '/fake/data/app/this.is.a.test.package.apk'), 559 ['/fake/data/app/this.is.a.test.package.apk']),
511 (self.call.device._GetChangedFilesImpl( 560 (self.call.device._GetChangedAndStaleFiles(
512 '/fake/test/app.apk', '/fake/data/app/this.is.a.test.package.apk'), 561 '/fake/test/app.apk', '/fake/data/app/this.is.a.test.package.apk'),
513 [])): 562 ([], []))):
514 self.device.Install('/fake/test/app.apk', retries=0) 563 self.device.Install('/fake/test/app.apk', retries=0)
515 564
516 def testInstall_fails(self): 565 def testInstall_fails(self):
517 with self.assertCalls( 566 with self.assertCalls(
518 (mock.call.pylib.utils.apk_helper.GetPackageName('/fake/test/app.apk'), 567 (mock.call.pylib.utils.apk_helper.GetPackageName('/fake/test/app.apk'),
519 'this.is.a.test.package'), 568 'this.is.a.test.package'),
520 (self.call.device.GetApplicationPath('this.is.a.test.package'), None), 569 (self.call.device.GetApplicationPaths('this.is.a.test.package'), []),
521 (self.call.adb.Install('/fake/test/app.apk', reinstall=False), 570 (self.call.adb.Install('/fake/test/app.apk', reinstall=False),
522 self.CommandError('Failure\r\n'))): 571 self.CommandError('Failure\r\n'))):
523 with self.assertRaises(device_errors.CommandFailedError): 572 with self.assertRaises(device_errors.CommandFailedError):
524 self.device.Install('/fake/test/app.apk', retries=0) 573 self.device.Install('/fake/test/app.apk', retries=0)
525 574
575 class DeviceUtilsInstallSplitApkTest(DeviceUtilsTest):
576
577 def testInstallSplitApk_noPriorInstall(self):
578 with self.assertCalls(
579 (self.call.device._CheckSdkLevel(21)),
580 (mock.call.pylib.sdk.split_select.SelectSplits(
581 self.device, 'base.apk',
582 ['split1.apk', 'split2.apk', 'split3.apk']),
583 ['split2.apk']),
584 (mock.call.pylib.utils.apk_helper.GetPackageName('base.apk'),
585 'this.is.a.test.package'),
586 (self.call.device.GetApplicationPaths('this.is.a.test.package'), []),
587 (self.call.adb.InstallMultiple(
588 ['base.apk', 'split2.apk'], partial=None, reinstall=False))):
589 self.device.InstallSplitApk('base.apk',
590 ['split1.apk', 'split2.apk', 'split3.apk'], retries=0)
591
592 def testInstallSplitApk_partialInstall(self):
593 with self.assertCalls(
594 (self.call.device._CheckSdkLevel(21)),
595 (mock.call.pylib.sdk.split_select.SelectSplits(
596 self.device, 'base.apk',
597 ['split1.apk', 'split2.apk', 'split3.apk']),
598 ['split2.apk']),
599 (mock.call.pylib.utils.apk_helper.GetPackageName('base.apk'),
600 'test.package'),
601 (self.call.device.GetApplicationPaths('test.package'),
602 ['base-on-device.apk', 'split2-on-device.apk']),
603 (mock.call.pylib.utils.md5sum.CalculateDeviceMd5Sums(
604 ['base-on-device.apk', 'split2-on-device.apk'], self.device),
605 {'base-on-device.apk': 'AAA', 'split2-on-device.apk': 'BBB'}),
606 (mock.call.pylib.utils.md5sum.CalculateHostMd5Sums(
607 ['base.apk', 'split2.apk']),
608 {'base.apk': 'AAA', 'split2.apk': 'CCC'}),
609 (self.call.adb.InstallMultiple(
610 ['split2.apk'], partial='test.package', reinstall=True))):
611 self.device.InstallSplitApk('base.apk',
612 ['split1.apk', 'split2.apk', 'split3.apk'], reinstall=True, retries=0)
613
526 614
527 class DeviceUtilsRunShellCommandTest(DeviceUtilsTest): 615 class DeviceUtilsRunShellCommandTest(DeviceUtilsTest):
528 616
529 def setUp(self): 617 def setUp(self):
530 super(DeviceUtilsRunShellCommandTest, self).setUp() 618 super(DeviceUtilsRunShellCommandTest, self).setUp()
531 self.device.NeedsSU = mock.Mock(return_value=False) 619 self.device.NeedsSU = mock.Mock(return_value=False)
532 620
533 def testRunShellCommand_commandAsList(self): 621 def testRunShellCommand_commandAsList(self):
534 with self.assertCall(self.call.adb.Shell('pm list packages'), ''): 622 with self.assertCall(self.call.adb.Shell('pm list packages'), ''):
535 self.device.RunShellCommand(['pm', 'list', 'packages']) 623 self.device.RunShellCommand(['pm', 'list', 'packages'])
(...skipping 402 matching lines...) Expand 10 before | Expand all | Expand 10 after
938 'Starting: Intent { act=android.intent.action.VIEW }'): 1026 'Starting: Intent { act=android.intent.action.VIEW }'):
939 self.device.StartActivity(test_intent) 1027 self.device.StartActivity(test_intent)
940 1028
941 1029
942 class DeviceUtilsStartInstrumentationTest(DeviceUtilsTest): 1030 class DeviceUtilsStartInstrumentationTest(DeviceUtilsTest):
943 1031
944 def testStartInstrumentation_nothing(self): 1032 def testStartInstrumentation_nothing(self):
945 with self.assertCalls( 1033 with self.assertCalls(
946 self.call.device.RunShellCommand( 1034 self.call.device.RunShellCommand(
947 ['am', 'instrument', 'test.package/.TestInstrumentation'], 1035 ['am', 'instrument', 'test.package/.TestInstrumentation'],
948 check_return=True)): 1036 check_return=True, large_output=True)):
949 self.device.StartInstrumentation( 1037 self.device.StartInstrumentation(
950 'test.package/.TestInstrumentation', 1038 'test.package/.TestInstrumentation',
951 finish=False, raw=False, extras=None) 1039 finish=False, raw=False, extras=None)
952 1040
953 def testStartInstrumentation_finish(self): 1041 def testStartInstrumentation_finish(self):
954 with self.assertCalls( 1042 with self.assertCalls(
955 (self.call.device.RunShellCommand( 1043 (self.call.device.RunShellCommand(
956 ['am', 'instrument', '-w', 'test.package/.TestInstrumentation'], 1044 ['am', 'instrument', '-w', 'test.package/.TestInstrumentation'],
957 check_return=True), 1045 check_return=True, large_output=True),
958 ['OK (1 test)'])): 1046 ['OK (1 test)'])):
959 output = self.device.StartInstrumentation( 1047 output = self.device.StartInstrumentation(
960 'test.package/.TestInstrumentation', 1048 'test.package/.TestInstrumentation',
961 finish=True, raw=False, extras=None) 1049 finish=True, raw=False, extras=None)
962 self.assertEquals(['OK (1 test)'], output) 1050 self.assertEquals(['OK (1 test)'], output)
963 1051
964 def testStartInstrumentation_raw(self): 1052 def testStartInstrumentation_raw(self):
965 with self.assertCalls( 1053 with self.assertCalls(
966 self.call.device.RunShellCommand( 1054 self.call.device.RunShellCommand(
967 ['am', 'instrument', '-r', 'test.package/.TestInstrumentation'], 1055 ['am', 'instrument', '-r', 'test.package/.TestInstrumentation'],
968 check_return=True)): 1056 check_return=True, large_output=True)):
969 self.device.StartInstrumentation( 1057 self.device.StartInstrumentation(
970 'test.package/.TestInstrumentation', 1058 'test.package/.TestInstrumentation',
971 finish=False, raw=True, extras=None) 1059 finish=False, raw=True, extras=None)
972 1060
973 def testStartInstrumentation_extras(self): 1061 def testStartInstrumentation_extras(self):
974 with self.assertCalls( 1062 with self.assertCalls(
975 self.call.device.RunShellCommand( 1063 self.call.device.RunShellCommand(
976 ['am', 'instrument', '-e', 'foo', 'Foo', '-e', 'bar', 'Bar', 1064 ['am', 'instrument', '-e', 'foo', 'Foo', '-e', 'bar', 'Bar',
977 'test.package/.TestInstrumentation'], 1065 'test.package/.TestInstrumentation'],
978 check_return=True)): 1066 check_return=True, large_output=True)):
979 self.device.StartInstrumentation( 1067 self.device.StartInstrumentation(
980 'test.package/.TestInstrumentation', 1068 'test.package/.TestInstrumentation',
981 finish=False, raw=False, extras={'foo': 'Foo', 'bar': 'Bar'}) 1069 finish=False, raw=False, extras={'foo': 'Foo', 'bar': 'Bar'})
982 1070
983 1071
984 class DeviceUtilsBroadcastIntentTest(DeviceUtilsTest): 1072 class DeviceUtilsBroadcastIntentTest(DeviceUtilsTest):
985 1073
986 def testBroadcastIntent_noExtras(self): 1074 def testBroadcastIntent_noExtras(self):
987 test_intent = intent.Intent(action='test.package.with.an.INTENT') 1075 test_intent = intent.Intent(action='test.package.with.an.INTENT')
988 with self.assertCall( 1076 with self.assertCall(
(...skipping 15 matching lines...) Expand all
1004 extras={'foo': None}) 1092 extras={'foo': None})
1005 with self.assertCall( 1093 with self.assertCall(
1006 self.call.adb.Shell( 1094 self.call.adb.Shell(
1007 'am broadcast -a test.package.with.an.INTENT --esn foo'), 1095 'am broadcast -a test.package.with.an.INTENT --esn foo'),
1008 'Broadcasting: Intent { act=test.package.with.an.INTENT } '): 1096 'Broadcasting: Intent { act=test.package.with.an.INTENT } '):
1009 self.device.BroadcastIntent(test_intent) 1097 self.device.BroadcastIntent(test_intent)
1010 1098
1011 1099
1012 class DeviceUtilsGoHomeTest(DeviceUtilsTest): 1100 class DeviceUtilsGoHomeTest(DeviceUtilsTest):
1013 1101
1014 def testGoHome(self): 1102 def testGoHome_popupsExist(self):
1015 with self.assertCall( 1103 with self.assertCalls(
1016 self.call.adb.Shell('am start -W -a android.intent.action.MAIN ' 1104 (self.call.device.RunShellCommand(
1017 '-c android.intent.category.HOME'), 1105 ['dumpsys', 'window', 'windows'], check_return=True,
1018 'Starting: Intent { act=android.intent.action.MAIN }\r\n'): 1106 large_output=True), []),
1107 (self.call.device.RunShellCommand(
1108 ['am', 'start', '-W', '-a', 'android.intent.action.MAIN',
1109 '-c', 'android.intent.category.HOME'], check_return=True),
1110 'Starting: Intent { act=android.intent.action.MAIN }\r\n'''),
1111 (self.call.device.RunShellCommand(
1112 ['dumpsys', 'window', 'windows'], check_return=True,
1113 large_output=True), []),
1114 (self.call.device.RunShellCommand(
1115 ['input', 'keyevent', '66'], check_return=True)),
1116 (self.call.device.RunShellCommand(
1117 ['input', 'keyevent', '4'], check_return=True)),
1118 (self.call.device.RunShellCommand(
1119 ['dumpsys', 'window', 'windows'], check_return=True,
1120 large_output=True),
1121 ['mCurrentFocus Launcher'])):
1019 self.device.GoHome() 1122 self.device.GoHome()
1020 1123
1124 def testGoHome_willRetry(self):
1125 with self.assertCalls(
1126 (self.call.device.RunShellCommand(
1127 ['dumpsys', 'window', 'windows'], check_return=True,
1128 large_output=True), []),
1129 (self.call.device.RunShellCommand(
1130 ['am', 'start', '-W', '-a', 'android.intent.action.MAIN',
1131 '-c', 'android.intent.category.HOME'], check_return=True),
1132 'Starting: Intent { act=android.intent.action.MAIN }\r\n'''),
1133 (self.call.device.RunShellCommand(
1134 ['dumpsys', 'window', 'windows'], check_return=True,
1135 large_output=True), []),
1136 (self.call.device.RunShellCommand(
1137 ['input', 'keyevent', '66'], check_return=True,)),
1138 (self.call.device.RunShellCommand(
1139 ['input', 'keyevent', '4'], check_return=True)),
1140 (self.call.device.RunShellCommand(
1141 ['dumpsys', 'window', 'windows'], check_return=True,
1142 large_output=True), []),
1143 (self.call.device.RunShellCommand(
1144 ['input', 'keyevent', '66'], check_return=True)),
1145 (self.call.device.RunShellCommand(
1146 ['input', 'keyevent', '4'], check_return=True)),
1147 (self.call.device.RunShellCommand(
1148 ['dumpsys', 'window', 'windows'], check_return=True,
1149 large_output=True),
1150 self.TimeoutError())):
1151 with self.assertRaises(device_errors.CommandTimeoutError):
1152 self.device.GoHome()
1153
1154 def testGoHome_alreadyFocused(self):
1155 with self.assertCall(
1156 self.call.device.RunShellCommand(
1157 ['dumpsys', 'window', 'windows'], check_return=True,
1158 large_output=True),
1159 ['mCurrentFocus Launcher']):
1160 self.device.GoHome()
1161
1162 def testGoHome_alreadyFocusedAlternateCase(self):
1163 with self.assertCall(
1164 self.call.device.RunShellCommand(
1165 ['dumpsys', 'window', 'windows'], check_return=True,
1166 large_output=True),
1167 [' mCurrentFocus .launcher/.']):
1168 self.device.GoHome()
1169
1170 def testGoHome_obtainsFocusAfterGoingHome(self):
1171 with self.assertCalls(
1172 (self.call.device.RunShellCommand(
1173 ['dumpsys', 'window', 'windows'], check_return=True,
1174 large_output=True), []),
1175 (self.call.device.RunShellCommand(
1176 ['am', 'start', '-W', '-a', 'android.intent.action.MAIN',
1177 '-c', 'android.intent.category.HOME'], check_return=True),
1178 'Starting: Intent { act=android.intent.action.MAIN }\r\n'''),
1179 (self.call.device.RunShellCommand(
1180 ['dumpsys', 'window', 'windows'], check_return=True,
1181 large_output=True),
1182 ['mCurrentFocus Launcher'])):
1183 self.device.GoHome()
1021 1184
1022 class DeviceUtilsForceStopTest(DeviceUtilsTest): 1185 class DeviceUtilsForceStopTest(DeviceUtilsTest):
1023 1186
1024 def testForceStop(self): 1187 def testForceStop(self):
1025 with self.assertCall( 1188 with self.assertCall(
1026 self.call.adb.Shell('am force-stop this.is.a.test.package'), 1189 self.call.adb.Shell('am force-stop this.is.a.test.package'),
1027 ''): 1190 ''):
1028 self.device.ForceStop('this.is.a.test.package') 1191 self.device.ForceStop('this.is.a.test.package')
1029 1192
1030 1193
1031 class DeviceUtilsClearApplicationStateTest(DeviceUtilsTest): 1194 class DeviceUtilsClearApplicationStateTest(DeviceUtilsTest):
1032 1195
1033 def testClearApplicationState_packageDoesntExist(self): 1196 def testClearApplicationState_packageDoesntExist(self):
1034 with self.assertCalls( 1197 with self.assertCalls(
1035 (self.call.adb.Shell('getprop ro.build.version.sdk'), '17\n'), 1198 (self.call.adb.Shell('getprop ro.build.version.sdk'), '17\n'),
1036 (self.call.device.GetApplicationPath('this.package.does.not.exist'), 1199 (self.call.device.GetApplicationPaths('this.package.does.not.exist'),
1037 None)): 1200 [])):
1038 self.device.ClearApplicationState('this.package.does.not.exist') 1201 self.device.ClearApplicationState('this.package.does.not.exist')
1039 1202
1040 def testClearApplicationState_packageDoesntExistOnAndroidJBMR2OrAbove(self): 1203 def testClearApplicationState_packageDoesntExistOnAndroidJBMR2OrAbove(self):
1041 with self.assertCalls( 1204 with self.assertCalls(
1042 (self.call.adb.Shell('getprop ro.build.version.sdk'), '18\n'), 1205 (self.call.adb.Shell('getprop ro.build.version.sdk'), '18\n'),
1043 (self.call.adb.Shell('pm clear this.package.does.not.exist'), 1206 (self.call.adb.Shell('pm clear this.package.does.not.exist'),
1044 'Failed\r\n')): 1207 'Failed\r\n')):
1045 self.device.ClearApplicationState('this.package.does.not.exist') 1208 self.device.ClearApplicationState('this.package.does.not.exist')
1046 1209
1047 def testClearApplicationState_packageExists(self): 1210 def testClearApplicationState_packageExists(self):
1048 with self.assertCalls( 1211 with self.assertCalls(
1049 (self.call.adb.Shell('getprop ro.build.version.sdk'), '17\n'), 1212 (self.call.adb.Shell('getprop ro.build.version.sdk'), '17\n'),
1050 (self.call.device.GetApplicationPath('this.package.exists'), 1213 (self.call.device.GetApplicationPaths('this.package.exists'),
1051 '/data/app/this.package.exists.apk'), 1214 ['/data/app/this.package.exists.apk']),
1052 (self.call.adb.Shell('pm clear this.package.exists'), 1215 (self.call.adb.Shell('pm clear this.package.exists'),
1053 'Success\r\n')): 1216 'Success\r\n')):
1054 self.device.ClearApplicationState('this.package.exists') 1217 self.device.ClearApplicationState('this.package.exists')
1055 1218
1056 def testClearApplicationState_packageExistsOnAndroidJBMR2OrAbove(self): 1219 def testClearApplicationState_packageExistsOnAndroidJBMR2OrAbove(self):
1057 with self.assertCalls( 1220 with self.assertCalls(
1058 (self.call.adb.Shell('getprop ro.build.version.sdk'), '18\n'), 1221 (self.call.adb.Shell('getprop ro.build.version.sdk'), '18\n'),
1059 (self.call.adb.Shell('pm clear this.package.exists'), 1222 (self.call.adb.Shell('pm clear this.package.exists'),
1060 'Success\r\n')): 1223 'Success\r\n')):
1061 self.device.ClearApplicationState('this.package.exists') 1224 self.device.ClearApplicationState('this.package.exists')
(...skipping 611 matching lines...) Expand 10 before | Expand all | Expand 10 after
1673 devices = device_utils.DeviceUtils.HealthyDevices() 1836 devices = device_utils.DeviceUtils.HealthyDevices()
1674 self.assertEquals(1, len(devices)) 1837 self.assertEquals(1, len(devices))
1675 self.assertTrue(isinstance(devices[0], device_utils.DeviceUtils)) 1838 self.assertTrue(isinstance(devices[0], device_utils.DeviceUtils))
1676 self.assertEquals('0123456789abcdef', devices[0].adb.GetDeviceSerial()) 1839 self.assertEquals('0123456789abcdef', devices[0].adb.GetDeviceSerial())
1677 1840
1678 1841
1679 if __name__ == '__main__': 1842 if __name__ == '__main__':
1680 logging.getLogger().setLevel(logging.DEBUG) 1843 logging.getLogger().setLevel(logging.DEBUG)
1681 unittest.main(verbosity=2) 1844 unittest.main(verbosity=2)
1682 1845
OLDNEW
« no previous file with comments | « build/android/pylib/device/device_utils_device_test.py ('k') | build/android/pylib/forwarder.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698