Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1038)

Side by Side Diff: build/android/pylib/utils/md5sum_test.py

Issue 1314913009: [Android] Move some pylib modules into devil/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « build/android/pylib/utils/md5sum.py ('k') | build/android/pylib/utils/mock_calls.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 #!/usr/bin/env python
2 # Copyright 2014 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 import os
7 import sys
8 import unittest
9
10 from pylib import cmd_helper
11 from pylib import constants
12 from pylib.device import device_errors
13 from pylib.utils import md5sum
14
15 sys.path.append(
16 os.path.join(constants.DIR_SOURCE_ROOT, 'third_party', 'pymock'))
17 import mock
18
19 TEST_OUT_DIR = os.path.join('test', 'out', 'directory')
20 HOST_MD5_EXECUTABLE = os.path.join(TEST_OUT_DIR, 'md5sum_bin_host')
21
22 class Md5SumTest(unittest.TestCase):
23
24 def setUp(self):
25 self._patchers = [
26 mock.patch('pylib.constants.GetOutDirectory',
27 new=mock.Mock(return_value=TEST_OUT_DIR)),
28 mock.patch('os.path.exists',
29 new=mock.Mock(return_value=True)),
30 ]
31 for p in self._patchers:
32 p.start()
33
34 def tearDown(self):
35 for p in self._patchers:
36 p.stop()
37
38 def testCalculateHostMd5Sums_singlePath(self):
39 test_path = '/test/host/file.dat'
40 mock_get_cmd_output = mock.Mock(
41 return_value='0123456789abcdeffedcba9876543210 /test/host/file.dat')
42 with mock.patch('pylib.cmd_helper.GetCmdOutput', new=mock_get_cmd_output):
43 out = md5sum.CalculateHostMd5Sums(test_path)
44 self.assertEquals(1, len(out))
45 self.assertTrue('/test/host/file.dat' in out)
46 self.assertEquals('0123456789abcdeffedcba9876543210',
47 out['/test/host/file.dat'])
48 mock_get_cmd_output.assert_called_once_with(
49 [HOST_MD5_EXECUTABLE, '/test/host/file.dat'])
50
51 def testCalculateHostMd5Sums_list(self):
52 test_paths = ['/test/host/file0.dat', '/test/host/file1.dat']
53 mock_get_cmd_output = mock.Mock(
54 return_value='0123456789abcdeffedcba9876543210 /test/host/file0.dat\n'
55 '123456789abcdef00fedcba987654321 /test/host/file1.dat\n')
56 with mock.patch('pylib.cmd_helper.GetCmdOutput', new=mock_get_cmd_output):
57 out = md5sum.CalculateHostMd5Sums(test_paths)
58 self.assertEquals(2, len(out))
59 self.assertTrue('/test/host/file0.dat' in out)
60 self.assertEquals('0123456789abcdeffedcba9876543210',
61 out['/test/host/file0.dat'])
62 self.assertTrue('/test/host/file1.dat' in out)
63 self.assertEquals('123456789abcdef00fedcba987654321',
64 out['/test/host/file1.dat'])
65 mock_get_cmd_output.assert_called_once_with(
66 [HOST_MD5_EXECUTABLE, '/test/host/file0.dat',
67 '/test/host/file1.dat'])
68
69 def testCalculateHostMd5Sums_generator(self):
70 test_paths = ('/test/host/' + p for p in ['file0.dat', 'file1.dat'])
71 mock_get_cmd_output = mock.Mock(
72 return_value='0123456789abcdeffedcba9876543210 /test/host/file0.dat\n'
73 '123456789abcdef00fedcba987654321 /test/host/file1.dat\n')
74 with mock.patch('pylib.cmd_helper.GetCmdOutput', new=mock_get_cmd_output):
75 out = md5sum.CalculateHostMd5Sums(test_paths)
76 self.assertEquals(2, len(out))
77 self.assertTrue('/test/host/file0.dat' in out)
78 self.assertEquals('0123456789abcdeffedcba9876543210',
79 out['/test/host/file0.dat'])
80 self.assertTrue('/test/host/file1.dat' in out)
81 self.assertEquals('123456789abcdef00fedcba987654321',
82 out['/test/host/file1.dat'])
83 mock_get_cmd_output.assert_called_once_with(
84 [HOST_MD5_EXECUTABLE, '/test/host/file0.dat', '/test/host/file1.dat'])
85
86 def testCalculateDeviceMd5Sums_noPaths(self):
87 device = mock.NonCallableMock()
88 device.RunShellCommand = mock.Mock(side_effect=Exception())
89
90 out = md5sum.CalculateDeviceMd5Sums([], device)
91 self.assertEquals(0, len(out))
92
93 def testCalculateDeviceMd5Sums_singlePath(self):
94 test_path = '/storage/emulated/legacy/test/file.dat'
95
96 device = mock.NonCallableMock()
97 device_md5sum_output = [
98 '0123456789abcdeffedcba9876543210 '
99 '/storage/emulated/legacy/test/file.dat',
100 ]
101 device.RunShellCommand = mock.Mock(return_value=device_md5sum_output)
102
103 with mock.patch('os.path.getsize', return_value=1337):
104 out = md5sum.CalculateDeviceMd5Sums(test_path, device)
105 self.assertEquals(1, len(out))
106 self.assertTrue('/storage/emulated/legacy/test/file.dat' in out)
107 self.assertEquals('0123456789abcdeffedcba9876543210',
108 out['/storage/emulated/legacy/test/file.dat'])
109 self.assertEquals(1, len(device.RunShellCommand.call_args_list))
110
111 def testCalculateDeviceMd5Sums_list(self):
112 test_path = ['/storage/emulated/legacy/test/file0.dat',
113 '/storage/emulated/legacy/test/file1.dat']
114 device = mock.NonCallableMock()
115 device_md5sum_output = [
116 '0123456789abcdeffedcba9876543210 '
117 '/storage/emulated/legacy/test/file0.dat',
118 '123456789abcdef00fedcba987654321 '
119 '/storage/emulated/legacy/test/file1.dat',
120 ]
121 device.RunShellCommand = mock.Mock(return_value=device_md5sum_output)
122
123 with mock.patch('os.path.getsize', return_value=1337):
124 out = md5sum.CalculateDeviceMd5Sums(test_path, device)
125 self.assertEquals(2, len(out))
126 self.assertTrue('/storage/emulated/legacy/test/file0.dat' in out)
127 self.assertEquals('0123456789abcdeffedcba9876543210',
128 out['/storage/emulated/legacy/test/file0.dat'])
129 self.assertTrue('/storage/emulated/legacy/test/file1.dat' in out)
130 self.assertEquals('123456789abcdef00fedcba987654321',
131 out['/storage/emulated/legacy/test/file1.dat'])
132 self.assertEquals(1, len(device.RunShellCommand.call_args_list))
133
134 def testCalculateDeviceMd5Sums_generator(self):
135 test_path = ('/storage/emulated/legacy/test/file%d.dat' % n
136 for n in xrange(0, 2))
137
138 device = mock.NonCallableMock()
139 device_md5sum_output = [
140 '0123456789abcdeffedcba9876543210 '
141 '/storage/emulated/legacy/test/file0.dat',
142 '123456789abcdef00fedcba987654321 '
143 '/storage/emulated/legacy/test/file1.dat',
144 ]
145 device.RunShellCommand = mock.Mock(return_value=device_md5sum_output)
146
147 with mock.patch('os.path.getsize', return_value=1337):
148 out = md5sum.CalculateDeviceMd5Sums(test_path, device)
149 self.assertEquals(2, len(out))
150 self.assertTrue('/storage/emulated/legacy/test/file0.dat' in out)
151 self.assertEquals('0123456789abcdeffedcba9876543210',
152 out['/storage/emulated/legacy/test/file0.dat'])
153 self.assertTrue('/storage/emulated/legacy/test/file1.dat' in out)
154 self.assertEquals('123456789abcdef00fedcba987654321',
155 out['/storage/emulated/legacy/test/file1.dat'])
156 self.assertEquals(1, len(device.RunShellCommand.call_args_list))
157
158 def testCalculateDeviceMd5Sums_singlePath_linkerWarning(self):
159 # See crbug/479966
160 test_path = '/storage/emulated/legacy/test/file.dat'
161
162 device = mock.NonCallableMock()
163 device_md5sum_output = [
164 'WARNING: linker: /data/local/tmp/md5sum/md5sum_bin: '
165 'unused DT entry: type 0x1d arg 0x15db',
166 'THIS_IS_NOT_A_VALID_CHECKSUM_ZZZ some random text',
167 '0123456789abcdeffedcba9876543210 '
168 '/storage/emulated/legacy/test/file.dat',
169 ]
170 device.RunShellCommand = mock.Mock(return_value=device_md5sum_output)
171
172 with mock.patch('os.path.getsize', return_value=1337):
173 out = md5sum.CalculateDeviceMd5Sums(test_path, device)
174 self.assertEquals(1, len(out))
175 self.assertTrue('/storage/emulated/legacy/test/file.dat' in out)
176 self.assertEquals('0123456789abcdeffedcba9876543210',
177 out['/storage/emulated/legacy/test/file.dat'])
178 self.assertEquals(1, len(device.RunShellCommand.call_args_list))
179
180 def testCalculateDeviceMd5Sums_list_fileMissing(self):
181 test_path = ['/storage/emulated/legacy/test/file0.dat',
182 '/storage/emulated/legacy/test/file1.dat']
183 device = mock.NonCallableMock()
184 device_md5sum_output = [
185 '0123456789abcdeffedcba9876543210 '
186 '/storage/emulated/legacy/test/file0.dat',
187 '[0819/203513:ERROR:md5sum.cc(25)] Could not open file asdf',
188 '',
189 ]
190 device.RunShellCommand = mock.Mock(return_value=device_md5sum_output)
191
192 with mock.patch('os.path.getsize', return_value=1337):
193 out = md5sum.CalculateDeviceMd5Sums(test_path, device)
194 self.assertEquals(1, len(out))
195 self.assertTrue('/storage/emulated/legacy/test/file0.dat' in out)
196 self.assertEquals('0123456789abcdeffedcba9876543210',
197 out['/storage/emulated/legacy/test/file0.dat'])
198 self.assertEquals(1, len(device.RunShellCommand.call_args_list))
199
200
201 def testCalculateDeviceMd5Sums_requiresBinary(self):
202 test_path = '/storage/emulated/legacy/test/file.dat'
203
204 device = mock.NonCallableMock()
205 device.adb = mock.NonCallableMock()
206 device.adb.Push = mock.Mock()
207 device_md5sum_output = [
208 'WARNING: linker: /data/local/tmp/md5sum/md5sum_bin: '
209 'unused DT entry: type 0x1d arg 0x15db',
210 'THIS_IS_NOT_A_VALID_CHECKSUM_ZZZ some random text',
211 '0123456789abcdeffedcba9876543210 '
212 '/storage/emulated/legacy/test/file.dat',
213 ]
214 error = device_errors.AdbShellCommandFailedError('cmd', 'out', 2)
215 device.RunShellCommand = mock.Mock(
216 side_effect=(error, '', device_md5sum_output))
217
218 with mock.patch('os.path.getsize', return_value=1337):
219 out = md5sum.CalculateDeviceMd5Sums(test_path, device)
220 self.assertEquals(1, len(out))
221 self.assertTrue('/storage/emulated/legacy/test/file.dat' in out)
222 self.assertEquals('0123456789abcdeffedcba9876543210',
223 out['/storage/emulated/legacy/test/file.dat'])
224 self.assertEquals(3, len(device.RunShellCommand.call_args_list))
225 device.adb.Push.assert_called_once_with(
226 'test/out/directory/md5sum_dist', '/data/local/tmp/md5sum/')
227
228
229 if __name__ == '__main__':
230 unittest.main(verbosity=2)
231
OLDNEW
« no previous file with comments | « build/android/pylib/utils/md5sum.py ('k') | build/android/pylib/utils/mock_calls.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698