Index: build/android/devil/android/device_temp_file_test.py |
diff --git a/build/android/devil/android/device_temp_file_test.py b/build/android/devil/android/device_temp_file_test.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..76f9cc8ec0179984831eff7fd3028299487fc3e3 |
--- /dev/null |
+++ b/build/android/devil/android/device_temp_file_test.py |
@@ -0,0 +1,91 @@ |
+#!/usr/bin/env python |
+# Copyright 2014 The Chromium Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+""" |
+Unit tests for the contents of device_temp_file.py. |
+""" |
+ |
+import logging |
+import os |
+import sys |
+import unittest |
+ |
+from devil.android import device_errors |
+from devil.android import device_temp_file |
+from devil.android.sdk import adb_wrapper |
+from devil.utils import mock_calls |
+from pylib import constants |
+ |
+sys.path.append(os.path.join( |
+ constants.DIR_SOURCE_ROOT, 'third_party', 'pymock')) |
+import mock # pylint: disable=F0401 |
+ |
+class DeviceTempFileTest(mock_calls.TestCase): |
+ |
+ def setUp(self): |
+ 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 mockShellCall(self, cmd_prefix, action=''): |
+ """Expect an adb.Shell(cmd) call with cmd_prefix and do some action |
+ |
+ 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 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) |
+ |
+ def testTempFileNameAlreadyExists(self): |
+ with self.assertCalls( |
+ self.mockShellCall('test -d /data/local/tmp'), |
+ 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) |
+ |
+ def testTempFileLifecycle(self): |
+ with self.assertCalls( |
+ self.mockShellCall('test -d /data/local/tmp'), |
+ 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) |
+ unittest.main(verbosity=2) |