oslo.log/oslo_log/tests/unit/test_versionutils.py

365 lines
14 KiB
Python

# Copyright (c) 2013 OpenStack Foundation
# 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.
from unittest import mock
from oslotest import base as test_base
from testtools import matchers
from oslo_log import versionutils
class DeprecatedTestCase(test_base.BaseTestCase):
def assert_deprecated(self, mock_reporter, no_removal=False,
**expected_details):
if 'in_favor_of' in expected_details:
if no_removal is False:
expected_msg = versionutils._deprecated_msg_with_alternative
else:
expected_msg = getattr(
versionutils,
'_deprecated_msg_with_alternative_no_removal')
else:
if no_removal is False:
expected_msg = versionutils._deprecated_msg_no_alternative
else:
expected_msg = getattr(
versionutils,
'_deprecated_msg_with_no_alternative_no_removal')
# The first argument is the logger, and we don't care about
# that, so ignore it with ANY.
mock_reporter.assert_called_with(mock.ANY,
expected_msg,
expected_details)
@mock.patch('oslo_log.versionutils.report_deprecated_feature')
def test_deprecating_a_function_returns_correct_value(self, mock_reporter):
@versionutils.deprecated(as_of=versionutils.deprecated.ICEHOUSE)
def do_outdated_stuff(data):
return data
expected_rv = 'expected return value'
retval = do_outdated_stuff(expected_rv)
self.assertThat(retval, matchers.Equals(expected_rv))
@mock.patch('oslo_log.versionutils.report_deprecated_feature')
def test_deprecating_a_method_returns_correct_value(self, mock_reporter):
class C(object):
@versionutils.deprecated(as_of=versionutils.deprecated.ICEHOUSE)
def outdated_method(self, *args):
return args
retval = C().outdated_method(1, 'of anything')
self.assertThat(retval, matchers.Equals((1, 'of anything')))
@mock.patch('oslo_log.versionutils.report_deprecated_feature')
def test_deprecated_with_unknown_future_release(self, mock_reporter):
@versionutils.deprecated(as_of=versionutils.deprecated.BEXAR,
in_favor_of='different_stuff()')
def do_outdated_stuff():
return
do_outdated_stuff()
self.assert_deprecated(mock_reporter,
what='do_outdated_stuff()',
in_favor_of='different_stuff()',
as_of='Bexar',
remove_in='D')
@mock.patch('oslo_log.versionutils.report_deprecated_feature')
def test_deprecated_with_known_future_release(self, mock_reporter):
@versionutils.deprecated(as_of=versionutils.deprecated.GRIZZLY,
in_favor_of='different_stuff()')
def do_outdated_stuff():
return
do_outdated_stuff()
self.assert_deprecated(mock_reporter,
what='do_outdated_stuff()',
in_favor_of='different_stuff()',
as_of='Grizzly',
remove_in='Icehouse')
@mock.patch('oslo_log.versionutils.report_deprecated_feature')
def test_deprecated_without_replacement(self, mock_reporter):
@versionutils.deprecated(as_of=versionutils.deprecated.GRIZZLY)
def do_outdated_stuff():
return
do_outdated_stuff()
self.assert_deprecated(mock_reporter,
what='do_outdated_stuff()',
as_of='Grizzly',
remove_in='Icehouse')
@mock.patch('oslo_log.versionutils.report_deprecated_feature')
def test_deprecated_with_custom_what(self, mock_reporter):
@versionutils.deprecated(as_of=versionutils.deprecated.GRIZZLY,
what='v2.0 API',
in_favor_of='v3 API')
def do_outdated_stuff():
return
do_outdated_stuff()
self.assert_deprecated(mock_reporter,
what='v2.0 API',
in_favor_of='v3 API',
as_of='Grizzly',
remove_in='Icehouse')
@mock.patch('oslo_log.versionutils.report_deprecated_feature')
def test_deprecated_with_removed_next_release(self, mock_reporter):
@versionutils.deprecated(as_of=versionutils.deprecated.GRIZZLY,
remove_in=1)
def do_outdated_stuff():
return
do_outdated_stuff()
self.assert_deprecated(mock_reporter,
what='do_outdated_stuff()',
as_of='Grizzly',
remove_in='Havana')
@mock.patch('oslo_log.versionutils.report_deprecated_feature')
def test_deprecated_with_removed_plus_3(self, mock_reporter):
@versionutils.deprecated(as_of=versionutils.deprecated.GRIZZLY,
remove_in=+3)
def do_outdated_stuff():
return
do_outdated_stuff()
self.assert_deprecated(mock_reporter,
what='do_outdated_stuff()',
as_of='Grizzly',
remove_in='Juno')
@mock.patch('oslo_log.versionutils.report_deprecated_feature')
def test_deprecated_with_removed_zero(self, mock_reporter):
@versionutils.deprecated(as_of=versionutils.deprecated.GRIZZLY,
remove_in=0)
def do_outdated_stuff():
return
do_outdated_stuff()
self.assert_deprecated(mock_reporter,
no_removal=True,
what='do_outdated_stuff()',
as_of='Grizzly',
remove_in='Grizzly')
@mock.patch('oslo_log.versionutils.report_deprecated_feature')
def test_deprecated_with_removed_none(self, mock_reporter):
@versionutils.deprecated(as_of=versionutils.deprecated.GRIZZLY,
remove_in=None)
def do_outdated_stuff():
return
do_outdated_stuff()
self.assert_deprecated(mock_reporter,
no_removal=True,
what='do_outdated_stuff()',
as_of='Grizzly',
remove_in='Grizzly')
@mock.patch('oslo_log.versionutils.report_deprecated_feature')
def test_deprecated_with_removed_zero_and_alternative(self, mock_reporter):
@versionutils.deprecated(as_of=versionutils.deprecated.GRIZZLY,
in_favor_of='different_stuff()',
remove_in=0)
def do_outdated_stuff():
return
do_outdated_stuff()
self.assert_deprecated(mock_reporter,
no_removal=True,
what='do_outdated_stuff()',
as_of='Grizzly',
in_favor_of='different_stuff()',
remove_in='Grizzly')
@mock.patch('oslo_log.versionutils.report_deprecated_feature')
def test_deprecated_class_without_init(self, mock_reporter):
@versionutils.deprecated(as_of=versionutils.deprecated.JUNO,
remove_in=+1)
class OutdatedClass(object):
pass
obj = OutdatedClass()
self.assertIsInstance(obj, OutdatedClass)
self.assert_deprecated(mock_reporter,
what='OutdatedClass()',
as_of='Juno',
remove_in='Kilo')
@mock.patch('oslo_log.versionutils.report_deprecated_feature')
def test_deprecated_class_with_init(self, mock_reporter):
mock_arguments = mock.MagicMock()
args = (1, 5, 7)
kwargs = {'first': 10, 'second': 20}
@versionutils.deprecated(as_of=versionutils.deprecated.JUNO,
remove_in=+1)
class OutdatedClass(object):
def __init__(self, *args, **kwargs):
"""It is __init__ method."""
mock_arguments.args = args
mock_arguments.kwargs = kwargs
super(OutdatedClass, self).__init__()
obj = OutdatedClass(*args, **kwargs)
self.assertIsInstance(obj, OutdatedClass)
self.assertEqual('__init__', obj.__init__.__name__)
self.assertEqual('It is __init__ method.', obj.__init__.__doc__)
self.assertEqual(args, mock_arguments.args)
self.assertEqual(kwargs, mock_arguments.kwargs)
self.assert_deprecated(mock_reporter,
what='OutdatedClass()',
as_of='Juno',
remove_in='Kilo')
@mock.patch('oslo_log.versionutils.report_deprecated_feature')
def test_deprecated_exception_old(self, mock_log):
@versionutils.deprecated(as_of=versionutils.deprecated.ICEHOUSE,
remove_in=+1)
class OldException(Exception):
pass
try:
raise OldException()
except OldException:
pass
self.assert_deprecated(mock_log, what='OldException()',
as_of='Icehouse', remove_in='Juno')
@mock.patch('oslo_log.versionutils.report_deprecated_feature')
def test_deprecated_exception_new(self, mock_log):
@versionutils.deprecated(as_of=versionutils.deprecated.ICEHOUSE,
remove_in=+1)
class OldException(Exception):
pass
class NewException(OldException):
pass
try:
raise NewException()
except NewException:
pass
mock_log.assert_not_called()
@mock.patch('oslo_log.versionutils.report_deprecated_feature')
def test_deprecated_exception_unrelated(self, mock_log):
@versionutils.deprecated(as_of=versionutils.deprecated.ICEHOUSE,
remove_in=+1)
class OldException(Exception):
pass
class UnrelatedException(Exception):
pass
try:
raise UnrelatedException()
except UnrelatedException:
pass
mock_log.assert_not_called()
@mock.patch.object(versionutils.CONF, 'register_opts')
def test_register_options(self, mock_register_opts):
# Calling register_options registers the config options.
versionutils.register_options()
mock_register_opts.assert_called_once_with(
versionutils.deprecated_opts)
@mock.patch('oslo_log.versionutils.report_deprecated_feature')
def test_deprecated_mitaka_plus_two(self, mock_reporter):
@versionutils.deprecated(as_of=versionutils.deprecated.MITAKA,
remove_in=+2)
class OutdatedClass(object):
pass
obj = OutdatedClass()
self.assertIsInstance(obj, OutdatedClass)
self.assert_deprecated(mock_reporter,
what='OutdatedClass()',
as_of='Mitaka',
remove_in='Ocata')
@mock.patch('oslo_log.versionutils.report_deprecated_feature')
def test_deprecated_newton_plus_two(self, mock_reporter):
@versionutils.deprecated(as_of=versionutils.deprecated.NEWTON,
remove_in=+2)
class OutdatedClass(object):
pass
obj = OutdatedClass()
self.assertIsInstance(obj, OutdatedClass)
self.assert_deprecated(mock_reporter,
what='OutdatedClass()',
as_of='Newton',
remove_in='Pike')
@mock.patch('oslo_log.versionutils.report_deprecated_feature')
def test_deprecated_ocata_plus_two(self, mock_reporter):
@versionutils.deprecated(as_of=versionutils.deprecated.OCATA,
remove_in=+2)
class OutdatedClass(object):
pass
obj = OutdatedClass()
self.assertIsInstance(obj, OutdatedClass)
self.assert_deprecated(mock_reporter,
what='OutdatedClass()',
as_of='Ocata',
remove_in='Queens')
@mock.patch('oslo_log.versionutils.report_deprecated_feature')
def test_deprecated_message(self, mock_reporter):
versionutils.deprecation_warning('outdated_stuff',
as_of=versionutils.deprecated.KILO,
in_favor_of='different_stuff',
remove_in=+2)
self.assert_deprecated(mock_reporter,
what='outdated_stuff',
in_favor_of='different_stuff',
as_of='Kilo',
remove_in='Mitaka')