| # 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. |
| |
| import os |
| import shutil |
| import sys |
| import unittest |
| |
| sys.path.append(os.path.join(os.path.dirname(__file__), os.pardir)) |
| |
| from pylib import android_commands |
| |
| # pylint: disable=W0212,W0702 |
| |
| class TestDeviceTempFile(unittest.TestCase): |
| def setUp(self): |
| if not os.getenv('BUILDTYPE'): |
| os.environ['BUILDTYPE'] = 'Debug' |
| |
| devices = android_commands.GetAttachedDevices() |
| self.assertGreater(len(devices), 0, 'No device attached!') |
| self.ac = android_commands.AndroidCommands(device=devices[0]) |
| |
| def testTempFileDeleted(self): |
| """Tests that DeviceTempFile deletes files when closed.""" |
| temp_file = android_commands.DeviceTempFile(self.ac) |
| self.assertFalse(self.ac.FileExistsOnDevice(temp_file.name)) |
| self.ac.SetFileContents(temp_file.name, "contents") |
| self.assertTrue(self.ac.FileExistsOnDevice(temp_file.name)) |
| temp_file.close() |
| self.assertFalse(self.ac.FileExistsOnDevice(temp_file.name)) |
| |
| with android_commands.DeviceTempFile(self.ac) as with_temp_file: |
| self.assertFalse(self.ac.FileExistsOnDevice(with_temp_file.name)) |
| self.ac.SetFileContents(with_temp_file.name, "contents") |
| self.assertTrue(self.ac.FileExistsOnDevice(with_temp_file.name)) |
| |
| self.assertFalse(self.ac.FileExistsOnDevice(with_temp_file.name)) |
| |
| def testTempFileNotWritten(self): |
| """Tests that device temp files work successfully even if not written to.""" |
| temp_file = android_commands.DeviceTempFile(self.ac) |
| temp_file.close() |
| self.assertFalse(self.ac.FileExistsOnDevice(temp_file.name)) |
| |
| with android_commands.DeviceTempFile(self.ac) as with_temp_file: |
| pass |
| self.assertFalse(self.ac.FileExistsOnDevice(with_temp_file.name)) |
| |
| def testNaming(self): |
| """Tests that returned filenames are as requested.""" |
| temp_file = android_commands.DeviceTempFile(self.ac, prefix="cat") |
| self.assertTrue(os.path.basename(temp_file.name).startswith("cat")) |
| |
| temp_file = android_commands.DeviceTempFile(self.ac, suffix="dog") |
| self.assertTrue(temp_file.name.endswith("dog")) |
| |
| temp_file = android_commands.DeviceTempFile( |
| self.ac, prefix="cat", suffix="dog") |
| self.assertTrue(os.path.basename(temp_file.name).startswith("cat")) |
| self.assertTrue(temp_file.name.endswith("dog")) |
| |
| |
| class TestGetFilesChanged(unittest.TestCase): |
| |
| def setUp(self): |
| if not os.getenv('BUILDTYPE'): |
| os.environ['BUILDTYPE'] = 'Debug' |
| |
| devices = android_commands.GetAttachedDevices() |
| self.assertGreater(len(devices), 0, 'No device attached!') |
| self.ac = android_commands.AndroidCommands(device=devices[0]) |
| self.host_data_dir = os.path.realpath('test_push_data') |
| self.device_data_dir = '%s/test_push_data' % ( |
| self.ac.RunShellCommand('realpath %s' % |
| self.ac.GetExternalStorage())[0]) |
| |
| os.mkdir(self.host_data_dir) |
| for i in xrange(1, 10): |
| with open('%s/%d.txt' % (self.host_data_dir, i), 'w') as f: |
| f.write('file #%d' % i) |
| |
| self.ac.RunShellCommand('mkdir %s' % self.device_data_dir) |
| |
| def testGetFilesChangedAllNeeded(self): |
| """ Tests GetFilesChanged when none of the files are on the device. |
| """ |
| expected = [('%s/%d.txt' % (self.host_data_dir, i), |
| '%s/%d.txt' % (self.device_data_dir, i)) |
| for i in xrange(1, 10)] |
| actual = self.ac.GetFilesChanged(self.host_data_dir, self.device_data_dir) |
| self.assertSequenceEqual(expected, actual) |
| |
| def testGetFilesChangedSomeIdentical(self): |
| """ Tests GetFilesChanged when some of the files are on the device. |
| """ |
| for i in xrange(1, 5): |
| self.ac._adb.Push('%s/%d.txt' % (self.host_data_dir, i), |
| self.device_data_dir) |
| expected = [('%s/%d.txt' % (self.host_data_dir, i), |
| '%s/%d.txt' % (self.device_data_dir, i)) |
| for i in xrange(5, 10)] |
| actual = self.ac.GetFilesChanged(self.host_data_dir, self.device_data_dir) |
| self.assertSequenceEqual(expected, actual) |
| |
| def testGetFilesChangedAllIdentical(self): |
| """ Tests GetFilesChanged when all of the files are on the device. |
| """ |
| for i in xrange(1, 10): |
| self.ac._adb.Push('%s/%d.txt' % (self.host_data_dir, i), |
| self.device_data_dir) |
| expected = [] |
| actual = self.ac.GetFilesChanged(self.host_data_dir, self.device_data_dir) |
| self.assertSequenceEqual(expected, actual) |
| |
| def testGetFilesChangedRename(self): |
| """ Tests GetFilesChanged when one of the files has been renamed. |
| |
| This tests both with and without the ignore_filenames flag set. |
| """ |
| for i in xrange(5, 10): |
| self.ac._adb.Push('%s/%d.txt' % (self.host_data_dir, i), |
| self.device_data_dir) |
| os.rename('%s/5.txt' % (self.host_data_dir), |
| '%s/99.txt' % (self.host_data_dir)) |
| |
| expected = [('%s/%d.txt' % (self.host_data_dir, i), |
| '%s/%d.txt' % (self.device_data_dir, i)) |
| for i in xrange(1, 5)] |
| actual = self.ac.GetFilesChanged(self.host_data_dir, self.device_data_dir, |
| ignore_filenames=True) |
| self.assertSequenceEqual(expected, actual) |
| |
| expected.append(('%s/99.txt' % self.host_data_dir, |
| '%s/99.txt' % self.device_data_dir)) |
| actual = self.ac.GetFilesChanged(self.host_data_dir, self.device_data_dir) |
| self.assertSequenceEqual(expected, actual) |
| |
| def testGetFilesChangedCopy(self): |
| """ Tests GetFilesChanged when one of the files has been copied. |
| |
| This tests both with and without the ignore_filenames flag set. |
| """ |
| for i in xrange(5, 10): |
| self.ac._adb.Push('%s/%d.txt' % (self.host_data_dir, i), |
| self.device_data_dir) |
| shutil.copy('%s/5.txt' % self.host_data_dir, |
| '%s/99.txt' % self.host_data_dir) |
| |
| expected = [('%s/%d.txt' % (self.host_data_dir, i), |
| '%s/%d.txt' % (self.device_data_dir, i)) |
| for i in xrange(1, 5)] |
| actual = self.ac.GetFilesChanged(self.host_data_dir, self.device_data_dir, |
| ignore_filenames=True) |
| self.assertSequenceEqual(expected, actual) |
| |
| expected.append(('%s/99.txt' % self.host_data_dir, |
| '%s/99.txt' % self.device_data_dir)) |
| actual = self.ac.GetFilesChanged(self.host_data_dir, self.device_data_dir) |
| self.assertSequenceEqual(expected, actual) |
| |
| def testGetFilesChangedIndividual(self): |
| """ Tests GetFilesChanged when provided one file. |
| """ |
| expected = [('%s/1.txt' % self.host_data_dir, |
| '%s/1.txt' % self.device_data_dir)] |
| actual = self.ac.GetFilesChanged('%s/1.txt' % self.host_data_dir, |
| '%s/1.txt' % self.device_data_dir) |
| self.assertSequenceEqual(expected, actual) |
| |
| def testGetFilesChangedFileToDirectory(self): |
| """ Tests GetFilesChanged when provided a file from the host and a |
| directory on the device. |
| """ |
| expected = [('%s/1.txt' % self.host_data_dir, |
| '%s' % self.device_data_dir)] |
| actual = self.ac.GetFilesChanged('%s/1.txt' % self.host_data_dir, |
| '%s' % self.device_data_dir) |
| self.assertSequenceEqual(expected, actual) |
| |
| def tearDown(self): |
| try: |
| shutil.rmtree(self.host_data_dir) |
| self.ac.RunShellCommand('rm -rf %s' % self.device_data_dir) |
| except: |
| pass |
| |
| if __name__ == '__main__': |
| unittest.main() |
| |