Introduce ''mock_object'' method to base test class
We would like to fully remove mox from the test tree. Even for tests that don't use mox's validation, many of them are using the symbol patching with self.stubs.Set. We can do the same thing with the monkeypatch fixture instead. This introduces self.stub_out to nova/test.py and an example of what a stubs => stub_out change would look like. The teardown function in the converted test was removed at the same time, as those should no longer be used. Part of the mox community goal for Rocky. Change-Id: I8f471ff8fee600ebb4e8907bf240007b7b4fe59f Signed-off-by: Chuck Short <chucks@redhat.com>
This commit is contained in:
parent
b6d5100de7
commit
8954959817
|
@ -117,8 +117,8 @@ class TestSqlAlchemyDBDataIntegrity(base.TestDriver,
|
||||||
return original_method(query, model, limit,
|
return original_method(query, model, limit,
|
||||||
sort_keys, marker, sort_dir, sort_dirs)
|
sort_keys, marker, sort_dir, sort_dirs)
|
||||||
|
|
||||||
self.stubs.Set(self.db_api, '_paginate_query',
|
self.mock_object(self.db_api, '_paginate_query',
|
||||||
fake_paginate_query)
|
fake_paginate_query)
|
||||||
self.db_api.image_get_all(self.context, sort_key=['created_at'])
|
self.db_api.image_get_all(self.context, sort_key=['created_at'])
|
||||||
|
|
||||||
def test_paginate_non_redundant_sort_keys(self):
|
def test_paginate_non_redundant_sort_keys(self):
|
||||||
|
@ -130,8 +130,8 @@ class TestSqlAlchemyDBDataIntegrity(base.TestDriver,
|
||||||
return original_method(query, model, limit,
|
return original_method(query, model, limit,
|
||||||
sort_keys, marker, sort_dir, sort_dirs)
|
sort_keys, marker, sort_dir, sort_dirs)
|
||||||
|
|
||||||
self.stubs.Set(self.db_api, '_paginate_query',
|
self.mock_object(self.db_api, '_paginate_query',
|
||||||
fake_paginate_query)
|
fake_paginate_query)
|
||||||
self.db_api.image_get_all(self.context, sort_key=['name'])
|
self.db_api.image_get_all(self.context, sort_key=['name'])
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -117,6 +117,7 @@ CONF = cfg.CONF
|
||||||
|
|
||||||
|
|
||||||
class ApiTest(test_utils.BaseTestCase):
|
class ApiTest(test_utils.BaseTestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(ApiTest, self).setUp()
|
super(ApiTest, self).setUp()
|
||||||
self.test_dir = self.useFixture(fixtures.TempDir()).path
|
self.test_dir = self.useFixture(fixtures.TempDir()).path
|
||||||
|
@ -209,8 +210,8 @@ class ApiTest(test_utils.BaseTestCase):
|
||||||
return test_utils.HttplibWsgiAdapter(self.glance_registry_app)
|
return test_utils.HttplibWsgiAdapter(self.glance_registry_app)
|
||||||
return wrapped
|
return wrapped
|
||||||
|
|
||||||
self.stubs.Set(glance.common.client.BaseClient,
|
self.mock_object(glance.common.client.BaseClient,
|
||||||
'get_connection_type', get_connection_type)
|
'get_connection_type', get_connection_type)
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
glance.db.sqlalchemy.api.clear_db_env()
|
glance.db.sqlalchemy.api.clear_db_env()
|
||||||
|
|
|
@ -52,19 +52,12 @@ class TestGlanceApiCmd(test_utils.BaseTestCase):
|
||||||
|
|
||||||
store.register_opts(CONF)
|
store.register_opts(CONF)
|
||||||
|
|
||||||
self.config_patcher = mock.patch(
|
self.mock_object(glance.common.config, 'load_paste_app',
|
||||||
'glance.common.config.load_paste_app',
|
self._do_nothing)
|
||||||
side_effect=self._do_nothing)
|
self.mock_object(glance.common.wsgi.Server, 'start',
|
||||||
self.start_patcher = mock.patch('glance.common.wsgi.Server.start',
|
self._do_nothing)
|
||||||
side_effect=self._do_nothing)
|
self.mock_object(glance.common.wsgi.Server, 'wait',
|
||||||
self.wait_patcher = mock.patch('glance.common.wsgi.Server.wait',
|
self._do_nothing)
|
||||||
side_effect=self._do_nothing)
|
|
||||||
|
|
||||||
self.addCleanup(mock.patch.stopall)
|
|
||||||
|
|
||||||
self.config_patcher.start()
|
|
||||||
self.start_patcher.start()
|
|
||||||
self.wait_patcher.start()
|
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
sys.stderr = sys.__stderr__
|
sys.stderr = sys.__stderr__
|
||||||
|
@ -77,10 +70,10 @@ class TestGlanceApiCmd(test_utils.BaseTestCase):
|
||||||
|
|
||||||
def test_worker_creation_failure(self):
|
def test_worker_creation_failure(self):
|
||||||
failure = exc.WorkerCreationFailure(reason='test')
|
failure = exc.WorkerCreationFailure(reason='test')
|
||||||
with mock.patch('glance.common.wsgi.Server.start',
|
self.mock_object(glance.common.wsgi.Server, 'start',
|
||||||
side_effect=self._raise(failure)):
|
self._raise(failure))
|
||||||
exit = self.assertRaises(SystemExit, glance.cmd.api.main)
|
exit = self.assertRaises(SystemExit, glance.cmd.api.main)
|
||||||
self.assertEqual(2, exit.code)
|
self.assertEqual(2, exit.code)
|
||||||
|
|
||||||
@mock.patch.object(glance.common.config, 'parse_cache_args')
|
@mock.patch.object(glance.common.config, 'parse_cache_args')
|
||||||
@mock.patch.object(logging, 'setup')
|
@mock.patch.object(logging, 'setup')
|
||||||
|
@ -103,12 +96,11 @@ class TestGlanceApiCmd(test_utils.BaseTestCase):
|
||||||
mock.call.mock_cache_clean()]
|
mock.call.mock_cache_clean()]
|
||||||
self.assertEqual(expected_call_sequence, manager.mock_calls)
|
self.assertEqual(expected_call_sequence, manager.mock_calls)
|
||||||
|
|
||||||
@mock.patch.object(glance.image_cache.cleaner.Cleaner, 'run')
|
|
||||||
@mock.patch.object(glance.image_cache.base.CacheApp, '__init__')
|
@mock.patch.object(glance.image_cache.base.CacheApp, '__init__')
|
||||||
def test_cache_cleaner_main_runtime_exception_handling(self, mock_cache,
|
def test_cache_cleaner_main_runtime_exception_handling(self, mock_cache):
|
||||||
mock_run):
|
|
||||||
mock_cache.return_value = None
|
mock_cache.return_value = None
|
||||||
mock_run.side_effect = self._raise(RuntimeError)
|
self.mock_object(glance.image_cache.cleaner.Cleaner, 'run',
|
||||||
|
self._raise(RuntimeError))
|
||||||
exit = self.assertRaises(SystemExit, glance.cmd.cache_cleaner.main)
|
exit = self.assertRaises(SystemExit, glance.cmd.cache_cleaner.main)
|
||||||
self.assertEqual('ERROR: ', exit.code)
|
self.assertEqual('ERROR: ', exit.code)
|
||||||
|
|
||||||
|
@ -133,12 +125,11 @@ class TestGlanceApiCmd(test_utils.BaseTestCase):
|
||||||
mock.call.mock_cache_prune()]
|
mock.call.mock_cache_prune()]
|
||||||
self.assertEqual(expected_call_sequence, manager.mock_calls)
|
self.assertEqual(expected_call_sequence, manager.mock_calls)
|
||||||
|
|
||||||
@mock.patch.object(glance.image_cache.pruner.Pruner, 'run')
|
|
||||||
@mock.patch.object(glance.image_cache.base.CacheApp, '__init__')
|
@mock.patch.object(glance.image_cache.base.CacheApp, '__init__')
|
||||||
def test_cache_pruner_main_runtime_exception_handling(self, mock_cache,
|
def test_cache_pruner_main_runtime_exception_handling(self, mock_cache):
|
||||||
mock_run):
|
|
||||||
mock_cache.return_value = None
|
mock_cache.return_value = None
|
||||||
mock_run.side_effect = self._raise(RuntimeError)
|
self.mock_object(glance.image_cache.pruner.Pruner, 'run',
|
||||||
|
self._raise(RuntimeError))
|
||||||
exit = self.assertRaises(SystemExit, glance.cmd.cache_pruner.main)
|
exit = self.assertRaises(SystemExit, glance.cmd.cache_pruner.main)
|
||||||
self.assertEqual('ERROR: ', exit.code)
|
self.assertEqual('ERROR: ', exit.code)
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,7 @@ import os
|
||||||
|
|
||||||
import glance_store as store
|
import glance_store as store
|
||||||
from glance_store import location
|
from glance_store import location
|
||||||
|
import mock
|
||||||
from oslo_concurrency import lockutils
|
from oslo_concurrency import lockutils
|
||||||
from oslo_config import cfg
|
from oslo_config import cfg
|
||||||
from oslo_db import options
|
from oslo_db import options
|
||||||
|
@ -134,3 +135,14 @@ class MultiIsolatedUnitTest(MultiStoreClearingUnitTest):
|
||||||
fap = open(CONF.oslo_policy.policy_file, 'w')
|
fap = open(CONF.oslo_policy.policy_file, 'w')
|
||||||
fap.write(jsonutils.dumps(rules))
|
fap.write(jsonutils.dumps(rules))
|
||||||
fap.close()
|
fap.close()
|
||||||
|
|
||||||
|
def mock_object(self, obj, attr_name, *args, **kwargs):
|
||||||
|
"""Use python mock to mock an object attribute
|
||||||
|
|
||||||
|
Mocks the specified objects attribute with the given value.
|
||||||
|
Automatically performs 'addCleanup' for the mock.
|
||||||
|
"""
|
||||||
|
patcher = mock.patch.object(obj, attr_name, *args, **kwargs)
|
||||||
|
result = patcher.start()
|
||||||
|
self.addCleanup(patcher.stop)
|
||||||
|
return result
|
||||||
|
|
|
@ -18,7 +18,6 @@ import shutil
|
||||||
|
|
||||||
import fixtures
|
import fixtures
|
||||||
import oslo_middleware
|
import oslo_middleware
|
||||||
from oslotest import moxstubout
|
|
||||||
|
|
||||||
from glance.api.middleware import context
|
from glance.api.middleware import context
|
||||||
from glance.common import config
|
from glance.common import config
|
||||||
|
@ -29,8 +28,6 @@ class TestPasteApp(test_utils.BaseTestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(TestPasteApp, self).setUp()
|
super(TestPasteApp, self).setUp()
|
||||||
mox_fixture = self.useFixture(moxstubout.MoxStubout())
|
|
||||||
self.stubs = mox_fixture.stubs
|
|
||||||
|
|
||||||
def _do_test_load_paste_app(self,
|
def _do_test_load_paste_app(self,
|
||||||
expected_app_type,
|
expected_app_type,
|
||||||
|
|
|
@ -48,12 +48,14 @@ class TestLocationStrategy(base.IsolatedUnitTest):
|
||||||
modules = ['module1', 'module2']
|
modules = ['module1', 'module2']
|
||||||
|
|
||||||
def _fake_stevedore_extension_manager(*args, **kwargs):
|
def _fake_stevedore_extension_manager(*args, **kwargs):
|
||||||
ret = lambda: None
|
def ret():
|
||||||
|
return None
|
||||||
ret.names = lambda: modules
|
ret.names = lambda: modules
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def _fake_stevedore_driver_manager(*args, **kwargs):
|
def _fake_stevedore_driver_manager(*args, **kwargs):
|
||||||
ret = lambda: None
|
def ret():
|
||||||
|
return None
|
||||||
ret.driver = lambda: None
|
ret.driver = lambda: None
|
||||||
ret.driver.__name__ = kwargs['name']
|
ret.driver.__name__ = kwargs['name']
|
||||||
# Module 1 and 2 has a same strategy name
|
# Module 1 and 2 has a same strategy name
|
||||||
|
@ -61,10 +63,10 @@ class TestLocationStrategy(base.IsolatedUnitTest):
|
||||||
ret.driver.init = lambda: None
|
ret.driver.init = lambda: None
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
self.stub = self.stubs.Set(stevedore.extension, "ExtensionManager",
|
self.stub = self.mock_object(stevedore.extension, "ExtensionManager",
|
||||||
_fake_stevedore_extension_manager)
|
_fake_stevedore_extension_manager)
|
||||||
self.stub = self.stubs.Set(stevedore.driver, "DriverManager",
|
self.stub = self.mock_object(stevedore.driver, "DriverManager",
|
||||||
_fake_stevedore_driver_manager)
|
_fake_stevedore_driver_manager)
|
||||||
|
|
||||||
loaded_modules = location_strategy._load_strategies()
|
loaded_modules = location_strategy._load_strategies()
|
||||||
self.assertEqual(1, len(loaded_modules))
|
self.assertEqual(1, len(loaded_modules))
|
||||||
|
@ -76,7 +78,8 @@ class TestLocationStrategy(base.IsolatedUnitTest):
|
||||||
modules = ['module_init_exception', 'module_good']
|
modules = ['module_init_exception', 'module_good']
|
||||||
|
|
||||||
def _fake_stevedore_extension_manager(*args, **kwargs):
|
def _fake_stevedore_extension_manager(*args, **kwargs):
|
||||||
ret = lambda: None
|
def ret():
|
||||||
|
return None
|
||||||
ret.names = lambda: modules
|
ret.names = lambda: modules
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
@ -84,17 +87,18 @@ class TestLocationStrategy(base.IsolatedUnitTest):
|
||||||
if kwargs['name'] == 'module_init_exception':
|
if kwargs['name'] == 'module_init_exception':
|
||||||
raise Exception('strategy module failed to initialize.')
|
raise Exception('strategy module failed to initialize.')
|
||||||
else:
|
else:
|
||||||
ret = lambda: None
|
def ret():
|
||||||
|
return None
|
||||||
ret.driver = lambda: None
|
ret.driver = lambda: None
|
||||||
ret.driver.__name__ = kwargs['name']
|
ret.driver.__name__ = kwargs['name']
|
||||||
ret.driver.get_strategy_name = lambda: kwargs['name']
|
ret.driver.get_strategy_name = lambda: kwargs['name']
|
||||||
ret.driver.init = lambda: None
|
ret.driver.init = lambda: None
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
self.stub = self.stubs.Set(stevedore.extension, "ExtensionManager",
|
self.stub = self.mock_object(stevedore.extension, "ExtensionManager",
|
||||||
_fake_stevedore_extension_manager)
|
_fake_stevedore_extension_manager)
|
||||||
self.stub = self.stubs.Set(stevedore.driver, "DriverManager",
|
self.stub = self.mock_object(stevedore.driver, "DriverManager",
|
||||||
_fake_stevedore_driver_manager)
|
_fake_stevedore_driver_manager)
|
||||||
|
|
||||||
loaded_modules = location_strategy._load_strategies()
|
loaded_modules = location_strategy._load_strategies()
|
||||||
self.assertEqual(1, len(loaded_modules))
|
self.assertEqual(1, len(loaded_modules))
|
||||||
|
|
|
@ -49,7 +49,8 @@ class RequestTest(test_utils.BaseTestCase):
|
||||||
def returns_some_locales(*args, **kwargs):
|
def returns_some_locales(*args, **kwargs):
|
||||||
return all_locales
|
return all_locales
|
||||||
|
|
||||||
self.stubs.Set(localedata, 'locale_identifiers', returns_some_locales)
|
self.mock_object(localedata, 'locale_identifiers',
|
||||||
|
returns_some_locales)
|
||||||
|
|
||||||
# Override gettext.find to return other than None for some languages.
|
# Override gettext.find to return other than None for some languages.
|
||||||
def fake_gettext_find(lang_id, *args, **kwargs):
|
def fake_gettext_find(lang_id, *args, **kwargs):
|
||||||
|
@ -62,7 +63,7 @@ class RequestTest(test_utils.BaseTestCase):
|
||||||
return found_ret
|
return found_ret
|
||||||
return None
|
return None
|
||||||
|
|
||||||
self.stubs.Set(gettext, 'find', fake_gettext_find)
|
self.mock_object(gettext, 'find', fake_gettext_find)
|
||||||
|
|
||||||
def test_content_range(self):
|
def test_content_range(self):
|
||||||
request = wsgi.Request.blank('/tests/123')
|
request = wsgi.Request.blank('/tests/123')
|
||||||
|
@ -338,7 +339,7 @@ class ResourceTest(test_utils.BaseTestCase):
|
||||||
if isinstance(obj, wsgi.JSONResponseSerializer):
|
if isinstance(obj, wsgi.JSONResponseSerializer):
|
||||||
raise webob.exc.HTTPForbidden()
|
raise webob.exc.HTTPForbidden()
|
||||||
|
|
||||||
self.stubs.Set(wsgi.Resource, 'dispatch', dispatch)
|
self.mock_object(wsgi.Resource, 'dispatch', dispatch)
|
||||||
|
|
||||||
request = wsgi.Request.blank('/')
|
request = wsgi.Request.blank('/')
|
||||||
|
|
||||||
|
@ -357,7 +358,7 @@ class ResourceTest(test_utils.BaseTestCase):
|
||||||
def dispatch(self, obj, action, *args, **kwargs):
|
def dispatch(self, obj, action, *args, **kwargs):
|
||||||
raise Exception("test exception")
|
raise Exception("test exception")
|
||||||
|
|
||||||
self.stubs.Set(wsgi.Resource, 'dispatch', dispatch)
|
self.mock_object(wsgi.Resource, 'dispatch', dispatch)
|
||||||
|
|
||||||
request = wsgi.Request.blank('/')
|
request = wsgi.Request.blank('/')
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from oslo_serialization import jsonutils
|
from oslo_serialization import jsonutils
|
||||||
from oslotest import moxstubout
|
|
||||||
from six.moves import http_client as http
|
from six.moves import http_client as http
|
||||||
import webob
|
import webob
|
||||||
|
|
||||||
|
@ -123,8 +122,6 @@ class TestKeystoneAuthPlugin(utils.BaseTestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(TestKeystoneAuthPlugin, self).setUp()
|
super(TestKeystoneAuthPlugin, self).setUp()
|
||||||
mox_fixture = self.useFixture(moxstubout.MoxStubout())
|
|
||||||
self.stubs = mox_fixture.stubs
|
|
||||||
|
|
||||||
def test_get_plugin_from_strategy_keystone(self):
|
def test_get_plugin_from_strategy_keystone(self):
|
||||||
strategy = auth.get_plugin_from_strategy('keystone')
|
strategy = auth.get_plugin_from_strategy('keystone')
|
||||||
|
@ -200,7 +197,7 @@ class TestKeystoneAuthPlugin(utils.BaseTestCase):
|
||||||
resp.status = http.BAD_REQUEST
|
resp.status = http.BAD_REQUEST
|
||||||
return FakeResponse(resp), ""
|
return FakeResponse(resp), ""
|
||||||
|
|
||||||
self.stubs.Set(auth.KeystoneStrategy, '_do_request', fake_do_request)
|
self.mock_object(auth.KeystoneStrategy, '_do_request', fake_do_request)
|
||||||
|
|
||||||
bad_creds = {
|
bad_creds = {
|
||||||
'username': 'user1',
|
'username': 'user1',
|
||||||
|
@ -222,7 +219,7 @@ class TestKeystoneAuthPlugin(utils.BaseTestCase):
|
||||||
resp.status = http.BAD_REQUEST
|
resp.status = http.BAD_REQUEST
|
||||||
return FakeResponse(resp), ""
|
return FakeResponse(resp), ""
|
||||||
|
|
||||||
self.stubs.Set(auth.KeystoneStrategy, '_do_request', fake_do_request)
|
self.mock_object(auth.KeystoneStrategy, '_do_request', fake_do_request)
|
||||||
|
|
||||||
bad_creds = {
|
bad_creds = {
|
||||||
'username': 'user1',
|
'username': 'user1',
|
||||||
|
@ -254,7 +251,7 @@ class TestKeystoneAuthPlugin(utils.BaseTestCase):
|
||||||
|
|
||||||
return FakeResponse(resp), ""
|
return FakeResponse(resp), ""
|
||||||
|
|
||||||
self.stubs.Set(auth.KeystoneStrategy, '_do_request', fake_do_request)
|
self.mock_object(auth.KeystoneStrategy, '_do_request', fake_do_request)
|
||||||
|
|
||||||
unauthorized_creds = [
|
unauthorized_creds = [
|
||||||
{
|
{
|
||||||
|
@ -344,7 +341,7 @@ class TestKeystoneAuthPlugin(utils.BaseTestCase):
|
||||||
|
|
||||||
mock_token = V2Token()
|
mock_token = V2Token()
|
||||||
mock_token.add_service('image', ['RegionOne'])
|
mock_token.add_service('image', ['RegionOne'])
|
||||||
self.stubs.Set(auth.KeystoneStrategy, '_do_request', fake_do_request)
|
self.mock_object(auth.KeystoneStrategy, '_do_request', fake_do_request)
|
||||||
|
|
||||||
unauthorized_creds = [
|
unauthorized_creds = [
|
||||||
{
|
{
|
||||||
|
|
|
@ -23,7 +23,6 @@ import time
|
||||||
|
|
||||||
import fixtures
|
import fixtures
|
||||||
from oslo_utils import units
|
from oslo_utils import units
|
||||||
from oslotest import moxstubout
|
|
||||||
import six
|
import six
|
||||||
# NOTE(jokke): simplified transition to py3, behaves like py2 xrange
|
# NOTE(jokke): simplified transition to py3, behaves like py2 xrange
|
||||||
from six.moves import range
|
from six.moves import range
|
||||||
|
@ -518,9 +517,7 @@ class TestImageCacheNoDep(test_utils.BaseTestCase):
|
||||||
def init_driver(self2):
|
def init_driver(self2):
|
||||||
self2.driver = self.driver
|
self2.driver = self.driver
|
||||||
|
|
||||||
mox_fixture = self.useFixture(moxstubout.MoxStubout())
|
self.mock_object(image_cache.ImageCache, 'init_driver', init_driver)
|
||||||
self.stubs = mox_fixture.stubs
|
|
||||||
self.stubs.Set(image_cache.ImageCache, 'init_driver', init_driver)
|
|
||||||
|
|
||||||
def test_get_caching_iter_when_write_fails(self):
|
def test_get_caching_iter_when_write_fails(self):
|
||||||
|
|
||||||
|
|
|
@ -32,12 +32,14 @@ UUID1 = 'c80a1a6c-bd1f-41c5-90ee-81afedb1d58d'
|
||||||
|
|
||||||
|
|
||||||
class IterableMock(mock.Mock, collections.Iterable):
|
class IterableMock(mock.Mock, collections.Iterable):
|
||||||
|
|
||||||
def __iter__(self):
|
def __iter__(self):
|
||||||
while False:
|
while False:
|
||||||
yield None
|
yield None
|
||||||
|
|
||||||
|
|
||||||
class ImageRepoStub(object):
|
class ImageRepoStub(object):
|
||||||
|
|
||||||
def get(self, *args, **kwargs):
|
def get(self, *args, **kwargs):
|
||||||
return 'image_from_get'
|
return 'image_from_get'
|
||||||
|
|
||||||
|
@ -52,6 +54,7 @@ class ImageRepoStub(object):
|
||||||
|
|
||||||
|
|
||||||
class ImageStub(object):
|
class ImageStub(object):
|
||||||
|
|
||||||
def __init__(self, image_id=None, visibility='private',
|
def __init__(self, image_id=None, visibility='private',
|
||||||
container_format='bear', disk_format='raw',
|
container_format='bear', disk_format='raw',
|
||||||
status='active', extra_properties=None,
|
status='active', extra_properties=None,
|
||||||
|
@ -87,6 +90,7 @@ class ImageStub(object):
|
||||||
|
|
||||||
|
|
||||||
class ImageFactoryStub(object):
|
class ImageFactoryStub(object):
|
||||||
|
|
||||||
def new_image(self, image_id=None, name=None, visibility='private',
|
def new_image(self, image_id=None, name=None, visibility='private',
|
||||||
min_disk=0, min_ram=0, protected=False, owner=None,
|
min_disk=0, min_ram=0, protected=False, owner=None,
|
||||||
disk_format=None, container_format=None,
|
disk_format=None, container_format=None,
|
||||||
|
@ -117,11 +121,13 @@ class MemberRepoStub(object):
|
||||||
|
|
||||||
|
|
||||||
class ImageMembershipStub(object):
|
class ImageMembershipStub(object):
|
||||||
|
|
||||||
def __init__(self, output=None):
|
def __init__(self, output=None):
|
||||||
self.output = output
|
self.output = output
|
||||||
|
|
||||||
|
|
||||||
class TaskRepoStub(object):
|
class TaskRepoStub(object):
|
||||||
|
|
||||||
def get(self, *args, **kwargs):
|
def get(self, *args, **kwargs):
|
||||||
return 'task_from_get'
|
return 'task_from_get'
|
||||||
|
|
||||||
|
@ -133,6 +139,7 @@ class TaskRepoStub(object):
|
||||||
|
|
||||||
|
|
||||||
class TaskStub(object):
|
class TaskStub(object):
|
||||||
|
|
||||||
def __init__(self, task_id):
|
def __init__(self, task_id):
|
||||||
self.task_id = task_id
|
self.task_id = task_id
|
||||||
self.status = 'pending'
|
self.status = 'pending'
|
||||||
|
@ -142,11 +149,13 @@ class TaskStub(object):
|
||||||
|
|
||||||
|
|
||||||
class TaskFactoryStub(object):
|
class TaskFactoryStub(object):
|
||||||
|
|
||||||
def new_task(self, *args):
|
def new_task(self, *args):
|
||||||
return 'new_task'
|
return 'new_task'
|
||||||
|
|
||||||
|
|
||||||
class TestPolicyEnforcer(base.IsolatedUnitTest):
|
class TestPolicyEnforcer(base.IsolatedUnitTest):
|
||||||
|
|
||||||
def test_policy_file_default_rules_default_location(self):
|
def test_policy_file_default_rules_default_location(self):
|
||||||
enforcer = glance.api.policy.Enforcer()
|
enforcer = glance.api.policy.Enforcer()
|
||||||
|
|
||||||
|
@ -209,6 +218,7 @@ class TestPolicyEnforcer(base.IsolatedUnitTest):
|
||||||
|
|
||||||
|
|
||||||
class TestPolicyEnforcerNoFile(base.IsolatedUnitTest):
|
class TestPolicyEnforcerNoFile(base.IsolatedUnitTest):
|
||||||
|
|
||||||
def test_policy_file_specified_but_not_found(self):
|
def test_policy_file_specified_but_not_found(self):
|
||||||
"""Missing defined policy file should result in a default ruleset"""
|
"""Missing defined policy file should result in a default ruleset"""
|
||||||
self.config(policy_file='gobble.gobble', group='oslo_policy')
|
self.config(policy_file='gobble.gobble', group='oslo_policy')
|
||||||
|
@ -223,11 +233,12 @@ class TestPolicyEnforcerNoFile(base.IsolatedUnitTest):
|
||||||
|
|
||||||
def test_policy_file_default_not_found(self):
|
def test_policy_file_default_not_found(self):
|
||||||
"""Missing default policy file should result in a default ruleset"""
|
"""Missing default policy file should result in a default ruleset"""
|
||||||
|
|
||||||
def fake_find_file(self, name):
|
def fake_find_file(self, name):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
self.stubs.Set(oslo_config.cfg.ConfigOpts, 'find_file',
|
self.mock_object(oslo_config.cfg.ConfigOpts, 'find_file',
|
||||||
fake_find_file)
|
fake_find_file)
|
||||||
|
|
||||||
enforcer = glance.api.policy.Enforcer()
|
enforcer = glance.api.policy.Enforcer()
|
||||||
|
|
||||||
|
@ -240,6 +251,7 @@ class TestPolicyEnforcerNoFile(base.IsolatedUnitTest):
|
||||||
|
|
||||||
|
|
||||||
class TestImagePolicy(test_utils.BaseTestCase):
|
class TestImagePolicy(test_utils.BaseTestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.image_stub = ImageStub(UUID1)
|
self.image_stub = ImageStub(UUID1)
|
||||||
self.image_repo_stub = ImageRepoStub()
|
self.image_repo_stub = ImageRepoStub()
|
||||||
|
@ -416,6 +428,7 @@ class TestImagePolicy(test_utils.BaseTestCase):
|
||||||
|
|
||||||
|
|
||||||
class TestMemberPolicy(test_utils.BaseTestCase):
|
class TestMemberPolicy(test_utils.BaseTestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.policy = mock.Mock()
|
self.policy = mock.Mock()
|
||||||
self.policy.enforce = mock.Mock()
|
self.policy.enforce = mock.Mock()
|
||||||
|
@ -491,6 +504,7 @@ class TestMemberPolicy(test_utils.BaseTestCase):
|
||||||
|
|
||||||
|
|
||||||
class TestTaskPolicy(test_utils.BaseTestCase):
|
class TestTaskPolicy(test_utils.BaseTestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.task_stub = TaskStub(UUID1)
|
self.task_stub = TaskStub(UUID1)
|
||||||
self.task_repo_stub = TaskRepoStub()
|
self.task_repo_stub = TaskRepoStub()
|
||||||
|
@ -569,6 +583,7 @@ class TestTaskPolicy(test_utils.BaseTestCase):
|
||||||
|
|
||||||
|
|
||||||
class TestContextPolicyEnforcer(base.IsolatedUnitTest):
|
class TestContextPolicyEnforcer(base.IsolatedUnitTest):
|
||||||
|
|
||||||
def _do_test_policy_influence_context_admin(self,
|
def _do_test_policy_influence_context_admin(self,
|
||||||
policy_admin_role,
|
policy_admin_role,
|
||||||
context_role,
|
context_role,
|
||||||
|
|
|
@ -52,6 +52,7 @@ class FakeImage(object):
|
||||||
|
|
||||||
|
|
||||||
class TestImageQuota(test_utils.BaseTestCase):
|
class TestImageQuota(test_utils.BaseTestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(TestImageQuota, self).setUp()
|
super(TestImageQuota, self).setUp()
|
||||||
|
|
||||||
|
@ -283,8 +284,8 @@ class TestImageQuota(test_utils.BaseTestCase):
|
||||||
image = glance.quota.ImageProxy(base_image, context, db_api, store)
|
image = glance.quota.ImageProxy(base_image, context, db_api, store)
|
||||||
self.assertIsNone(image.size)
|
self.assertIsNone(image.size)
|
||||||
|
|
||||||
self.stubs.Set(store_api, 'get_size_from_backend',
|
self.mock_object(store_api, 'get_size_from_backend',
|
||||||
unit_test_utils.fake_get_size_from_backend)
|
unit_test_utils.fake_get_size_from_backend)
|
||||||
image.locations.append({'url': 'file:///fake.img.tar.gz',
|
image.locations.append({'url': 'file:///fake.img.tar.gz',
|
||||||
'metadata': {}})
|
'metadata': {}})
|
||||||
self.assertIn({'url': 'file:///fake.img.tar.gz', 'metadata': {}},
|
self.assertIn({'url': 'file:///fake.img.tar.gz', 'metadata': {}},
|
||||||
|
@ -300,8 +301,8 @@ class TestImageQuota(test_utils.BaseTestCase):
|
||||||
image = glance.quota.ImageProxy(base_image, context, db_api, store)
|
image = glance.quota.ImageProxy(base_image, context, db_api, store)
|
||||||
self.assertIsNone(image.size)
|
self.assertIsNone(image.size)
|
||||||
|
|
||||||
self.stubs.Set(store_api, 'get_size_from_backend',
|
self.mock_object(store_api, 'get_size_from_backend',
|
||||||
unit_test_utils.fake_get_size_from_backend)
|
unit_test_utils.fake_get_size_from_backend)
|
||||||
image.locations.insert(0,
|
image.locations.insert(0,
|
||||||
{'url': 'file:///fake.img.tar.gz',
|
{'url': 'file:///fake.img.tar.gz',
|
||||||
'metadata': {}})
|
'metadata': {}})
|
||||||
|
@ -318,8 +319,8 @@ class TestImageQuota(test_utils.BaseTestCase):
|
||||||
image = glance.quota.ImageProxy(base_image, context, db_api, store)
|
image = glance.quota.ImageProxy(base_image, context, db_api, store)
|
||||||
self.assertIsNone(image.size)
|
self.assertIsNone(image.size)
|
||||||
|
|
||||||
self.stubs.Set(store_api, 'get_size_from_backend',
|
self.mock_object(store_api, 'get_size_from_backend',
|
||||||
unit_test_utils.fake_get_size_from_backend)
|
unit_test_utils.fake_get_size_from_backend)
|
||||||
image.locations = [{'url': 'file:///fake.img.tar.gz', 'metadata': {}}]
|
image.locations = [{'url': 'file:///fake.img.tar.gz', 'metadata': {}}]
|
||||||
self.assertEqual([{'url': 'file:///fake.img.tar.gz', 'metadata': {}}],
|
self.assertEqual([{'url': 'file:///fake.img.tar.gz', 'metadata': {}}],
|
||||||
image.locations)
|
image.locations)
|
||||||
|
@ -334,14 +335,15 @@ class TestImageQuota(test_utils.BaseTestCase):
|
||||||
image = glance.quota.ImageProxy(base_image, context, db_api, store)
|
image = glance.quota.ImageProxy(base_image, context, db_api, store)
|
||||||
self.assertIsNone(image.size)
|
self.assertIsNone(image.size)
|
||||||
|
|
||||||
self.stubs.Set(store_api, 'get_size_from_backend',
|
self.mock_object(store_api, 'get_size_from_backend',
|
||||||
unit_test_utils.fake_get_size_from_backend)
|
unit_test_utils.fake_get_size_from_backend)
|
||||||
image.locations += [{'url': 'file:///fake.img.tar.gz', 'metadata': {}}]
|
image.locations += [{'url': 'file:///fake.img.tar.gz', 'metadata': {}}]
|
||||||
self.assertIn({'url': 'file:///fake.img.tar.gz', 'metadata': {}},
|
self.assertIn({'url': 'file:///fake.img.tar.gz', 'metadata': {}},
|
||||||
image.locations)
|
image.locations)
|
||||||
|
|
||||||
|
|
||||||
class TestImagePropertyQuotas(test_utils.BaseTestCase):
|
class TestImagePropertyQuotas(test_utils.BaseTestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(TestImagePropertyQuotas, self).setUp()
|
super(TestImagePropertyQuotas, self).setUp()
|
||||||
self.base_image = FakeImage()
|
self.base_image = FakeImage()
|
||||||
|
@ -485,6 +487,7 @@ class TestImagePropertyQuotas(test_utils.BaseTestCase):
|
||||||
|
|
||||||
|
|
||||||
class TestImageTagQuotas(test_utils.BaseTestCase):
|
class TestImageTagQuotas(test_utils.BaseTestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(TestImageTagQuotas, self).setUp()
|
super(TestImageTagQuotas, self).setUp()
|
||||||
self.base_image = mock.Mock()
|
self.base_image = mock.Mock()
|
||||||
|
@ -549,6 +552,7 @@ class TestImageTagQuotas(test_utils.BaseTestCase):
|
||||||
|
|
||||||
|
|
||||||
class TestQuotaImageTagsProxy(test_utils.BaseTestCase):
|
class TestQuotaImageTagsProxy(test_utils.BaseTestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(TestQuotaImageTagsProxy, self).setUp()
|
super(TestQuotaImageTagsProxy, self).setUp()
|
||||||
|
|
||||||
|
@ -594,6 +598,7 @@ class TestQuotaImageTagsProxy(test_utils.BaseTestCase):
|
||||||
|
|
||||||
|
|
||||||
class TestImageMemberQuotas(test_utils.BaseTestCase):
|
class TestImageMemberQuotas(test_utils.BaseTestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(TestImageMemberQuotas, self).setUp()
|
super(TestImageMemberQuotas, self).setUp()
|
||||||
db_api = unit_test_utils.FakeDB()
|
db_api = unit_test_utils.FakeDB()
|
||||||
|
@ -631,6 +636,7 @@ class TestImageMemberQuotas(test_utils.BaseTestCase):
|
||||||
|
|
||||||
|
|
||||||
class TestImageLocationQuotas(test_utils.BaseTestCase):
|
class TestImageLocationQuotas(test_utils.BaseTestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(TestImageLocationQuotas, self).setUp()
|
super(TestImageLocationQuotas, self).setUp()
|
||||||
self.base_image = mock.Mock()
|
self.base_image = mock.Mock()
|
||||||
|
|
|
@ -128,8 +128,8 @@ class TestStoreImage(utils.BaseTestCase):
|
||||||
self.assertEqual(2, len(image1.locations))
|
self.assertEqual(2, len(image1.locations))
|
||||||
self.assertEqual(UUID2, location_data['url'])
|
self.assertEqual(UUID2, location_data['url'])
|
||||||
|
|
||||||
self.stubs.Set(unit_test_utils.FakeStoreAPI, 'get_from_backend',
|
self.mock_object(unit_test_utils.FakeStoreAPI, 'get_from_backend',
|
||||||
fake_get_from_backend)
|
fake_get_from_backend)
|
||||||
# This time, image1.get_data() returns the data wrapped in a
|
# This time, image1.get_data() returns the data wrapped in a
|
||||||
# LimitingReader|CooperativeReader pipeline, so peeking under
|
# LimitingReader|CooperativeReader pipeline, so peeking under
|
||||||
# the hood of those objects to get at the underlying string.
|
# the hood of those objects to get at the underlying string.
|
||||||
|
@ -200,8 +200,8 @@ class TestStoreImage(utils.BaseTestCase):
|
||||||
}
|
}
|
||||||
image_stub = ImageStub(UUID2, status='queued',
|
image_stub = ImageStub(UUID2, status='queued',
|
||||||
extra_properties=extra_properties)
|
extra_properties=extra_properties)
|
||||||
self.stubs.Set(signature_utils, 'get_verifier',
|
self.mock_object(signature_utils, 'get_verifier',
|
||||||
unit_test_utils.fake_get_verifier)
|
unit_test_utils.fake_get_verifier)
|
||||||
image = glance.location.ImageProxy(image_stub, context,
|
image = glance.location.ImageProxy(image_stub, context,
|
||||||
self.store_api, self.store_utils)
|
self.store_api, self.store_utils)
|
||||||
image.set_data('YYYY', 4)
|
image.set_data('YYYY', 4)
|
||||||
|
@ -220,8 +220,8 @@ class TestStoreImage(utils.BaseTestCase):
|
||||||
}
|
}
|
||||||
image_stub = ImageStub(UUID2, status='queued',
|
image_stub = ImageStub(UUID2, status='queued',
|
||||||
extra_properties=extra_properties)
|
extra_properties=extra_properties)
|
||||||
self.stubs.Set(signature_utils, 'get_verifier',
|
self.mock_object(signature_utils, 'get_verifier',
|
||||||
unit_test_utils.fake_get_verifier)
|
unit_test_utils.fake_get_verifier)
|
||||||
image = glance.location.ImageProxy(image_stub, context,
|
image = glance.location.ImageProxy(image_stub, context,
|
||||||
self.store_api, self.store_utils)
|
self.store_api, self.store_utils)
|
||||||
with mock.patch.object(self.store_api,
|
with mock.patch.object(self.store_api,
|
||||||
|
@ -240,8 +240,8 @@ class TestStoreImage(utils.BaseTestCase):
|
||||||
}
|
}
|
||||||
image_stub = ImageStub(UUID2, status='queued',
|
image_stub = ImageStub(UUID2, status='queued',
|
||||||
extra_properties=extra_properties)
|
extra_properties=extra_properties)
|
||||||
self.stubs.Set(signature_utils, 'get_verifier',
|
self.mock_object(signature_utils, 'get_verifier',
|
||||||
unit_test_utils.fake_get_verifier)
|
unit_test_utils.fake_get_verifier)
|
||||||
image = glance.location.ImageProxy(image_stub, context,
|
image = glance.location.ImageProxy(image_stub, context,
|
||||||
self.store_api, self.store_utils)
|
self.store_api, self.store_utils)
|
||||||
image.set_data('YYYY', 4)
|
image.set_data('YYYY', 4)
|
||||||
|
|
|
@ -43,8 +43,8 @@ class TestStoreLocation(base.StoreClearingUnitTest):
|
||||||
def fake_get_size_from_backend(uri, context=None):
|
def fake_get_size_from_backend(uri, context=None):
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
self.stubs.Set(glance_store, 'get_size_from_backend',
|
self.mock_object(glance_store, 'get_size_from_backend',
|
||||||
fake_get_size_from_backend)
|
fake_get_size_from_backend)
|
||||||
|
|
||||||
with mock.patch('glance.location._check_image_location'):
|
with mock.patch('glance.location._check_image_location'):
|
||||||
loc1 = {'url': 'file:///fake1.img.tar.gz', 'metadata': {}}
|
loc1 = {'url': 'file:///fake1.img.tar.gz', 'metadata': {}}
|
||||||
|
|
|
@ -32,6 +32,7 @@ import glance.tests.utils as test_utils
|
||||||
|
|
||||||
|
|
||||||
class Raise(object):
|
class Raise(object):
|
||||||
|
|
||||||
def __init__(self, exc):
|
def __init__(self, exc):
|
||||||
self.exc = exc
|
self.exc = exc
|
||||||
|
|
||||||
|
@ -40,6 +41,7 @@ class Raise(object):
|
||||||
|
|
||||||
|
|
||||||
class FakeImage(object):
|
class FakeImage(object):
|
||||||
|
|
||||||
def __init__(self, image_id=None, data=None, checksum=None, size=0,
|
def __init__(self, image_id=None, data=None, checksum=None, size=0,
|
||||||
virtual_size=0, locations=None, container_format='bear',
|
virtual_size=0, locations=None, container_format='bear',
|
||||||
disk_format='rawr', status=None):
|
disk_format='rawr', status=None):
|
||||||
|
@ -76,6 +78,7 @@ class FakeImage(object):
|
||||||
|
|
||||||
|
|
||||||
class FakeImageRepo(object):
|
class FakeImageRepo(object):
|
||||||
|
|
||||||
def __init__(self, result=None):
|
def __init__(self, result=None):
|
||||||
self.result = result
|
self.result = result
|
||||||
|
|
||||||
|
@ -90,6 +93,7 @@ class FakeImageRepo(object):
|
||||||
|
|
||||||
|
|
||||||
class FakeGateway(object):
|
class FakeGateway(object):
|
||||||
|
|
||||||
def __init__(self, db=None, store=None, notifier=None,
|
def __init__(self, db=None, store=None, notifier=None,
|
||||||
policy=None, repo=None):
|
policy=None, repo=None):
|
||||||
self.db = db
|
self.db = db
|
||||||
|
@ -103,6 +107,7 @@ class FakeGateway(object):
|
||||||
|
|
||||||
|
|
||||||
class TestImagesController(base.StoreClearingUnitTest):
|
class TestImagesController(base.StoreClearingUnitTest):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(TestImagesController, self).setUp()
|
super(TestImagesController, self).setUp()
|
||||||
|
|
||||||
|
@ -157,6 +162,7 @@ class TestImagesController(base.StoreClearingUnitTest):
|
||||||
|
|
||||||
def test_download_ok_when_get_image_location_forbidden(self):
|
def test_download_ok_when_get_image_location_forbidden(self):
|
||||||
class ImageLocations(object):
|
class ImageLocations(object):
|
||||||
|
|
||||||
def __len__(self):
|
def __len__(self):
|
||||||
raise exception.Forbidden()
|
raise exception.Forbidden()
|
||||||
|
|
||||||
|
@ -888,9 +894,9 @@ class TestImageDataSerializer(test_utils.BaseTestCase):
|
||||||
def get_data(*args, **kwargs):
|
def get_data(*args, **kwargs):
|
||||||
raise exception.Forbidden()
|
raise exception.Forbidden()
|
||||||
|
|
||||||
self.stubs.Set(glance.api.policy.ImageProxy,
|
self.mock_object(glance.api.policy.ImageProxy,
|
||||||
'get_data',
|
'get_data',
|
||||||
get_data)
|
get_data)
|
||||||
request = wsgi.Request.blank('/')
|
request = wsgi.Request.blank('/')
|
||||||
request.environ = {}
|
request.environ = {}
|
||||||
response = webob.Response()
|
response = webob.Response()
|
||||||
|
|
|
@ -1973,8 +1973,8 @@ class TestImagesController(base.IsolatedUnitTest):
|
||||||
as long as the image has fewer than the limited number of image
|
as long as the image has fewer than the limited number of image
|
||||||
locations after the transaction.
|
locations after the transaction.
|
||||||
"""
|
"""
|
||||||
self.stubs.Set(store, 'get_size_from_backend',
|
self.mock_object(store, 'get_size_from_backend',
|
||||||
unit_test_utils.fake_get_size_from_backend)
|
unit_test_utils.fake_get_size_from_backend)
|
||||||
self.config(show_multiple_locations=True)
|
self.config(show_multiple_locations=True)
|
||||||
request = unit_test_utils.get_fake_request()
|
request = unit_test_utils.get_fake_request()
|
||||||
|
|
||||||
|
@ -2039,8 +2039,8 @@ class TestImagesController(base.IsolatedUnitTest):
|
||||||
|
|
||||||
def test_update_remove_location(self):
|
def test_update_remove_location(self):
|
||||||
self.config(show_multiple_locations=True)
|
self.config(show_multiple_locations=True)
|
||||||
self.stubs.Set(store, 'get_size_from_backend',
|
self.mock_object(store, 'get_size_from_backend',
|
||||||
unit_test_utils.fake_get_size_from_backend)
|
unit_test_utils.fake_get_size_from_backend)
|
||||||
|
|
||||||
request = unit_test_utils.get_fake_request()
|
request = unit_test_utils.get_fake_request()
|
||||||
new_location = {'url': '%s/fake_location' % BASE_URI, 'metadata': {}}
|
new_location = {'url': '%s/fake_location' % BASE_URI, 'metadata': {}}
|
||||||
|
@ -2080,8 +2080,9 @@ class TestImagesController(base.IsolatedUnitTest):
|
||||||
def fake_delete_image_location_from_backend(self, *args, **kwargs):
|
def fake_delete_image_location_from_backend(self, *args, **kwargs):
|
||||||
raise Exception('fake_backend_exception')
|
raise Exception('fake_backend_exception')
|
||||||
|
|
||||||
self.stubs.Set(self.store_utils, 'delete_image_location_from_backend',
|
self.mock_object(self.store_utils,
|
||||||
fake_delete_image_location_from_backend)
|
'delete_image_location_from_backend',
|
||||||
|
fake_delete_image_location_from_backend)
|
||||||
|
|
||||||
request = unit_test_utils.get_fake_request()
|
request = unit_test_utils.get_fake_request()
|
||||||
changes = [
|
changes = [
|
||||||
|
@ -2288,8 +2289,8 @@ class TestImagesController(base.IsolatedUnitTest):
|
||||||
def test_delete_in_use(self):
|
def test_delete_in_use(self):
|
||||||
def fake_safe_delete_from_backend(self, *args, **kwargs):
|
def fake_safe_delete_from_backend(self, *args, **kwargs):
|
||||||
raise store.exceptions.InUseByStore()
|
raise store.exceptions.InUseByStore()
|
||||||
self.stubs.Set(self.store_utils, 'safe_delete_from_backend',
|
self.mock_object(self.store_utils, 'safe_delete_from_backend',
|
||||||
fake_safe_delete_from_backend)
|
fake_safe_delete_from_backend)
|
||||||
request = unit_test_utils.get_fake_request()
|
request = unit_test_utils.get_fake_request()
|
||||||
self.assertRaises(webob.exc.HTTPConflict, self.controller.delete,
|
self.assertRaises(webob.exc.HTTPConflict, self.controller.delete,
|
||||||
request, UUID1)
|
request, UUID1)
|
||||||
|
@ -2297,8 +2298,8 @@ class TestImagesController(base.IsolatedUnitTest):
|
||||||
def test_delete_has_snapshot(self):
|
def test_delete_has_snapshot(self):
|
||||||
def fake_safe_delete_from_backend(self, *args, **kwargs):
|
def fake_safe_delete_from_backend(self, *args, **kwargs):
|
||||||
raise store.exceptions.HasSnapshot()
|
raise store.exceptions.HasSnapshot()
|
||||||
self.stubs.Set(self.store_utils, 'safe_delete_from_backend',
|
self.mock_object(self.store_utils, 'safe_delete_from_backend',
|
||||||
fake_safe_delete_from_backend)
|
fake_safe_delete_from_backend)
|
||||||
request = unit_test_utils.get_fake_request()
|
request = unit_test_utils.get_fake_request()
|
||||||
self.assertRaises(webob.exc.HTTPConflict, self.controller.delete,
|
self.assertRaises(webob.exc.HTTPConflict, self.controller.delete,
|
||||||
request, UUID1)
|
request, UUID1)
|
||||||
|
@ -3584,6 +3585,7 @@ class TestImagesSerializer(test_utils.BaseTestCase):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
class ImageLocations(object):
|
class ImageLocations(object):
|
||||||
|
|
||||||
def __len__(self):
|
def __len__(self):
|
||||||
raise exception.Forbidden()
|
raise exception.Forbidden()
|
||||||
|
|
||||||
|
@ -4140,6 +4142,7 @@ class TestImagesSerializerWithAdditionalProperties(test_utils.BaseTestCase):
|
||||||
|
|
||||||
|
|
||||||
class TestImagesSerializerDirectUrl(test_utils.BaseTestCase):
|
class TestImagesSerializerDirectUrl(test_utils.BaseTestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(TestImagesSerializerDirectUrl, self).setUp()
|
super(TestImagesSerializerDirectUrl, self).setUp()
|
||||||
self.serializer = glance.api.v2.images.ResponseSerializer()
|
self.serializer = glance.api.v2.images.ResponseSerializer()
|
||||||
|
@ -4225,6 +4228,7 @@ class TestImagesSerializerDirectUrl(test_utils.BaseTestCase):
|
||||||
|
|
||||||
|
|
||||||
class TestImageSchemaFormatConfiguration(test_utils.BaseTestCase):
|
class TestImageSchemaFormatConfiguration(test_utils.BaseTestCase):
|
||||||
|
|
||||||
def test_default_disk_formats(self):
|
def test_default_disk_formats(self):
|
||||||
schema = glance.api.v2.images.get_schema()
|
schema = glance.api.v2.images.get_schema()
|
||||||
expected = [None, 'ami', 'ari', 'aki', 'vhd', 'vhdx', 'vmdk',
|
expected = [None, 'ami', 'ari', 'aki', 'vhd', 'vhdx', 'vmdk',
|
||||||
|
@ -4254,6 +4258,7 @@ class TestImageSchemaFormatConfiguration(test_utils.BaseTestCase):
|
||||||
|
|
||||||
|
|
||||||
class TestImageSchemaDeterminePropertyBasis(test_utils.BaseTestCase):
|
class TestImageSchemaDeterminePropertyBasis(test_utils.BaseTestCase):
|
||||||
|
|
||||||
def test_custom_property_marked_as_non_base(self):
|
def test_custom_property_marked_as_non_base(self):
|
||||||
self.config(allow_additional_image_properties=False)
|
self.config(allow_additional_image_properties=False)
|
||||||
custom_image_properties = {
|
custom_image_properties = {
|
||||||
|
|
|
@ -759,7 +759,7 @@ class TestRegistryV2ClientApi(base.IsolatedUnitTest):
|
||||||
self.config(admin_tenant_name=expected['tenant'])
|
self.config(admin_tenant_name=expected['tenant'])
|
||||||
self.config(auth_strategy=expected['strategy'])
|
self.config(auth_strategy=expected['strategy'])
|
||||||
self.config(auth_region=expected['region'])
|
self.config(auth_region=expected['region'])
|
||||||
self.stubs.Set(os, 'getenv', lambda x: None)
|
self.mock_object(os, 'getenv', lambda x: None)
|
||||||
|
|
||||||
self.assertIsNone(rapi._CLIENT_CREDS)
|
self.assertIsNone(rapi._CLIENT_CREDS)
|
||||||
rapi.configure_registry_admin_creds()
|
rapi.configure_registry_admin_creds()
|
||||||
|
|
|
@ -25,6 +25,7 @@ import subprocess
|
||||||
|
|
||||||
from alembic import command as alembic_command
|
from alembic import command as alembic_command
|
||||||
import fixtures
|
import fixtures
|
||||||
|
import mock
|
||||||
from oslo_config import cfg
|
from oslo_config import cfg
|
||||||
from oslo_config import fixture as cfg_fixture
|
from oslo_config import fixture as cfg_fixture
|
||||||
from oslo_log.fixture import logging_error as log_fixture
|
from oslo_log.fixture import logging_error as log_fixture
|
||||||
|
@ -79,7 +80,7 @@ class BaseTestCase(testtools.TestCase):
|
||||||
self.addCleanup(CONF.reset)
|
self.addCleanup(CONF.reset)
|
||||||
mox_fixture = self.useFixture(moxstubout.MoxStubout())
|
mox_fixture = self.useFixture(moxstubout.MoxStubout())
|
||||||
self.stubs = mox_fixture.stubs
|
self.stubs = mox_fixture.stubs
|
||||||
self.stubs.Set(exception, '_FATAL_EXCEPTION_FORMAT_ERRORS', True)
|
self.mock_object(exception, '_FATAL_EXCEPTION_FORMAT_ERRORS', True)
|
||||||
self.test_dir = self.useFixture(fixtures.TempDir()).path
|
self.test_dir = self.useFixture(fixtures.TempDir()).path
|
||||||
self.conf_dir = os.path.join(self.test_dir, 'etc')
|
self.conf_dir = os.path.join(self.test_dir, 'etc')
|
||||||
utils.safe_mkdirs(self.conf_dir)
|
utils.safe_mkdirs(self.conf_dir)
|
||||||
|
@ -139,9 +140,21 @@ class BaseTestCase(testtools.TestCase):
|
||||||
"""
|
"""
|
||||||
self._config_fixture.config(**kw)
|
self._config_fixture.config(**kw)
|
||||||
|
|
||||||
|
def mock_object(self, obj, attr_name, *args, **kwargs):
|
||||||
|
""""Use python mock to mock an object attirbute
|
||||||
|
|
||||||
|
Mocks the specified objects attribute with the given value.
|
||||||
|
Automatically performs 'addCleanup' for the mock.
|
||||||
|
"""
|
||||||
|
patcher = mock.patch.object(obj, attr_name, *args, **kwargs)
|
||||||
|
result = patcher.start()
|
||||||
|
self.addCleanup(patcher.stop)
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
class requires(object):
|
class requires(object):
|
||||||
"""Decorator that initiates additional test setup/teardown."""
|
"""Decorator that initiates additional test setup/teardown."""
|
||||||
|
|
||||||
def __init__(self, setup=None, teardown=None):
|
def __init__(self, setup=None, teardown=None):
|
||||||
self.setup = setup
|
self.setup = setup
|
||||||
self.teardown = teardown
|
self.teardown = teardown
|
||||||
|
@ -160,6 +173,7 @@ class requires(object):
|
||||||
|
|
||||||
class depends_on_exe(object):
|
class depends_on_exe(object):
|
||||||
"""Decorator to skip test if an executable is unavailable"""
|
"""Decorator to skip test if an executable is unavailable"""
|
||||||
|
|
||||||
def __init__(self, exe):
|
def __init__(self, exe):
|
||||||
self.exe = exe
|
self.exe = exe
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue