80196ed6a5fefc4d1770adc18b9d0b92ba8447c4
[integration/packaging.git] / packages / test_lib.py
1 ##############################################################################
2 # Copyright (c) 2016 Daniel Farrell.  All rights reserved.
3 #
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 ##############################################################################
8
9 """Tests for package build logic helper library."""
10
11 import unittest
12
13 import lib
14
15
16 class TestExtractVersion(unittest.TestCase):
17
18     """Test logic to extract ODL versions from artifact URLs."""
19
20     nexus_url = "https://nexus.opendaylight.org/content/repositories"
21
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"], "")
31
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"], "")
41
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"], "")
51
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"], "")
61
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")
71
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")
81
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")
91
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"], "")
101
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"], "")
111
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"], "")
121
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"], "")
131
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"], "")
141
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"], "")
151
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")
161
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")
171
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")
181
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")
191
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")
201
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")
211
212
213 class TestGetSnapURL(unittest.TestCase):
214
215     """Test logic get URL to latest snapshot build of given major version."""
216
217     url_base = "https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/integration"
218
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)
225
226     def test_oxygen(self):
227         """Test Oxygen major version gives sane snapshot URL."""
228         self.validate_snap_url(lib.get_snap_url("8"))
229
230     def test_fluorine(self):
231         """Test Fluorine major version gives sane snapshot URL."""
232         self.validate_snap_url(lib.get_snap_url("9"))
233
234     def test_neon(self):
235         """Test Neon major version gives sane snapshot URL."""
236         self.validate_snap_url(lib.get_snap_url("10"))
237
238
239 class TestGetDistroNamePrefix(unittest.TestCase):
240
241     """Test logic to get Karaf 3/4 or Managed Release Common distro prefixes."""
242
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"
249
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)
254
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)
259
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)
264
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)
269
270     def test_neon(self):
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)
274
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)
279
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)
284
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)
289
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)
294
295
296 class TestGetSysdCommit(unittest.TestCase):
297
298     """Test fn to get most recent Int/Pack hash to use as sysd file version."""
299
300     def test_type(self):
301         """Check that returned value is of the right type."""
302         sysd_hash = lib.get_sysd_commit()
303         self.assertIsInstance(sysd_hash, str)
304
305     def test_len(self):
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)
309
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-]+$")
314
315
316 class TestGetJavaVersion(unittest.TestCase):
317
318     """Test fn to get Java version required for a given ODL version."""
319
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)
324
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)
329
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)
334
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)
339
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)
344
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)
349
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)
354
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)
359
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)
364
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)
369
370
371 class TestGetChangelogDate(unittest.TestCase):
372
373     """Test lib fn that gives date for changelog in RPM or Deb format."""
374
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)
379
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)
384
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")
389
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")
394
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(
399             changelog_date,
400             "Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec")
401
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(
406             changelog_date,
407             "Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec")
408
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(
413             changelog_date,
414             "Mon|Tue|Wed|Thu|Fri|Sat|Sun")
415
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(
420             changelog_date,
421             "Mon|Tue|Wed|Thu|Fri|Sat|Sun")