| 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
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..f839ce093ca81e5f8dcda0faa7440653312ed2d7
|
| --- /dev/null
|
| +++ b/build/android/pylib/utils/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 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(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)
|
|
|