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
)
194 self
.assertRaises(ValueError, dep_info1
.Update
, dep_info3
)
195 self
.assertRaises(ValueError, dep_info3
.Update
, dep_info2
)
197 def testUpdateCloudStorageInfoNoVersions(self
):
198 dep_info1
= dependency_info
.DependencyInfo(
199 'dep1', 'platform1', 'config_file1')
200 dep_info2
= dependency_info
.DependencyInfo(
201 'dep1', 'platform1', 'config_file2', cs_bucket
='cs_bucket',
202 cs_hash
='cs_hash', download_path
='download_path',
203 cs_remote_path
='cs_remote_path')
204 dep_info3
= dependency_info
.DependencyInfo(
205 'dep1', 'platform1', 'config_file3')
206 dep_info4
= dependency_info
.DependencyInfo(
207 'dep1', 'platform1', 'config_file4', cs_bucket
='cs_bucket',
208 cs_hash
='cs_hash', download_path
='download_path',
209 cs_remote_path
='cs_remote_path')
211 dep_info1
.Update(dep_info2
)
212 self
.assertEqual('cs_bucket', dep_info1
.cs_bucket
)
213 self
.assertEqual('cs_hash', dep_info1
.cs_hash
)
214 self
.assertEqual('download_path', dep_info1
.download_path
)
215 self
.assertEqual('cs_remote_path', dep_info1
.cs_remote_path
)
216 self
.assertFalse(dep_info1
.local_paths
)
218 dep_info1
.Update(dep_info3
)
219 self
.assertEqual('cs_bucket', dep_info1
.cs_bucket
)
220 self
.assertEqual('cs_hash', dep_info1
.cs_hash
)
221 self
.assertEqual('download_path', dep_info1
.download_path
)
222 self
.assertEqual('cs_remote_path', dep_info1
.cs_remote_path
)
223 self
.assertFalse(dep_info1
.local_paths
)
225 self
.assertRaises(ValueError, dep_info1
.Update
, dep_info4
)
227 def testUpdateCloudStorageInfoWithVersions(self
):
228 dep_info1
= dependency_info
.DependencyInfo(
229 'dep1', 'platform1', 'config_file1')
230 dep_info2
= dependency_info
.DependencyInfo(
231 'dep1', 'platform1', 'config_file2', cs_bucket
='cs_bucket2',
232 cs_hash
='cs_hash2', download_path
='download_path2',
233 cs_remote_path
='cs_remote_path2', version_in_cs
='2.1.1')
234 dep_info3
= dependency_info
.DependencyInfo(
235 'dep1', 'platform1', 'config_file3')
236 dep_info4
= dependency_info
.DependencyInfo(
237 'dep1', 'platform1', 'config_file4', cs_bucket
='cs_bucket4',
238 cs_hash
='cs_hash4', download_path
='download_path4',
239 cs_remote_path
='cs_remote_path4')
240 dep_info5
= dependency_info
.DependencyInfo(
241 'dep1', 'platform1', 'config_file5', cs_bucket
='cs_bucket5',
242 cs_hash
='cs_hash5', download_path
='download_path5',
243 cs_remote_path
='cs_remote_path5')
245 dep_info1
.Update(dep_info2
)
246 self
.assertEqual('cs_bucket2', dep_info1
.cs_bucket
)
247 self
.assertEqual('cs_hash2', dep_info1
.cs_hash
)
248 self
.assertEqual('download_path2', dep_info1
.download_path
)
249 self
.assertEqual('cs_remote_path2', dep_info1
.cs_remote_path
)
250 self
.assertEqual('2.1.1', dep_info1
.version_in_cs
)
251 self
.assertFalse(dep_info1
.local_paths
)
253 dep_info1
.Update(dep_info3
)
254 self
.assertEqual('cs_bucket2', dep_info1
.cs_bucket
)
255 self
.assertEqual('cs_hash2', dep_info1
.cs_hash
)
256 self
.assertEqual('download_path2', dep_info1
.download_path
)
257 self
.assertEqual('cs_remote_path2', dep_info1
.cs_remote_path
)
258 self
.assertEqual('2.1.1', dep_info1
.version_in_cs
)
259 self
.assertFalse(dep_info1
.local_paths
)
261 self
.assertRaises(ValueError, dep_info1
.Update
, dep_info4
)
262 self
.assertEqual('cs_bucket2', dep_info1
.cs_bucket
)
263 self
.assertEqual('cs_hash2', dep_info1
.cs_hash
)
264 self
.assertEqual('download_path2', dep_info1
.download_path
)
265 self
.assertEqual('cs_remote_path2', dep_info1
.cs_remote_path
)
266 self
.assertEqual('2.1.1', dep_info1
.version_in_cs
)
267 self
.assertFalse(dep_info1
.local_paths
)
269 self
.assertRaises(ValueError, dep_info1
.Update
, dep_info5
)
271 def testUpdateAllInfo(self
):
272 dep_info1
= dependency_info
.DependencyInfo(
273 'dep1', 'platform1', 'config_file1', local_paths
=['path1'])
274 dep_info2
= dependency_info
.DependencyInfo(
275 'dep1', 'platform1', 'config_file2', cs_bucket
='cs_bucket',
276 cs_hash
='cs_hash', download_path
='download_path',
277 cs_remote_path
='cs_remote_path', local_paths
=['path2'])
278 dep_info3
= dependency_info
.DependencyInfo(
279 'dep1', 'platform1', 'config_file3', local_paths
=['path3'])
280 dep_info4
= dependency_info
.DependencyInfo(
281 'dep1', 'platform1', 'config_file4', cs_bucket
='cs_bucket',
282 cs_hash
='cs_hash', download_path
='download_path',
283 cs_remote_path
='cs_remote_path', local_paths
=['path4'])
285 dep_info1
.Update(dep_info2
)
286 self
.assertEqual('cs_bucket', dep_info1
.cs_bucket
)
287 self
.assertEqual('cs_hash', dep_info1
.cs_hash
)
288 self
.assertEqual('download_path', dep_info1
.download_path
)
289 self
.assertEqual('cs_remote_path', dep_info1
.cs_remote_path
)
290 self
.assertEqual(['path1', 'path2'], dep_info1
.local_paths
)
292 dep_info1
.Update(dep_info3
)
293 self
.assertEqual('cs_bucket', dep_info1
.cs_bucket
)
294 self
.assertEqual('cs_hash', dep_info1
.cs_hash
)
295 self
.assertEqual('download_path', dep_info1
.download_path
)
296 self
.assertEqual('cs_remote_path', dep_info1
.cs_remote_path
)
297 self
.assertEqual(['path1', 'path2', 'path3'], dep_info1
.local_paths
)
299 self
.assertRaises(ValueError, dep_info1
.Update
, dep_info4
)
301 def testAppendConflictingLocalFiles(self
):
302 dep_info1
= dependency_info
.DependencyInfo(
303 'dep1', 'platform1', 'config_file1',
304 local_paths
=['path0', 'path1', 'path3', 'path5', 'path6'])
305 dep_info2
= dependency_info
.DependencyInfo(
306 'dep1', 'platform1', 'config_file2',
307 local_paths
=['path0', 'path2', 'path4', 'path5'])
309 expected_local_paths
= ['path0', 'path1', 'path3', 'path5', 'path6',
311 dep_info1
.Update(dep_info2
)
312 self
.assertEquals(expected_local_paths
, dep_info1
.local_paths
)