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.
10 from pylib
import cmd_helper
11 from pylib
import constants
12 from pylib
.utils
import md5sum
15 os
.path
.join(constants
.DIR_SOURCE_ROOT
, 'third_party', 'pymock'))
18 TEST_OUT_DIR
= os
.path
.join('test', 'out', 'directory')
19 HOST_MD5_EXECUTABLE
= os
.path
.join(TEST_OUT_DIR
, 'md5sum_bin_host')
21 class Md5SumTest(unittest
.TestCase
):
25 mock
.patch('pylib.constants.GetOutDirectory',
26 new
=mock
.Mock(return_value
=TEST_OUT_DIR
)),
27 mock
.patch('os.path.exists',
28 new
=mock
.Mock(return_value
=True)),
30 for p
in self
._patchers
:
34 for p
in self
._patchers
:
37 def testCalculateHostMd5Sums_singlePath(self
):
38 test_path
= '/test/host/file.dat'
39 mock_get_cmd_output
= mock
.Mock(
40 return_value
='0123456789abcdeffedcba9876543210 /test/host/file.dat')
41 with mock
.patch('pylib.cmd_helper.GetCmdOutput', new
=mock_get_cmd_output
):
42 out
= md5sum
.CalculateHostMd5Sums(test_path
)
43 self
.assertEquals(1, len(out
))
44 self
.assertTrue('/test/host/file.dat' in out
)
45 self
.assertEquals('0123456789abcdeffedcba9876543210',
46 out
['/test/host/file.dat'])
47 mock_get_cmd_output
.assert_called_once_with(
48 [HOST_MD5_EXECUTABLE
, '/test/host/file.dat'])
50 def testCalculateHostMd5Sums_list(self
):
51 test_paths
= ['/test/host/file0.dat', '/test/host/file1.dat']
52 mock_get_cmd_output
= mock
.Mock(
53 return_value
='0123456789abcdeffedcba9876543210 /test/host/file0.dat\n'
54 '123456789abcdef00fedcba987654321 /test/host/file1.dat\n')
55 with mock
.patch('pylib.cmd_helper.GetCmdOutput', new
=mock_get_cmd_output
):
56 out
= md5sum
.CalculateHostMd5Sums(test_paths
)
57 self
.assertEquals(2, len(out
))
58 self
.assertTrue('/test/host/file0.dat' in out
)
59 self
.assertEquals('0123456789abcdeffedcba9876543210',
60 out
['/test/host/file0.dat'])
61 self
.assertTrue('/test/host/file1.dat' in out
)
62 self
.assertEquals('123456789abcdef00fedcba987654321',
63 out
['/test/host/file1.dat'])
64 mock_get_cmd_output
.assert_called_once_with(
65 [HOST_MD5_EXECUTABLE
, '/test/host/file0.dat',
66 '/test/host/file1.dat'])
68 def testCalculateHostMd5Sums_generator(self
):
69 test_paths
= ('/test/host/' + p
for p
in ['file0.dat', 'file1.dat'])
70 mock_get_cmd_output
= mock
.Mock(
71 return_value
='0123456789abcdeffedcba9876543210 /test/host/file0.dat\n'
72 '123456789abcdef00fedcba987654321 /test/host/file1.dat\n')
73 with mock
.patch('pylib.cmd_helper.GetCmdOutput', new
=mock_get_cmd_output
):
74 out
= md5sum
.CalculateHostMd5Sums(test_paths
)
75 self
.assertEquals(2, len(out
))
76 self
.assertTrue('/test/host/file0.dat' in out
)
77 self
.assertEquals('0123456789abcdeffedcba9876543210',
78 out
['/test/host/file0.dat'])
79 self
.assertTrue('/test/host/file1.dat' in out
)
80 self
.assertEquals('123456789abcdef00fedcba987654321',
81 out
['/test/host/file1.dat'])
82 mock_get_cmd_output
.assert_called_once_with(
83 [HOST_MD5_EXECUTABLE
, '/test/host/file0.dat', '/test/host/file1.dat'])
85 def testCalculateDeviceMd5Sums_singlePath(self
):
86 test_path
= '/storage/emulated/legacy/test/file.dat'
88 device
= mock
.NonCallableMock()
89 device
.adb
= mock
.NonCallableMock()
90 device
.adb
.Push
= mock
.Mock()
91 device_md5sum_output
= [
92 '0123456789abcdeffedcba9876543210 '
93 '/storage/emulated/legacy/test/file.dat',
95 device
.RunShellCommand
= mock
.Mock(return_value
=device_md5sum_output
)
97 mock_temp_file
= mock
.mock_open()
98 mock_temp_file
.return_value
.name
= '/tmp/test/script/file.sh'
100 mock_device_temp_file
= mock
.mock_open()
101 mock_device_temp_file
.return_value
.name
= (
102 '/data/local/tmp/test/script/file.sh')
104 with mock
.patch('tempfile.NamedTemporaryFile', new
=mock_temp_file
), (
105 mock
.patch('pylib.utils.device_temp_file.DeviceTempFile',
106 new
=mock_device_temp_file
)):
107 out
= md5sum
.CalculateDeviceMd5Sums(test_path
, device
)
108 self
.assertEquals(1, len(out
))
109 self
.assertTrue('/storage/emulated/legacy/test/file.dat' in out
)
110 self
.assertEquals('0123456789abcdeffedcba9876543210',
111 out
['/storage/emulated/legacy/test/file.dat'])
112 device
.adb
.Push
.assert_called_once_with(
113 '/tmp/test/script/file.sh', '/data/local/tmp/test/script/file.sh')
114 device
.RunShellCommand
.assert_called_once_with(
115 ['sh', '/data/local/tmp/test/script/file.sh'])
117 def testCalculateDeviceMd5Sums_list(self
):
118 test_path
= ['/storage/emulated/legacy/test/file0.dat',
119 '/storage/emulated/legacy/test/file1.dat']
120 device
= mock
.NonCallableMock()
121 device
.adb
= mock
.NonCallableMock()
122 device
.adb
.Push
= mock
.Mock()
123 device_md5sum_output
= [
124 '0123456789abcdeffedcba9876543210 '
125 '/storage/emulated/legacy/test/file0.dat',
126 '123456789abcdef00fedcba987654321 '
127 '/storage/emulated/legacy/test/file1.dat',
129 device
.RunShellCommand
= mock
.Mock(return_value
=device_md5sum_output
)
131 mock_temp_file
= mock
.mock_open()
132 mock_temp_file
.return_value
.name
= '/tmp/test/script/file.sh'
134 mock_device_temp_file
= mock
.mock_open()
135 mock_device_temp_file
.return_value
.name
= (
136 '/data/local/tmp/test/script/file.sh')
138 with mock
.patch('tempfile.NamedTemporaryFile', new
=mock_temp_file
), (
139 mock
.patch('pylib.utils.device_temp_file.DeviceTempFile',
140 new
=mock_device_temp_file
)):
141 out
= md5sum
.CalculateDeviceMd5Sums(test_path
, device
)
142 self
.assertEquals(2, len(out
))
143 self
.assertTrue('/storage/emulated/legacy/test/file0.dat' in out
)
144 self
.assertEquals('0123456789abcdeffedcba9876543210',
145 out
['/storage/emulated/legacy/test/file0.dat'])
146 self
.assertTrue('/storage/emulated/legacy/test/file1.dat' in out
)
147 self
.assertEquals('123456789abcdef00fedcba987654321',
148 out
['/storage/emulated/legacy/test/file1.dat'])
149 device
.adb
.Push
.assert_called_once_with(
150 '/tmp/test/script/file.sh', '/data/local/tmp/test/script/file.sh')
151 device
.RunShellCommand
.assert_called_once_with(
152 ['sh', '/data/local/tmp/test/script/file.sh'])
154 def testCalculateDeviceMd5Sums_generator(self
):
155 test_path
= ('/storage/emulated/legacy/test/file%d.dat' % n
156 for n
in xrange(0, 2))
158 device
= mock
.NonCallableMock()
159 device
.adb
= mock
.NonCallableMock()
160 device
.adb
.Push
= mock
.Mock()
161 device_md5sum_output
= [
162 '0123456789abcdeffedcba9876543210 '
163 '/storage/emulated/legacy/test/file0.dat',
164 '123456789abcdef00fedcba987654321 '
165 '/storage/emulated/legacy/test/file1.dat',
167 device
.RunShellCommand
= mock
.Mock(return_value
=device_md5sum_output
)
169 mock_temp_file
= mock
.mock_open()
170 mock_temp_file
.return_value
.name
= '/tmp/test/script/file.sh'
172 mock_device_temp_file
= mock
.mock_open()
173 mock_device_temp_file
.return_value
.name
= (
174 '/data/local/tmp/test/script/file.sh')
176 with mock
.patch('tempfile.NamedTemporaryFile', new
=mock_temp_file
), (
177 mock
.patch('pylib.utils.device_temp_file.DeviceTempFile',
178 new
=mock_device_temp_file
)):
179 out
= md5sum
.CalculateDeviceMd5Sums(test_path
, device
)
180 self
.assertEquals(2, len(out
))
181 self
.assertTrue('/storage/emulated/legacy/test/file0.dat' in out
)
182 self
.assertEquals('0123456789abcdeffedcba9876543210',
183 out
['/storage/emulated/legacy/test/file0.dat'])
184 self
.assertTrue('/storage/emulated/legacy/test/file1.dat' in out
)
185 self
.assertEquals('123456789abcdef00fedcba987654321',
186 out
['/storage/emulated/legacy/test/file1.dat'])
187 device
.adb
.Push
.assert_called_once_with(
188 '/tmp/test/script/file.sh', '/data/local/tmp/test/script/file.sh')
189 device
.RunShellCommand
.assert_called_once_with(
190 ['sh', '/data/local/tmp/test/script/file.sh'])
192 def testCalculateDeviceMd5Sums_singlePath_linkerWarning(self
):
194 test_path
= '/storage/emulated/legacy/test/file.dat'
196 device
= mock
.NonCallableMock()
197 device
.adb
= mock
.NonCallableMock()
198 device
.adb
.Push
= mock
.Mock()
199 device_md5sum_output
= [
200 'WARNING: linker: /data/local/tmp/md5sum/md5sum_bin: '
201 'unused DT entry: type 0x1d arg 0x15db',
202 '0123456789abcdeffedcba9876543210 '
203 '/storage/emulated/legacy/test/file.dat',
205 device
.RunShellCommand
= mock
.Mock(return_value
=device_md5sum_output
)
207 mock_temp_file
= mock
.mock_open()
208 mock_temp_file
.return_value
.name
= '/tmp/test/script/file.sh'
210 mock_device_temp_file
= mock
.mock_open()
211 mock_device_temp_file
.return_value
.name
= (
212 '/data/local/tmp/test/script/file.sh')
214 with mock
.patch('tempfile.NamedTemporaryFile', new
=mock_temp_file
), (
215 mock
.patch('pylib.utils.device_temp_file.DeviceTempFile',
216 new
=mock_device_temp_file
)):
217 out
= md5sum
.CalculateDeviceMd5Sums(test_path
, device
)
218 self
.assertEquals(1, len(out
))
219 self
.assertTrue('/storage/emulated/legacy/test/file.dat' in out
)
220 self
.assertEquals('0123456789abcdeffedcba9876543210',
221 out
['/storage/emulated/legacy/test/file.dat'])
222 device
.adb
.Push
.assert_called_once_with(
223 '/tmp/test/script/file.sh', '/data/local/tmp/test/script/file.sh')
224 device
.RunShellCommand
.assert_called_once_with(
225 ['sh', '/data/local/tmp/test/script/file.sh'])
228 if __name__
== '__main__':
229 unittest
.main(verbosity
=2)