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

Unified Diff: build/android/pylib/device/device_utils_test.py

Issue 358993003: [Android] Switch to DeviceUtils versions of file functions. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « build/android/pylib/device/device_utils.py ('k') | build/android/pylib/flag_changer.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: build/android/pylib/device/device_utils_test.py
diff --git a/build/android/pylib/device/device_utils_test.py b/build/android/pylib/device/device_utils_test.py
index 4c60514da05c2191d87874ffa025d68e0dd68da3..d7ac6d7c4a03c587db786640ff027e5a0e5b2a41 100644
--- a/build/android/pylib/device/device_utils_test.py
+++ b/build/android/pylib/device/device_utils_test.py
@@ -10,7 +10,9 @@ Unit tests for the contents of device_utils.py (mostly DeviceUtils).
# pylint: disable=W0212
# pylint: disable=W0613
+import collections
import os
+import re
import signal
import sys
import unittest
@@ -64,8 +66,9 @@ class DeviceUtilsOldImplTest(unittest.TestCase):
class AndroidCommandsCalls(object):
- def __init__(self, test_case, cmd_ret):
+ def __init__(self, test_case, cmd_ret, comp):
self._cmds = cmd_ret
+ self._comp = comp
self._test_case = test_case
self._total_received = 0
@@ -74,18 +77,20 @@ class DeviceUtilsOldImplTest(unittest.TestCase):
atr_run_command.RunCommand.side_effect = lambda c, **kw: self._ret(c)
def _ret(self, actual_cmd):
- on_failure_fmt = ('\n'
- ' received command: %s\n'
- ' expected command: %s')
- self._test_case.assertGreater(
- len(self._cmds), self._total_received,
- msg=on_failure_fmt % (actual_cmd, None))
- expected_cmd, ret = self._cmds[self._total_received]
- self._total_received += 1
- self._test_case.assertEqual(
- actual_cmd, expected_cmd,
- msg=on_failure_fmt % (actual_cmd, expected_cmd))
- return ret
+ if sys.exc_info()[0] is None:
+ on_failure_fmt = ('\n'
+ ' received command: %s\n'
+ ' expected command: %s')
+ self._test_case.assertGreater(
+ len(self._cmds), self._total_received,
+ msg=on_failure_fmt % (actual_cmd, None))
+ expected_cmd, ret = self._cmds[self._total_received]
+ self._total_received += 1
+ self._test_case.assertTrue(
+ self._comp(expected_cmd, actual_cmd),
+ msg=on_failure_fmt % (actual_cmd, expected_cmd))
+ return ret
+ return ''
def __exit__(self, exc_type, _exc_val, exc_trace):
if exc_type is None:
@@ -99,18 +104,21 @@ class DeviceUtilsOldImplTest(unittest.TestCase):
for (expected_cmd, _r), (_n, actual_args, actual_kwargs) in zip(
self._cmds, atr_run_command.RunCommand.mock_calls):
self._test_case.assertEqual(1, len(actual_args), msg=on_failure)
- self._test_case.assertEqual(expected_cmd, actual_args[0],
- msg=on_failure)
+ self._test_case.assertTrue(self._comp(expected_cmd, actual_args[0]),
+ msg=on_failure)
self._test_case.assertTrue('timeout_time' in actual_kwargs,
msg=on_failure)
self._test_case.assertTrue('retry_count' in actual_kwargs,
msg=on_failure)
- def assertOldImplCalls(self, cmd, ret):
- return type(self).AndroidCommandsCalls(self, [(cmd, ret)])
+ def assertNoAdbCalls(self):
+ return type(self).AndroidCommandsCalls(self, [], str.__eq__)
+
+ def assertOldImplCalls(self, cmd, ret, comp=str.__eq__):
+ return type(self).AndroidCommandsCalls(self, [(cmd, ret)], comp)
- def assertOldImplCallsSequence(self, cmd_ret):
- return type(self).AndroidCommandsCalls(self, cmd_ret)
+ def assertOldImplCallsSequence(self, cmd_ret, comp=str.__eq__):
+ return type(self).AndroidCommandsCalls(self, cmd_ret, comp)
def setUp(self):
self.device = device_utils.DeviceUtils(
@@ -717,6 +725,468 @@ class DeviceUtilsOldImplTest(unittest.TestCase):
''):
self.device.SendKeyEvent(66)
+ def testPushChangedFiles_noHostPath(self):
+ with mock.patch('os.path.exists', return_value=False):
+ with self.assertRaises(device_errors.CommandFailedError):
+ self.device.PushChangedFiles('/test/host/path', '/test/device/path')
+
+ def testPushChangedFiles_file_noChange(self):
+ self.device.old_interface._push_if_needed_cache = {}
+
+ host_file_path = '/test/host/path'
+ device_file_path = '/test/device/path'
+
+ mock_file_info = {
+ '/test/host/path': {
+ 'os.path.exists': True,
+ 'os.path.isdir': False,
+ 'os.path.getsize': 100,
+ },
+ }
+
+ os_path_exists = mock.Mock()
+ os_path_exists.side_effect = lambda f: mock_file_info[f]['os.path.exists']
+
+ os_path_isdir = mock.Mock()
+ os_path_isdir.side_effect = lambda f: mock_file_info[f]['os.path.isdir']
+
+ os_path_getsize = mock.Mock()
+ os_path_getsize.side_effect = lambda f: mock_file_info[f]['os.path.getsize']
+
+ self.device.old_interface.GetFilesChanged = mock.Mock(return_value=[])
+
+ with mock.patch('os.path.exists', new=os_path_exists), (
+ mock.patch('os.path.isdir', new=os_path_isdir)), (
+ mock.patch('os.path.getsize', new=os_path_getsize)):
+ # GetFilesChanged is mocked, so its adb calls are omitted.
+ with self.assertNoAdbCalls():
+ self.device.PushChangedFiles(host_file_path, device_file_path)
+
+ @staticmethod
+ def createMockOSStatResult(
+ st_mode=None, st_ino=None, st_dev=None, st_nlink=None, st_uid=None,
+ st_gid=None, st_size=None, st_atime=None, st_mtime=None, st_ctime=None):
+ MockOSStatResult = collections.namedtuple('MockOSStatResult', [
+ 'st_mode', 'st_ino', 'st_dev', 'st_nlink', 'st_uid', 'st_gid',
+ 'st_size', 'st_atime', 'st_mtime', 'st_ctime'])
+ return MockOSStatResult(st_mode, st_ino, st_dev, st_nlink, st_uid, st_gid,
+ st_size, st_atime, st_mtime, st_ctime)
+
+ def testPushChangedFiles_file_changed(self):
+ self.device.old_interface._push_if_needed_cache = {}
+
+ host_file_path = '/test/host/path'
+ device_file_path = '/test/device/path'
+
+ mock_file_info = {
+ '/test/host/path': {
+ 'os.path.exists': True,
+ 'os.path.isdir': False,
+ 'os.path.getsize': 100,
+ 'os.stat': self.createMockOSStatResult(st_mtime=1000000000)
+ },
+ }
+
+ os_path_exists = mock.Mock()
+ os_path_exists.side_effect = lambda f: mock_file_info[f]['os.path.exists']
+
+ os_path_isdir = mock.Mock()
+ os_path_isdir.side_effect = lambda f: mock_file_info[f]['os.path.isdir']
+
+ os_path_getsize = mock.Mock()
+ os_path_getsize.side_effect = lambda f: mock_file_info[f]['os.path.getsize']
+
+ os_stat = mock.Mock()
+ os_stat.side_effect = lambda f: mock_file_info[f]['os.stat']
+
+ self.device.old_interface.GetFilesChanged = mock.Mock(
+ return_value=[('/test/host/path', '/test/device/path')])
+
+ with mock.patch('os.path.exists', new=os_path_exists), (
+ mock.patch('os.path.isdir', new=os_path_isdir)), (
+ mock.patch('os.path.getsize', new=os_path_getsize)), (
+ mock.patch('os.stat', new=os_stat)):
+ with self.assertOldImplCalls('adb -s 0123456789abcdef push '
+ '/test/host/path /test/device/path', '100 B/s (100 B in 1.000s)\r\n'):
+ self.device.PushChangedFiles(host_file_path, device_file_path)
+
+ def testPushChangedFiles_directory_nothingChanged(self):
+ self.device.old_interface._push_if_needed_cache = {}
+
+ host_file_path = '/test/host/path'
+ device_file_path = '/test/device/path'
+
+ mock_file_info = {
+ '/test/host/path': {
+ 'os.path.exists': True,
+ 'os.path.isdir': True,
+ 'os.path.getsize': 256,
+ 'os.stat': self.createMockOSStatResult(st_mtime=1000000000)
+ },
+ '/test/host/path/file1': {
+ 'os.path.exists': True,
+ 'os.path.isdir': False,
+ 'os.path.getsize': 251,
+ 'os.stat': self.createMockOSStatResult(st_mtime=1000000001)
+ },
+ '/test/host/path/file2': {
+ 'os.path.exists': True,
+ 'os.path.isdir': False,
+ 'os.path.getsize': 252,
+ 'os.stat': self.createMockOSStatResult(st_mtime=1000000002)
+ },
+ }
+
+ os_path_exists = mock.Mock()
+ os_path_exists.side_effect = lambda f: mock_file_info[f]['os.path.exists']
+
+ os_path_isdir = mock.Mock()
+ os_path_isdir.side_effect = lambda f: mock_file_info[f]['os.path.isdir']
+
+ os_path_getsize = mock.Mock()
+ os_path_getsize.side_effect = lambda f: mock_file_info[f]['os.path.getsize']
+
+ os_stat = mock.Mock()
+ os_stat.side_effect = lambda f: mock_file_info[f]['os.stat']
+
+ self.device.old_interface.GetFilesChanged = mock.Mock(return_value=[])
+
+ with mock.patch('os.path.exists', new=os_path_exists), (
+ mock.patch('os.path.isdir', new=os_path_isdir)), (
+ mock.patch('os.path.getsize', new=os_path_getsize)), (
+ mock.patch('os.stat', new=os_stat)):
+ with self.assertOldImplCallsSequence([
+ ("adb -s 0123456789abcdef shell 'mkdir -p \"/test/device/path\"'",
+ '')]):
+ self.device.PushChangedFiles(host_file_path, device_file_path)
+
+ def testPushChangedFiles_directory_somethingChanged(self):
+ self.device.old_interface._push_if_needed_cache = {}
+
+ host_file_path = '/test/host/path'
+ device_file_path = '/test/device/path'
+
+ mock_file_info = {
+ '/test/host/path': {
+ 'os.path.exists': True,
+ 'os.path.isdir': True,
+ 'os.path.getsize': 256,
+ 'os.stat': self.createMockOSStatResult(st_mtime=1000000000),
+ 'os.walk': [('/test/host/path', [], ['file1', 'file2'])]
+ },
+ '/test/host/path/file1': {
+ 'os.path.exists': True,
+ 'os.path.isdir': False,
+ 'os.path.getsize': 256,
+ 'os.stat': self.createMockOSStatResult(st_mtime=1000000001)
+ },
+ '/test/host/path/file2': {
+ 'os.path.exists': True,
+ 'os.path.isdir': False,
+ 'os.path.getsize': 256,
+ 'os.stat': self.createMockOSStatResult(st_mtime=1000000002)
+ },
+ }
+
+ os_path_exists = mock.Mock()
+ os_path_exists.side_effect = lambda f: mock_file_info[f]['os.path.exists']
+
+ os_path_isdir = mock.Mock()
+ os_path_isdir.side_effect = lambda f: mock_file_info[f]['os.path.isdir']
+
+ os_path_getsize = mock.Mock()
+ os_path_getsize.side_effect = lambda f: mock_file_info[f]['os.path.getsize']
+
+ os_stat = mock.Mock()
+ os_stat.side_effect = lambda f: mock_file_info[f]['os.stat']
+
+ os_walk = mock.Mock()
+ os_walk.side_effect = lambda f: mock_file_info[f]['os.walk']
+
+ self.device.old_interface.GetFilesChanged = mock.Mock(
+ return_value=[('/test/host/path/file1', '/test/device/path/file1')])
+
+ with mock.patch('os.path.exists', new=os_path_exists), (
+ mock.patch('os.path.isdir', new=os_path_isdir)), (
+ mock.patch('os.path.getsize', new=os_path_getsize)), (
+ mock.patch('os.stat', new=os_stat)), (
+ mock.patch('os.walk', new=os_walk)):
+ with self.assertOldImplCallsSequence([
+ ("adb -s 0123456789abcdef shell 'mkdir -p \"/test/device/path\"'",
+ ''),
+ ('adb -s 0123456789abcdef push '
+ '/test/host/path/file1 /test/device/path/file1',
+ '256 B/s (256 B in 1.000s)\r\n')]):
+ self.device.PushChangedFiles(host_file_path, device_file_path)
+
+ def testPushChangedFiles_directory_everythingChanged(self):
+ self.device.old_interface._push_if_needed_cache = {}
+
+ host_file_path = '/test/host/path'
+ device_file_path = '/test/device/path'
+
+ mock_file_info = {
+ '/test/host/path': {
+ 'os.path.exists': True,
+ 'os.path.isdir': True,
+ 'os.path.getsize': 256,
+ 'os.stat': self.createMockOSStatResult(st_mtime=1000000000)
+ },
+ '/test/host/path/file1': {
+ 'os.path.exists': True,
+ 'os.path.isdir': False,
+ 'os.path.getsize': 256,
+ 'os.stat': self.createMockOSStatResult(st_mtime=1000000001)
+ },
+ '/test/host/path/file2': {
+ 'os.path.exists': True,
+ 'os.path.isdir': False,
+ 'os.path.getsize': 256,
+ 'os.stat': self.createMockOSStatResult(st_mtime=1000000002)
+ },
+ }
+
+ os_path_exists = mock.Mock()
+ os_path_exists.side_effect = lambda f: mock_file_info[f]['os.path.exists']
+
+ os_path_isdir = mock.Mock()
+ os_path_isdir.side_effect = lambda f: mock_file_info[f]['os.path.isdir']
+
+ os_path_getsize = mock.Mock()
+ os_path_getsize.side_effect = lambda f: mock_file_info[f]['os.path.getsize']
+
+ os_stat = mock.Mock()
+ os_stat.side_effect = lambda f: mock_file_info[f]['os.stat']
+
+ self.device.old_interface.GetFilesChanged = mock.Mock(
+ return_value=[('/test/host/path/file1', '/test/device/path/file1'),
+ ('/test/host/path/file2', '/test/device/path/file2')])
+
+ with mock.patch('os.path.exists', new=os_path_exists), (
+ mock.patch('os.path.isdir', new=os_path_isdir)), (
+ mock.patch('os.path.getsize', new=os_path_getsize)), (
+ mock.patch('os.stat', new=os_stat)):
+ with self.assertOldImplCallsSequence([
+ ("adb -s 0123456789abcdef shell 'mkdir -p \"/test/device/path\"'",
+ ''),
+ ('adb -s 0123456789abcdef push /test/host/path /test/device/path',
+ '768 B/s (768 B in 1.000s)\r\n')]):
+ self.device.PushChangedFiles(host_file_path, device_file_path)
+
+ def testFileExists_usingTest_fileExists(self):
+ with self.assertOldImplCalls(
+ "adb -s 0123456789abcdef shell "
+ "'test -e \"/data/app/test.file.exists\"; echo $?'",
+ '0\r\n'):
+ self.assertTrue(self.device.FileExists('/data/app/test.file.exists'))
+
+ def testFileExists_usingTest_fileDoesntExist(self):
+ with self.assertOldImplCalls(
+ "adb -s 0123456789abcdef shell "
+ "'test -e \"/data/app/test.file.does.not.exist\"; echo $?'",
+ '1\r\n'):
+ self.assertFalse(self.device.FileExists(
+ '/data/app/test.file.does.not.exist'))
+
+ def testFileExists_usingLs_fileExists(self):
+ with self.assertOldImplCallsSequence([
+ ("adb -s 0123456789abcdef shell "
+ "'test -e \"/data/app/test.file.exists\"; echo $?'",
+ 'test: not found\r\n'),
+ ("adb -s 0123456789abcdef shell "
+ "'ls \"/data/app/test.file.exists\" >/dev/null 2>&1; echo $?'",
+ '0\r\n')]):
+ self.assertTrue(self.device.FileExists('/data/app/test.file.exists'))
+
+ def testFileExists_usingLs_fileDoesntExist(self):
+ with self.assertOldImplCallsSequence([
+ ("adb -s 0123456789abcdef shell "
+ "'test -e \"/data/app/test.file.does.not.exist\"; echo $?'",
+ 'test: not found\r\n'),
+ ("adb -s 0123456789abcdef shell "
+ "'ls \"/data/app/test.file.does.not.exist\" "
+ ">/dev/null 2>&1; echo $?'",
+ '1\r\n')]):
+ self.assertFalse(self.device.FileExists(
+ '/data/app/test.file.does.not.exist'))
+
+ def testPullFile_existsOnDevice(self):
+ with mock.patch('os.path.exists', return_value=True):
+ with self.assertOldImplCallsSequence([
+ ('adb -s 0123456789abcdef shell '
+ 'ls /data/app/test.file.exists',
+ '/data/app/test.file.exists'),
+ ('adb -s 0123456789abcdef pull '
+ '/data/app/test.file.exists /test/file/host/path',
+ '100 B/s (100 bytes in 1.000s)\r\n')]):
+ self.device.PullFile('/data/app/test.file.exists',
+ '/test/file/host/path')
+
+ def testPullFile_doesntExistOnDevice(self):
+ with mock.patch('os.path.exists', return_value=True):
+ with self.assertOldImplCalls(
+ 'adb -s 0123456789abcdef shell '
+ 'ls /data/app/test.file.does.not.exist',
+ '/data/app/test.file.does.not.exist: No such file or directory\r\n'):
+ with self.assertRaises(device_errors.CommandFailedError):
+ self.device.PullFile('/data/app/test.file.does.not.exist',
+ '/test/file/host/path')
+
+ def testReadFile_exists(self):
+ with self.assertOldImplCallsSequence([
+ ("adb -s 0123456789abcdef shell "
+ "'cat \"/read/this/test/file\" 2>/dev/null'",
+ 'this is a test file')]):
+ self.assertEqual(['this is a test file'],
+ self.device.ReadFile('/read/this/test/file'))
+
+ def testReadFile_doesNotExist(self):
+ with self.assertOldImplCalls(
+ "adb -s 0123456789abcdef shell "
+ "'cat \"/this/file/does.not.exist\" 2>/dev/null'",
+ ''):
+ self.device.ReadFile('/this/file/does.not.exist')
+
+ def testReadFile_asRoot_withRoot(self):
+ self.device.old_interface._privileged_command_runner = (
+ self.device.old_interface.RunShellCommand)
+ self.device.old_interface._protected_file_access_method_initialized = True
+ with self.assertOldImplCallsSequence([
+ ("adb -s 0123456789abcdef shell "
+ "'cat \"/this/file/must.be.read.by.root\" 2> /dev/null'",
+ 'this is a test file\nread by root')]):
+ self.assertEqual(
+ ['this is a test file', 'read by root'],
+ self.device.ReadFile('/this/file/must.be.read.by.root',
+ as_root=True))
+
+ def testReadFile_asRoot_withSu(self):
+ self.device.old_interface._privileged_command_runner = (
+ self.device.old_interface.RunShellCommandWithSU)
+ self.device.old_interface._protected_file_access_method_initialized = True
+ with self.assertOldImplCallsSequence([
+ ("adb -s 0123456789abcdef shell "
+ "'su -c cat \"/this/file/can.be.read.with.su\" 2> /dev/null'",
+ 'this is a test file\nread with su')]):
+ self.assertEqual(
+ ['this is a test file', 'read with su'],
+ self.device.ReadFile('/this/file/can.be.read.with.su',
+ as_root=True))
+
+ def testReadFile_asRoot_rejected(self):
+ self.device.old_interface._privileged_command_runner = None
+ self.device.old_interface._protected_file_access_method_initialized = True
+ with self.assertRaises(device_errors.CommandFailedError):
+ self.device.ReadFile('/this/file/cannot.be.read.by.user',
+ as_root=True)
+
+ def testWriteFile_basic(self):
+ mock_file = mock.MagicMock(spec=file)
+ mock_file.name = '/tmp/file/to.be.pushed'
+ mock_file.__enter__.return_value = mock_file
+ with mock.patch('tempfile.NamedTemporaryFile',
+ return_value=mock_file):
+ with self.assertOldImplCalls(
+ 'adb -s 0123456789abcdef push '
+ '/tmp/file/to.be.pushed /test/file/written.to.device',
+ '100 B/s (100 bytes in 1.000s)\r\n'):
+ self.device.WriteFile('/test/file/written.to.device',
+ 'new test file contents')
+ mock_file.write.assert_called_once_with('new test file contents')
+
+ def testWriteFile_asRoot_withRoot(self):
+ self.device.old_interface._external_storage = '/fake/storage/path'
+ self.device.old_interface._privileged_command_runner = (
+ self.device.old_interface.RunShellCommand)
+ self.device.old_interface._protected_file_access_method_initialized = True
+
+ mock_file = mock.MagicMock(spec=file)
+ mock_file.name = '/tmp/file/to.be.pushed'
+ mock_file.__enter__.return_value = mock_file
+ with mock.patch('tempfile.NamedTemporaryFile',
+ return_value=mock_file):
+ with self.assertOldImplCallsSequence(
+ cmd_ret=[
+ # Create temporary contents file
+ (r"adb -s 0123456789abcdef shell "
+ "'test -e \"/fake/storage/path/temp_file-\d+-\d+\"; "
+ "echo \$\?'",
+ '1\r\n'),
+ # Create temporary script file
+ (r"adb -s 0123456789abcdef shell "
+ "'test -e \"/fake/storage/path/temp_file-\d+-\d+\.sh\"; "
+ "echo \$\?'",
+ '1\r\n'),
+ # Set contents file
+ (r'adb -s 0123456789abcdef push /tmp/file/to\.be\.pushed '
+ '/fake/storage/path/temp_file-\d+\d+',
+ '100 B/s (100 bytes in 1.000s)\r\n'),
+ # Set script file
+ (r'adb -s 0123456789abcdef push /tmp/file/to\.be\.pushed '
+ '/fake/storage/path/temp_file-\d+\d+',
+ '100 B/s (100 bytes in 1.000s)\r\n'),
+ # Call script
+ (r"adb -s 0123456789abcdef shell "
+ "'sh /fake/storage/path/temp_file-\d+-\d+\.sh'", ''),
+ # Remove device temporaries
+ (r"adb -s 0123456789abcdef shell "
+ "'rm /fake/storage/path/temp_file-\d+-\d+\.sh'", ''),
+ (r"adb -s 0123456789abcdef shell "
+ "'rm /fake/storage/path/temp_file-\d+-\d+'", '')],
+ comp=re.match):
+ self.device.WriteFile('/test/file/written.to.device',
+ 'new test file contents', as_root=True)
+
+ def testWriteFile_asRoot_withSu(self):
+ self.device.old_interface._external_storage = '/fake/storage/path'
+ self.device.old_interface._privileged_command_runner = (
+ self.device.old_interface.RunShellCommandWithSU)
+ self.device.old_interface._protected_file_access_method_initialized = True
+
+ mock_file = mock.MagicMock(spec=file)
+ mock_file.name = '/tmp/file/to.be.pushed'
+ mock_file.__enter__.return_value = mock_file
+ with mock.patch('tempfile.NamedTemporaryFile',
+ return_value=mock_file):
+ with self.assertOldImplCallsSequence(
+ cmd_ret=[
+ # Create temporary contents file
+ (r"adb -s 0123456789abcdef shell "
+ "'test -e \"/fake/storage/path/temp_file-\d+-\d+\"; "
+ "echo \$\?'",
+ '1\r\n'),
+ # Create temporary script file
+ (r"adb -s 0123456789abcdef shell "
+ "'test -e \"/fake/storage/path/temp_file-\d+-\d+\.sh\"; "
+ "echo \$\?'",
+ '1\r\n'),
+ # Set contents file
+ (r'adb -s 0123456789abcdef push /tmp/file/to\.be\.pushed '
+ '/fake/storage/path/temp_file-\d+\d+',
+ '100 B/s (100 bytes in 1.000s)\r\n'),
+ # Set script file
+ (r'adb -s 0123456789abcdef push /tmp/file/to\.be\.pushed '
+ '/fake/storage/path/temp_file-\d+\d+',
+ '100 B/s (100 bytes in 1.000s)\r\n'),
+ # Call script
+ (r"adb -s 0123456789abcdef shell "
+ "'su -c sh /fake/storage/path/temp_file-\d+-\d+\.sh'", ''),
+ # Remove device temporaries
+ (r"adb -s 0123456789abcdef shell "
+ "'rm /fake/storage/path/temp_file-\d+-\d+\.sh'", ''),
+ (r"adb -s 0123456789abcdef shell "
+ "'rm /fake/storage/path/temp_file-\d+-\d+'", '')],
+ comp=re.match):
+ self.device.WriteFile('/test/file/written.to.device',
+ 'new test file contents', as_root=True)
+
+ def testWriteFile_asRoot_rejected(self):
+ self.device.old_interface._privileged_command_runner = None
+ self.device.old_interface._protected_file_access_method_initialized = True
+ with self.assertRaises(device_errors.CommandFailedError):
+ self.device.WriteFile('/test/file/no.permissions.to.write',
+ 'new test file contents', as_root=True)
+
if __name__ == '__main__':
unittest.main(verbosity=2)
« no previous file with comments | « build/android/pylib/device/device_utils.py ('k') | build/android/pylib/flag_changer.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698