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

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

Issue 895853003: Update from https://crrev.com/314320 (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years, 10 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
« no previous file with comments | « build/android/pylib/device/device_utils.py ('k') | build/android/pylib/forwarder.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 signal 19 import signal
20 import sys 20 import sys
21 import unittest 21 import unittest
22 22
23 from pylib import android_commands 23 from pylib import android_commands
24 from pylib import cmd_helper
24 from pylib import constants 25 from pylib import constants
25 from pylib.device import adb_wrapper 26 from pylib.device import adb_wrapper
26 from pylib.device import device_errors 27 from pylib.device import device_errors
27 from pylib.device import device_utils 28 from pylib.device import device_utils
28 from pylib.device import intent 29 from pylib.device import intent
29 from pylib.utils import mock_calls 30 from pylib.utils import mock_calls
30 31
31 # RunCommand from third_party/android_testrunner/run_command.py is mocked 32 # RunCommand from third_party/android_testrunner/run_command.py is mocked
32 # below, so its path needs to be in sys.path. 33 # below, so its path needs to be in sys.path.
33 sys.path.append(os.path.join( 34 sys.path.append(os.path.join(
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 (mock.call.pylib.cmd_helper.GetCmdStatusAndOutput(['pgrep', 'adb']), 99 (mock.call.pylib.cmd_helper.GetCmdStatusAndOutput(['pgrep', 'adb']),
99 (0, '123\n'))): 100 (0, '123\n'))):
100 device_utils.RestartServer() 101 device_utils.RestartServer()
101 102
102 103
103 class MockTempFile(object): 104 class MockTempFile(object):
104 105
105 def __init__(self, name='/tmp/some/file'): 106 def __init__(self, name='/tmp/some/file'):
106 self.file = mock.MagicMock(spec=file) 107 self.file = mock.MagicMock(spec=file)
107 self.file.name = name 108 self.file.name = name
109 self.file.name_quoted = cmd_helper.SingleQuote(name)
108 110
109 def __enter__(self): 111 def __enter__(self):
110 return self.file 112 return self.file
111 113
112 def __exit__(self, exc_type, exc_val, exc_tb): 114 def __exit__(self, exc_type, exc_val, exc_tb):
113 pass 115 pass
114 116
115 117
116 class _PatchedFunction(object): 118 class _PatchedFunction(object):
117 def __init__(self, patched=None, mocked=None): 119 def __init__(self, patched=None, mocked=None):
(...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after
550 552
551 def testNewRunShellImpl_withCwd(self): 553 def testNewRunShellImpl_withCwd(self):
552 with self.assertCall(self.call.adb.Shell('cd /some/test/path && ls'), ''): 554 with self.assertCall(self.call.adb.Shell('cd /some/test/path && ls'), ''):
553 self.device.RunShellCommand('ls', cwd='/some/test/path') 555 self.device.RunShellCommand('ls', cwd='/some/test/path')
554 556
555 def testNewRunShellImpl_withCwdQuoted(self): 557 def testNewRunShellImpl_withCwdQuoted(self):
556 with self.assertCall( 558 with self.assertCall(
557 self.call.adb.Shell("cd '/some test/path with/spaces' && ls"), ''): 559 self.call.adb.Shell("cd '/some test/path with/spaces' && ls"), ''):
558 self.device.RunShellCommand('ls', cwd='/some test/path with/spaces') 560 self.device.RunShellCommand('ls', cwd='/some test/path with/spaces')
559 561
562 def testRunShellCommand_withHugeCmd(self):
563 payload = 'hi! ' * 1024
564 expected_cmd = "echo '%s'" % payload
565 with self.assertCalls(
566 (mock.call.pylib.utils.device_temp_file.DeviceTempFile(
567 self.adb, suffix='.sh'), MockTempFile('/sdcard/temp-123.sh')),
568 self.call.device._WriteFileWithPush('/sdcard/temp-123.sh', expected_cmd),
569 (self.call.adb.Shell('sh /sdcard/temp-123.sh'), payload + '\n')):
570 self.assertEquals([payload],
571 self.device.RunShellCommand(['echo', payload]))
572
573 def testRunShellCommand_withHugeCmdAmdSU(self):
574 payload = 'hi! ' * 1024
575 expected_cmd = """su -c sh -c 'echo '"'"'%s'"'"''""" % payload
576 with self.assertCalls(
577 (self.call.device.NeedsSU(), True),
578 (mock.call.pylib.utils.device_temp_file.DeviceTempFile(
579 self.adb, suffix='.sh'), MockTempFile('/sdcard/temp-123.sh')),
580 self.call.device._WriteFileWithPush('/sdcard/temp-123.sh', expected_cmd),
581 (self.call.adb.Shell('sh /sdcard/temp-123.sh'), payload + '\n')):
582 self.assertEquals(
583 [payload],
584 self.device.RunShellCommand(['echo', payload], as_root=True))
585
560 def testRunShellCommand_withSu(self): 586 def testRunShellCommand_withSu(self):
561 with self.assertCalls( 587 with self.assertCalls(
562 (self.call.device.NeedsSU(), True), 588 (self.call.device.NeedsSU(), True),
563 (self.call.adb.Shell("su -c sh -c 'setprop service.adb.root 0'"), '')): 589 (self.call.adb.Shell("su -c sh -c 'setprop service.adb.root 0'"), '')):
564 self.device.RunShellCommand('setprop service.adb.root 0', as_root=True) 590 self.device.RunShellCommand('setprop service.adb.root 0', as_root=True)
565 591
566 def testRunShellCommand_manyLines(self): 592 def testRunShellCommand_manyLines(self):
567 cmd = 'ls /some/path' 593 cmd = 'ls /some/path'
568 with self.assertCall(self.call.adb.Shell(cmd), 'file1\nfile2\nfile3\n'): 594 with self.assertCall(self.call.adb.Shell(cmd), 'file1\nfile2\nfile3\n'):
569 self.assertEquals(['file1', 'file2', 'file3'], 595 self.assertEquals(['file1', 'file2', 'file3'],
(...skipping 518 matching lines...) Expand 10 before | Expand all | Expand 10 after
1088 (self.call.adb.Shell("su -c sh -c 'cat /this/file/can.be.read.with.su'"), 1114 (self.call.adb.Shell("su -c sh -c 'cat /this/file/can.be.read.with.su'"),
1089 'this is a test file\nread with su')): 1115 'this is a test file\nread with su')):
1090 self.assertEqual( 1116 self.assertEqual(
1091 'this is a test file\nread with su\n', 1117 'this is a test file\nread with su\n',
1092 self.device.ReadFile('/this/file/can.be.read.with.su', 1118 self.device.ReadFile('/this/file/can.be.read.with.su',
1093 as_root=True)) 1119 as_root=True))
1094 1120
1095 1121
1096 class DeviceUtilsWriteFileTest(DeviceUtilsNewImplTest): 1122 class DeviceUtilsWriteFileTest(DeviceUtilsNewImplTest):
1097 1123
1098 def testWriteFile_withPush(self): 1124 def testWriteFileWithPush_success(self):
1099 tmp_host = MockTempFile('/tmp/file/on.host') 1125 tmp_host = MockTempFile('/tmp/file/on.host')
1100 contents = 'some large contents ' * 26 # 20 * 26 = 520 chars 1126 contents = 'some interesting contents'
1101 with self.assertCalls( 1127 with self.assertCalls(
1102 (mock.call.tempfile.NamedTemporaryFile(), tmp_host), 1128 (mock.call.tempfile.NamedTemporaryFile(), tmp_host),
1103 self.call.adb.Push('/tmp/file/on.host', '/path/to/device/file')): 1129 self.call.adb.Push('/tmp/file/on.host', '/path/to/device/file')):
1104 self.device.WriteFile('/path/to/device/file', contents) 1130 self.device._WriteFileWithPush('/path/to/device/file', contents)
1105 tmp_host.file.write.assert_called_once_with(contents) 1131 tmp_host.file.write.assert_called_once_with(contents)
1106 1132
1107 def testWriteFile_withPushForced(self): 1133 def testWriteFileWithPush_rejected(self):
1108 tmp_host = MockTempFile('/tmp/file/on.host') 1134 tmp_host = MockTempFile('/tmp/file/on.host')
1109 contents = 'tiny contents' 1135 contents = 'some interesting contents'
1110 with self.assertCalls(
1111 (mock.call.tempfile.NamedTemporaryFile(), tmp_host),
1112 self.call.adb.Push('/tmp/file/on.host', '/path/to/device/file')):
1113 self.device.WriteFile('/path/to/device/file', contents, force_push=True)
1114 tmp_host.file.write.assert_called_once_with(contents)
1115
1116 def testWriteFile_withPushAndSU(self):
1117 tmp_host = MockTempFile('/tmp/file/on.host')
1118 contents = 'some large contents ' * 26 # 20 * 26 = 520 chars
1119 with self.assertCalls(
1120 (mock.call.tempfile.NamedTemporaryFile(), tmp_host),
1121 (self.call.device.NeedsSU(), True),
1122 (mock.call.pylib.utils.device_temp_file.DeviceTempFile(self.adb),
1123 MockTempFile('/external/path/tmp/on.device')),
1124 self.call.adb.Push('/tmp/file/on.host', '/external/path/tmp/on.device'),
1125 self.call.device.RunShellCommand(
1126 ['cp', '/external/path/tmp/on.device', '/path/to/device/file'],
1127 as_root=True, check_return=True)):
1128 self.device.WriteFile('/path/to/device/file', contents, as_root=True)
1129 tmp_host.file.write.assert_called_once_with(contents)
1130
1131 def testWriteFile_withPush_rejected(self):
1132 tmp_host = MockTempFile('/tmp/file/on.host')
1133 contents = 'some large contents ' * 26 # 20 * 26 = 520 chars
1134 with self.assertCalls( 1136 with self.assertCalls(
1135 (mock.call.tempfile.NamedTemporaryFile(), tmp_host), 1137 (mock.call.tempfile.NamedTemporaryFile(), tmp_host),
1136 (self.call.adb.Push('/tmp/file/on.host', '/path/to/device/file'), 1138 (self.call.adb.Push('/tmp/file/on.host', '/path/to/device/file'),
1137 self.CommandError())): 1139 self.CommandError())):
1138 with self.assertRaises(device_errors.CommandFailedError): 1140 with self.assertRaises(device_errors.CommandFailedError):
1139 self.device.WriteFile('/path/to/device/file', contents) 1141 self.device._WriteFileWithPush('/path/to/device/file', contents)
1142
1143 def testWriteFile_withPush(self):
1144 contents = 'some large contents ' * 26 # 20 * 26 = 520 chars
1145 with self.assertCalls(
1146 self.call.device._WriteFileWithPush('/path/to/device/file', contents)):
1147 self.device.WriteFile('/path/to/device/file', contents)
1148
1149 def testWriteFile_withPushForced(self):
1150 contents = 'tiny contents'
1151 with self.assertCalls(
1152 self.call.device._WriteFileWithPush('/path/to/device/file', contents)):
1153 self.device.WriteFile('/path/to/device/file', contents, force_push=True)
1154
1155 def testWriteFile_withPushAndSU(self):
1156 contents = 'some large contents ' * 26 # 20 * 26 = 520 chars
1157 with self.assertCalls(
1158 (self.call.device.NeedsSU(), True),
1159 (mock.call.pylib.utils.device_temp_file.DeviceTempFile(self.adb),
1160 MockTempFile('/sdcard/tmp/on.device')),
1161 self.call.device._WriteFileWithPush('/sdcard/tmp/on.device', contents),
1162 self.call.device.RunShellCommand(
1163 ['cp', '/sdcard/tmp/on.device', '/path/to/device/file'],
1164 as_root=True, check_return=True)):
1165 self.device.WriteFile('/path/to/device/file', contents, as_root=True)
1140 1166
1141 def testWriteFile_withEcho(self): 1167 def testWriteFile_withEcho(self):
1142 with self.assertCall(self.call.adb.Shell( 1168 with self.assertCall(self.call.adb.Shell(
1143 "echo -n the.contents > /test/file/to.write"), ''): 1169 "echo -n the.contents > /test/file/to.write"), ''):
1144 self.device.WriteFile('/test/file/to.write', 'the.contents') 1170 self.device.WriteFile('/test/file/to.write', 'the.contents')
1145 1171
1146 def testWriteFile_withEchoAndQuotes(self): 1172 def testWriteFile_withEchoAndQuotes(self):
1147 with self.assertCall(self.call.adb.Shell( 1173 with self.assertCall(self.call.adb.Shell(
1148 "echo -n 'the contents' > '/test/file/to write'"), ''): 1174 "echo -n 'the contents' > '/test/file/to write'"), ''):
1149 self.device.WriteFile('/test/file/to write', 'the contents') 1175 self.device.WriteFile('/test/file/to write', 'the contents')
(...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after
1458 self.assertTrue( 1484 self.assertTrue(
1459 isinstance(device, device_utils.DeviceUtils) 1485 isinstance(device, device_utils.DeviceUtils)
1460 and serial == str(device), 1486 and serial == str(device),
1461 'Expected a DeviceUtils object with serial %s' % serial) 1487 'Expected a DeviceUtils object with serial %s' % serial)
1462 1488
1463 1489
1464 if __name__ == '__main__': 1490 if __name__ == '__main__':
1465 logging.getLogger().setLevel(logging.DEBUG) 1491 logging.getLogger().setLevel(logging.DEBUG)
1466 unittest.main(verbosity=2) 1492 unittest.main(verbosity=2)
1467 1493
OLDNEW
« no previous file with comments | « build/android/pylib/device/device_utils.py ('k') | build/android/pylib/forwarder.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698