0d957026949c6b8f4edb8529b85daa2c26674d17
[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_carbon_release_url(self):
23         """Test URL of the ODL Carbon release."""
24         url = "%s/opendaylight.release/org/opendaylight/integration/distribution-karaf/0.6.0-Carbon/distribution-karaf-0.6.0-Carbon.tar.gz" % self.nexus_url
25         version = lib.extract_version(url)
26         self.assertEqual(version["version_major"], "6")
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"], "-Carbon")
31
32     def test_carbon_release_zip_url(self):
33         """Test URL of the ODL Carbon release zip archive."""
34         url = "%s/opendaylight.release/org/opendaylight/integration/distribution-karaf/0.6.0-Carbon/distribution-karaf-0.6.0-Carbon.zip" % self.nexus_url
35         version = lib.extract_version(url)
36         self.assertEqual(version["version_major"], "6")
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"], "-Carbon")
41
42     def test_carbon_sr1_release_url(self):
43         """Test URL of the ODL Carbon SR1 release."""
44         url = "%s/opendaylight.release/org/opendaylight/integration/distribution-karaf/0.6.1-Carbon/distribution-karaf-0.6.1-Carbon.tar.gz" % self.nexus_url
45         version = lib.extract_version(url)
46         self.assertEqual(version["version_major"], "6")
47         self.assertEqual(version["version_minor"], "1")
48         self.assertEqual(version["version_patch"], "0")
49         self.assertEqual(version["pkg_version"], "1")
50         self.assertEqual(version["codename"], "-Carbon")
51
52     def test_carbon_sr1_release_zip_url(self):
53         """Test URL of the ODL Carbon SR1 release zip archive."""
54         url = "%s/opendaylight.release/org/opendaylight/integration/distribution-karaf/0.6.1-Carbon/distribution-karaf-0.6.1-Carbon.zip" % self.nexus_url
55         version = lib.extract_version(url)
56         self.assertEqual(version["version_major"], "6")
57         self.assertEqual(version["version_minor"], "1")
58         self.assertEqual(version["version_patch"], "0")
59         self.assertEqual(version["pkg_version"], "1")
60         self.assertEqual(version["codename"], "-Carbon")
61
62     def test_nitrogen_release_url(self):
63         """Test URL of the ODL Nitrogen release."""
64         url = "%s/opendaylight.release/org/opendaylight/integration/karaf/0.7.0/karaf-0.7.0.tar.gz" % self.nexus_url
65         version = lib.extract_version(url)
66         self.assertEqual(version["version_major"], "7")
67         self.assertEqual(version["version_minor"], "0")
68         self.assertEqual(version["version_patch"], "0")
69         self.assertEqual(version["pkg_version"], "1")
70         self.assertEqual(version["codename"], "")
71
72     def test_nitrogen_release_zip_url(self):
73         """Test URL of the ODL Nitrogen release zip archive."""
74         url = "%s/opendaylight.release/org/opendaylight/integration/karaf/0.7.0/karaf-0.7.0.zip" % self.nexus_url
75         version = lib.extract_version(url)
76         self.assertEqual(version["version_major"], "7")
77         self.assertEqual(version["version_minor"], "0")
78         self.assertEqual(version["version_patch"], "0")
79         self.assertEqual(version["pkg_version"], "1")
80         self.assertEqual(version["codename"], "")
81
82     def test_nitrogen_sr1_release_url(self):
83         """Test URL of the ODL Nitrogen SR1 release."""
84         url = "%s/opendaylight.release/org/opendaylight/integration/karaf/0.7.1/karaf-0.7.1.tar.gz" % self.nexus_url
85         version = lib.extract_version(url)
86         self.assertEqual(version["version_major"], "7")
87         self.assertEqual(version["version_minor"], "1")
88         self.assertEqual(version["version_patch"], "0")
89         self.assertEqual(version["pkg_version"], "1")
90         self.assertEqual(version["codename"], "")
91
92     def test_nitrogen_release_zip_url(self):
93         """Test URL of the ODL Nitrogen release zip archive."""
94         url = "%s/opendaylight.release/org/opendaylight/integration/karaf/0.7.1/karaf-0.7.1.zip" % self.nexus_url
95         version = lib.extract_version(url)
96         self.assertEqual(version["version_major"], "7")
97         self.assertEqual(version["version_minor"], "1")
98         self.assertEqual(version["version_patch"], "0")
99         self.assertEqual(version["pkg_version"], "1")
100         self.assertEqual(version["codename"], "")
101
102     def test_carbon_autorelease_url(self):
103         """Test URL of an ODL Carbon autorelease build."""
104         url = "%s/autorelease-2085/org/opendaylight/integration/distribution-karaf/0.6.3-Carbon/distribution-karaf-0.6.3-Carbon.tar.gz" % self.nexus_url
105         version = lib.extract_version(url)
106         self.assertEqual(version["version_major"], "6")
107         self.assertEqual(version["version_minor"], "3")
108         self.assertEqual(version["version_patch"], "0")
109         self.assertEqual(version["pkg_version"], "0.1.20180204rel2085")
110         self.assertEqual(version["codename"], "-Carbon")
111
112     def test_carbon_autorelease_zip_url(self):
113         """Test URL of an ODL Carbon autorelease build zip archive."""
114         # NB: This will need to be updated as old builds expire
115         url = "%s/autorelease-2085/org/opendaylight/integration/distribution-karaf/0.6.3-Carbon/distribution-karaf-0.6.3-Carbon.zip" % self.nexus_url
116         version = lib.extract_version(url)
117         self.assertEqual(version["version_major"], "6")
118         self.assertEqual(version["version_minor"], "3")
119         self.assertEqual(version["version_patch"], "0")
120         self.assertEqual(version["pkg_version"], "0.1.20180204rel2085")
121         self.assertEqual(version["codename"], "-Carbon")
122
123     def test_nitrogen_autorelease_url(self):
124         """Test URL of an ODL Nitrogen autorelease build."""
125         # NB: This will need to be updated as old builds expire
126         url = "%s/autorelease-2084/org/opendaylight/integration/karaf/0.7.2/karaf-0.7.2.tar.gz" % self.nexus_url
127         version = lib.extract_version(url)
128         self.assertEqual(version["version_major"], "7")
129         self.assertEqual(version["version_minor"], "2")
130         self.assertEqual(version["version_patch"], "0")
131         self.assertEqual(version["pkg_version"], "0.1.20180131rel2084")
132         self.assertEqual(version["codename"], "")
133
134     def test_nitrogen_autorelease_zip_url(self):
135         """Test URL of an ODL Nitrogen autorelease build zip archive."""
136         # NB: This will need to be updated as old builds expire
137         url = "%s/autorelease-2084/org/opendaylight/integration/karaf/0.7.2/karaf-0.7.2.zip" % self.nexus_url
138         version = lib.extract_version(url)
139         self.assertEqual(version["version_major"], "7")
140         self.assertEqual(version["version_minor"], "2")
141         self.assertEqual(version["version_patch"], "0")
142         self.assertEqual(version["pkg_version"], "0.1.20180131rel2084")
143         self.assertEqual(version["codename"], "")
144
145     def test_carbon_snapshot_url(self):
146         """Test URL of an ODL Carbon snapshot build."""
147         # NB: This will need to be updated as old builds expire
148         url = "%s/opendaylight.snapshot/org/opendaylight/integration/distribution-karaf/0.6.3-SNAPSHOT/distribution-karaf-0.6.3-20180202.185215-498.tar.gz" % self.nexus_url
149         version = lib.extract_version(url)
150         self.assertEqual(version["version_major"], "6")
151         self.assertEqual(version["version_minor"], "3")
152         self.assertEqual(version["version_patch"], "0")
153         self.assertEqual(version["pkg_version"], "0.1.20180202snap498")
154         self.assertEqual(version["codename"], "-SNAPSHOT")
155
156     def test_carbon_snapshot_zip_url(self):
157         """Test URL of an ODL Carbon snapshot build zip archive."""
158         # NB: This will need to be updated as old builds expire
159         url = "%s/opendaylight.snapshot/org/opendaylight/integration/distribution-karaf/0.6.3-SNAPSHOT/distribution-karaf-0.6.3-20180202.185215-498.zip" % self.nexus_url
160         version = lib.extract_version(url)
161         self.assertEqual(version["version_major"], "6")
162         self.assertEqual(version["version_minor"], "3")
163         self.assertEqual(version["version_patch"], "0")
164         self.assertEqual(version["pkg_version"], "0.1.20180202snap498")
165         self.assertEqual(version["codename"], "-SNAPSHOT")
166
167     def test_nitrogen_snapshot_url(self):
168         """Test URL of an ODL Nitrogen snapshot build."""
169         # NB: This will need to be updated as old builds expire
170         url = "%s/opendaylight.snapshot/org/opendaylight/integration/karaf/0.7.2-SNAPSHOT/karaf-0.7.2-20180130.170631-330.tar.gz" % self.nexus_url
171         version = lib.extract_version(url)
172         self.assertEqual(version["version_major"], "7")
173         self.assertEqual(version["version_minor"], "2")
174         self.assertEqual(version["version_patch"], "0")
175         self.assertEqual(version["pkg_version"], "0.1.20180130snap330")
176         self.assertEqual(version["codename"], "-SNAPSHOT")
177
178     def test_nitrogen_snapshot_zip_url(self):
179         """Test URL of an ODL Nitrogen snapshot build zip archive."""
180         # NB: This will need to be updated as old builds expire
181         url = "%s/opendaylight.snapshot/org/opendaylight/integration/karaf/0.7.2-SNAPSHOT/karaf-0.7.2-20180130.170631-330.zip" % self.nexus_url
182         version = lib.extract_version(url)
183         self.assertEqual(version["version_major"], "7")
184         self.assertEqual(version["version_minor"], "2")
185         self.assertEqual(version["version_patch"], "0")
186         self.assertEqual(version["pkg_version"], "0.1.20180130snap330")
187         self.assertEqual(version["codename"], "-SNAPSHOT")
188
189     def test_oxygen_snapshot_url(self):
190         """Test URL of an ODL Oxygen snapshot build."""
191         # NB: This will need to be updated as old builds expire
192         url = "%s/opendaylight.snapshot/org/opendaylight/integration/karaf/0.8.0-SNAPSHOT/karaf-0.8.0-20180202.194543-1393.tar.gz" % self.nexus_url
193         version = lib.extract_version(url)
194         self.assertEqual(version["version_major"], "8")
195         self.assertEqual(version["version_minor"], "0")
196         self.assertEqual(version["version_patch"], "0")
197         self.assertEqual(version["pkg_version"], "0.1.20180202snap1393")
198         self.assertEqual(version["codename"], "-SNAPSHOT")
199
200     def test_oxygen_snapshot_zip_url(self):
201         """Test URL of an ODL Oxygen snapshot build zip archive."""
202         # NB: This will need to be updated as old builds expire
203         url = "%s/opendaylight.snapshot/org/opendaylight/integration/karaf/0.8.0-SNAPSHOT/karaf-0.8.0-20180202.194543-1393.zip" % self.nexus_url
204         version = lib.extract_version(url)
205         self.assertEqual(version["version_major"], "8")
206         self.assertEqual(version["version_minor"], "0")
207         self.assertEqual(version["version_patch"], "0")
208         self.assertEqual(version["pkg_version"], "0.1.20180202snap1393")
209         self.assertEqual(version["codename"], "-SNAPSHOT")
210
211     def test_carbon_multipatch_zip_url(self):
212         """Test URL of an ODL Carbon multipatch-test build zip archive."""
213         # NB: This will need to be updated as old builds expire
214         url = "%s/opendaylight.snapshot/org/opendaylight/integration/integration/distribution/distribution-karaf/0.6.3-SNAPSHOT/distribution-karaf-0.6.3-20180115.181738-1.zip" % self.nexus_url
215         version = lib.extract_version(url)
216         self.assertEqual(version["version_major"], "6")
217         self.assertEqual(version["version_minor"], "3")
218         self.assertEqual(version["version_patch"], "0")
219         self.assertEqual(version["pkg_version"], "0.1.20180115snap1")
220         self.assertEqual(version["codename"], "-SNAPSHOT")
221
222     def test_nitrogen_multipatch_zip_url(self):
223         """Test URL of an ODL Nitrogen multipatch-test build zip archive."""
224         # NB: This will need to be updated as old builds expire
225         url = "%s/opendaylight.snapshot/org/opendaylight/integration/integration/distribution/karaf/0.7.2-SNAPSHOT/karaf-0.7.2-20180115.183312-2.zip" % self.nexus_url
226         version = lib.extract_version(url)
227         self.assertEqual(version["version_major"], "7")
228         self.assertEqual(version["version_minor"], "2")
229         self.assertEqual(version["version_patch"], "0")
230         self.assertEqual(version["pkg_version"], "0.1.20180115snap2")
231         self.assertEqual(version["codename"], "-SNAPSHOT")
232
233     def test_oxygen_multipatch_zip_url(self):
234         """Test URL of an ODL Oxygen multipatch-test build zip archive."""
235         # NB: This will need to be updated as old builds expire
236         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
237         version = lib.extract_version(url)
238         self.assertEqual(version["version_major"], "8")
239         self.assertEqual(version["version_minor"], "0")
240         self.assertEqual(version["version_patch"], "0")
241         self.assertEqual(version["pkg_version"], "0.1.20180204snap134")
242         self.assertEqual(version["codename"], "-SNAPSHOT")
243
244
245 class TestGetSnapURL(unittest.TestCase):
246
247     """Test logic get URL to latest snapshot build of given major version."""
248
249     url_base = "https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/integration"
250
251     def validate_snap_url(self, snap_url):
252         """Helper for validating snapshot URLs are sane."""
253         self.assertIn(self.url_base, snap_url)
254         self.assertIn("tar.gz", snap_url)
255         self.assertNotIn("release", snap_url)
256         self.assertNotIn("public", snap_url)
257
258     def test_carbon(self):
259         """Test Carbon major version gives sane snapshot URL."""
260         self.validate_snap_url(lib.get_snap_url("6"))
261
262     def test_nitrogen(self):
263         """Test Nitrogen major version gives sane snapshot URL."""
264         self.validate_snap_url(lib.get_snap_url("7"))
265
266     def test_oxygen(self):
267         """Test Oxygen major version gives sane snapshot URL."""
268         self.validate_snap_url(lib.get_snap_url("8"))
269
270
271 class TestGetDistroNamePrefix(unittest.TestCase):
272
273     """Test logic to get Karaf 3/4 distro name prefix per ODL major version."""
274
275     k3_distro_prefix = "distribution-karaf"
276     k4_distro_prefix = "karaf"
277
278     def test_carbon(self):
279         """Test Carbon major version gives Karaf 3 prefix."""
280         distro_prefix = lib.get_distro_name_prefix("6")
281         self.assertEqual(distro_prefix, self.k3_distro_prefix)
282
283     def test_nitrogen(self):
284         """Test Nitrogen major version gives Karaf 4 prefix."""
285         distro_prefix = lib.get_distro_name_prefix("7")
286         self.assertEqual(distro_prefix, self.k4_distro_prefix)
287
288     def test_oxygen(self):
289         """Test Oxygen major version gives Karaf 4 prefix."""
290         distro_prefix = lib.get_distro_name_prefix("8")
291         self.assertEqual(distro_prefix, self.k4_distro_prefix)
292
293     def test_carbon_int(self):
294         """Test Carbon major version as int gives Karaf 3 prefix."""
295         distro_prefix = lib.get_distro_name_prefix(6)
296         self.assertEqual(distro_prefix, self.k3_distro_prefix)
297
298     def test_nitrogen_int(self):
299         """Test Nitrogen major version as int gives Karaf 4 prefix."""
300         distro_prefix = lib.get_distro_name_prefix(7)
301         self.assertEqual(distro_prefix, self.k4_distro_prefix)
302
303     def test_oxygen_int(self):
304         """Test Oxygen major version as int gives Karaf 4 prefix."""
305         distro_prefix = lib.get_distro_name_prefix(8)
306         self.assertEqual(distro_prefix, self.k4_distro_prefix)
307
308
309 class TestGetSysdCommit(unittest.TestCase):
310
311     """Test fn to get most recent Int/Pack hash to use as sysd file version."""
312
313     def test_type(self):
314         """Check that returned value is of the right type."""
315         sysd_hash = lib.get_sysd_commit()
316         self.assertIsInstance(sysd_hash, str)
317
318     def test_len(self):
319         """Check that returned value the normal length for a commit hash."""
320         sysd_hash = lib.get_sysd_commit()
321         self.assertEqual(len(sysd_hash), 40)
322
323     def test_only_valid_chars(self):
324         """Check that returned value only contains typical commit hash chars."""
325         sysd_hash = lib.get_sysd_commit()
326         self.assertRegexpMatches(sysd_hash, "^[A-Za-z0-9-]+$")
327
328
329 class TestGetJavaVersion(unittest.TestCase):
330
331     """Test fn to get Java version required for a given ODL version."""
332
333     def test_type_given_int(self):
334         """Pass int, check that returned value is of the right type."""
335         java_version = lib.get_java_version(6)
336         self.assertIsInstance(java_version, int)
337
338     def test_type_given_str(self):
339         """Pass int, check that returned value is of the right type."""
340         java_version = lib.get_java_version("6")
341         self.assertIsInstance(java_version, int)
342
343     def test_old_given_int(self):
344         """Pass old ODL major version, check that Java 7 returned."""
345         java_version = lib.get_java_version(4)
346         self.assertEqual(java_version, 7)
347
348     def test_old_given_str(self):
349         """Pass old ODL major version, check that Java 7 returned."""
350         java_version = lib.get_java_version("4")
351         self.assertEqual(java_version, 7)
352
353     def test_carbon_given_int(self):
354         """Pass Carbon major version, check that Java 8 returned."""
355         java_version = lib.get_java_version(6)
356         self.assertEqual(java_version, 8)
357
358     def test_carbon_given_str(self):
359         """Pass Carbon major version, check that Java 8 returned."""
360         java_version = lib.get_java_version("6")
361         self.assertEqual(java_version, 8)
362
363     def test_nitrogen_given_int(self):
364         """Pass Nitrogen major version, check that Java 8 returned."""
365         java_version = lib.get_java_version(7)
366         self.assertEqual(java_version, 8)
367
368     def test_nitrogen_given_str(self):
369         """Pass Nitrogen major version, check that Java 8 returned."""
370         java_version = lib.get_java_version("7")
371         self.assertEqual(java_version, 8)
372
373     def test_oxygen_given_int(self):
374         """Pass Oxygen major version, check that Java 8 returned."""
375         java_version = lib.get_java_version(8)
376         self.assertEqual(java_version, 8)
377
378     def test_oxygen_given_str(self):
379         """Pass Oxygen major version, check that Java 8 returned."""
380         java_version = lib.get_java_version("8")
381         self.assertEqual(java_version, 8)
382
383
384 class TestGetChangelogDate(unittest.TestCase):
385
386     """Test lib fn that gives date for changelog in RPM or Deb format."""
387
388     def test_type_rpm(self):
389         """Test type of return object is correct given RPM arg."""
390         changelog_date = lib.get_changelog_date("rpm")
391         self.assertIsInstance(changelog_date, str)
392
393     def test_type_deb(self):
394         """Test type of return object is correct given Deb arg."""
395         changelog_date = lib.get_changelog_date("deb")
396         self.assertIsInstance(changelog_date, str)
397
398     def test_has_year_rpm(self):
399         """Test returned value has a year in it given RPM arg."""
400         changelog_date = lib.get_changelog_date("rpm")
401         self.assertRegexpMatches(changelog_date, "[20]\d\d")
402
403     def test_has_year_deb(self):
404         """Test returned value has a year in it given Deb arg."""
405         changelog_date = lib.get_changelog_date("deb")
406         self.assertRegexpMatches(changelog_date, "[20]\d\d")
407
408     def test_has_month_rpm(self):
409         """Test returned value has a month in it given RPM arg."""
410         changelog_date = lib.get_changelog_date("rpm")
411         self.assertRegexpMatches(
412             changelog_date,
413             "Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec")
414
415     def test_has_month_deb(self):
416         """Test returned value has a month in it given Deb arg."""
417         changelog_date = lib.get_changelog_date("deb")
418         self.assertRegexpMatches(
419             changelog_date,
420             "Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec")
421
422     def test_has_day_rpm(self):
423         """Test returned value has a day in it given RPM arg."""
424         changelog_date = lib.get_changelog_date("rpm")
425         self.assertRegexpMatches(
426             changelog_date,
427             "Mon|Tue|Wed|Thu|Fri|Sat|Sun")
428
429     def test_has_day_deb(self):
430         """Test returned value has a day in it given Deb arg."""
431         changelog_date = lib.get_changelog_date("deb")
432         self.assertRegexpMatches(
433             changelog_date,
434             "Mon|Tue|Wed|Thu|Fri|Sat|Sun")