From d64f6bcbae8785c9411110f37a48d10a908c07d8 Mon Sep 17 00:00:00 2001 From: Doug Hellmann Date: Fri, 27 Jan 2017 17:56:44 -0500 Subject: [PATCH] do not mock private methods of objects from libraries This patch fixes tests that were using mock to replace a private method of a library instead of using the public testing interface provided by that library. The new release of stevedore changes the name of that private method, which breaks these tests. Because the requirements list is gated on glance's unit tests, the test failure is preventing other projects from adopting the new release of stevedore. Change-Id: Ie9af444e7f8842ffb3e275ede52b802de02e6e99 Signed-off-by: Doug Hellmann --- glance/common/glare/loader.py | 4 +- glance/tests/functional/glare/test_glare.py | 48 ++++++++++++++------- 2 files changed, 35 insertions(+), 17 deletions(-) diff --git a/glance/common/glare/loader.py b/glance/common/glare/loader.py index 4eba5cf2c7..124b76f12b 100644 --- a/glance/common/glare/loader.py +++ b/glance/common/glare/loader.py @@ -43,8 +43,8 @@ CONF.register_opts(plugins_opts) class ArtifactsPluginLoader(object): - def __init__(self, namespace): - self.mgr = enabled.EnabledExtensionManager( + def __init__(self, namespace, test_plugins=None): + self.mgr = test_plugins or enabled.EnabledExtensionManager( check_func=self._gen_check_func(), namespace=namespace, propagate_map_exceptions=True, diff --git a/glance/tests/functional/glare/test_glare.py b/glance/tests/functional/glare/test_glare.py index 7605d037b6..56dd8895b7 100644 --- a/glance/tests/functional/glare/test_glare.py +++ b/glance/tests/functional/glare/test_glare.py @@ -17,9 +17,9 @@ import uuid import mock from oslo_serialization import jsonutils -import pkg_resources import requests from six.moves import http_client as http +from stevedore import extension from glance.api.glare.v0_1 import glare from glance.api.glare.v0_1 import router @@ -60,20 +60,38 @@ class ArtifactWithBlob(definitions.ArtifactType): def _create_resource(): - plugins = None - mock_this = 'stevedore.extension.ExtensionManager._find_entry_points' - with mock.patch(mock_this) as fep: - path = 'glance.tests.functional.glare.test_glare' - fep.return_value = [ - pkg_resources.EntryPoint.parse('WithProps=%s:Artifact' % path), - pkg_resources.EntryPoint.parse( - 'NoProp=%s:ArtifactNoProps' % path), - pkg_resources.EntryPoint.parse( - 'NoProp=%s:ArtifactNoProps1' % path), - pkg_resources.EntryPoint.parse( - 'WithBlob=%s:ArtifactWithBlob' % path) - ] - plugins = loader.ArtifactsPluginLoader('glance.artifacts.types') + test_loader = extension.ExtensionManager.make_test_instance( + extensions=[ + extension.Extension( + name='WithProps', + entry_point=mock.Mock(), + plugin=Artifact, + obj=None, + ), + extension.Extension( + name='NoProp', + entry_point=mock.Mock(), + plugin=ArtifactNoProps, + obj=None, + ), + extension.Extension( + name='NoProp', + entry_point=mock.Mock(), + plugin=ArtifactNoProps1, + obj=None, + ), + extension.Extension( + name='WithBlob', + entry_point=mock.Mock(), + plugin=ArtifactWithBlob, + obj=None, + ), + ], + ) + plugins = loader.ArtifactsPluginLoader( + 'glance.artifacts.types', + test_plugins=test_loader, + ) deserializer = glare.RequestDeserializer(plugins=plugins) serializer = glare.ResponseSerializer() controller = glare.ArtifactsController(plugins=plugins)