diff --git a/glance/common/wsgi.py b/glance/common/wsgi.py index 32dbe9faf4..4b364b77e8 100644 --- a/glance/common/wsgi.py +++ b/glance/common/wsgi.py @@ -39,6 +39,7 @@ import routes import routes.middleware import webob.dec import webob.exc +from webob import multidict from glance.common import exception from glance.common import utils @@ -566,6 +567,8 @@ class JSONResponseSerializer(object): return obj.isoformat() if hasattr(obj, "to_dict"): return obj.to_dict() + if isinstance(obj, multidict.MultiDict): + return obj.mixed() return obj def to_json(self, data): diff --git a/glance/tests/functional/__init__.py b/glance/tests/functional/__init__.py index 51351471b8..537a42f429 100644 --- a/glance/tests/functional/__init__.py +++ b/glance/tests/functional/__init__.py @@ -75,6 +75,8 @@ class Server(object): self.property_protection_file = '' self.enable_v1_api = True self.enable_v2_api = True + self.enable_v1_registry = True + self.enable_v2_registry = True self.needs_database = False self.log_file = None self.sock = sock @@ -485,6 +487,7 @@ sql_idle_timeout = 3600 api_limit_max = 1000 limit_param_default = 25 owner_is_tenant = %(owner_is_tenant)s +enable_v2_registry = %(enable_v2_registry)s workers = %(workers)s user_storage_quota = %(user_storage_quota)s [paste_deploy] @@ -497,7 +500,7 @@ pipeline = unauthenticated-context registryapp pipeline = fakeauth context registryapp [app:registryapp] -paste.app_factory = glance.registry.api.v%(api_version)s:API.factory +paste.app_factory = glance.registry.api:API.factory [filter:context] paste.filter_factory = glance.api.middleware.context:ContextMiddleware.factory diff --git a/glance/tests/functional/db/test_rpc_endpoint.py b/glance/tests/functional/db/test_rpc_endpoint.py new file mode 100644 index 0000000000..f7641293bb --- /dev/null +++ b/glance/tests/functional/db/test_rpc_endpoint.py @@ -0,0 +1,55 @@ +# Copyright 2014 Hewlett-Packard Development Company, L.P. +# All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import requests + +from glance.openstack.common import jsonutils +from glance.tests import functional + + +class TestRegistryURLVisibility(functional.FunctionalTest): + + def setUp(self): + super(TestRegistryURLVisibility, self).setUp() + self.cleanup() + self.registry_server.deployment_flavor = '' + self.req_body = jsonutils.dumps([{"command": "image_get_all"}]) + + def _url(self, path): + return 'http://127.0.0.1:%d%s' % (self.registry_port, path) + + def _headers(self, custom_headers=None): + base_headers = { + } + base_headers.update(custom_headers or {}) + return base_headers + + def test_v2_not_enabled(self): + self.registry_server.enable_v2_registry = False + self.start_servers(**self.__dict__.copy()) + path = self._url('/rpc') + response = requests.post(path, headers=self._headers(), + data=self.req_body) + self.assertEqual(404, response.status_code) + self.stop_servers() + + def test_v2_enabled(self): + self.registry_server.enable_v2_registry = True + self.start_servers(**self.__dict__.copy()) + path = self._url('/rpc') + response = requests.post(path, headers=self._headers(), + data=self.req_body) + self.assertEqual(200, response.status_code) + self.stop_servers()