
import mock

from keystone import catalog
from keystone.common import manager
from keystone.tests import unit


class TestCreateLegacyDriver(unit.BaseTestCase):

    @mock.patch('oslo_log.versionutils.report_deprecated_feature')
    def test_class_is_properly_deprecated(self, mock_reporter):
        Driver = manager.create_legacy_driver(catalog.CatalogDriverV8)

        # NOTE(dstanek): I want to subvert the requirement for this
        # class to implement all of the abstract methods.
        Driver.__abstractmethods__ = set()
        impl = Driver()

        details = {
            'as_of': 'Liberty',
            'what': 'keystone.catalog.core.Driver',
            'in_favor_of': 'keystone.catalog.core.CatalogDriverV8',
            'remove_in': 'N',
        }
        mock_reporter.assert_called_with(mock.ANY, mock.ANY, details)

        self.assertIsInstance(impl, catalog.CatalogDriverV8)


import mock

from keystone import catalog
from keystone.common import manager
from keystone.tests import unit


class TestCreateLegacyDriver(unit.BaseTestCase):

    @mock.patch('oslo_log.versionutils.report_deprecated_feature')
    def test_class_is_properly_deprecated(self, mock_reporter):
        Driver = manager.create_legacy_driver(catalog.CatalogDriverV8)

        # NOTE(dstanek): I want to subvert the requirement for this
        # class to implement all of the abstract methods.
        Driver.__abstractmethods__ = set()
        impl = Driver()

        details = {
            'as_of': 'Liberty',
            'what': 'keystone.catalog.core.Driver',
            'in_favor_of': 'keystone.catalog.core.CatalogDriverV8',
            'remove_in': mock.ANY,
        }
        mock_reporter.assert_called_with(mock.ANY, mock.ANY, details)
        self.assertEqual('N', mock_reporter.call_args[0][2]['remove_in'][0])

        self.assertIsInstance(impl, catalog.CatalogDriverV8)

Correct test to support changing N release name
Correct test to support changing N release name

oslo.log is going to change to use Newton rather than N so this test
should not make an assumption about the way that
versionutils.deprecated is calling report_deprecated_feature.

Change-Id: I06aa6d085232376811f73597b2d84b5174bc7a8d
Closes-Bug: 1561121
  
  import mock
  
  from keystone import catalog
  from keystone.common import manager
  from keystone.tests import unit
  
  
  class TestCreateLegacyDriver(unit.BaseTestCase):
  
      @mock.patch('oslo_log.versionutils.report_deprecated_feature')
      def test_class_is_properly_deprecated(self, mock_reporter):
          Driver = manager.create_legacy_driver(catalog.CatalogDriverV8)
  
          # NOTE(dstanek): I want to subvert the requirement for this
          # class to implement all of the abstract methods.
          Driver.__abstractmethods__ = set()
          impl = Driver()
  
          details = {
              'as_of': 'Liberty',
              'what': 'keystone.catalog.core.Driver',
              'in_favor_of': 'keystone.catalog.core.CatalogDriverV8',
-             'remove_in': 'N',
+             'remove_in': mock.ANY,
          }
          mock_reporter.assert_called_with(mock.ANY, mock.ANY, details)
+         self.assertEqual('N', mock_reporter.call_args[0][2]['remove_in'][0])
  
          self.assertIsInstance(impl, catalog.CatalogDriverV8)
  
Correct test to support changing N release name
## Code Before:

import mock

from keystone import catalog
from keystone.common import manager
from keystone.tests import unit


class TestCreateLegacyDriver(unit.BaseTestCase):

    @mock.patch('oslo_log.versionutils.report_deprecated_feature')
    def test_class_is_properly_deprecated(self, mock_reporter):
        Driver = manager.create_legacy_driver(catalog.CatalogDriverV8)

        # NOTE(dstanek): I want to subvert the requirement for this
        # class to implement all of the abstract methods.
        Driver.__abstractmethods__ = set()
        impl = Driver()

        details = {
            'as_of': 'Liberty',
            'what': 'keystone.catalog.core.Driver',
            'in_favor_of': 'keystone.catalog.core.CatalogDriverV8',
            'remove_in': 'N',
        }
        mock_reporter.assert_called_with(mock.ANY, mock.ANY, details)

        self.assertIsInstance(impl, catalog.CatalogDriverV8)

## Instruction:
Correct test to support changing N release name
## Code After:

import mock

from keystone import catalog
from keystone.common import manager
from keystone.tests import unit


class TestCreateLegacyDriver(unit.BaseTestCase):

    @mock.patch('oslo_log.versionutils.report_deprecated_feature')
    def test_class_is_properly_deprecated(self, mock_reporter):
        Driver = manager.create_legacy_driver(catalog.CatalogDriverV8)

        # NOTE(dstanek): I want to subvert the requirement for this
        # class to implement all of the abstract methods.
        Driver.__abstractmethods__ = set()
        impl = Driver()

        details = {
            'as_of': 'Liberty',
            'what': 'keystone.catalog.core.Driver',
            'in_favor_of': 'keystone.catalog.core.CatalogDriverV8',
            'remove_in': mock.ANY,
        }
        mock_reporter.assert_called_with(mock.ANY, mock.ANY, details)
        self.assertEqual('N', mock_reporter.call_args[0][2]['remove_in'][0])

        self.assertIsInstance(impl, catalog.CatalogDriverV8)
