1 # Copyright 2015 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
7 from catapult_base
.dependency_manager
import dependency_info
9 class DependencyInfoTest(unittest
.TestCase
):
10 def testInitRequiredInfo(self
):
11 # Must have a dependency, platform and file_path.
12 self
.assertRaises(ValueError, dependency_info
.DependencyInfo
,
14 self
.assertRaises(ValueError, dependency_info
.DependencyInfo
,
16 self
.assertRaises(ValueError, dependency_info
.DependencyInfo
,
18 self
.assertRaises(ValueError, dependency_info
.DependencyInfo
,
19 None, None, 'config_file')
20 # Empty DependencyInfo.
21 empty_di
= dependency_info
.DependencyInfo('dep', 'plat', 'config_file')
22 self
.assertFalse(empty_di
.cs_bucket
)
23 self
.assertFalse(empty_di
.cs_hash
)
24 self
.assertFalse(empty_di
.download_path
)
25 self
.assertFalse(empty_di
.cs_remote_path
)
26 self
.assertFalse(empty_di
.local_paths
)
27 self
.assertEqual('dep', empty_di
.dependency
)
28 self
.assertEqual('plat', empty_di
.platform
)
29 self
.assertEqual(['config_file'], empty_di
.config_files
)
31 def testInitLocalPaths(self
):
32 dep_info
= dependency_info
.DependencyInfo(
33 'dep', 'platform', 'config_file', local_paths
=['path0', 'path1'])
34 self
.assertEqual('dep', dep_info
.dependency
)
35 self
.assertEqual('platform', dep_info
.platform
)
36 self
.assertEqual(['config_file'], dep_info
.config_files
)
37 self
.assertEqual(['path0', 'path1'], dep_info
.local_paths
)
38 self
.assertFalse(dep_info
.version_in_cs
)
39 self
.assertFalse(dep_info
.cs_hash
)
40 self
.assertFalse(dep_info
.cs_bucket
)
41 self
.assertFalse(dep_info
.cs_remote_path
)
42 self
.assertFalse(dep_info
.download_path
)
44 def testInitMinimumCloudStorageInfo(self
):
45 # Must specify cloud storage information atomically.
46 self
.assertRaises(ValueError, dependency_info
.DependencyInfo
, 'dep', 'plat',
47 'config_file', cs_bucket
='cs_b')
48 self
.assertRaises(ValueError, dependency_info
.DependencyInfo
, 'dep', 'plat',
49 'config_file', cs_hash
='cs_hash')
50 self
.assertRaises(ValueError, dependency_info
.DependencyInfo
, 'dep', 'plat',
51 'config_file', cs_remote_path
='cs_remote_path')
52 self
.assertRaises(ValueError, dependency_info
.DependencyInfo
, 'dep', 'plat',
53 'config_file', download_path
='download_path')
54 self
.assertRaises(ValueError, dependency_info
.DependencyInfo
, 'dep', 'plat',
55 'config_file', cs_bucket
='cs_bucket', cs_hash
='cs_hash',
56 cs_remote_path
='cs_remote_path')
57 self
.assertRaises(ValueError, dependency_info
.DependencyInfo
, 'dep', 'plat',
58 'config_file', cs_bucket
='cs_bucket', cs_hash
='cs_hash',
59 cs_remote_path
='cs_remote_path', local_paths
=['path'])
60 self
.assertRaises(ValueError, dependency_info
.DependencyInfo
, 'dep', 'plat',
61 'config_file', cs_bucket
='cs_bucket', cs_hash
='cs_hash',
62 download_path
='download_path')
63 self
.assertRaises(ValueError, dependency_info
.DependencyInfo
, 'dep', 'plat',
64 'config_file', cs_bucket
='cs_bucket', cs_hash
='cs_hash',
65 download_path
='download_path', local_paths
=['path'])
66 self
.assertRaises(ValueError, dependency_info
.DependencyInfo
, 'dep', 'plat',
67 'config_file', cs_bucket
='cs_bucket',
68 cs_remote_path
='cs_remote_path',
69 download_path
='download_path')
70 self
.assertRaises(ValueError, dependency_info
.DependencyInfo
, 'dep', 'plat',
71 'config_file', cs_hash
='cs_hash',
72 cs_remote_path
='cs_remote_path',
73 download_path
='download_path')
74 self
.assertRaises(ValueError, dependency_info
.DependencyInfo
, 'dep', 'plat',
75 'config_file', cs_bucket
='cs_bucket', cs_hash
='cs_hash',
76 download_path
='download_path', local_paths
=['path'])
77 self
.assertRaises(ValueError, dependency_info
.DependencyInfo
, 'dep', 'plat',
78 'config_file', cs_bucket
='cs_bucket',
79 cs_remote_path
='cs_remote_path',
80 download_path
='download_path', local_paths
=['path'])
81 self
.assertRaises(ValueError, dependency_info
.DependencyInfo
, 'dep', 'plat',
82 'config_file', cs_hash
='cs_hash',
83 cs_remote_path
='cs_remote_path',
84 download_path
='download_path', local_paths
=['path'])
86 def testInitWithVersion(self
):
87 self
.assertRaises(ValueError, dependency_info
.DependencyInfo
, 'dep', 'plat',
88 'config_file', version_in_cs
='version_in_cs')
89 self
.assertRaises(ValueError, dependency_info
.DependencyInfo
, 'dep', 'plat',
90 'config_file', version_in_cs
='version_in_cs',
91 local_paths
=['path2'])
92 self
.assertRaises(ValueError, dependency_info
.DependencyInfo
, 'dep', 'plat',
93 'config_file', cs_bucket
='cs_bucket', cs_hash
='cs_hash',
94 cs_remote_path
='cs_remote_path',
95 version_in_cs
='version_in_cs', local_paths
=['path2'])
97 dep_info
= dependency_info
.DependencyInfo(
98 'dep', 'platform', 'config_file', cs_bucket
='cs_bucket',
99 cs_hash
='cs_hash', download_path
='download_path',
100 cs_remote_path
='cs_remote_path', version_in_cs
='version_in_cs')
101 self
.assertEqual('dep', dep_info
.dependency
)
102 self
.assertEqual('platform', dep_info
.platform
)
103 self
.assertEqual(['config_file'], dep_info
.config_files
)
104 self
.assertEqual('cs_hash', dep_info
.cs_hash
)
105 self
.assertEqual('cs_bucket', dep_info
.cs_bucket
)
106 self
.assertEqual('cs_remote_path', dep_info
.cs_remote_path
)
107 self
.assertEqual('download_path', dep_info
.download_path
)
108 self
.assertEqual('version_in_cs', dep_info
.version_in_cs
)
109 self
.assertFalse(dep_info
.local_paths
)
111 dep_info
= dependency_info
.DependencyInfo(
112 'dep', 'platform', 'config_file', cs_bucket
='cs_bucket',
113 cs_hash
='cs_hash', download_path
='download_path',
114 cs_remote_path
='cs_remote_path', version_in_cs
='version_in_cs',
115 local_paths
=['path'])
116 self
.assertEqual('dep', dep_info
.dependency
)
117 self
.assertEqual('platform', dep_info
.platform
)
118 self
.assertEqual(['config_file'], dep_info
.config_files
)
119 self
.assertEqual('cs_hash', dep_info
.cs_hash
)
120 self
.assertEqual('cs_bucket', dep_info
.cs_bucket
)
121 self
.assertEqual('cs_remote_path', dep_info
.cs_remote_path
)
122 self
.assertEqual('download_path', dep_info
.download_path
)
123 self
.assertEqual('version_in_cs', dep_info
.version_in_cs
)
124 self
.assertEqual(['path'], dep_info
.local_paths
)
126 def testInitCloudStorageInfo(self
):
127 dep_info
= dependency_info
.DependencyInfo(
128 'dep', 'platform', 'config_file', cs_bucket
='cs_bucket',
129 cs_hash
='cs_hash', download_path
='download_path',
130 cs_remote_path
='cs_remote_path')
131 self
.assertEqual('dep', dep_info
.dependency
)
132 self
.assertEqual('platform', dep_info
.platform
)
133 self
.assertEqual(['config_file'], dep_info
.config_files
)
134 self
.assertEqual('cs_hash', dep_info
.cs_hash
)
135 self
.assertEqual('cs_bucket', dep_info
.cs_bucket
)
136 self
.assertEqual('cs_remote_path', dep_info
.cs_remote_path
)
137 self
.assertEqual('download_path', dep_info
.download_path
)
138 self
.assertFalse(dep_info
.version_in_cs
)
139 self
.assertFalse(dep_info
.local_paths
)
141 dep_info
= dependency_info
.DependencyInfo(
142 'dep', 'platform', 'config_file', cs_bucket
='cs_bucket',
143 cs_hash
='cs_hash', download_path
='download_path',
144 cs_remote_path
='cs_remote_path', local_paths
=['path'])
145 self
.assertEqual('dep', dep_info
.dependency
)
146 self
.assertEqual('platform', dep_info
.platform
)
147 self
.assertEqual(['config_file'], dep_info
.config_files
)
148 self
.assertEqual('cs_hash', dep_info
.cs_hash
)
149 self
.assertEqual('cs_bucket', dep_info
.cs_bucket
)
150 self
.assertEqual('cs_remote_path', dep_info
.cs_remote_path
)
151 self
.assertEqual('download_path', dep_info
.download_path
)
152 self
.assertFalse(dep_info
.version_in_cs
)
153 self
.assertEqual(['path'], dep_info
.local_paths
)
155 def testInitAllInfo(self
):
156 dep_info
= dependency_info
.DependencyInfo(
157 'dep', 'platform', 'config_file', cs_bucket
='cs_bucket',
158 cs_hash
='cs_hash', download_path
='download_path',
159 cs_remote_path
='cs_remote_path', local_paths
=['path0', 'path1'])
160 self
.assertEqual('dep', dep_info
.dependency
)
161 self
.assertEqual('platform', dep_info
.platform
)
162 self
.assertEqual(['config_file'], dep_info
.config_files
)
163 self
.assertEqual('cs_hash', dep_info
.cs_hash
)
164 self
.assertEqual('cs_bucket', dep_info
.cs_bucket
)
165 self
.assertEqual('cs_remote_path', dep_info
.cs_remote_path
)
166 self
.assertEqual('download_path', dep_info
.download_path
)
167 self
.assertEqual(['path0', 'path1'], dep_info
.local_paths
)
168 self
.assertFalse(dep_info
.version_in_cs
)
170 dep_info
= dependency_info
.DependencyInfo(
171 'dep', 'platform', 'config_file', cs_bucket
='cs_bucket',
172 cs_hash
='cs_hash', download_path
='download_path',
173 cs_remote_path
='cs_remote_path', version_in_cs
='version_in_cs',
174 local_paths
=['path0', 'path1'])
175 self
.assertEqual('dep', dep_info
.dependency
)
176 self
.assertEqual('platform', dep_info
.platform
)
177 self
.assertEqual(['config_file'], dep_info
.config_files
)
178 self
.assertEqual('cs_hash', dep_info
.cs_hash
)
179 self
.assertEqual('cs_bucket', dep_info
.cs_bucket
)
180 self
.assertEqual('cs_remote_path', dep_info
.cs_remote_path
)
181 self
.assertEqual('download_path', dep_info
.download_path
)
182 self
.assertEqual('version_in_cs', dep_info
.version_in_cs
)
183 self
.assertEqual(['path0', 'path1'], dep_info
.local_paths
)
186 def testUpdateRequiredArgsConflicts(self
):
187 dep_info1
= dependency_info
.DependencyInfo(
188 'dep1', 'platform1', 'config_file1', local_paths
=['path0', 'path1'])
189 dep_info2
= dependency_info
.DependencyInfo(
190 'dep1', 'platform2', 'config_file2', local_paths
=['path0', 'path2'])
191 dep_info3
= dependency_info
.DependencyInfo(
192 'dep2', 'platform1', 'config_file3', local_paths
=['path0', 'path3'])
193 self
.assertRaises(ValueError, dep_info1
.Update
, dep_info2
, False)
194 self
.assertRaises(ValueError, dep_info1
.Update
, dep_info3
, False)
195 self
.assertRaises(ValueError, dep_info3
.Update
, dep_info2
, False)
196 self
.assertRaises(ValueError, dep_info1
.Update
, dep_info2
, True)
197 self
.assertRaises(ValueError, dep_info1
.Update
, dep_info3
, True)
198 self
.assertRaises(ValueError, dep_info3
.Update
, dep_info2
, True)
200 def testUpdateCloudStorageInfoNoVersions(self
):
201 dep_info1
= dependency_info
.DependencyInfo(
202 'dep1', 'platform1', 'config_file1')
203 dep_info2
= dependency_info
.DependencyInfo(
204 'dep1', 'platform1', 'config_file2', cs_bucket
='cs_bucket',
205 cs_hash
='cs_hash', download_path
='download_path',
206 cs_remote_path
='cs_remote_path')
207 dep_info3
= dependency_info
.DependencyInfo(
208 'dep1', 'platform1', 'config_file3')
209 dep_info4
= dependency_info
.DependencyInfo(
210 'dep1', 'platform1', 'config_file4', cs_bucket
='cs_bucket',
211 cs_hash
='cs_hash', download_path
='download_path',
212 cs_remote_path
='cs_remote_path')
214 dep_info1
.Update(dep_info2
, False)
215 self
.assertEqual('cs_bucket', dep_info1
.cs_bucket
)
216 self
.assertEqual('cs_hash', dep_info1
.cs_hash
)
217 self
.assertEqual('download_path', dep_info1
.download_path
)
218 self
.assertEqual('cs_remote_path', dep_info1
.cs_remote_path
)
219 self
.assertFalse(dep_info1
.local_paths
)
221 dep_info1
.Update(dep_info3
, False)
222 self
.assertEqual('cs_bucket', dep_info1
.cs_bucket
)
223 self
.assertEqual('cs_hash', dep_info1
.cs_hash
)
224 self
.assertEqual('download_path', dep_info1
.download_path
)
225 self
.assertEqual('cs_remote_path', dep_info1
.cs_remote_path
)
226 self
.assertFalse(dep_info1
.local_paths
)
228 self
.assertRaises(ValueError, dep_info1
.Update
, dep_info4
, False)
230 def testUpdateCloudStorageInfoWithVersions(self
):
231 dep_info1
= dependency_info
.DependencyInfo(
232 'dep1', 'platform1', 'config_file1')
233 dep_info2
= dependency_info
.DependencyInfo(
234 'dep1', 'platform1', 'config_file2', cs_bucket
='cs_bucket2',
235 cs_hash
='cs_hash2', download_path
='download_path2',
236 cs_remote_path
='cs_remote_path2', version_in_cs
='2.1.1')
237 dep_info3
= dependency_info
.DependencyInfo(
238 'dep1', 'platform1', 'config_file3')
239 dep_info4
= dependency_info
.DependencyInfo(
240 'dep1', 'platform1', 'config_file4', cs_bucket
='cs_bucket4',
241 cs_hash
='cs_hash4', download_path
='download_path4',
242 cs_remote_path
='cs_remote_path4')
243 dep_info5
= dependency_info
.DependencyInfo(
244 'dep1', 'platform1', 'config_file5', cs_bucket
='cs_bucket5',
245 cs_hash
='cs_hash5', download_path
='download_path5',
246 cs_remote_path
='cs_remote_path5')
248 dep_info1
.Update(dep_info2
, False)
249 self
.assertEqual('cs_bucket2', dep_info1
.cs_bucket
)
250 self
.assertEqual('cs_hash2', dep_info1
.cs_hash
)
251 self
.assertEqual('download_path2', dep_info1
.download_path
)
252 self
.assertEqual('cs_remote_path2', dep_info1
.cs_remote_path
)
253 self
.assertEqual('2.1.1', dep_info1
.version_in_cs
)
254 self
.assertFalse(dep_info1
.local_paths
)
256 dep_info1
.Update(dep_info3
, False)
257 self
.assertEqual('cs_bucket2', dep_info1
.cs_bucket
)
258 self
.assertEqual('cs_hash2', dep_info1
.cs_hash
)
259 self
.assertEqual('download_path2', dep_info1
.download_path
)
260 self
.assertEqual('cs_remote_path2', dep_info1
.cs_remote_path
)
261 self
.assertEqual('2.1.1', dep_info1
.version_in_cs
)
262 self
.assertFalse(dep_info1
.local_paths
)
264 self
.assertRaises(ValueError, dep_info1
.Update
, dep_info4
, False)
265 self
.assertEqual('cs_bucket2', dep_info1
.cs_bucket
)
266 self
.assertEqual('cs_hash2', dep_info1
.cs_hash
)
267 self
.assertEqual('download_path2', dep_info1
.download_path
)
268 self
.assertEqual('cs_remote_path2', dep_info1
.cs_remote_path
)
269 self
.assertEqual('2.1.1', dep_info1
.version_in_cs
)
270 self
.assertFalse(dep_info1
.local_paths
)
272 self
.assertRaises(ValueError, dep_info1
.Update
, dep_info5
, False)
274 def testUpdateAllInfo(self
):
275 dep_info1
= dependency_info
.DependencyInfo(
276 'dep1', 'platform1', 'config_file1', local_paths
=['path1'])
277 dep_info2
= dependency_info
.DependencyInfo(
278 'dep1', 'platform1', 'config_file2', cs_bucket
='cs_bucket',
279 cs_hash
='cs_hash', download_path
='download_path',
280 cs_remote_path
='cs_remote_path', local_paths
=['path2'])
281 dep_info3
= dependency_info
.DependencyInfo(
282 'dep1', 'platform1', 'config_file3', local_paths
=['path3'])
283 dep_info4
= dependency_info
.DependencyInfo(
284 'dep1', 'platform1', 'config_file4', cs_bucket
='cs_bucket',
285 cs_hash
='cs_hash', download_path
='download_path',
286 cs_remote_path
='cs_remote_path', local_paths
=['path4'])
288 dep_info1
.Update(dep_info2
, False)
289 self
.assertEqual('cs_bucket', dep_info1
.cs_bucket
)
290 self
.assertEqual('cs_hash', dep_info1
.cs_hash
)
291 self
.assertEqual('download_path', dep_info1
.download_path
)
292 self
.assertEqual('cs_remote_path', dep_info1
.cs_remote_path
)
293 self
.assertEqual(['path1', 'path2'], dep_info1
.local_paths
)
295 dep_info1
.Update(dep_info3
, False)
296 self
.assertEqual('cs_bucket', dep_info1
.cs_bucket
)
297 self
.assertEqual('cs_hash', dep_info1
.cs_hash
)
298 self
.assertEqual('download_path', dep_info1
.download_path
)
299 self
.assertEqual('cs_remote_path', dep_info1
.cs_remote_path
)
300 self
.assertEqual(['path1', 'path2', 'path3'], dep_info1
.local_paths
)
302 self
.assertRaises(ValueError, dep_info1
.Update
, dep_info4
, False)
304 def testAppendConflictingLocalFiles(self
):
305 dep_info1
= dependency_info
.DependencyInfo(
306 'dep1', 'platform1', 'config_file1',
307 local_paths
=['path0', 'path1', 'path3', 'path5', 'path6'])
308 dep_info2
= dependency_info
.DependencyInfo(
309 'dep1', 'platform1', 'config_file2',
310 local_paths
=['path0', 'path2', 'path4', 'path5'])
312 expected_local_paths
= ['path0', 'path1', 'path3', 'path5', 'path6',
314 dep_info1
.Update(dep_info2
, False)
315 self
.assertEquals(expected_local_paths
, dep_info1
.local_paths
)