Merge "Introduce ''mock_object'' method to base test class"
This commit is contained in:
commit
0988d93857
|
@ -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