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