1 ##############################################################################
2 # Copyright (c) 2016 Daniel Farrell. All rights reserved.
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 ##############################################################################
9 """Tests for package build logic helper library."""
16 class TestExtractVersion(unittest.TestCase):
18 """Test logic to extract ODL versions from artifact URLs."""
20 nexus_url = "https://nexus.opendaylight.org/content/repositories"
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"], "")
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"], "")
42 def test_oxygen_snapshot_url(self):
43 """Test URL of an ODL Oxygen snapshot build."""
44 # NB: This will need to be updated as old builds expire
45 url = "%s/opendaylight.snapshot/org/opendaylight/integration/karaf/0.8.0-SNAPSHOT/karaf-0.8.0-20180202.194543-1393.tar.gz" % self.nexus_url
46 version = lib.extract_version(url)
47 self.assertEqual(version["version_major"], "8")
48 self.assertEqual(version["version_minor"], "0")
49 self.assertEqual(version["version_patch"], "0")
50 self.assertEqual(version["pkg_version"], "0.1.20180202snap1393")
51 self.assertEqual(version["codename"], "-SNAPSHOT")
53 def test_oxygen_snapshot_zip_url(self):
54 """Test URL of an ODL Oxygen snapshot build zip archive."""
55 # NB: This will need to be updated as old builds expire
56 url = "%s/opendaylight.snapshot/org/opendaylight/integration/karaf/0.8.0-SNAPSHOT/karaf-0.8.0-20180202.194543-1393.zip" % self.nexus_url
57 version = lib.extract_version(url)
58 self.assertEqual(version["version_major"], "8")
59 self.assertEqual(version["version_minor"], "0")
60 self.assertEqual(version["version_patch"], "0")
61 self.assertEqual(version["pkg_version"], "0.1.20180202snap1393")
62 self.assertEqual(version["codename"], "-SNAPSHOT")
64 def test_fluorine_snapshot_url(self):
65 """Test URL of an ODL Fluorine snapshot build."""
66 # NB: This will need to be updated as old builds expire
67 url = "%s/opendaylight.snapshot/org/opendaylight/integration/karaf/0.9.0-SNAPSHOT/karaf-0.9.0-20180411.203859-563.tar.gz" % self.nexus_url
68 version = lib.extract_version(url)
69 self.assertEqual(version["version_major"], "9")
70 self.assertEqual(version["version_minor"], "0")
71 self.assertEqual(version["version_patch"], "0")
72 self.assertEqual(version["pkg_version"], "0.1.20180411snap563")
73 self.assertEqual(version["codename"], "-SNAPSHOT")
75 def test_fluorine_snapshot_zip_url(self):
76 """Test URL of an ODL Fluorine snapshot build zip archive."""
77 # NB: This will need to be updated as old builds expire
78 url = "%s/opendaylight.snapshot/org/opendaylight/integration/karaf/0.9.0-SNAPSHOT/karaf-0.9.0-20180411.203859-563.tar.gz" % self.nexus_url
79 version = lib.extract_version(url)
80 self.assertEqual(version["version_major"], "9")
81 self.assertEqual(version["version_minor"], "0")
82 self.assertEqual(version["version_patch"], "0")
83 self.assertEqual(version["pkg_version"], "0.1.20180411snap563")
84 self.assertEqual(version["codename"], "-SNAPSHOT")
86 def test_oxygen_multipatch_zip_url(self):
87 """Test URL of an ODL Oxygen multipatch-test build zip archive."""
88 # NB: This will need to be updated as old builds expire
89 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
90 version = lib.extract_version(url)
91 self.assertEqual(version["version_major"], "8")
92 self.assertEqual(version["version_minor"], "0")
93 self.assertEqual(version["version_patch"], "0")
94 self.assertEqual(version["pkg_version"], "0.1.20180204snap134")
95 self.assertEqual(version["codename"], "-SNAPSHOT")
98 class TestGetSnapURL(unittest.TestCase):
100 """Test logic get URL to latest snapshot build of given major version."""
102 url_base = "https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/integration"
104 def validate_snap_url(self, snap_url):
105 """Helper for validating snapshot URLs are sane."""
106 self.assertIn(self.url_base, snap_url)
107 self.assertIn("tar.gz", snap_url)
108 self.assertNotIn("release", snap_url)
109 self.assertNotIn("public", snap_url)
111 def test_oxygen(self):
112 """Test Oxygen major version gives sane snapshot URL."""
113 self.validate_snap_url(lib.get_snap_url("8"))
116 class TestGetDistroNamePrefix(unittest.TestCase):
118 """Test logic to get Karaf 3/4 distro name prefix per ODL major version."""
120 k3_distro_prefix = "distribution-karaf"
121 k4_distro_prefix = "karaf"
123 def test_oxygen(self):
124 """Test Oxygen major version gives Karaf 4 prefix."""
125 distro_prefix = lib.get_distro_name_prefix("8")
126 self.assertEqual(distro_prefix, self.k4_distro_prefix)
128 def test_oxygen_int(self):
129 """Test Oxygen major version as int gives Karaf 4 prefix."""
130 distro_prefix = lib.get_distro_name_prefix(8)
131 self.assertEqual(distro_prefix, self.k4_distro_prefix)
134 class TestGetSysdCommit(unittest.TestCase):
136 """Test fn to get most recent Int/Pack hash to use as sysd file version."""
139 """Check that returned value is of the right type."""
140 sysd_hash = lib.get_sysd_commit()
141 self.assertIsInstance(sysd_hash, str)
144 """Check that returned value the normal length for a commit hash."""
145 sysd_hash = lib.get_sysd_commit()
146 self.assertEqual(len(sysd_hash), 40)
148 def test_only_valid_chars(self):
149 """Check that returned value only contains typical commit hash chars."""
150 sysd_hash = lib.get_sysd_commit()
151 self.assertRegexpMatches(sysd_hash, "^[A-Za-z0-9-]+$")
154 class TestGetJavaVersion(unittest.TestCase):
156 """Test fn to get Java version required for a given ODL version."""
158 def test_type_given_int(self):
159 """Pass int, check that returned value is of the right type."""
160 java_version = lib.get_java_version(6)
161 self.assertIsInstance(java_version, int)
163 def test_type_given_str(self):
164 """Pass int, check that returned value is of the right type."""
165 java_version = lib.get_java_version("6")
166 self.assertIsInstance(java_version, int)
168 def test_old_given_int(self):
169 """Pass old ODL major version, check that Java 7 returned."""
170 java_version = lib.get_java_version(4)
171 self.assertEqual(java_version, 7)
173 def test_old_given_str(self):
174 """Pass old ODL major version, check that Java 7 returned."""
175 java_version = lib.get_java_version("4")
176 self.assertEqual(java_version, 7)
178 def test_oxygen_given_int(self):
179 """Pass Oxygen major version, check that Java 8 returned."""
180 java_version = lib.get_java_version(8)
181 self.assertEqual(java_version, 8)
183 def test_oxygen_given_str(self):
184 """Pass Oxygen major version, check that Java 8 returned."""
185 java_version = lib.get_java_version("8")
186 self.assertEqual(java_version, 8)
189 class TestGetChangelogDate(unittest.TestCase):
191 """Test lib fn that gives date for changelog in RPM or Deb format."""
193 def test_type_rpm(self):
194 """Test type of return object is correct given RPM arg."""
195 changelog_date = lib.get_changelog_date("rpm")
196 self.assertIsInstance(changelog_date, str)
198 def test_type_deb(self):
199 """Test type of return object is correct given Deb arg."""
200 changelog_date = lib.get_changelog_date("deb")
201 self.assertIsInstance(changelog_date, str)
203 def test_has_year_rpm(self):
204 """Test returned value has a year in it given RPM arg."""
205 changelog_date = lib.get_changelog_date("rpm")
206 self.assertRegexpMatches(changelog_date, "[20]\d\d")
208 def test_has_year_deb(self):
209 """Test returned value has a year in it given Deb arg."""
210 changelog_date = lib.get_changelog_date("deb")
211 self.assertRegexpMatches(changelog_date, "[20]\d\d")
213 def test_has_month_rpm(self):
214 """Test returned value has a month in it given RPM arg."""
215 changelog_date = lib.get_changelog_date("rpm")
216 self.assertRegexpMatches(
218 "Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec")
220 def test_has_month_deb(self):
221 """Test returned value has a month in it given Deb arg."""
222 changelog_date = lib.get_changelog_date("deb")
223 self.assertRegexpMatches(
225 "Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec")
227 def test_has_day_rpm(self):
228 """Test returned value has a day in it given RPM arg."""
229 changelog_date = lib.get_changelog_date("rpm")
230 self.assertRegexpMatches(
232 "Mon|Tue|Wed|Thu|Fri|Sat|Sun")
234 def test_has_day_deb(self):
235 """Test returned value has a day in it given Deb arg."""
236 changelog_date = lib.get_changelog_date("deb")
237 self.assertRegexpMatches(
239 "Mon|Tue|Wed|Thu|Fri|Sat|Sun")