3dfc101b1b3b1d8e582e8b532b8d0d20a5c064d3
[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-2060/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.20171205rel2060")
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         url = "%s/autorelease-2060/org/opendaylight/integration/distribution-karaf/0.6.3-Carbon/distribution-karaf-0.6.3-Carbon.tar.gz" % self.nexus_url
115         version = lib.extract_version(url)
116         self.assertEqual(version["version_major"], "6")
117         self.assertEqual(version["version_minor"], "3")
118         self.assertEqual(version["version_patch"], "0")
119         self.assertEqual(version["pkg_version"], "0.1.20171205rel2060")
120         self.assertEqual(version["codename"], "-Carbon")
121
122     def test_nitrogen_autorelease_url(self):
123         """Test URL of an ODL Nitrogen autorelease build."""
124         url = "%s/autorelease-2051/org/opendaylight/integration/karaf/0.7.1/karaf-0.7.1.tar.gz" % self.nexus_url
125         version = lib.extract_version(url)
126         self.assertEqual(version["version_major"], "7")
127         self.assertEqual(version["version_minor"], "1")
128         self.assertEqual(version["version_patch"], "0")
129         self.assertEqual(version["pkg_version"], "0.1.20171128rel2051")
130         self.assertEqual(version["codename"], "")
131
132     def test_nitrogen_autorelease_zip_url(self):
133         """Test URL of an ODL Nitrogen autorelease build zip archive."""
134         url = "%s/autorelease-2051/org/opendaylight/integration/karaf/0.7.1/karaf-0.7.1.zip" % self.nexus_url
135         version = lib.extract_version(url)
136         self.assertEqual(version["version_major"], "7")
137         self.assertEqual(version["version_minor"], "1")
138         self.assertEqual(version["version_patch"], "0")
139         self.assertEqual(version["pkg_version"], "0.1.20171128rel2051")
140         self.assertEqual(version["codename"], "")
141
142     def test_carbon_snapshot_url(self):
143         """Test URL of an ODL Carbon snapshot build."""
144         url = "%s/opendaylight.snapshot/org/opendaylight/integration/distribution-karaf/0.6.3-SNAPSHOT/distribution-karaf-0.6.3-20171128.170008-250.tar.gz" % self.nexus_url
145         version = lib.extract_version(url)
146         self.assertEqual(version["version_major"], "6")
147         self.assertEqual(version["version_minor"], "3")
148         self.assertEqual(version["version_patch"], "0")
149         self.assertEqual(version["pkg_version"], "0.1.20171128snap250")
150         self.assertEqual(version["codename"], "-SNAPSHOT")
151
152     def test_carbon_snapshot_zip_url(self):
153         """Test URL of an ODL Carbon snapshot build zip archive."""
154         url = "%s/opendaylight.snapshot/org/opendaylight/integration/distribution-karaf/0.6.3-SNAPSHOT/distribution-karaf-0.6.3-20171128.170008-250.zip" % self.nexus_url
155         version = lib.extract_version(url)
156         self.assertEqual(version["version_major"], "6")
157         self.assertEqual(version["version_minor"], "3")
158         self.assertEqual(version["version_patch"], "0")
159         self.assertEqual(version["pkg_version"], "0.1.20171128snap250")
160         self.assertEqual(version["codename"], "-SNAPSHOT")
161
162     def test_nitrogen_snapshot_url(self):
163         """Test URL of an ODL Nitrogen snapshot build."""
164         url = "%s/opendaylight.snapshot/org/opendaylight/integration/karaf/0.7.2-SNAPSHOT/karaf-0.7.2-20171128.222210-11.tar.gz" % self.nexus_url
165         version = lib.extract_version(url)
166         self.assertEqual(version["version_major"], "7")
167         self.assertEqual(version["version_minor"], "2")
168         self.assertEqual(version["version_patch"], "0")
169         self.assertEqual(version["pkg_version"], "0.1.20171128snap11")
170         self.assertEqual(version["codename"], "-SNAPSHOT")
171
172     def test_nitrogen_snapshot_zip_url(self):
173         """Test URL of an ODL Nitrogen snapshot build zip archive."""
174         url = "%s/opendaylight.snapshot/org/opendaylight/integration/karaf/0.7.2-SNAPSHOT/karaf-0.7.2-20171128.222210-11.zip" % self.nexus_url
175         version = lib.extract_version(url)
176         self.assertEqual(version["version_major"], "7")
177         self.assertEqual(version["version_minor"], "2")
178         self.assertEqual(version["version_patch"], "0")
179         self.assertEqual(version["pkg_version"], "0.1.20171128snap11")
180         self.assertEqual(version["codename"], "-SNAPSHOT")
181
182     def test_oxygen_snapshot_url(self):
183         """Test URL of an ODL Oxygen snapshot build."""
184         url = "%s/opendaylight.snapshot/org/opendaylight/integration/karaf/0.8.0-SNAPSHOT/karaf-0.8.0-20171128.181831-1000.tar.gz" % self.nexus_url
185         version = lib.extract_version(url)
186         self.assertEqual(version["version_major"], "8")
187         self.assertEqual(version["version_minor"], "0")
188         self.assertEqual(version["version_patch"], "0")
189         self.assertEqual(version["pkg_version"], "0.1.20171128snap1000")
190         self.assertEqual(version["codename"], "-SNAPSHOT")
191
192     def test_oxygen_snapshot_zip_url(self):
193         """Test URL of an ODL Oxygen snapshot build zip archive."""
194         url = "%s/opendaylight.snapshot/org/opendaylight/integration/karaf/0.8.0-SNAPSHOT/karaf-0.8.0-20171128.181831-1000.zip" % self.nexus_url
195         version = lib.extract_version(url)
196         self.assertEqual(version["version_major"], "8")
197         self.assertEqual(version["version_minor"], "0")
198         self.assertEqual(version["version_patch"], "0")
199         self.assertEqual(version["pkg_version"], "0.1.20171128snap1000")
200         self.assertEqual(version["codename"], "-SNAPSHOT")
201
202     def test_carbon_multipatch_zip_url(self):
203         """Test URL of an ODL Carbon multipatch-test build zip archive."""
204         url = "%s/opendaylight.snapshot/org/opendaylight/integration/integration/distribution/distribution-karaf/0.6.3-SNAPSHOT/distribution-karaf-0.6.3-20171128.221258-1.zip" % self.nexus_url
205         version = lib.extract_version(url)
206         self.assertEqual(version["version_major"], "6")
207         self.assertEqual(version["version_minor"], "3")
208         self.assertEqual(version["version_patch"], "0")
209         self.assertEqual(version["pkg_version"], "0.1.20171128snap1")
210         self.assertEqual(version["codename"], "-SNAPSHOT")
211
212     def test_nitrogen_multipatch_zip_url(self):
213         """Test URL of an ODL Nitrogen multipatch-test build zip archive."""
214         url = "%s/opendaylight.snapshot/org/opendaylight/integration/integration/distribution/karaf/0.7.2-SNAPSHOT/karaf-0.7.2-20171128.223150-2.zip" % self.nexus_url
215         version = lib.extract_version(url)
216         self.assertEqual(version["version_major"], "7")
217         self.assertEqual(version["version_minor"], "2")
218         self.assertEqual(version["version_patch"], "0")
219         self.assertEqual(version["pkg_version"], "0.1.20171128snap2")
220         self.assertEqual(version["codename"], "-SNAPSHOT")
221
222     def test_oxygen_multipatch_zip_url(self):
223         """Test URL of an ODL Oxygen multipatch-test build zip archive."""
224         url = "%s/opendaylight.snapshot/org/opendaylight/integration/integration/distribution/karaf/0.8.0-SNAPSHOT/karaf-0.8.0-20171128.175421-68.zip" % self.nexus_url
225         version = lib.extract_version(url)
226         self.assertEqual(version["version_major"], "8")
227         self.assertEqual(version["version_minor"], "0")
228         self.assertEqual(version["version_patch"], "0")
229         self.assertEqual(version["pkg_version"], "0.1.20171128snap68")
230         self.assertEqual(version["codename"], "-SNAPSHOT")
231
232
233 class TestGetSnapURL(unittest.TestCase):
234
235     """Test logic get URL to latest snapshot build of given major version."""
236
237     url_base = "https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/integration"
238
239     def validate_snap_url(self, snap_url):
240         """Helper for validating snapshot URLs are sane."""
241         self.assertIn(self.url_base, snap_url)
242         self.assertIn("tar.gz", snap_url)
243         self.assertNotIn("release", snap_url)
244         self.assertNotIn("public", snap_url)
245
246     def test_carbon(self):
247         """Test Carbon major version gives sane snapshot URL."""
248         self.validate_snap_url(lib.get_snap_url("6"))
249
250     def test_nitrogen(self):
251         """Test Nitrogen major version gives sane snapshot URL."""
252         self.validate_snap_url(lib.get_snap_url("7"))
253
254     def test_oxygen(self):
255         """Test Oxygen major version gives sane snapshot URL."""
256         self.validate_snap_url(lib.get_snap_url("8"))
257
258
259 class TestGetDistroNamePrefix(unittest.TestCase):
260
261     """Test logic to get Karaf 3/4 distro name prefix per ODL major version."""
262
263     k3_distro_prefix = "distribution-karaf"
264     k4_distro_prefix = "karaf"
265
266     def test_carbon(self):
267         """Test Carbon major version gives Karaf 3 prefix."""
268         distro_prefix = lib.get_distro_name_prefix("6")
269         self.assertEqual(distro_prefix, self.k3_distro_prefix)
270
271     def test_nitrogen(self):
272         """Test Nitrogen major version gives Karaf 4 prefix."""
273         distro_prefix = lib.get_distro_name_prefix("7")
274         self.assertEqual(distro_prefix, self.k4_distro_prefix)
275
276     def test_oxygen(self):
277         """Test Oxygen major version gives Karaf 4 prefix."""
278         distro_prefix = lib.get_distro_name_prefix("8")
279         self.assertEqual(distro_prefix, self.k4_distro_prefix)
280
281     def test_carbon_int(self):
282         """Test Carbon major version as int gives Karaf 3 prefix."""
283         distro_prefix = lib.get_distro_name_prefix(6)
284         self.assertEqual(distro_prefix, self.k3_distro_prefix)
285
286     def test_nitrogen_int(self):
287         """Test Nitrogen major version as int gives Karaf 4 prefix."""
288         distro_prefix = lib.get_distro_name_prefix(7)
289         self.assertEqual(distro_prefix, self.k4_distro_prefix)
290
291     def test_oxygen_int(self):
292         """Test Oxygen major version as int gives Karaf 4 prefix."""
293         distro_prefix = lib.get_distro_name_prefix(8)
294         self.assertEqual(distro_prefix, self.k4_distro_prefix)
295
296
297 class TestGetSysdCommit(unittest.TestCase):
298
299     """Test fn to get most recent Int/Pack hash to use as sysd file version."""
300
301     def test_type(self):
302         """Check that returned value is of the right type."""
303         sysd_hash = lib.get_sysd_commit()
304         self.assertIsInstance(sysd_hash, str)
305
306     def test_len(self):
307         """Check that returned value the normal length for a commit hash."""
308         sysd_hash = lib.get_sysd_commit()
309         self.assertEqual(len(sysd_hash), 40)
310
311     def test_only_valid_chars(self):
312         """Check that returned value only contains typical commit hash chars."""
313         sysd_hash = lib.get_sysd_commit()
314         self.assertRegexpMatches(sysd_hash, "^[A-Za-z0-9-]+$")
315
316
317 class TestGetJavaVersion(unittest.TestCase):
318
319     """Test fn to get Java version required for a given ODL version."""
320
321     def test_type_given_int(self):
322         """Pass int, check that returned value is of the right type."""
323         java_version = lib.get_java_version(6)
324         self.assertIsInstance(java_version, int)
325
326     def test_type_given_str(self):
327         """Pass int, check that returned value is of the right type."""
328         java_version = lib.get_java_version("6")
329         self.assertIsInstance(java_version, int)
330
331     def test_old_given_int(self):
332         """Pass old ODL major version, check that Java 7 returned."""
333         java_version = lib.get_java_version(4)
334         self.assertEqual(java_version, 7)
335
336     def test_old_given_str(self):
337         """Pass old ODL major version, check that Java 7 returned."""
338         java_version = lib.get_java_version("4")
339         self.assertEqual(java_version, 7)
340
341     def test_carbon_given_int(self):
342         """Pass Carbon major version, check that Java 8 returned."""
343         java_version = lib.get_java_version(6)
344         self.assertEqual(java_version, 8)
345
346     def test_carbon_given_str(self):
347         """Pass Carbon major version, check that Java 8 returned."""
348         java_version = lib.get_java_version("6")
349         self.assertEqual(java_version, 8)
350
351     def test_nitrogen_given_int(self):
352         """Pass Nitrogen major version, check that Java 8 returned."""
353         java_version = lib.get_java_version(7)
354         self.assertEqual(java_version, 8)
355
356     def test_nitrogen_given_str(self):
357         """Pass Nitrogen major version, check that Java 8 returned."""
358         java_version = lib.get_java_version("7")
359         self.assertEqual(java_version, 8)
360
361     def test_oxygen_given_int(self):
362         """Pass Oxygen major version, check that Java 8 returned."""
363         java_version = lib.get_java_version(8)
364         self.assertEqual(java_version, 8)
365
366     def test_oxygen_given_str(self):
367         """Pass Oxygen major version, check that Java 8 returned."""
368         java_version = lib.get_java_version("8")
369         self.assertEqual(java_version, 8)
370
371
372 class TestGetChangelogDate(unittest.TestCase):
373
374     """Test lib fn that gives date for changelog in RPM or Deb format."""
375
376     def test_type_rpm(self):
377         """Test type of return object is correct given RPM arg."""
378         changelog_date = lib.get_changelog_date("rpm")
379         self.assertIsInstance(changelog_date, str)
380
381     def test_type_deb(self):
382         """Test type of return object is correct given Deb arg."""
383         changelog_date = lib.get_changelog_date("deb")
384         self.assertIsInstance(changelog_date, str)
385
386     def test_has_year_rpm(self):
387         """Test returned value has a year in it given RPM arg."""
388         changelog_date = lib.get_changelog_date("rpm")
389         self.assertRegexpMatches(changelog_date, "[20]\d\d")
390
391     def test_has_year_deb(self):
392         """Test returned value has a year in it given Deb arg."""
393         changelog_date = lib.get_changelog_date("deb")
394         self.assertRegexpMatches(changelog_date, "[20]\d\d")
395
396     def test_has_month_rpm(self):
397         """Test returned value has a month in it given RPM arg."""
398         changelog_date = lib.get_changelog_date("rpm")
399         self.assertRegexpMatches(
400             changelog_date,
401             "Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec")
402
403     def test_has_month_deb(self):
404         """Test returned value has a month in it given Deb arg."""
405         changelog_date = lib.get_changelog_date("deb")
406         self.assertRegexpMatches(
407             changelog_date,
408             "Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec")
409
410     def test_has_day_rpm(self):
411         """Test returned value has a day in it given RPM arg."""
412         changelog_date = lib.get_changelog_date("rpm")
413         self.assertRegexpMatches(
414             changelog_date,
415             "Mon|Tue|Wed|Thu|Fri|Sat|Sun")
416
417     def test_has_day_deb(self):
418         """Test returned value has a day in it given Deb arg."""
419         changelog_date = lib.get_changelog_date("deb")
420         self.assertRegexpMatches(
421             changelog_date,
422             "Mon|Tue|Wed|Thu|Fri|Sat|Sun")