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

Unified Diff: build/android/pylib/utils/device_temp_file_test.py

Issue 751063002: Allow RunShellCommand to work even with very large commands (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: comment implementation of WriteFile Created 6 years 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/utils/device_temp_file.py ('k') | build/android/pylib/utils/md5sum.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: build/android/pylib/utils/device_temp_file_test.py
diff --git a/build/android/pylib/utils/device_temp_file_test.py b/build/android/pylib/utils/device_temp_file_test.py
index b0d23b12685fe04b7ada456307c6e6627f7727ea..0eb80a86f42b355849801f7c166ab40ff3c354bb 100755
--- a/build/android/pylib/utils/device_temp_file_test.py
+++ b/build/android/pylib/utils/device_temp_file_test.py
@@ -13,38 +13,80 @@ import sys
import unittest
from pylib import constants
+from pylib.device import adb_wrapper
+from pylib.device import device_errors
from pylib.utils import device_temp_file
+from pylib.utils import mock_calls
sys.path.append(os.path.join(
constants.DIR_SOURCE_ROOT, 'third_party', 'pymock'))
import mock # pylint: disable=F0401
-class DeviceTempFileTest(unittest.TestCase):
+class DeviceTempFileTest(mock_calls.TestCase):
def setUp(self):
- self.device_utils = mock.MagicMock()
+ test_serial = '0123456789abcdef'
+ self.adb = mock.Mock(spec=adb_wrapper.AdbWrapper)
+ self.adb.__str__ = mock.Mock(return_value=test_serial)
+ self.watchMethodCalls(self.call.adb)
- def testTempFileNameAlreadyExists(self):
- self.device_utils.GetExternalStoragePath.return_value = '/sdcard'
- self.device_utils.FileExists.side_effect = [True, True, True, False]
+ def mockShellCall(self, cmd_prefix, action=''):
+ """Expect an adb.Shell(cmd) call with cmd_prefix and do some action
- tmpfile = device_temp_file.DeviceTempFile(self.device_utils)
- logging.debug('Temp file name: %s' % tmpfile.name)
- self.assertEqual(self.device_utils.FileExists.call_count, 4)
- self.device_utils.WriteFile.assert_called_with(tmpfile.name, '')
+ Args:
+ cmd_prefix: A string, the cmd of the received call is expected to have
+ this as a prefix.
+ action: If callable, an action to perform when the expected call is
+ received, otherwise a return value.
+ Returns:
+ An (expected_call, action) pair suitable for use in assertCalls.
+ """
+ def check_and_return(cmd):
+ self.assertTrue(
+ cmd.startswith(cmd_prefix),
+ 'command %r does not start with prefix %r' % (cmd, cmd_prefix))
+ if callable(action):
+ return action(cmd)
+ else:
+ return action
+ return (self.call.adb.Shell(mock.ANY), check_and_return)
- def testTempFileLifecycle(self):
- self.device_utils.GetExternalStoragePath.return_value = '/sdcard'
- self.device_utils.FileExists.return_value = False
+ def mockExistsTest(self, exists_result):
+ def action(cmd):
+ if exists_result:
+ return ''
+ else:
+ raise device_errors.AdbCommandFailedError(
+ cmd, 'File not found', 1, str(self.adb))
+ return self.mockShellCall('test -e ', action)
- with device_temp_file.DeviceTempFile(self.device_utils) as tmpfile:
- filename = tmpfile.name
- self.assertEqual(self.device_utils.WriteFile.call_count, 1)
- self.assertNotEqual(self.device_utils.RunShellCommand.call_args,
- mock.call(['rm', mock.ANY]))
+ def testTempFileNameAlreadyExists(self):
+ with self.assertCalls(
+ self.mockShellCall('echo $EXTERNAL_STORAGE', '/sdcard'),
+ self.mockShellCall('test -d /sdcard'),
+ self.mockExistsTest(True),
+ self.mockExistsTest(True),
+ self.mockExistsTest(True),
+ self.mockExistsTest(False),
+ self.mockShellCall('touch '),
+ self.mockShellCall('rm -f ')):
+ with device_temp_file.DeviceTempFile(self.adb) as tmpfile:
+ logging.debug('Temp file name: %s' % tmpfile.name)
- self.assertEqual(self.device_utils.RunShellCommand.call_args,
- mock.call(['rm', filename]))
+ def testTempFileLifecycle(self):
+ with self.assertCalls(
+ self.mockShellCall('echo $EXTERNAL_STORAGE', '/sdcard'),
+ self.mockShellCall('test -d /sdcard'),
+ self.mockExistsTest(False),
+ self.mockShellCall('touch ')):
+ tempFileContextManager = device_temp_file.DeviceTempFile(self.adb)
+ with mock.patch.object(self.adb, 'Shell'):
+ with tempFileContextManager as tmpfile:
+ logging.debug('Temp file name: %s' % tmpfile.name)
+ self.assertEquals(0, self.adb.Shell.call_count)
+ self.assertEquals(1, self.adb.Shell.call_count)
+ args, _ = self.adb.Shell.call_args
+ self.assertTrue(args[0].startswith('rm -f '))
if __name__ == '__main__':
logging.getLogger().setLevel(logging.DEBUG)
« no previous file with comments | « build/android/pylib/utils/device_temp_file.py ('k') | build/android/pylib/utils/md5sum.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698