c4a293087c0d6ad73e65a4d49ff69f18988e70ce
[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_nitrogen_release_url(self):
23         """Test URL of the ODL Nitrogen release."""
24         url = "%s/opendaylight.release/org/opendaylight/integration/karaf/0.7.0/karaf-0.7.0.tar.gz" % self.nexus_url
25         version = lib.extract_version(url)
26         self.assertEqual(version["version_major"], "7")
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_nitrogen_release_zip_url(self):
33         """Test URL of the ODL Nitrogen release zip archive."""
34         url = "%s/opendaylight.release/org/opendaylight/integration/karaf/0.7.0/karaf-0.7.0.zip" % self.nexus_url
35         version = lib.extract_version(url)
36         self.assertEqual(version["version_major"], "7")
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_nitrogen_sr1_release_url(self):
43         """Test URL of the ODL Nitrogen SR1 release."""
44         url = "%s/opendaylight.release/org/opendaylight/integration/karaf/0.7.1/karaf-0.7.1.tar.gz" % self.nexus_url
45         version = lib.extract_version(url)
46         self.assertEqual(version["version_major"], "7")
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"], "")
51
52     def test_nitrogen_release_zip_url(self):
53         """Test URL of the ODL Nitrogen release zip archive."""
54         url = "%s/opendaylight.release/org/opendaylight/integration/karaf/0.7.1/karaf-0.7.1.zip" % self.nexus_url
55         version = lib.extract_version(url)
56         self.assertEqual(version["version_major"], "7")
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"], "")
61
62     def test_nitrogen_autorelease_url(self):
63         """Test URL of an ODL Nitrogen autorelease build."""
64         # NB: This will need to be updated as old builds expire
65         url = "%s/autorelease-2096/org/opendaylight/integration/karaf/0.7.2/karaf-0.7.2.tar.gz" % self.nexus_url
66         version = lib.extract_version(url)
67         self.assertEqual(version["version_major"], "7")
68         self.assertEqual(version["version_minor"], "2")
69         self.assertEqual(version["version_patch"], "0")
70         self.assertEqual(version["pkg_version"], "0.1.20180221rel2096")
71         self.assertEqual(version["codename"], "")
72
73     def test_nitrogen_autorelease_zip_url(self):
74         """Test URL of an ODL Nitrogen autorelease build zip archive."""
75         # NB: This will need to be updated as old builds expire
76         url = "%s/autorelease-2096/org/opendaylight/integration/karaf/0.7.2/karaf-0.7.2.zip" % self.nexus_url
77         version = lib.extract_version(url)
78         self.assertEqual(version["version_major"], "7")
79         self.assertEqual(version["version_minor"], "2")
80         self.assertEqual(version["version_patch"], "0")
81         self.assertEqual(version["pkg_version"], "0.1.20180221rel2096")
82         self.assertEqual(version["codename"], "")
83
84     def test_nitrogen_snapshot_url(self):
85         """Test URL of an ODL Nitrogen snapshot build."""
86         # NB: This will need to be updated as old builds expire
87         url = "%s/opendaylight.snapshot/org/opendaylight/integration/karaf/0.7.2-SNAPSHOT/karaf-0.7.2-20180130.170631-330.tar.gz" % self.nexus_url
88         version = lib.extract_version(url)
89         self.assertEqual(version["version_major"], "7")
90         self.assertEqual(version["version_minor"], "2")
91         self.assertEqual(version["version_patch"], "0")
92         self.assertEqual(version["pkg_version"], "0.1.20180130snap330")
93         self.assertEqual(version["codename"], "-SNAPSHOT")
94
95     def test_nitrogen_snapshot_zip_url(self):
96         """Test URL of an ODL Nitrogen snapshot build zip archive."""
97         # NB: This will need to be updated as old builds expire
98         url = "%s/opendaylight.snapshot/org/opendaylight/integration/karaf/0.7.2-SNAPSHOT/karaf-0.7.2-20180130.170631-330.zip" % self.nexus_url
99         version = lib.extract_version(url)
100         self.assertEqual(version["version_major"], "7")
101         self.assertEqual(version["version_minor"], "2")
102         self.assertEqual(version["version_patch"], "0")
103         self.assertEqual(version["pkg_version"], "0.1.20180130snap330")
104         self.assertEqual(version["codename"], "-SNAPSHOT")
105
106     def test_oxygen_release_url(self):
107         """Test URL of the ODL Oxygen release."""
108         url = "%s/repositories/opendaylight.release/org/opendaylight/integration/karaf/0.8.0/karaf-0.8.0.tar.gz" % self.nexus_url
109         version = lib.extract_version(url)
110         self.assertEqual(version["version_major"], "8")
111         self.assertEqual(version["version_minor"], "0")
112         self.assertEqual(version["version_patch"], "0")
113         self.assertEqual(version["pkg_version"], "1")
114         self.assertEqual(version["codename"], "")
115
116     def test_oxygen_release_zip_url(self):
117         """Test URL of the ODL Oxygen release zip archive."""
118         url = "%s/repositories/opendaylight.release/org/opendaylight/integration/karaf/0.8.0/karaf-0.8.0.zip" % self.nexus_url
119         version = lib.extract_version(url)
120         self.assertEqual(version["version_major"], "8")
121         self.assertEqual(version["version_minor"], "0")
122         self.assertEqual(version["version_patch"], "0")
123         self.assertEqual(version["pkg_version"], "1")
124         self.assertEqual(version["codename"], "")
125
126     def test_oxygen_snapshot_url(self):
127         """Test URL of an ODL Oxygen snapshot build."""
128         # NB: This will need to be updated as old builds expire
129         url = "%s/opendaylight.snapshot/org/opendaylight/integration/karaf/0.8.0-SNAPSHOT/karaf-0.8.0-20180202.194543-1393.tar.gz" % self.nexus_url
130         version = lib.extract_version(url)
131         self.assertEqual(version["version_major"], "8")
132         self.assertEqual(version["version_minor"], "0")
133         self.assertEqual(version["version_patch"], "0")
134         self.assertEqual(version["pkg_version"], "0.1.20180202snap1393")
135         self.assertEqual(version["codename"], "-SNAPSHOT")
136
137     def test_oxygen_snapshot_zip_url(self):
138         """Test URL of an ODL Oxygen snapshot build zip archive."""
139         # NB: This will need to be updated as old builds expire
140         url = "%s/opendaylight.snapshot/org/opendaylight/integration/karaf/0.8.0-SNAPSHOT/karaf-0.8.0-20180202.194543-1393.zip" % self.nexus_url
141         version = lib.extract_version(url)
142         self.assertEqual(version["version_major"], "8")
143         self.assertEqual(version["version_minor"], "0")
144         self.assertEqual(version["version_patch"], "0")
145         self.assertEqual(version["pkg_version"], "0.1.20180202snap1393")
146         self.assertEqual(version["codename"], "-SNAPSHOT")
147
148     def test_fluorine_snapshot_url(self):
149         """Test URL of an ODL Fluorine snapshot build."""
150         # NB: This will need to be updated as old builds expire
151         url = "%s/opendaylight.snapshot/org/opendaylight/integration/karaf/0.9.0-SNAPSHOT/karaf-0.9.0-20180411.203859-563.tar.gz" % self.nexus_url
152         version = lib.extract_version(url)
153         self.assertEqual(version["version_major"], "9")
154         self.assertEqual(version["version_minor"], "0")
155         self.assertEqual(version["version_patch"], "0")
156         self.assertEqual(version["pkg_version"], "0.1.20180411snap563")
157         self.assertEqual(version["codename"], "-SNAPSHOT")
158
159     def test_fluorine_snapshot_zip_url(self):
160         """Test URL of an ODL Fluorine snapshot build zip archive."""
161         # NB: This will need to be updated as old builds expire
162         url = "%s/opendaylight.snapshot/org/opendaylight/integration/karaf/0.9.0-SNAPSHOT/karaf-0.9.0-20180411.203859-563.tar.gz" % self.nexus_url
163         version = lib.extract_version(url)
164         self.assertEqual(version["version_major"], "9")
165         self.assertEqual(version["version_minor"], "0")
166         self.assertEqual(version["version_patch"], "0")
167         self.assertEqual(version["pkg_version"], "0.1.20180411snap563")
168         self.assertEqual(version["codename"], "-SNAPSHOT")
169
170     def test_nitrogen_multipatch_zip_url(self):
171         """Test URL of an ODL Nitrogen multipatch-test build zip archive."""
172         # NB: This will need to be updated as old builds expire
173         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
174         version = lib.extract_version(url)
175         self.assertEqual(version["version_major"], "7")
176         self.assertEqual(version["version_minor"], "2")
177         self.assertEqual(version["version_patch"], "0")
178         self.assertEqual(version["pkg_version"], "0.1.20180115snap2")
179         self.assertEqual(version["codename"], "-SNAPSHOT")
180
181     def test_oxygen_multipatch_zip_url(self):
182         """Test URL of an ODL Oxygen multipatch-test build zip archive."""
183         # NB: This will need to be updated as old builds expire
184         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
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.20180204snap134")
190         self.assertEqual(version["codename"], "-SNAPSHOT")
191
192
193 class TestGetSnapURL(unittest.TestCase):
194
195     """Test logic get URL to latest snapshot build of given major version."""
196
197     url_base = "https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/integration"
198
199     def validate_snap_url(self, snap_url):
200         """Helper for validating snapshot URLs are sane."""
201         self.assertIn(self.url_base, snap_url)
202         self.assertIn("tar.gz", snap_url)
203         self.assertNotIn("release", snap_url)
204         self.assertNotIn("public", snap_url)
205
206     def test_nitrogen(self):
207         """Test Nitrogen major version gives sane snapshot URL."""
208         self.validate_snap_url(lib.get_snap_url("7"))
209
210     def test_oxygen(self):
211         """Test Oxygen major version gives sane snapshot URL."""
212         self.validate_snap_url(lib.get_snap_url("8"))
213
214
215 class TestGetDistroNamePrefix(unittest.TestCase):
216
217     """Test logic to get Karaf 3/4 distro name prefix per ODL major version."""
218
219     k3_distro_prefix = "distribution-karaf"
220     k4_distro_prefix = "karaf"
221
222     def test_nitrogen(self):
223         """Test Nitrogen major version gives Karaf 4 prefix."""
224         distro_prefix = lib.get_distro_name_prefix("7")
225         self.assertEqual(distro_prefix, self.k4_distro_prefix)
226
227     def test_oxygen(self):
228         """Test Oxygen major version gives Karaf 4 prefix."""
229         distro_prefix = lib.get_distro_name_prefix("8")
230         self.assertEqual(distro_prefix, self.k4_distro_prefix)
231
232     def test_nitrogen_int(self):
233         """Test Nitrogen major version as int gives Karaf 4 prefix."""
234         distro_prefix = lib.get_distro_name_prefix(7)
235         self.assertEqual(distro_prefix, self.k4_distro_prefix)
236
237     def test_oxygen_int(self):
238         """Test Oxygen major version as int gives Karaf 4 prefix."""
239         distro_prefix = lib.get_distro_name_prefix(8)
240         self.assertEqual(distro_prefix, self.k4_distro_prefix)
241
242
243 class TestGetSysdCommit(unittest.TestCase):
244
245     """Test fn to get most recent Int/Pack hash to use as sysd file version."""
246
247     def test_type(self):
248         """Check that returned value is of the right type."""
249         sysd_hash = lib.get_sysd_commit()
250         self.assertIsInstance(sysd_hash, str)
251
252     def test_len(self):
253         """Check that returned value the normal length for a commit hash."""
254         sysd_hash = lib.get_sysd_commit()
255         self.assertEqual(len(sysd_hash), 40)
256
257     def test_only_valid_chars(self):
258         """Check that returned value only contains typical commit hash chars."""
259         sysd_hash = lib.get_sysd_commit()
260         self.assertRegexpMatches(sysd_hash, "^[A-Za-z0-9-]+$")
261
262
263 class TestGetJavaVersion(unittest.TestCase):
264
265     """Test fn to get Java version required for a given ODL version."""
266
267     def test_type_given_int(self):
268         """Pass int, check that returned value is of the right type."""
269         java_version = lib.get_java_version(6)
270         self.assertIsInstance(java_version, int)
271
272     def test_type_given_str(self):
273         """Pass int, check that returned value is of the right type."""
274         java_version = lib.get_java_version("6")
275         self.assertIsInstance(java_version, int)
276
277     def test_old_given_int(self):
278         """Pass old ODL major version, check that Java 7 returned."""
279         java_version = lib.get_java_version(4)
280         self.assertEqual(java_version, 7)
281
282     def test_old_given_str(self):
283         """Pass old ODL major version, check that Java 7 returned."""
284         java_version = lib.get_java_version("4")
285         self.assertEqual(java_version, 7)
286
287     def test_nitrogen_given_int(self):
288         """Pass Nitrogen major version, check that Java 8 returned."""
289         java_version = lib.get_java_version(7)
290         self.assertEqual(java_version, 8)
291
292     def test_nitrogen_given_str(self):
293         """Pass Nitrogen major version, check that Java 8 returned."""
294         java_version = lib.get_java_version("7")
295         self.assertEqual(java_version, 8)
296
297     def test_oxygen_given_int(self):
298         """Pass Oxygen major version, check that Java 8 returned."""
299         java_version = lib.get_java_version(8)
300         self.assertEqual(java_version, 8)
301
302     def test_oxygen_given_str(self):
303         """Pass Oxygen major version, check that Java 8 returned."""
304         java_version = lib.get_java_version("8")
305         self.assertEqual(java_version, 8)
306
307
308 class TestGetChangelogDate(unittest.TestCase):
309
310     """Test lib fn that gives date for changelog in RPM or Deb format."""
311
312     def test_type_rpm(self):
313         """Test type of return object is correct given RPM arg."""
314         changelog_date = lib.get_changelog_date("rpm")
315         self.assertIsInstance(changelog_date, str)
316
317     def test_type_deb(self):
318         """Test type of return object is correct given Deb arg."""
319         changelog_date = lib.get_changelog_date("deb")
320         self.assertIsInstance(changelog_date, str)
321
322     def test_has_year_rpm(self):
323         """Test returned value has a year in it given RPM arg."""
324         changelog_date = lib.get_changelog_date("rpm")
325         self.assertRegexpMatches(changelog_date, "[20]\d\d")
326
327     def test_has_year_deb(self):
328         """Test returned value has a year in it given Deb arg."""
329         changelog_date = lib.get_changelog_date("deb")
330         self.assertRegexpMatches(changelog_date, "[20]\d\d")
331
332     def test_has_month_rpm(self):
333         """Test returned value has a month in it given RPM arg."""
334         changelog_date = lib.get_changelog_date("rpm")
335         self.assertRegexpMatches(
336             changelog_date,
337             "Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec")
338
339     def test_has_month_deb(self):
340         """Test returned value has a month in it given Deb arg."""
341         changelog_date = lib.get_changelog_date("deb")
342         self.assertRegexpMatches(
343             changelog_date,
344             "Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec")
345
346     def test_has_day_rpm(self):
347         """Test returned value has a day in it given RPM arg."""
348         changelog_date = lib.get_changelog_date("rpm")
349         self.assertRegexpMatches(
350             changelog_date,
351             "Mon|Tue|Wed|Thu|Fri|Sat|Sun")
352
353     def test_has_day_deb(self):
354         """Test returned value has a day in it given Deb arg."""
355         changelog_date = lib.get_changelog_date("deb")
356         self.assertRegexpMatches(
357             changelog_date,
358             "Mon|Tue|Wed|Thu|Fri|Sat|Sun")