1 ##############################################################################
2 # Copyright (c) 2016 Daniel Farrell. All rights reserved.
4 # This program and the accompanying materials are made available under the
5 # terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 # and is available at http://www.eclipse.org/legal/epl-v10.html
7 ##############################################################################
9 """Tests for package build logic helper library."""
16 class TestExtractVersion(unittest.TestCase):
18 """Test logic to extract ODL versions from artifact URLs."""
20 nexus_url = "https://nexus.opendaylight.org/content/repositories"
22 def test_oxygen_release_url(self):
23 """Test URL of the ODL Oxygen release."""
24 url = "%s/repositories/opendaylight.release/org/opendaylight/integration/karaf/0.8.0/karaf-0.8.0.tar.gz" % self.nexus_url
25 version = lib.extract_version(url)
26 self.assertEqual(version["version_major"], "8")
27 self.assertEqual(version["version_minor"], "0")
28 self.assertEqual(version["version_patch"], "0")
29 self.assertEqual(version["pkg_version"], "1")
30 self.assertEqual(version["codename"], "")
32 def test_oxygen_release_zip_url(self):
33 """Test URL of the ODL Oxygen release zip archive."""
34 url = "%s/repositories/opendaylight.release/org/opendaylight/integration/karaf/0.8.0/karaf-0.8.0.zip" % self.nexus_url
35 version = lib.extract_version(url)
36 self.assertEqual(version["version_major"], "8")
37 self.assertEqual(version["version_minor"], "0")
38 self.assertEqual(version["version_patch"], "0")
39 self.assertEqual(version["pkg_version"], "1")
40 self.assertEqual(version["codename"], "")
42 def test_oxygen_sr3_url(self):
43 """Test URL of the ODL Oxygen SR3."""
44 url = "%s/repositories/opendaylight.release/org/opendaylight/integration/karaf/0.8.3/karaf-0.8.3.tar.gz" % self.nexus_url
45 version = lib.extract_version(url)
46 self.assertEqual(version["version_major"], "8")
47 self.assertEqual(version["version_minor"], "3")
48 self.assertEqual(version["version_patch"], "0")
49 self.assertEqual(version["pkg_version"], "1")
50 self.assertEqual(version["codename"], "")
52 def test_oxygen_sr3_zip_url(self):
53 """Test URL of the ODL Oxygen SR3 zip archive."""
54 url = "%s/repositories/opendaylight.release/org/opendaylight/integration/karaf/0.8.3/karaf-0.8.3.zip" % self.nexus_url
55 version = lib.extract_version(url)
56 self.assertEqual(version["version_major"], "8")
57 self.assertEqual(version["version_minor"], "3")
58 self.assertEqual(version["version_patch"], "0")
59 self.assertEqual(version["pkg_version"], "1")
60 self.assertEqual(version["codename"], "")
62 def test_oxygen_snapshot_url(self):
63 """Test URL of an ODL Oxygen snapshot build."""
64 url = "%s/opendaylight.snapshot/org/opendaylight/integration/karaf/0.8.0-SNAPSHOT/araf-0.8.0-20180202.194543-1393.tar.gz" % self.nexus_url
65 version = lib.extract_version(url)
66 self.assertEqual(version["version_major"], "8")
67 self.assertEqual(version["version_minor"], "0")
68 self.assertEqual(version["version_patch"], "0")
69 self.assertEqual(version["pkg_version"], "0.1.20180202snap1393")
70 self.assertEqual(version["codename"], "-SNAPSHOT")
72 def test_oxygen_snapshot_zip_url(self):
73 """Test URL of an ODL Oxygen snapshot build zip archive."""
74 url = "%s/opendaylight.snapshot/org/opendaylight/integration/karaf/0.8.0-SNAPSHOT/karaf-0.8.0-20180202.194543-1393.zip" % self.nexus_url
75 version = lib.extract_version(url)
76 self.assertEqual(version["version_major"], "8")
77 self.assertEqual(version["version_minor"], "0")
78 self.assertEqual(version["version_patch"], "0")
79 self.assertEqual(version["pkg_version"], "0.1.20180202snap1393")
80 self.assertEqual(version["codename"], "-SNAPSHOT")
82 def test_oxygen_multipatch_zip_url(self):
83 """Test URL of an ODL Oxygen multipatch-test build zip archive."""
84 url = "%s/opendaylight.snapshot/org/opendaylight/integration/integration/distribution/karaf/0.8.0-SNAPSHOT/karaf-0.8.0-20180204.191936-134.zip" % self.nexus_url
85 version = lib.extract_version(url)
86 self.assertEqual(version["version_major"], "8")
87 self.assertEqual(version["version_minor"], "0")
88 self.assertEqual(version["version_patch"], "0")
89 self.assertEqual(version["pkg_version"], "0.1.20180204snap134")
90 self.assertEqual(version["codename"], "-SNAPSHOT")
92 def test_fluorine_release_url(self):
93 """Test URL of the ODL Fluorine release."""
94 url = "%s/repositories/opendaylight.release/org/opendaylight/integration/karaf/0.9.0/karaf-0.9.0.tar.gz" % self.nexus_url
95 version = lib.extract_version(url)
96 self.assertEqual(version["version_major"], "9")
97 self.assertEqual(version["version_minor"], "0")
98 self.assertEqual(version["version_patch"], "0")
99 self.assertEqual(version["pkg_version"], "1")
100 self.assertEqual(version["codename"], "")
102 def test_fluorine_release_zip_url(self):
103 """Test URL of the ODL Fluorine release zip archive."""
104 url = "%s/repositories/opendaylight.release/org/opendaylight/integration/karaf/0.9.0/karaf-0.9.0.zip" % self.nexus_url
105 version = lib.extract_version(url)
106 self.assertEqual(version["version_major"], "9")
107 self.assertEqual(version["version_minor"], "0")
108 self.assertEqual(version["version_patch"], "0")
109 self.assertEqual(version["pkg_version"], "1")
110 self.assertEqual(version["codename"], "")
112 def test_fluorine_sr1_url(self):
113 """Test URL of the ODL Fluorine SR1."""
114 url = "%s/repositories/opendaylight.release/org/opendaylight/integration/karaf/0.9.1/karaf-0.9.1.tar.gz" % self.nexus_url
115 version = lib.extract_version(url)
116 self.assertEqual(version["version_major"], "9")
117 self.assertEqual(version["version_minor"], "1")
118 self.assertEqual(version["version_patch"], "0")
119 self.assertEqual(version["pkg_version"], "1")
120 self.assertEqual(version["codename"], "")
122 def test_fluorine_sr1_zip_url(self):
123 """Test URL of the ODL Fluorine SR1 zip archive."""
124 url = "%s/repositories/opendaylight.release/org/opendaylight/integration/karaf/0.9.1/karaf-0.9.1.zip" % self.nexus_url
125 version = lib.extract_version(url)
126 self.assertEqual(version["version_major"], "9")
127 self.assertEqual(version["version_minor"], "1")
128 self.assertEqual(version["version_patch"], "0")
129 self.assertEqual(version["pkg_version"], "1")
130 self.assertEqual(version["codename"], "")
132 def test_fluorine_sr2_url(self):
133 """Test URL of the ODL Fluorine SR2."""
134 url = "%s/repositories/opendaylight.release/org/opendaylight/integration/karaf/0.9.2/karaf-0.9.2.tar.gz" % self.nexus_url
135 version = lib.extract_version(url)
136 self.assertEqual(version["version_major"], "9")
137 self.assertEqual(version["version_minor"], "2")
138 self.assertEqual(version["version_patch"], "0")
139 self.assertEqual(version["pkg_version"], "1")
140 self.assertEqual(version["codename"], "")
142 def test_fluorine_sr2_zip_url(self):
143 """Test URL of the ODL Fluorine SR2 zip archive."""
144 url = "%s/repositories/opendaylight.release/org/opendaylight/integration/karaf/0.9.2/karaf-0.9.2.zip" % self.nexus_url
145 version = lib.extract_version(url)
146 self.assertEqual(version["version_major"], "9")
147 self.assertEqual(version["version_minor"], "2")
148 self.assertEqual(version["version_patch"], "0")
149 self.assertEqual(version["pkg_version"], "1")
150 self.assertEqual(version["codename"], "")
152 def test_fluorine_snapshot_url(self):
153 """Test URL of an ODL Fluorine snapshot build."""
154 url = "%s/opendaylight.snapshot/org/opendaylight/integration/karaf/0.9.0-SNAPSHOT/karaf-0.9.0-20180411.203859-563.tar.gz" % self.nexus_url
155 version = lib.extract_version(url)
156 self.assertEqual(version["version_major"], "9")
157 self.assertEqual(version["version_minor"], "0")
158 self.assertEqual(version["version_patch"], "0")
159 self.assertEqual(version["pkg_version"], "0.1.20180411snap563")
160 self.assertEqual(version["codename"], "-SNAPSHOT")
162 def test_fluorine_snapshot_zip_url(self):
163 """Test URL of an ODL Fluorine snapshot build zip archive."""
164 url = "%s/opendaylight.snapshot/org/opendaylight/integration/karaf/0.9.0-SNAPSHOT/karaf-0.9.0-20180411.203859-563.tar.gz" % self.nexus_url
165 version = lib.extract_version(url)
166 self.assertEqual(version["version_major"], "9")
167 self.assertEqual(version["version_minor"], "0")
168 self.assertEqual(version["version_patch"], "0")
169 self.assertEqual(version["pkg_version"], "0.1.20180411snap563")
170 self.assertEqual(version["codename"], "-SNAPSHOT")
172 def test_fluorine_multipatch_zip_url(self):
173 """Test URL of an ODL Fluorine multipatch-test build zip archive."""
174 url = "%s/opendaylight.snapshot/org/opendaylight/integration/integration/distribution/karaf/0.9.0-SNAPSHOT/karaf-0.9.0-20180531.192226-59.zip" % self.nexus_url
175 version = lib.extract_version(url)
176 self.assertEqual(version["version_major"], "9")
177 self.assertEqual(version["version_minor"], "0")
178 self.assertEqual(version["version_patch"], "0")
179 self.assertEqual(version["pkg_version"], "0.1.20180531snap59")
180 self.assertEqual(version["codename"], "-SNAPSHOT")
182 def test_neon_snapshot_url(self):
183 """Test URL of an ODL Neon snapshot build."""
184 url = "%s/opendaylight.snapshot/org/opendaylight/integration/karaf/0.10.0-SNAPSHOT/karaf-0.10.0-20181004.142605-697.tar.gz" % self.nexus_url
185 version = lib.extract_version(url)
186 self.assertEqual(version["version_major"], "10")
187 self.assertEqual(version["version_minor"], "0")
188 self.assertEqual(version["version_patch"], "0")
189 self.assertEqual(version["pkg_version"], "0.1.20181004snap697")
190 self.assertEqual(version["codename"], "-SNAPSHOT")
192 def test_neon_snapshot_zip_url(self):
193 """Test URL of an ODL Neon snapshot build zip archive."""
194 url = "%s/opendaylight.snapshot/org/opendaylight/integration/karaf/0.10.0-SNAPSHOT/karaf-0.10.0-20181004.142605-697.zip" % self.nexus_url
195 version = lib.extract_version(url)
196 self.assertEqual(version["version_major"], "10")
197 self.assertEqual(version["version_minor"], "0")
198 self.assertEqual(version["version_patch"], "0")
199 self.assertEqual(version["pkg_version"], "0.1.20181004snap697")
200 self.assertEqual(version["codename"], "-SNAPSHOT")
202 def test_neon_multipatch_zip_url(self):
203 """Test URL of an ODL Neon multipatch-test build zip archive."""
204 url = "%s/opendaylight.snapshot/org/opendaylight/integration/integration/distribution/karaf/0.10.0-SNAPSHOT/karaf-0.10.0-20180925.093600-5.zip" % self.nexus_url
205 version = lib.extract_version(url)
206 self.assertEqual(version["version_major"], "10")
207 self.assertEqual(version["version_minor"], "0")
208 self.assertEqual(version["version_patch"], "0")
209 self.assertEqual(version["pkg_version"], "0.1.20180925snap5")
210 self.assertEqual(version["codename"], "-SNAPSHOT")
213 class TestGetSnapURL(unittest.TestCase):
215 """Test logic get URL to latest snapshot build of given major version."""
217 url_base = "https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/integration"
219 def validate_snap_url(self, snap_url):
220 """Helper for validating snapshot URLs are sane."""
221 self.assertIn(self.url_base, snap_url)
222 self.assertIn("tar.gz", snap_url)
223 self.assertNotIn("release", snap_url)
224 self.assertNotIn("public", snap_url)
226 def test_oxygen(self):
227 """Test Oxygen major version gives sane snapshot URL."""
228 self.validate_snap_url(lib.get_snap_url("8"))
230 def test_fluorine(self):
231 """Test Fluorine major version gives sane snapshot URL."""
232 self.validate_snap_url(lib.get_snap_url("9"))
235 """Test Neon major version gives sane snapshot URL."""
236 self.validate_snap_url(lib.get_snap_url("10"))
239 class TestGetDistroNamePrefix(unittest.TestCase):
241 """Test logic to get Karaf 3/4 or Managed Release Common distro prefixes."""
243 mrel_distro_prefix = "opendaylight"
244 k4_distro_prefix = "karaf"
245 k3_distro_prefix = "distribution-karaf"
246 mrel_distro_url = "https://nexus.opendaylight.org/content/repositories/public/org/opendaylight/integration/opendaylight/0.9.0/opendaylight-0.9.0.tar.gz"
247 k4_distro_url = "https://nexus.opendaylight.org/content/repositories/public/org/opendaylight/integration/karaf/0.8.3/karaf-0.8.3.tar.gz"
248 k3_distro_url = "https://nexus.opendaylight.org/content/repositories/public/org/opendaylight/integration/distribution-karaf/0.6.4-Carbon/distribution-karaf-0.6.4-Carbon.tar.gz"
250 def test_oxygen(self):
251 """Test Oxygen major version gives Karaf 4 prefix."""
252 distro_prefix = lib.get_distro_name_prefix("8")
253 self.assertEqual(distro_prefix, self.k4_distro_prefix)
255 def test_oxygen_int(self):
256 """Test Oxygen major version as int gives Karaf 4 prefix."""
257 distro_prefix = lib.get_distro_name_prefix(8)
258 self.assertEqual(distro_prefix, self.k4_distro_prefix)
260 def test_fluorine(self):
261 """Test Fluorine major version gives Karaf 4 prefix."""
262 distro_prefix = lib.get_distro_name_prefix("9")
263 self.assertEqual(distro_prefix, self.k4_distro_prefix)
265 def test_fluorine_int(self):
266 """Test Fluorine major version as int gives Karaf 4 prefix."""
267 distro_prefix = lib.get_distro_name_prefix(9)
268 self.assertEqual(distro_prefix, self.k4_distro_prefix)
271 """Test Neon major version gives Karaf 4 prefix."""
272 distro_prefix = lib.get_distro_name_prefix("10")
273 self.assertEqual(distro_prefix, self.k4_distro_prefix)
275 def test_neon_int(self):
276 """Test Neon major version as int gives Karaf 4 prefix."""
277 distro_prefix = lib.get_distro_name_prefix(10)
278 self.assertEqual(distro_prefix, self.k4_distro_prefix)
280 def test_managed_release_fluorine(self):
281 """Test Managed Release URL gives MR distro prefix."""
282 distro_prefix = lib.get_distro_name_prefix(9, self.mrel_distro_url)
283 self.assertEqual(distro_prefix, self.mrel_distro_prefix)
285 def test_k4_norm_release_oxygen(self):
286 """Test normal K4 URL gives distro prefix based on Karaf version."""
287 distro_prefix = lib.get_distro_name_prefix(9, self.k4_distro_url)
288 self.assertEqual(distro_prefix, self.k4_distro_prefix)
290 def test_k3_norm_release_carbon(self):
291 """Test normal K3 URL gives distro prefix based on Karaf version."""
292 distro_prefix = lib.get_distro_name_prefix(6, self.k3_distro_url)
293 self.assertEqual(distro_prefix, self.k3_distro_prefix)
296 class TestGetSysdCommit(unittest.TestCase):
298 """Test fn to get most recent Int/Pack hash to use as sysd file version."""
301 """Check that returned value is of the right type."""
302 sysd_hash = lib.get_sysd_commit()
303 self.assertIsInstance(sysd_hash, str)
306 """Check that returned value the normal length for a commit hash."""
307 sysd_hash = lib.get_sysd_commit()
308 self.assertEqual(len(sysd_hash), 40)
310 def test_only_valid_chars(self):
311 """Check that returned value only contains typical commit hash chars."""
312 sysd_hash = lib.get_sysd_commit()
313 self.assertRegexpMatches(sysd_hash, "^[A-Za-z0-9-]+$")
316 class TestGetJavaVersion(unittest.TestCase):
318 """Test fn to get Java version required for a given ODL version."""
320 def test_type_given_int(self):
321 """Pass int, check that returned value is of the right type."""
322 java_version = lib.get_java_version(6)
323 self.assertIsInstance(java_version, int)
325 def test_type_given_str(self):
326 """Pass str, check that returned value is of the right type."""
327 java_version = lib.get_java_version("6")
328 self.assertIsInstance(java_version, int)
330 def test_old_given_int(self):
331 """Pass old ODL major version as int, check that Java 7 returned."""
332 java_version = lib.get_java_version(4)
333 self.assertEqual(java_version, 7)
335 def test_old_given_str(self):
336 """Pass old ODL major version as str, check that Java 7 returned."""
337 java_version = lib.get_java_version("4")
338 self.assertEqual(java_version, 7)
340 def test_oxygen_given_int(self):
341 """Pass Oxygen major version as int, check that Java 8 returned."""
342 java_version = lib.get_java_version(8)
343 self.assertEqual(java_version, 8)
345 def test_oxygen_given_str(self):
346 """Pass Oxygen major version as str, check that Java 8 returned."""
347 java_version = lib.get_java_version("8")
348 self.assertEqual(java_version, 8)
350 def test_fluorine_given_int(self):
351 """Pass Fluorine major version as int, check that Java 8 returned."""
352 java_version = lib.get_java_version(9)
353 self.assertEqual(java_version, 8)
355 def test_fluorine_given_str(self):
356 """Pass Fluorine major version as str, check that Java 8 returned."""
357 java_version = lib.get_java_version("9")
358 self.assertEqual(java_version, 8)
360 def test_neon_given_int(self):
361 """Pass Neon major version as int, check that Java 8 returned."""
362 java_version = lib.get_java_version(10)
363 self.assertEqual(java_version, 8)
365 def test_neon_given_str(self):
366 """Pass Neon major version as str, check that Java 8 returned."""
367 java_version = lib.get_java_version("10")
368 self.assertEqual(java_version, 8)
371 class TestGetChangelogDate(unittest.TestCase):
373 """Test lib fn that gives date for changelog in RPM or Deb format."""
375 def test_type_rpm(self):
376 """Test type of return object is correct given RPM arg."""
377 changelog_date = lib.get_changelog_date("rpm")
378 self.assertIsInstance(changelog_date, str)
380 def test_type_deb(self):
381 """Test type of return object is correct given Deb arg."""
382 changelog_date = lib.get_changelog_date("deb")
383 self.assertIsInstance(changelog_date, str)
385 def test_has_year_rpm(self):
386 """Test returned value has a year in it given RPM arg."""
387 changelog_date = lib.get_changelog_date("rpm")
388 self.assertRegexpMatches(changelog_date, "[20]\d\d")
390 def test_has_year_deb(self):
391 """Test returned value has a year in it given Deb arg."""
392 changelog_date = lib.get_changelog_date("deb")
393 self.assertRegexpMatches(changelog_date, "[20]\d\d")
395 def test_has_month_rpm(self):
396 """Test returned value has a month in it given RPM arg."""
397 changelog_date = lib.get_changelog_date("rpm")
398 self.assertRegexpMatches(
400 "Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec")
402 def test_has_month_deb(self):
403 """Test returned value has a month in it given Deb arg."""
404 changelog_date = lib.get_changelog_date("deb")
405 self.assertRegexpMatches(
407 "Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec")
409 def test_has_day_rpm(self):
410 """Test returned value has a day in it given RPM arg."""
411 changelog_date = lib.get_changelog_date("rpm")
412 self.assertRegexpMatches(
414 "Mon|Tue|Wed|Thu|Fri|Sat|Sun")
416 def test_has_day_deb(self):
417 """Test returned value has a day in it given Deb arg."""
418 changelog_date = lib.get_changelog_date("deb")
419 self.assertRegexpMatches(
421 "Mon|Tue|Wed|Thu|Fri|Sat|Sun")