releases/openstack_releases/tests/test_requirements.py

224 lines
6.8 KiB
Python

# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import textwrap
from unittest import mock
from oslotest import base
import pkg_resources
from openstack_releases import requirements
class TestParseRequirements(base.BaseTestCase):
def test_empty(self):
self.assertEqual({}, requirements.parse_requirements(''))
self.assertEqual({}, requirements.parse_requirements('\n'))
def test_comments(self):
self.assertEqual({}, requirements.parse_requirements('#'))
self.assertEqual({}, requirements.parse_requirements('#\n'))
def test_simple(self):
self.assertEqual(
[('', 'pbr')],
list(requirements.parse_requirements(textwrap.dedent('''
pbr>=1.6
''')).keys()),
)
def test_multiline(self):
self.assertEqual(
[('', 'keyring'),
('', 'pbr')],
list(
sorted(
requirements.parse_requirements(
textwrap.dedent('''
pbr>=1.6
keyring==7.3
''')
).keys()
)
)
)
class TestGetMinSpecifier(base.BaseTestCase):
def test_none(self):
actual = requirements.get_min_specifier(
pkg_resources.Requirement.parse('pbr').specifier,
)
self.assertIsNone(actual)
def test_greater(self):
actual = requirements.get_min_specifier(
pkg_resources.Requirement.parse('pbr>1.6').specifier,
)
self.assertEqual('1.6', actual.version)
def test_greater_equal(self):
actual = requirements.get_min_specifier(
pkg_resources.Requirement.parse('pbr>=1.6').specifier,
)
self.assertEqual('1.6', actual.version)
class TestCompareLowerBounds(base.BaseTestCase):
def test_new_requirement(self):
warnings = []
old = {
}
new = {
(None, 'pbr'): pkg_resources.Requirement.parse('pbr'),
}
requirements.compare_lower_bounds(
old, new, warnings.append,
)
print(warnings)
self.assertEqual(1, len(warnings))
def test_dropped_requirement(self):
warnings = []
old = {
(None, 'pbr'): pkg_resources.Requirement.parse('pbr'),
}
new = {
}
requirements.compare_lower_bounds(
old, new, warnings.append,
)
print(warnings)
self.assertEqual(0, len(warnings))
def test_no_lower(self):
warnings = []
old = {
(None, 'pbr'): pkg_resources.Requirement.parse('pbr'),
}
new = {
(None, 'pbr'): pkg_resources.Requirement.parse('pbr'),
}
requirements.compare_lower_bounds(
old, new, warnings.append,
)
print(warnings)
self.assertEqual(0, len(warnings))
def test_new_lower(self):
warnings = []
old = {
(None, 'pbr'): pkg_resources.Requirement.parse('pbr'),
}
new = {
(None, 'pbr'): pkg_resources.Requirement.parse('pbr>=1.6'),
}
requirements.compare_lower_bounds(
old, new, warnings.append,
)
print(warnings)
self.assertEqual(1, len(warnings))
def test_raised_lower(self):
warnings = []
old = {
(None, 'pbr'): pkg_resources.Requirement.parse('pbr>=1.5'),
}
new = {
(None, 'pbr'): pkg_resources.Requirement.parse('pbr>=1.6'),
}
requirements.compare_lower_bounds(
old, new, warnings.append,
)
print(warnings)
self.assertEqual(1, len(warnings))
def test_new_lower_format(self):
warnings = []
old = {
(None, 'pbr'): pkg_resources.Requirement.parse('pbr>=1.6'),
}
new = {
(None, 'pbr'): pkg_resources.Requirement.parse('pbr>=1.6.0'),
}
requirements.compare_lower_bounds(
old, new, warnings.append,
)
print(warnings)
self.assertEqual(0, len(warnings))
def test_new_lower_comparator(self):
warnings = []
old = {
(None, 'pbr'): pkg_resources.Requirement.parse('pbr>=1.6'),
}
new = {
(None, 'pbr'): pkg_resources.Requirement.parse('pbr>1.6'),
}
requirements.compare_lower_bounds(
old, new, warnings.append,
)
print(warnings)
self.assertEqual(1, len(warnings))
class TestFindBadLowerBoundsIncreases(base.BaseTestCase):
@mock.patch('openstack_releases.requirements.get_requirements_at_ref')
def test_skip_for_beta(self, get_req):
warnings = []
get_req.side_effect = AssertionError('should not be called')
requirements.find_bad_lower_bound_increases(
None, None, '1.0.0', '2.0.0.0b1', None,
warnings.append,
)
print(warnings)
self.assertEqual(0, len(warnings))
@mock.patch('openstack_releases.requirements.get_requirements_at_ref')
def test_skip_for_rc(self, get_req):
warnings = []
get_req.side_effect = AssertionError('should not be called')
requirements.find_bad_lower_bound_increases(
None, None, '1.0.0', '2.0.0.0rc1', None,
warnings.append,
)
print(warnings)
self.assertEqual(0, len(warnings))
@mock.patch('openstack_releases.requirements.get_requirements_at_ref')
def test_skip_for_zero_patch_major(self, get_req):
warnings = []
get_req.side_effect = AssertionError('should not be called')
requirements.find_bad_lower_bound_increases(
None, None, '1.0.0', '2.0.0', None,
warnings.append,
)
print(warnings)
self.assertEqual(0, len(warnings))
@mock.patch('openstack_releases.requirements.get_requirements_at_ref')
def test_skip_for_zero_patch_minor(self, get_req):
warnings = []
get_req.side_effect = AssertionError('should not be called')
requirements.find_bad_lower_bound_increases(
None, None, '1.0.0', '1.1.0', None,
warnings.append,
)
print(warnings)
self.assertEqual(0, len(warnings))