blob: 21c34f93663f9e6826562cdc362b84cdfee7f81a [file] [log] [blame]
# 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()