OLD | NEW |
(Empty) | |
| 1 #!/usr/bin/env python |
| 2 # Copyright 2015 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. |
| 5 |
| 6 """ |
| 7 Unit tests for the contents of device_utils.py (mostly DeviceUtils). |
| 8 The test will invoke real devices |
| 9 """ |
| 10 |
| 11 import os |
| 12 import tempfile |
| 13 import unittest |
| 14 |
| 15 from pylib import cmd_helper |
| 16 from pylib import constants |
| 17 from pylib.device import adb_wrapper |
| 18 from pylib.device import device_utils |
| 19 from pylib.utils import md5sum |
| 20 |
| 21 _OLD_CONTENTS = "foo" |
| 22 _NEW_CONTENTS = "bar" |
| 23 _DEVICE_DIR = "/data/local/tmp/device_utils_test" |
| 24 _SUB_DIR = "sub" |
| 25 _SUB_DIR1 = "sub1" |
| 26 _SUB_DIR2 = "sub2" |
| 27 |
| 28 class DeviceUtilsPushDeleteFilesTest(unittest.TestCase): |
| 29 |
| 30 def setUp(self): |
| 31 devices = adb_wrapper.AdbWrapper.Devices() |
| 32 assert devices, 'A device must be attached' |
| 33 self.adb = devices[0] |
| 34 self.adb.WaitForDevice() |
| 35 self.device = device_utils.DeviceUtils( |
| 36 self.adb, default_timeout=10, default_retries=0) |
| 37 default_build_type = os.environ.get('BUILDTYPE', 'Debug') |
| 38 constants.SetBuildType(default_build_type) |
| 39 |
| 40 @staticmethod |
| 41 def _MakeTempFile(contents): |
| 42 """Make a temporary file with the given contents. |
| 43 |
| 44 Args: |
| 45 contents: string to write to the temporary file. |
| 46 |
| 47 Returns: |
| 48 the tuple contains the absolute path to the file and the file name |
| 49 """ |
| 50 fi, path = tempfile.mkstemp(text=True) |
| 51 with os.fdopen(fi, 'w') as f: |
| 52 f.write(contents) |
| 53 file_name = os.path.basename(path) |
| 54 return (path, file_name) |
| 55 |
| 56 @staticmethod |
| 57 def _MakeTempFileGivenDir(directory, contents): |
| 58 """Make a temporary file under the given directory |
| 59 with the given contents |
| 60 |
| 61 Args: |
| 62 directory: the temp directory to create the file |
| 63 contents: string to write to the temp file |
| 64 |
| 65 Returns: |
| 66 the list contains the absolute path to the file and the file name |
| 67 """ |
| 68 fi, path = tempfile.mkstemp(dir=directory, text=True) |
| 69 with os.fdopen(fi, 'w') as f: |
| 70 f.write(contents) |
| 71 file_name = os.path.basename(path) |
| 72 return (path, file_name) |
| 73 |
| 74 @staticmethod |
| 75 def _ChangeTempFile(path, contents): |
| 76 with os.open(path, 'w') as f: |
| 77 f.write(contents) |
| 78 |
| 79 @staticmethod |
| 80 def _DeleteTempFile(path): |
| 81 os.remove(path) |
| 82 |
| 83 def testPushChangedFiles_noFileChange(self): |
| 84 (host_file_path, file_name) = self._MakeTempFile(_OLD_CONTENTS) |
| 85 device_file_path = "%s/%s" % (_DEVICE_DIR, file_name) |
| 86 self.adb.Push(host_file_path, device_file_path) |
| 87 self.device.PushChangedFiles([(host_file_path, device_file_path)]) |
| 88 result = self.device.RunShellCommand(['cat', device_file_path], |
| 89 single_line=True) |
| 90 self.assertEqual(_OLD_CONTENTS, result) |
| 91 |
| 92 cmd_helper.RunCmd(['rm', host_file_path]) |
| 93 self.device.RunShellCommand(['rm', '-rf', _DEVICE_DIR]) |
| 94 |
| 95 def testPushChangedFiles_singleFileChange(self): |
| 96 (host_file_path, file_name) = self._MakeTempFile(_OLD_CONTENTS) |
| 97 device_file_path = "%s/%s" % (_DEVICE_DIR, file_name) |
| 98 self.adb.Push(host_file_path, device_file_path) |
| 99 |
| 100 with open(host_file_path, 'w') as f: |
| 101 f.write(_NEW_CONTENTS) |
| 102 self.device.PushChangedFiles([(host_file_path, device_file_path)]) |
| 103 result = self.device.RunShellCommand(['cat', device_file_path], |
| 104 single_line=True) |
| 105 self.assertEqual(_NEW_CONTENTS, result) |
| 106 |
| 107 cmd_helper.RunCmd(['rm', host_file_path]) |
| 108 self.device.RunShellCommand(['rm', '-rf', _DEVICE_DIR]) |
| 109 |
| 110 def testDeleteFiles(self): |
| 111 host_tmp_dir = tempfile.mkdtemp() |
| 112 (host_file_path, file_name) = self._MakeTempFileGivenDir( |
| 113 host_tmp_dir, _OLD_CONTENTS) |
| 114 |
| 115 device_file_path = "%s/%s" % (_DEVICE_DIR, file_name) |
| 116 self.adb.Push(host_file_path, device_file_path) |
| 117 |
| 118 cmd_helper.RunCmd(['rm', host_file_path]) |
| 119 self.device.PushChangedFiles([(host_tmp_dir, _DEVICE_DIR)], |
| 120 delete_device_stale=True) |
| 121 result = self.device.RunShellCommand(['ls', _DEVICE_DIR], single_line=True) |
| 122 self.assertEqual('', result) |
| 123 |
| 124 cmd_helper.RunCmd(['rm', '-rf', host_tmp_dir]) |
| 125 self.device.RunShellCommand(['rm', '-rf', _DEVICE_DIR]) |
| 126 |
| 127 def testPushAndDeleteFiles_noSubDir(self): |
| 128 host_tmp_dir = tempfile.mkdtemp() |
| 129 (host_file_path1, file_name1) = self._MakeTempFileGivenDir( |
| 130 host_tmp_dir, _OLD_CONTENTS) |
| 131 (host_file_path2, file_name2) = self._MakeTempFileGivenDir( |
| 132 host_tmp_dir, _OLD_CONTENTS) |
| 133 |
| 134 device_file_path1 = "%s/%s" % (_DEVICE_DIR, file_name1) |
| 135 device_file_path2 = "%s/%s" % (_DEVICE_DIR, file_name2) |
| 136 self.adb.Push(host_file_path1, device_file_path1) |
| 137 self.adb.Push(host_file_path2, device_file_path2) |
| 138 |
| 139 with open(host_file_path1, 'w') as f: |
| 140 f.write(_NEW_CONTENTS) |
| 141 cmd_helper.RunCmd(['rm', host_file_path2]) |
| 142 |
| 143 self.device.PushChangedFiles([(host_tmp_dir, _DEVICE_DIR)], |
| 144 delete_device_stale=True) |
| 145 result = self.device.RunShellCommand(['cat', device_file_path1], |
| 146 single_line=True) |
| 147 self.assertEqual(_NEW_CONTENTS, result) |
| 148 result = self.device.RunShellCommand(['ls', _DEVICE_DIR], single_line=True) |
| 149 self.assertEqual(file_name1, result) |
| 150 |
| 151 self.device.RunShellCommand(['rm', '-rf', _DEVICE_DIR]) |
| 152 cmd_helper.RunCmd(['rm', '-rf', host_tmp_dir]) |
| 153 |
| 154 def testPushAndDeleteFiles_SubDir(self): |
| 155 host_tmp_dir = tempfile.mkdtemp() |
| 156 host_sub_dir1 = "%s/%s" % (host_tmp_dir, _SUB_DIR1) |
| 157 host_sub_dir2 = "%s/%s/%s" % (host_tmp_dir, _SUB_DIR, _SUB_DIR2) |
| 158 cmd_helper.RunCmd(['mkdir', '-p', host_sub_dir1]) |
| 159 cmd_helper.RunCmd(['mkdir', '-p', host_sub_dir2]) |
| 160 |
| 161 (host_file_path1, file_name1) = self._MakeTempFileGivenDir( |
| 162 host_tmp_dir, _OLD_CONTENTS) |
| 163 (host_file_path2, file_name2) = self._MakeTempFileGivenDir( |
| 164 host_tmp_dir, _OLD_CONTENTS) |
| 165 (host_file_path3, file_name3) = self._MakeTempFileGivenDir( |
| 166 host_sub_dir1, _OLD_CONTENTS) |
| 167 (host_file_path4, file_name4) = self._MakeTempFileGivenDir( |
| 168 host_sub_dir2, _OLD_CONTENTS) |
| 169 |
| 170 device_file_path1 = "%s/%s" % (_DEVICE_DIR, file_name1) |
| 171 device_file_path2 = "%s/%s" % (_DEVICE_DIR, file_name2) |
| 172 device_file_path3 = "%s/%s/%s" % (_DEVICE_DIR, _SUB_DIR1, file_name3) |
| 173 device_file_path4 = "%s/%s/%s/%s" % (_DEVICE_DIR, _SUB_DIR, |
| 174 _SUB_DIR2, file_name4) |
| 175 |
| 176 self.adb.Push(host_file_path1, device_file_path1) |
| 177 self.adb.Push(host_file_path2, device_file_path2) |
| 178 self.adb.Push(host_file_path3, device_file_path3) |
| 179 self.adb.Push(host_file_path4, device_file_path4) |
| 180 |
| 181 with open(host_file_path1, 'w') as f: |
| 182 f.write(_NEW_CONTENTS) |
| 183 cmd_helper.RunCmd(['rm', host_file_path2]) |
| 184 cmd_helper.RunCmd(['rm', host_file_path4]) |
| 185 |
| 186 self.device.PushChangedFiles([(host_tmp_dir, _DEVICE_DIR)], |
| 187 delete_device_stale=True) |
| 188 result = self.device.RunShellCommand(['cat', device_file_path1], |
| 189 single_line=True) |
| 190 self.assertEqual(_NEW_CONTENTS, result) |
| 191 |
| 192 result = self.device.RunShellCommand(['ls', _DEVICE_DIR]) |
| 193 self.assertIn(file_name1, result) |
| 194 self.assertIn(_SUB_DIR1, result) |
| 195 self.assertIn(_SUB_DIR, result) |
| 196 self.assertEqual(3, len(result)) |
| 197 |
| 198 result = self.device.RunShellCommand(['cat', device_file_path3], |
| 199 single_line=True) |
| 200 self.assertEqual(_OLD_CONTENTS, result) |
| 201 |
| 202 result = self.device.RunShellCommand(["ls", "%s/%s/%s" |
| 203 % (_DEVICE_DIR, _SUB_DIR, _SUB_DIR2)], |
| 204 single_line=True) |
| 205 self.assertEqual('', result) |
| 206 |
| 207 self.device.RunShellCommand(['rm', '-rf', _DEVICE_DIR]) |
| 208 cmd_helper.RunCmd(['rm', '-rf', host_tmp_dir]) |
| 209 |
| 210 if __name__ == '__main__': |
| 211 unittest.main() |
OLD | NEW |