summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Simpson <tim.simpson@rackspace.com>2011-08-22 15:22:21 -0500
committerTim Simpson <tim.simpson@rackspace.com>2011-08-22 15:22:21 -0500
commit5c4d35f94f5bb85b2140b0d68e545b5c23725f56 (patch)
tree42948bf2fd34b17018a6b463761604d5e27ec149
parent51344d7be195f9342d24d461f4c07fa1c9141da4 (diff)
parentdd9d9195b0d77e2801e001be45aafe9bc14b4b2c (diff)
downloadnova-5c4d35f94f5bb85b2140b0d68e545b5c23725f56.tar.gz
nova-5c4d35f94f5bb85b2140b0d68e545b5c23725f56.tar.xz
nova-5c4d35f94f5bb85b2140b0d68e545b5c23725f56.zip
Merged from upstream.
-rw-r--r--nova/api/openstack/__init__.py29
-rw-r--r--nova/api/openstack/auth.py66
-rw-r--r--nova/api/openstack/extensions.py18
-rw-r--r--nova/api/openstack/flavors.py3
-rw-r--r--nova/api/openstack/images.py7
-rw-r--r--nova/api/openstack/servers.py8
-rw-r--r--nova/api/openstack/views/flavors.py15
-rw-r--r--nova/api/openstack/views/images.py16
-rw-r--r--nova/api/openstack/views/servers.py8
-rw-r--r--nova/api/openstack/wsgi.py4
-rw-r--r--nova/tests/api/openstack/__init__.py29
-rw-r--r--nova/tests/api/openstack/contrib/test_floating_ips.py20
-rw-r--r--nova/tests/api/openstack/contrib/test_keypairs.py8
-rw-r--r--nova/tests/api/openstack/contrib/test_multinic_xs.py8
-rw-r--r--nova/tests/api/openstack/contrib/test_quotas.py11
-rw-r--r--nova/tests/api/openstack/contrib/test_rescue.py4
-rw-r--r--nova/tests/api/openstack/contrib/test_security_groups.py69
-rw-r--r--nova/tests/api/openstack/contrib/test_virtual_interfaces.py2
-rw-r--r--nova/tests/api/openstack/extensions/foxinsocks.py10
-rw-r--r--nova/tests/api/openstack/test_auth.py8
-rw-r--r--nova/tests/api/openstack/test_extensions.py31
-rw-r--r--nova/tests/api/openstack/test_flavors.py88
-rw-r--r--nova/tests/api/openstack/test_flavors_extra_specs.py22
-rw-r--r--nova/tests/api/openstack/test_image_metadata.py28
-rw-r--r--nova/tests/api/openstack/test_images.py100
-rw-r--r--nova/tests/api/openstack/test_server_actions.py62
-rw-r--r--nova/tests/api/openstack/test_server_metadata.py56
-rw-r--r--nova/tests/api/openstack/test_servers.py187
-rw-r--r--nova/tests/integrated/api/client.py21
-rw-r--r--nova/tests/integrated/test_login.py6
-rw-r--r--nova/tests/test_compute.py6
-rw-r--r--nova/utils.py2
32 files changed, 555 insertions, 397 deletions
diff --git a/nova/api/openstack/__init__.py b/nova/api/openstack/__init__.py
index e0c1e9d04..3b74fefc9 100644
--- a/nova/api/openstack/__init__.py
+++ b/nova/api/openstack/__init__.py
@@ -68,6 +68,22 @@ class FaultWrapper(base_wsgi.Middleware):
return faults.Fault(exc)
+class ProjectMapper(routes.Mapper):
+
+ def resource(self, member_name, collection_name, **kwargs):
+ if not ('parent_resource' in kwargs):
+ kwargs['path_prefix'] = '{project_id}/'
+ else:
+ parent_resource = kwargs['parent_resource']
+ p_collection = parent_resource['collection_name']
+ p_member = parent_resource['member_name']
+ kwargs['path_prefix'] = '{project_id}/%s/:%s_id' % (p_collection,
+ p_member)
+ routes.Mapper.resource(self, member_name,
+ collection_name,
+ **kwargs)
+
+
class APIRouter(base_wsgi.Router):
"""
Routes requests on the OpenStack API to the appropriate controller
@@ -81,10 +97,13 @@ class APIRouter(base_wsgi.Router):
def __init__(self, ext_mgr=None):
self.server_members = {}
- mapper = routes.Mapper()
+ mapper = self._mapper()
self._setup_routes(mapper)
super(APIRouter, self).__init__(mapper)
+ def _mapper(self):
+ return routes.Mapper()
+
def _setup_routes(self, mapper):
raise NotImplementedError(_("You must implement _setup_routes."))
@@ -174,6 +193,9 @@ class APIRouterV10(APIRouter):
class APIRouterV11(APIRouter):
"""Define routes specific to OpenStack API V1.1."""
+ def _mapper(self):
+ return ProjectMapper()
+
def _setup_routes(self, mapper):
self._setup_base_routes(mapper, '1.1')
@@ -184,7 +206,7 @@ class APIRouterV11(APIRouter):
parent_resource=dict(member_name='image',
collection_name='images'))
- mapper.connect("metadata", "/images/{image_id}/metadata",
+ mapper.connect("metadata", "/{project_id}/images/{image_id}/metadata",
controller=image_metadata_controller,
action='update_all',
conditions={"method": ['PUT']})
@@ -196,7 +218,8 @@ class APIRouterV11(APIRouter):
parent_resource=dict(member_name='server',
collection_name='servers'))
- mapper.connect("metadata", "/servers/{server_id}/metadata",
+ mapper.connect("metadata",
+ "/{project_id}/servers/{server_id}/metadata",
controller=server_metadata_controller,
action='update_all',
conditions={"method": ['PUT']})
diff --git a/nova/api/openstack/auth.py b/nova/api/openstack/auth.py
index d42abe1f8..b6ff1126b 100644
--- a/nova/api/openstack/auth.py
+++ b/nova/api/openstack/auth.py
@@ -28,6 +28,7 @@ from nova import flags
from nova import log as logging
from nova import utils
from nova import wsgi
+from nova.api.openstack import common
from nova.api.openstack import faults
LOG = logging.getLogger('nova.api.openstack')
@@ -55,16 +56,33 @@ class AuthMiddleware(wsgi.Middleware):
LOG.warn(msg % locals())
return faults.Fault(webob.exc.HTTPUnauthorized())
- try:
- project_id = req.headers["X-Auth-Project-Id"]
- except KeyError:
- # FIXME(usrleon): It needed only for compatibility
- # while osapi clients don't use this header
- projects = self.auth.get_projects(user_id)
- if projects:
- project_id = projects[0].id
- else:
+ # Get all valid projects for the user
+ projects = self.auth.get_projects(user_id)
+ if not projects:
+ return faults.Fault(webob.exc.HTTPUnauthorized())
+
+ project_id = ""
+ path_parts = req.path.split('/')
+ # TODO(wwolf): this v1.1 check will be temporary as
+ # keystone should be taking this over at some point
+ if len(path_parts) > 1 and path_parts[1] == 'v1.1':
+ project_id = path_parts[2]
+ # Check that the project for project_id exists, and that user
+ # is authorized to use it
+ try:
+ project = self.auth.get_project(project_id)
+ except exception.ProjectNotFound:
+ return faults.Fault(webob.exc.HTTPUnauthorized())
+ if project_id not in [p.id for p in projects]:
return faults.Fault(webob.exc.HTTPUnauthorized())
+ else:
+ # As a fallback, set project_id from the headers, which is the v1.0
+ # behavior. As a last resort, be forgiving to the user and set
+ # project_id based on a valid project of theirs.
+ try:
+ project_id = req.headers["X-Auth-Project-Id"]
+ except KeyError:
+ project_id = projects[0].id
is_admin = self.auth.is_admin(user_id)
req.environ['nova.context'] = context.RequestContext(user_id,
@@ -95,12 +113,19 @@ class AuthMiddleware(wsgi.Middleware):
LOG.warn(msg)
return faults.Fault(webob.exc.HTTPUnauthorized(explanation=msg))
+ def _get_auth_header(key):
+ """Ensures that the KeyError returned is meaningful."""
+ try:
+ return req.headers[key]
+ except KeyError as ex:
+ raise KeyError(key)
try:
- username = req.headers['X-Auth-User']
- key = req.headers['X-Auth-Key']
+ username = _get_auth_header('X-Auth-User')
+ key = _get_auth_header('X-Auth-Key')
except KeyError as ex:
- LOG.warn(_("Could not find %s in request.") % ex)
- return faults.Fault(webob.exc.HTTPUnauthorized())
+ msg = _("Could not find %s in request.") % ex
+ LOG.warn(msg)
+ return faults.Fault(webob.exc.HTTPUnauthorized(explanation=msg))
token, user = self._authorize_user(username, key, req)
if user and token:
@@ -149,6 +174,16 @@ class AuthMiddleware(wsgi.Middleware):
"""
ctxt = context.get_admin_context()
+ project_id = req.headers.get('X-Auth-Project-Id')
+ if project_id is None:
+ # If the project_id is not provided in the headers, be forgiving to
+ # the user and set project_id based on a valid project of theirs.
+ user = self.auth.get_user_from_access_key(key)
+ projects = self.auth.get_projects(user.id)
+ if not projects:
+ raise webob.exc.HTTPUnauthorized()
+ project_id = projects[0].id
+
try:
user = self.auth.get_user_from_access_key(key)
except exception.NotFound:
@@ -162,7 +197,10 @@ class AuthMiddleware(wsgi.Middleware):
token_dict['token_hash'] = token_hash
token_dict['cdn_management_url'] = ''
os_url = req.url
- token_dict['server_management_url'] = os_url
+ token_dict['server_management_url'] = os_url.strip('/')
+ version = common.get_version_from_href(os_url)
+ if version == '1.1':
+ token_dict['server_management_url'] += '/' + project_id
token_dict['storage_url'] = ''
token_dict['user_id'] = user.id
token = self.db.auth_token_create(ctxt, token_dict)
diff --git a/nova/api/openstack/extensions.py b/nova/api/openstack/extensions.py
index bb407a045..efede945f 100644
--- a/nova/api/openstack/extensions.py
+++ b/nova/api/openstack/extensions.py
@@ -29,6 +29,7 @@ from nova import exception
from nova import flags
from nova import log as logging
from nova import wsgi as base_wsgi
+import nova.api.openstack
from nova.api.openstack import common
from nova.api.openstack import faults
from nova.api.openstack import wsgi
@@ -220,12 +221,13 @@ class ExtensionMiddleware(base_wsgi.Middleware):
for action in ext_mgr.get_actions():
if not action.collection in action_resources.keys():
resource = ActionExtensionResource(application)
- mapper.connect("/%s/:(id)/action.:(format)" %
+ mapper.connect("/:(project_id)/%s/:(id)/action.:(format)" %
action.collection,
action='action',
controller=resource,
conditions=dict(method=['POST']))
- mapper.connect("/%s/:(id)/action" % action.collection,
+ mapper.connect("/:(project_id)/%s/:(id)/action" %
+ action.collection,
action='action',
controller=resource,
conditions=dict(method=['POST']))
@@ -258,7 +260,7 @@ class ExtensionMiddleware(base_wsgi.Middleware):
ext_mgr = ExtensionManager(FLAGS.osapi_extensions_path)
self.ext_mgr = ext_mgr
- mapper = routes.Mapper()
+ mapper = nova.api.openstack.ProjectMapper()
serializer = wsgi.ResponseSerializer(
{'application/xml': ExtensionsXMLSerializer()})
@@ -269,13 +271,17 @@ class ExtensionMiddleware(base_wsgi.Middleware):
if resource.serializer is None:
resource.serializer = serializer
- mapper.resource(resource.collection, resource.collection,
+ kargs = dict(
controller=wsgi.Resource(
resource.controller, resource.deserializer,
resource.serializer),
collection=resource.collection_actions,
- member=resource.member_actions,
- parent_resource=resource.parent)
+ member=resource.member_actions)
+
+ if resource.parent:
+ kargs['parent_resource'] = resource.parent
+
+ mapper.resource(resource.collection, resource.collection, **kargs)
# extended actions
action_resources = self._action_ext_resources(application, ext_mgr,
diff --git a/nova/api/openstack/flavors.py b/nova/api/openstack/flavors.py
index b4bda68d4..fd36060da 100644
--- a/nova/api/openstack/flavors.py
+++ b/nova/api/openstack/flavors.py
@@ -72,7 +72,8 @@ class ControllerV11(Controller):
def _get_view_builder(self, req):
base_url = req.application_url
- return views.flavors.ViewBuilderV11(base_url)
+ project_id = getattr(req.environ['nova.context'], 'project_id', '')
+ return views.flavors.ViewBuilderV11(base_url, project_id)
class FlavorXMLSerializer(wsgi.XMLDictSerializer):
diff --git a/nova/api/openstack/images.py b/nova/api/openstack/images.py
index 0aabb9e56..1c8fc10c9 100644
--- a/nova/api/openstack/images.py
+++ b/nova/api/openstack/images.py
@@ -166,10 +166,11 @@ class ControllerV10(Controller):
class ControllerV11(Controller):
"""Version 1.1 specific controller logic."""
- def get_builder(self, request):
+ def get_builder(self, req):
"""Property to get the ViewBuilder class we need to use."""
- base_url = request.application_url
- return images_view.ViewBuilderV11(base_url)
+ base_url = req.application_url
+ project_id = getattr(req.environ['nova.context'], 'project_id', '')
+ return images_view.ViewBuilderV11(base_url, project_id)
def index(self, req):
"""Return an index listing of images available to the request.
diff --git a/nova/api/openstack/servers.py b/nova/api/openstack/servers.py
index 1d1975a1c..553357404 100644
--- a/nova/api/openstack/servers.py
+++ b/nova/api/openstack/servers.py
@@ -650,14 +650,16 @@ class ControllerV11(Controller):
return common.get_id_from_href(flavor_ref)
def _build_view(self, req, instance, is_detail=False):
+ project_id = getattr(req.environ['nova.context'], 'project_id', '')
base_url = req.application_url
flavor_builder = nova.api.openstack.views.flavors.ViewBuilderV11(
- base_url)
+ base_url, project_id)
image_builder = nova.api.openstack.views.images.ViewBuilderV11(
- base_url)
+ base_url, project_id)
addresses_builder = nova.api.openstack.views.addresses.ViewBuilderV11()
builder = nova.api.openstack.views.servers.ViewBuilderV11(
- addresses_builder, flavor_builder, image_builder, base_url)
+ addresses_builder, flavor_builder, image_builder,
+ base_url, project_id)
return builder.build(instance, is_detail=is_detail)
diff --git a/nova/api/openstack/views/flavors.py b/nova/api/openstack/views/flavors.py
index 0403ece1b..aea34b424 100644
--- a/nova/api/openstack/views/flavors.py
+++ b/nova/api/openstack/views/flavors.py
@@ -15,6 +15,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+import os.path
+
+
from nova.api.openstack import common
@@ -59,11 +62,12 @@ class ViewBuilder(object):
class ViewBuilderV11(ViewBuilder):
"""Openstack API v1.1 flavors view builder."""
- def __init__(self, base_url):
+ def __init__(self, base_url, project_id=""):
"""
:param base_url: url of the root wsgi application
"""
self.base_url = base_url
+ self.project_id = project_id
def _build_extra(self, flavor_obj):
flavor_obj["links"] = self._build_links(flavor_obj)
@@ -88,11 +92,10 @@ class ViewBuilderV11(ViewBuilder):
def generate_href(self, flavor_id):
"""Create an url that refers to a specific flavor id."""
- return "%s/flavors/%s" % (self.base_url, flavor_id)
+ return os.path.join(self.base_url, self.project_id,
+ "flavors", str(flavor_id))
def generate_bookmark(self, flavor_id):
"""Create an url that refers to a specific flavor id."""
- return "%s/flavors/%s" % (
- common.remove_version_from_href(self.base_url),
- flavor_id,
- )
+ return os.path.join(common.remove_version_from_href(self.base_url),
+ self.project_id, "flavors", str(flavor_id))
diff --git a/nova/api/openstack/views/images.py b/nova/api/openstack/views/images.py
index 912303d14..21f1b2d3e 100644
--- a/nova/api/openstack/views/images.py
+++ b/nova/api/openstack/views/images.py
@@ -23,9 +23,10 @@ from nova.api.openstack import common
class ViewBuilder(object):
"""Base class for generating responses to OpenStack API image requests."""
- def __init__(self, base_url):
+ def __init__(self, base_url, project_id=""):
"""Initialize new `ViewBuilder`."""
- self._url = base_url
+ self.base_url = base_url
+ self.project_id = project_id
def _format_dates(self, image):
"""Update all date fields to ensure standardized formatting."""
@@ -54,7 +55,7 @@ class ViewBuilder(object):
def generate_href(self, image_id):
"""Return an href string pointing to this object."""
- return os.path.join(self._url, "images", str(image_id))
+ return os.path.join(self.base_url, "images", str(image_id))
def build(self, image_obj, detail=False):
"""Return a standardized image structure for display by the API."""
@@ -117,6 +118,11 @@ class ViewBuilderV11(ViewBuilder):
except KeyError:
return
+ def generate_href(self, image_id):
+ """Return an href string pointing to this object."""
+ return os.path.join(self.base_url, self.project_id,
+ "images", str(image_id))
+
def build(self, image_obj, detail=False):
"""Return a standardized image structure for display by the API."""
image = ViewBuilder.build(self, image_obj, detail)
@@ -142,5 +148,5 @@ class ViewBuilderV11(ViewBuilder):
def generate_bookmark(self, image_id):
"""Create an url that refers to a specific flavor id."""
- return os.path.join(common.remove_version_from_href(self._url),
- "images", str(image_id))
+ return os.path.join(common.remove_version_from_href(self.base_url),
+ self.project_id, "images", str(image_id))
diff --git a/nova/api/openstack/views/servers.py b/nova/api/openstack/views/servers.py
index d2c1b0ba1..465287adc 100644
--- a/nova/api/openstack/views/servers.py
+++ b/nova/api/openstack/views/servers.py
@@ -128,11 +128,12 @@ class ViewBuilderV10(ViewBuilder):
class ViewBuilderV11(ViewBuilder):
"""Model an Openstack API V1.0 server response."""
def __init__(self, addresses_builder, flavor_builder, image_builder,
- base_url):
+ base_url, project_id=""):
ViewBuilder.__init__(self, addresses_builder)
self.flavor_builder = flavor_builder
self.image_builder = image_builder
self.base_url = base_url
+ self.project_id = project_id
def _build_detail(self, inst):
response = super(ViewBuilderV11, self)._build_detail(inst)
@@ -206,9 +207,10 @@ class ViewBuilderV11(ViewBuilder):
def generate_href(self, server_id):
"""Create an url that refers to a specific server id."""
- return os.path.join(self.base_url, "servers", str(server_id))
+ return os.path.join(self.base_url, self.project_id,
+ "servers", str(server_id))
def generate_bookmark(self, server_id):
"""Create an url that refers to a specific flavor id."""
return os.path.join(common.remove_version_from_href(self.base_url),
- "servers", str(server_id))
+ self.project_id, "servers", str(server_id))
diff --git a/nova/api/openstack/wsgi.py b/nova/api/openstack/wsgi.py
index 0eb47044e..dc0f1b93e 100644
--- a/nova/api/openstack/wsgi.py
+++ b/nova/api/openstack/wsgi.py
@@ -486,6 +486,10 @@ class Resource(wsgi.Application):
msg = _("Malformed request body")
return faults.Fault(webob.exc.HTTPBadRequest(explanation=msg))
+ project_id = args.pop("project_id", None)
+ if 'nova.context' in request.environ and project_id:
+ request.environ['nova.context'].project_id = project_id
+
try:
action_result = self.dispatch(request, action, args)
except webob.exc.HTTPException as ex:
diff --git a/nova/tests/api/openstack/__init__.py b/nova/tests/api/openstack/__init__.py
index 458434a81..7d44489a1 100644
--- a/nova/tests/api/openstack/__init__.py
+++ b/nova/tests/api/openstack/__init__.py
@@ -44,14 +44,15 @@ class RateLimitingMiddlewareTest(test.TestCase):
action = middleware.get_action_name(req)
self.assertEqual(action, action_name)
- verify('PUT', '/servers/4', 'PUT')
- verify('DELETE', '/servers/4', 'DELETE')
- verify('POST', '/images/4', 'POST')
- verify('POST', '/servers/4', 'POST servers')
- verify('GET', '/foo?a=4&changes-since=never&b=5', 'GET changes-since')
- verify('GET', '/foo?a=4&monkeys-since=never&b=5', None)
- verify('GET', '/servers/4', None)
- verify('HEAD', '/servers/4', None)
+ verify('PUT', '/fake/servers/4', 'PUT')
+ verify('DELETE', '/fake/servers/4', 'DELETE')
+ verify('POST', '/fake/images/4', 'POST')
+ verify('POST', '/fake/servers/4', 'POST servers')
+ verify('GET', '/fake/foo?a=4&changes-since=never&b=5',
+ 'GET changes-since')
+ verify('GET', '/fake/foo?a=4&monkeys-since=never&b=5', None)
+ verify('GET', '/fake/servers/4', None)
+ verify('HEAD', '/fake/servers/4', None)
def exhaust(self, middleware, method, url, username, times):
req = Request.blank(url, dict(REQUEST_METHOD=method),
@@ -67,13 +68,13 @@ class RateLimitingMiddlewareTest(test.TestCase):
def test_single_action(self):
middleware = RateLimitingMiddleware(simple_wsgi)
- self.exhaust(middleware, 'DELETE', '/servers/4', 'usr1', 100)
- self.exhaust(middleware, 'DELETE', '/servers/4', 'usr2', 100)
+ self.exhaust(middleware, 'DELETE', '/fake/servers/4', 'usr1', 100)
+ self.exhaust(middleware, 'DELETE', '/fake/servers/4', 'usr2', 100)
def test_POST_servers_action_implies_POST_action(self):
middleware = RateLimitingMiddleware(simple_wsgi)
- self.exhaust(middleware, 'POST', '/servers/4', 'usr1', 10)
- self.exhaust(middleware, 'POST', '/images/4', 'usr2', 10)
+ self.exhaust(middleware, 'POST', '/fake/servers/4', 'usr1', 10)
+ self.exhaust(middleware, 'POST', '/fake/images/4', 'usr2', 10)
self.assertTrue(set(middleware.limiter._levels) == \
set(['usr1:POST', 'usr1:POST servers', 'usr2:POST']))
@@ -81,11 +82,11 @@ class RateLimitingMiddlewareTest(test.TestCase):
middleware = RateLimitingMiddleware(simple_wsgi)
# Use up all of our "POST" allowance for the minute, 5 times
for i in range(5):
- self.exhaust(middleware, 'POST', '/servers/4', 'usr1', 10)
+ self.exhaust(middleware, 'POST', '/fake/servers/4', 'usr1', 10)
# Reset the 'POST' action counter.
del middleware.limiter._levels['usr1:POST']
# All 50 daily "POST servers" actions should be all used up
- self.exhaust(middleware, 'POST', '/servers/4', 'usr1', 0)
+ self.exhaust(middleware, 'POST', '/fake/servers/4', 'usr1', 0)
def test_proxy_ctor_works(self):
middleware = RateLimitingMiddleware(simple_wsgi)
diff --git a/nova/tests/api/openstack/contrib/test_floating_ips.py b/nova/tests/api/openstack/contrib/test_floating_ips.py
index d2ca9c365..568faf867 100644
--- a/nova/tests/api/openstack/contrib/test_floating_ips.py
+++ b/nova/tests/api/openstack/contrib/test_floating_ips.py
@@ -120,7 +120,7 @@ class FloatingIpTest(test.TestCase):
self.assertTrue('floating_ip' in view)
def test_floating_ips_list(self):
- req = webob.Request.blank('/v1.1/os-floating-ips')
+ req = webob.Request.blank('/v1.1/123/os-floating-ips')
res = req.get_response(fakes.wsgi_app())
self.assertEqual(res.status_int, 200)
res_dict = json.loads(res.body)
@@ -135,7 +135,7 @@ class FloatingIpTest(test.TestCase):
self.assertEqual(res_dict, response)
def test_floating_ip_show(self):
- req = webob.Request.blank('/v1.1/os-floating-ips/1')
+ req = webob.Request.blank('/v1.1/123/os-floating-ips/1')
res = req.get_response(fakes.wsgi_app())
self.assertEqual(res.status_int, 200)
res_dict = json.loads(res.body)
@@ -144,7 +144,7 @@ class FloatingIpTest(test.TestCase):
self.assertEqual(res_dict['floating_ip']['instance_id'], None)
def test_floating_ip_allocate(self):
- req = webob.Request.blank('/v1.1/os-floating-ips')
+ req = webob.Request.blank('/v1.1/123/os-floating-ips')
req.method = 'POST'
req.headers['Content-Type'] = 'application/json'
res = req.get_response(fakes.wsgi_app())
@@ -159,14 +159,14 @@ class FloatingIpTest(test.TestCase):
self.assertEqual(ip, expected)
def test_floating_ip_release(self):
- req = webob.Request.blank('/v1.1/os-floating-ips/1')
+ req = webob.Request.blank('/v1.1/123/os-floating-ips/1')
req.method = 'DELETE'
res = req.get_response(fakes.wsgi_app())
self.assertEqual(res.status_int, 202)
def test_add_floating_ip_to_instance(self):
body = dict(addFloatingIp=dict(address='11.0.0.1'))
- req = webob.Request.blank('/v1.1/servers/test_inst/action')
+ req = webob.Request.blank('/v1.1/123/servers/test_inst/action')
req.method = "POST"
req.body = json.dumps(body)
req.headers["content-type"] = "application/json"
@@ -176,7 +176,7 @@ class FloatingIpTest(test.TestCase):
def test_remove_floating_ip_from_instance(self):
body = dict(removeFloatingIp=dict(address='11.0.0.1'))
- req = webob.Request.blank('/v1.1/servers/test_inst/action')
+ req = webob.Request.blank('/v1.1/123/servers/test_inst/action')
req.method = "POST"
req.body = json.dumps(body)
req.headers["content-type"] = "application/json"
@@ -186,7 +186,7 @@ class FloatingIpTest(test.TestCase):
def test_bad_address_param_in_remove_floating_ip(self):
body = dict(removeFloatingIp=dict(badparam='11.0.0.1'))
- req = webob.Request.blank('/v1.1/servers/test_inst/action')
+ req = webob.Request.blank('/v1.1/123/servers/test_inst/action')
req.method = "POST"
req.body = json.dumps(body)
req.headers["content-type"] = "application/json"
@@ -196,7 +196,7 @@ class FloatingIpTest(test.TestCase):
def test_missing_dict_param_in_remove_floating_ip(self):
body = dict(removeFloatingIp='11.0.0.1')
- req = webob.Request.blank('/v1.1/servers/test_inst/action')
+ req = webob.Request.blank('/v1.1/123/servers/test_inst/action')
req.method = "POST"
req.body = json.dumps(body)
req.headers["content-type"] = "application/json"
@@ -206,7 +206,7 @@ class FloatingIpTest(test.TestCase):
def test_bad_address_param_in_add_floating_ip(self):
body = dict(addFloatingIp=dict(badparam='11.0.0.1'))
- req = webob.Request.blank('/v1.1/servers/test_inst/action')
+ req = webob.Request.blank('/v1.1/123/servers/test_inst/action')
req.method = "POST"
req.body = json.dumps(body)
req.headers["content-type"] = "application/json"
@@ -216,7 +216,7 @@ class FloatingIpTest(test.TestCase):
def test_missing_dict_param_in_add_floating_ip(self):
body = dict(addFloatingIp='11.0.0.1')
- req = webob.Request.blank('/v1.1/servers/test_inst/action')
+ req = webob.Request.blank('/v1.1/123/servers/test_inst/action')
req.method = "POST"
req.body = json.dumps(body)
req.headers["content-type"] = "application/json"
diff --git a/nova/tests/api/openstack/contrib/test_keypairs.py b/nova/tests/api/openstack/contrib/test_keypairs.py
index eb3bc7af0..92e401aac 100644
--- a/nova/tests/api/openstack/contrib/test_keypairs.py
+++ b/nova/tests/api/openstack/contrib/test_keypairs.py
@@ -58,7 +58,7 @@ class KeypairsTest(test.TestCase):
self.context = context.get_admin_context()
def test_keypair_list(self):
- req = webob.Request.blank('/v1.1/os-keypairs')
+ req = webob.Request.blank('/v1.1/123/os-keypairs')
res = req.get_response(fakes.wsgi_app())
self.assertEqual(res.status_int, 200)
res_dict = json.loads(res.body)
@@ -67,7 +67,7 @@ class KeypairsTest(test.TestCase):
def test_keypair_create(self):
body = {'keypair': {'name': 'create_test'}}
- req = webob.Request.blank('/v1.1/os-keypairs')
+ req = webob.Request.blank('/v1.1/123/os-keypairs')
req.method = 'POST'
req.body = json.dumps(body)
req.headers['Content-Type'] = 'application/json'
@@ -93,7 +93,7 @@ class KeypairsTest(test.TestCase):
},
}
- req = webob.Request.blank('/v1.1/os-keypairs')
+ req = webob.Request.blank('/v1.1/123/os-keypairs')
req.method = 'POST'
req.body = json.dumps(body)
req.headers['Content-Type'] = 'application/json'
@@ -105,7 +105,7 @@ class KeypairsTest(test.TestCase):
self.assertFalse('private_key' in res_dict['keypair'])
def test_keypair_delete(self):
- req = webob.Request.blank('/v1.1/os-keypairs/FAKE')
+ req = webob.Request.blank('/v1.1/123/os-keypairs/FAKE')
req.method = 'DELETE'
req.headers['Content-Type'] = 'application/json'
res = req.get_response(fakes.wsgi_app())
diff --git a/nova/tests/api/openstack/contrib/test_multinic_xs.py b/nova/tests/api/openstack/contrib/test_multinic_xs.py
index ac28f6be6..cecc4af4f 100644
--- a/nova/tests/api/openstack/contrib/test_multinic_xs.py
+++ b/nova/tests/api/openstack/contrib/test_multinic_xs.py
@@ -55,7 +55,7 @@ class FixedIpTest(test.TestCase):
last_add_fixed_ip = (None, None)
body = dict(addFixedIp=dict(networkId='test_net'))
- req = webob.Request.blank('/v1.1/servers/test_inst/action')
+ req = webob.Request.blank('/v1.1/123/servers/test_inst/action')
req.method = 'POST'
req.body = json.dumps(body)
req.headers['content-type'] = 'application/json'
@@ -69,7 +69,7 @@ class FixedIpTest(test.TestCase):
last_add_fixed_ip = (None, None)
body = dict(addFixedIp=dict())
- req = webob.Request.blank('/v1.1/servers/test_inst/action')
+ req = webob.Request.blank('/v1.1/123/servers/test_inst/action')
req.method = 'POST'
req.body = json.dumps(body)
req.headers['content-type'] = 'application/json'
@@ -83,7 +83,7 @@ class FixedIpTest(test.TestCase):
last_remove_fixed_ip = (None, None)
body = dict(removeFixedIp=dict(address='10.10.10.1'))
- req = webob.Request.blank('/v1.1/servers/test_inst/action')
+ req = webob.Request.blank('/v1.1/123/servers/test_inst/action')
req.method = 'POST'
req.body = json.dumps(body)
req.headers['content-type'] = 'application/json'
@@ -97,7 +97,7 @@ class FixedIpTest(test.TestCase):
last_remove_fixed_ip = (None, None)
body = dict(removeFixedIp=dict())
- req = webob.Request.blank('/v1.1/servers/test_inst/action')
+ req = webob.Request.blank('/v1.1/123/servers/test_inst/action')
req.method = 'POST'
req.body = json.dumps(body)
req.headers['content-type'] = 'application/json'
diff --git a/nova/tests/api/openstack/contrib/test_quotas.py b/nova/tests/api/openstack/contrib/test_quotas.py
index f6a25385f..7faef08b2 100644
--- a/nova/tests/api/openstack/contrib/test_quotas.py
+++ b/nova/tests/api/openstack/contrib/test_quotas.py
@@ -78,7 +78,8 @@ class QuotaSetsTest(test.TestCase):
self.assertEqual(qs['injected_file_content_bytes'], 10240)
def test_quotas_defaults(self):
- req = webob.Request.blank('/v1.1/os-quota-sets/fake_tenant/defaults')
+ uri = '/v1.1/fake_tenant/os-quota-sets/fake_tenant/defaults'
+ req = webob.Request.blank(uri)
req.method = 'GET'
req.headers['Content-Type'] = 'application/json'
res = req.get_response(fakes.wsgi_app())
@@ -99,7 +100,7 @@ class QuotaSetsTest(test.TestCase):
self.assertEqual(json.loads(res.body), expected)
def test_quotas_show_as_admin(self):
- req = webob.Request.blank('/v1.1/os-quota-sets/1234')
+ req = webob.Request.blank('/v1.1/1234/os-quota-sets/1234')
req.method = 'GET'
req.headers['Content-Type'] = 'application/json'
res = req.get_response(fakes.wsgi_app(
@@ -109,7 +110,7 @@ class QuotaSetsTest(test.TestCase):
self.assertEqual(json.loads(res.body), quota_set('1234'))
def test_quotas_show_as_unauthorized_user(self):
- req = webob.Request.blank('/v1.1/os-quota-sets/1234')
+ req = webob.Request.blank('/v1.1/fake/os-quota-sets/1234')
req.method = 'GET'
req.headers['Content-Type'] = 'application/json'
res = req.get_response(fakes.wsgi_app(
@@ -124,7 +125,7 @@ class QuotaSetsTest(test.TestCase):
'metadata_items': 128, 'injected_files': 5,
'injected_file_content_bytes': 10240}}
- req = webob.Request.blank('/v1.1/os-quota-sets/update_me')
+ req = webob.Request.blank('/v1.1/1234/os-quota-sets/update_me')
req.method = 'PUT'
req.body = json.dumps(updated_quota_set)
req.headers['Content-Type'] = 'application/json'
@@ -141,7 +142,7 @@ class QuotaSetsTest(test.TestCase):
'metadata_items': 128, 'injected_files': 5,
'injected_file_content_bytes': 10240}}
- req = webob.Request.blank('/v1.1/os-quota-sets/update_me')
+ req = webob.Request.blank('/v1.1/1234/os-quota-sets/update_me')
req.method = 'PUT'
req.body = json.dumps(updated_quota_set)
req.headers['Content-Type'] = 'application/json'
diff --git a/nova/tests/api/openstack/contrib/test_rescue.py b/nova/tests/api/openstack/contrib/test_rescue.py
index fc8e4be4e..f8126d461 100644
--- a/nova/tests/api/openstack/contrib/test_rescue.py
+++ b/nova/tests/api/openstack/contrib/test_rescue.py
@@ -36,7 +36,7 @@ class RescueTest(test.TestCase):
def test_rescue(self):
body = dict(rescue=None)
- req = webob.Request.blank('/v1.1/servers/test_inst/action')
+ req = webob.Request.blank('/v1.1/123/servers/test_inst/action')
req.method = "POST"
req.body = json.dumps(body)
req.headers["content-type"] = "application/json"
@@ -46,7 +46,7 @@ class RescueTest(test.TestCase):
def test_unrescue(self):
body = dict(unrescue=None)
- req = webob.Request.blank('/v1.1/servers/test_inst/action')
+ req = webob.Request.blank('/v1.1/123/servers/test_inst/action')
req.method = "POST"
req.body = json.dumps(body)
req.headers["content-type"] = "application/json"
diff --git a/nova/tests/api/openstack/contrib/test_security_groups.py b/nova/tests/api/openstack/contrib/test_security_groups.py
index b44ebc9fb..bc1536911 100644
--- a/nova/tests/api/openstack/contrib/test_security_groups.py
+++ b/nova/tests/api/openstack/contrib/test_security_groups.py
@@ -28,7 +28,7 @@ from nova.tests.api.openstack import fakes
def _get_create_request_json(body_dict):
- req = webob.Request.blank('/v1.1/os-security-groups')
+ req = webob.Request.blank('/v1.1/123/os-security-groups')
req.headers['Content-Type'] = 'application/json'
req.method = 'POST'
req.body = json.dumps(body_dict)
@@ -109,7 +109,7 @@ class TestSecurityGroups(test.TestCase):
return ''.join(body_parts)
def _get_create_request_xml(self, body_dict):
- req = webob.Request.blank('/v1.1/os-security-groups')
+ req = webob.Request.blank('/v1.1/123/os-security-groups')
req.headers['Content-Type'] = 'application/xml'
req.content_type = 'application/xml'
req.accept = 'application/xml'
@@ -124,7 +124,7 @@ class TestSecurityGroups(test.TestCase):
return response
def _delete_security_group(self, id):
- request = webob.Request.blank('/v1.1/os-security-groups/%s'
+ request = webob.Request.blank('/v1.1/123/os-security-groups/%s'
% id)
request.method = 'DELETE'
response = request.get_response(fakes.wsgi_app())
@@ -263,7 +263,7 @@ class TestSecurityGroups(test.TestCase):
security_group['description'] = "group-description"
response = _create_security_group_json(security_group)
- req = webob.Request.blank('/v1.1/os-security-groups')
+ req = webob.Request.blank('/v1.1/123/os-security-groups')
req.headers['Content-Type'] = 'application/json'
req.method = 'GET'
response = req.get_response(fakes.wsgi_app())
@@ -272,7 +272,7 @@ class TestSecurityGroups(test.TestCase):
expected = {'security_groups': [
{'id': 1,
'name':"default",
- 'tenant_id': "fake",
+ 'tenant_id': "123",
"description":"default",
"rules": []
},
@@ -282,7 +282,7 @@ class TestSecurityGroups(test.TestCase):
{
'id': 2,
'name': "test",
- 'tenant_id': "fake",
+ 'tenant_id': "123",
"description": "group-description",
"rules": []
}
@@ -297,7 +297,7 @@ class TestSecurityGroups(test.TestCase):
response = _create_security_group_json(security_group)
res_dict = json.loads(response.body)
- req = webob.Request.blank('/v1.1/os-security-groups/%s' %
+ req = webob.Request.blank('/v1.1/123/os-security-groups/%s' %
res_dict['security_group']['id'])
req.headers['Content-Type'] = 'application/json'
req.method = 'GET'
@@ -308,23 +308,22 @@ class TestSecurityGroups(test.TestCase):
'security_group': {
'id': 2,
'name': "test",
- 'tenant_id': "fake",
+ 'tenant_id': "123",
'description': "group-description",
'rules': []
}
}
- self.assertEquals(response.status_int, 200)
self.assertEquals(res_dict, expected)
def test_get_security_group_by_invalid_id(self):
- req = webob.Request.blank('/v1.1/os-security-groups/invalid')
+ req = webob.Request.blank('/v1.1/123/os-security-groups/invalid')
req.headers['Content-Type'] = 'application/json'
req.method = 'GET'
response = req.get_response(fakes.wsgi_app())
self.assertEquals(response.status_int, 400)
def test_get_security_group_by_non_existing_id(self):
- req = webob.Request.blank('/v1.1/os-security-groups/111111111')
+ req = webob.Request.blank('/v1.1/123/os-security-groups/111111111')
req.headers['Content-Type'] = 'application/json'
req.method = 'GET'
response = req.get_response(fakes.wsgi_app())
@@ -352,7 +351,7 @@ class TestSecurityGroups(test.TestCase):
def test_associate_by_non_existing_security_group_name(self):
body = dict(addSecurityGroup=dict(name='non-existing'))
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/123/servers/1/action')
req.headers['Content-Type'] = 'application/json'
req.method = 'POST'
req.body = json.dumps(body)
@@ -363,7 +362,7 @@ class TestSecurityGroups(test.TestCase):
body = dict(addSecurityGroup=dict(name='test'))
self.stubs.Set(nova.db, 'security_group_get_by_name',
return_security_group)
- req = webob.Request.blank('/v1.1/servers/invalid/action')
+ req = webob.Request.blank('/v1.1/123/servers/invalid/action')
req.headers['Content-Type'] = 'application/json'
req.method = 'POST'
req.body = json.dumps(body)
@@ -371,7 +370,7 @@ class TestSecurityGroups(test.TestCase):
self.assertEquals(response.status_int, 400)
def test_associate_without_body(self):
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/123/servers/1/action')
body = dict(addSecurityGroup=None)
self.stubs.Set(nova.db, 'instance_get', return_server)
req.headers['Content-Type'] = 'application/json'
@@ -381,7 +380,7 @@ class TestSecurityGroups(test.TestCase):
self.assertEquals(response.status_int, 400)
def test_associate_no_security_group_name(self):
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/123/servers/1/action')
body = dict(addSecurityGroup=dict())
self.stubs.Set(nova.db, 'instance_get', return_server)
req.headers['Content-Type'] = 'application/json'
@@ -391,7 +390,7 @@ class TestSecurityGroups(test.TestCase):
self.assertEquals(response.status_int, 400)
def test_associate_security_group_name_with_whitespaces(self):
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/123/servers/1/action')
body = dict(addSecurityGroup=dict(name=" "))
self.stubs.Set(nova.db, 'instance_get', return_server)
req.headers['Content-Type'] = 'application/json'
@@ -405,7 +404,7 @@ class TestSecurityGroups(test.TestCase):
body = dict(addSecurityGroup=dict(name="test"))
self.stubs.Set(nova.db, 'security_group_get_by_name',
return_security_group)
- req = webob.Request.blank('/v1.1/servers/10000/action')
+ req = webob.Request.blank('/v1.1/123/servers/10000/action')
req.headers['Content-Type'] = 'application/json'
req.method = 'POST'
req.body = json.dumps(body)
@@ -417,7 +416,7 @@ class TestSecurityGroups(test.TestCase):
self.stubs.Set(nova.db, 'security_group_get_by_name',
return_security_group_without_instances)
body = dict(addSecurityGroup=dict(name="test"))
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/123/servers/1/action')
req.headers['Content-Type'] = 'application/json'
req.method = 'POST'
req.body = json.dumps(body)
@@ -429,7 +428,7 @@ class TestSecurityGroups(test.TestCase):
self.stubs.Set(nova.db, 'security_group_get_by_name',
return_security_group)
body = dict(addSecurityGroup=dict(name="test"))
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/123/servers/1/action')
req.headers['Content-Type'] = 'application/json'
req.method = 'POST'
req.body = json.dumps(body)
@@ -447,7 +446,7 @@ class TestSecurityGroups(test.TestCase):
self.mox.ReplayAll()
body = dict(addSecurityGroup=dict(name="test"))
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/123/servers/1/action')
req.headers['Content-Type'] = 'application/json'
req.method = 'POST'
req.body = json.dumps(body)
@@ -464,7 +463,7 @@ class TestSecurityGroups(test.TestCase):
return_security_group_without_instances)
self.mox.ReplayAll()
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/123/servers/1/action')
req.headers['Content-Type'] = 'application/xml'
req.method = 'POST'
req.body = """<addSecurityGroup>
@@ -475,7 +474,7 @@ class TestSecurityGroups(test.TestCase):
def test_disassociate_by_non_existing_security_group_name(self):
body = dict(removeSecurityGroup=dict(name='non-existing'))
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/123/servers/1/action')
req.headers['Content-Type'] = 'application/json'
req.method = 'POST'
req.body = json.dumps(body)
@@ -486,7 +485,7 @@ class TestSecurityGroups(test.TestCase):
body = dict(removeSecurityGroup=dict(name='test'))
self.stubs.Set(nova.db, 'security_group_get_by_name',
return_security_group)
- req = webob.Request.blank('/v1.1/servers/invalid/action')
+ req = webob.Request.blank('/v1.1/123/servers/invalid/action')
req.headers['Content-Type'] = 'application/json'
req.method = 'POST'
req.body = json.dumps(body)
@@ -494,7 +493,7 @@ class TestSecurityGroups(test.TestCase):
self.assertEquals(response.status_int, 400)
def test_disassociate_without_body(self):
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/123/servers/1/action')
body = dict(removeSecurityGroup=None)
self.stubs.Set(nova.db, 'instance_get', return_server)
req.headers['Content-Type'] = 'application/json'
@@ -504,7 +503,7 @@ class TestSecurityGroups(test.TestCase):
self.assertEquals(response.status_int, 400)
def test_disassociate_no_security_group_name(self):
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/123/servers/1/action')
body = dict(removeSecurityGroup=dict())
self.stubs.Set(nova.db, 'instance_get', return_server)
req.headers['Content-Type'] = 'application/json'
@@ -514,7 +513,7 @@ class TestSecurityGroups(test.TestCase):
self.assertEquals(response.status_int, 400)
def test_disassociate_security_group_name_with_whitespaces(self):
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/123/servers/1/action')
body = dict(removeSecurityGroup=dict(name=" "))
self.stubs.Set(nova.db, 'instance_get', return_server)
req.headers['Content-Type'] = 'application/json'
@@ -528,7 +527,7 @@ class TestSecurityGroups(test.TestCase):
body = dict(removeSecurityGroup=dict(name="test"))
self.stubs.Set(nova.db, 'security_group_get_by_name',
return_security_group)
- req = webob.Request.blank('/v1.1/servers/10000/action')
+ req = webob.Request.blank('/v1.1/123/servers/10000/action')
req.headers['Content-Type'] = 'application/json'
req.method = 'POST'
req.body = json.dumps(body)
@@ -540,7 +539,7 @@ class TestSecurityGroups(test.TestCase):
self.stubs.Set(nova.db, 'security_group_get_by_name',
return_security_group)
body = dict(removeSecurityGroup=dict(name="test"))
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/123/servers/1/action')
req.headers['Content-Type'] = 'application/json'
req.method = 'POST'
req.body = json.dumps(body)
@@ -552,7 +551,7 @@ class TestSecurityGroups(test.TestCase):
self.stubs.Set(nova.db, 'security_group_get_by_name',
return_security_group_without_instances)
body = dict(removeSecurityGroup=dict(name="test"))
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/123/servers/1/action')
req.headers['Content-Type'] = 'application/json'
req.method = 'POST'
req.body = json.dumps(body)
@@ -570,7 +569,7 @@ class TestSecurityGroups(test.TestCase):
self.mox.ReplayAll()
body = dict(removeSecurityGroup=dict(name="test"))
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/123/servers/1/action')
req.headers['Content-Type'] = 'application/json'
req.method = 'POST'
req.body = json.dumps(body)
@@ -587,7 +586,7 @@ class TestSecurityGroups(test.TestCase):
return_security_group)
self.mox.ReplayAll()
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/123/servers/1/action')
req.headers['Content-Type'] = 'application/xml'
req.method = 'POST'
req.body = """<removeSecurityGroup>
@@ -625,7 +624,7 @@ class TestSecurityGroupRules(test.TestCase):
super(TestSecurityGroupRules, self).tearDown()
def _create_security_group_rule_json(self, rules):
- request = webob.Request.blank('/v1.1/os-security-group-rules')
+ request = webob.Request.blank('/v1.1/123/os-security-group-rules')
request.headers['Content-Type'] = 'application/json'
request.method = 'POST'
request.body = json.dumps(rules)
@@ -633,7 +632,7 @@ class TestSecurityGroupRules(test.TestCase):
return response
def _delete_security_group_rule(self, id):
- request = webob.Request.blank('/v1.1/os-security-group-rules/%s'
+ request = webob.Request.blank('/v1.1/123/os-security-group-rules/%s'
% id)
request.method = 'DELETE'
response = request.get_response(fakes.wsgi_app())
@@ -691,7 +690,7 @@ class TestSecurityGroupRules(test.TestCase):
self.assertEquals(response.status_int, 400)
def test_create_with_no_body_json(self):
- request = webob.Request.blank('/v1.1/os-security-group-rules')
+ request = webob.Request.blank('/v1.1/123/os-security-group-rules')
request.headers['Content-Type'] = 'application/json'
request.method = 'POST'
request.body = json.dumps(None)
@@ -699,7 +698,7 @@ class TestSecurityGroupRules(test.TestCase):
self.assertEquals(response.status_int, 422)
def test_create_with_no_security_group_rule_in_body_json(self):
- request = webob.Request.blank('/v1.1/os-security-group-rules')
+ request = webob.Request.blank('/v1.1/123/os-security-group-rules')
request.headers['Content-Type'] = 'application/json'
request.method = 'POST'
body_dict = {'test': "test"}
diff --git a/nova/tests/api/openstack/contrib/test_virtual_interfaces.py b/nova/tests/api/openstack/contrib/test_virtual_interfaces.py
index d541a9e95..1db253b35 100644
--- a/nova/tests/api/openstack/contrib/test_virtual_interfaces.py
+++ b/nova/tests/api/openstack/contrib/test_virtual_interfaces.py
@@ -43,7 +43,7 @@ class ServerVirtualInterfaceTest(test.TestCase):
super(ServerVirtualInterfaceTest, self).tearDown()
def test_get_virtual_interfaces_list(self):
- req = webob.Request.blank('/v1.1/servers/1/os-virtual-interfaces')
+ req = webob.Request.blank('/v1.1/123/servers/1/os-virtual-interfaces')
res = req.get_response(fakes.wsgi_app())
self.assertEqual(res.status_int, 200)
res_dict = json.loads(res.body)
diff --git a/nova/tests/api/openstack/extensions/foxinsocks.py b/nova/tests/api/openstack/extensions/foxinsocks.py
index 03aad007a..2d8313cf6 100644
--- a/nova/tests/api/openstack/extensions/foxinsocks.py
+++ b/nova/tests/api/openstack/extensions/foxinsocks.py
@@ -72,8 +72,9 @@ class Foxinsocks(object):
res.body = json.dumps(data)
return res
- req_ext1 = extensions.RequestExtension('GET', '/v1.1/flavors/:(id)',
- _goose_handler)
+ req_ext1 = extensions.RequestExtension('GET',
+ '/v1.1/:(project_id)/flavors/:(id)',
+ _goose_handler)
request_exts.append(req_ext1)
def _bands_handler(req, res):
@@ -84,8 +85,9 @@ class Foxinsocks(object):
res.body = json.dumps(data)
return res
- req_ext2 = extensions.RequestExtension('GET', '/v1.1/flavors/:(id)',
- _bands_handler)
+ req_ext2 = extensions.RequestExtension('GET',
+ '/v1.1/:(project_id)/flavors/:(id)',
+ _bands_handler)
request_exts.append(req_ext2)
return request_exts
diff --git a/nova/tests/api/openstack/test_auth.py b/nova/tests/api/openstack/test_auth.py
index 306ae1aa0..7fd3935a2 100644
--- a/nova/tests/api/openstack/test_auth.py
+++ b/nova/tests/api/openstack/test_auth.py
@@ -53,6 +53,7 @@ class Test(test.TestCase):
req = webob.Request.blank('/v1.0/')
req.headers['X-Auth-User'] = 'user1'
req.headers['X-Auth-Key'] = 'user1_key'
+ req.headers['X-Auth-Project-Id'] = 'user1_project'
result = req.get_response(fakes.wsgi_app(fake_auth=False))
self.assertEqual(result.status, '204 No Content')
self.assertEqual(len(result.headers['X-Auth-Token']), 40)
@@ -73,14 +74,14 @@ class Test(test.TestCase):
self.assertEqual(result.status, '204 No Content')
self.assertEqual(len(result.headers['X-Auth-Token']), 40)
self.assertEqual(result.headers['X-Server-Management-Url'],
- "http://foo/v1.0/")
+ "http://foo/v1.0")
self.assertEqual(result.headers['X-CDN-Management-Url'],
"")
self.assertEqual(result.headers['X-Storage-Url'], "")
token = result.headers['X-Auth-Token']
self.stubs.Set(nova.api.openstack, 'APIRouterV10', fakes.FakeRouter)
- req = webob.Request.blank('/v1.0/fake')
+ req = webob.Request.blank('/v1.0/user1_project')
req.headers['X-Auth-Token'] = token
result = req.get_response(fakes.wsgi_app(fake_auth=False))
self.assertEqual(result.status, '200 OK')
@@ -125,7 +126,7 @@ class Test(test.TestCase):
token = result.headers['X-Auth-Token']
self.stubs.Set(nova.api.openstack, 'APIRouterV10', fakes.FakeRouter)
- req = webob.Request.blank('/v1.0/fake')
+ req = webob.Request.blank('/v1.0/')
req.headers['X-Auth-Token'] = token
req.headers['X-Auth-Project-Id'] = 'user2_project'
result = req.get_response(fakes.wsgi_app(fake_auth=False))
@@ -136,6 +137,7 @@ class Test(test.TestCase):
req = webob.Request.blank('/v1.0/')
req.headers['X-Auth-User'] = 'unknown_user'
req.headers['X-Auth-Key'] = 'unknown_user_key'
+ req.headers['X-Auth-Project-Id'] = 'user_project'
result = req.get_response(fakes.wsgi_app(fake_auth=False))
self.assertEqual(result.status, '401 Unauthorized')
diff --git a/nova/tests/api/openstack/test_extensions.py b/nova/tests/api/openstack/test_extensions.py
index d89cb28d6..4060763fc 100644
--- a/nova/tests/api/openstack/test_extensions.py
+++ b/nova/tests/api/openstack/test_extensions.py
@@ -102,7 +102,7 @@ class ExtensionControllerTest(test.TestCase):
def test_list_extensions_json(self):
app = openstack.APIRouterV11()
ext_midware = extensions.ExtensionMiddleware(app)
- request = webob.Request.blank("/extensions")
+ request = webob.Request.blank("/123/extensions")
response = request.get_response(ext_midware)
self.assertEqual(200, response.status_int)
@@ -128,7 +128,7 @@ class ExtensionControllerTest(test.TestCase):
def test_get_extension_json(self):
app = openstack.APIRouterV11()
ext_midware = extensions.ExtensionMiddleware(app)
- request = webob.Request.blank("/extensions/FOXNSOX")
+ request = webob.Request.blank("/123/extensions/FOXNSOX")
response = request.get_response(ext_midware)
self.assertEqual(200, response.status_int)
@@ -144,7 +144,7 @@ class ExtensionControllerTest(test.TestCase):
def test_list_extensions_xml(self):
app = openstack.APIRouterV11()
ext_midware = extensions.ExtensionMiddleware(app)
- request = webob.Request.blank("/extensions")
+ request = webob.Request.blank("/123/extensions")
request.accept = "application/xml"
response = request.get_response(ext_midware)
self.assertEqual(200, response.status_int)
@@ -171,7 +171,7 @@ class ExtensionControllerTest(test.TestCase):
def test_get_extension_xml(self):
app = openstack.APIRouterV11()
ext_midware = extensions.ExtensionMiddleware(app)
- request = webob.Request.blank("/extensions/FOXNSOX")
+ request = webob.Request.blank("/123/extensions/FOXNSOX")
request.accept = "application/xml"
response = request.get_response(ext_midware)
self.assertEqual(200, response.status_int)
@@ -212,7 +212,7 @@ class ResourceExtensionTest(test.TestCase):
manager = StubExtensionManager(res_ext)
app = openstack.APIRouterV11()
ext_midware = extensions.ExtensionMiddleware(app, manager)
- request = webob.Request.blank("/tweedles")
+ request = webob.Request.blank("/123/tweedles")
response = request.get_response(ext_midware)
self.assertEqual(200, response.status_int)
self.assertEqual(response_body, response.body)
@@ -223,7 +223,7 @@ class ResourceExtensionTest(test.TestCase):
manager = StubExtensionManager(res_ext)
app = openstack.APIRouterV11()
ext_midware = extensions.ExtensionMiddleware(app, manager)
- request = webob.Request.blank("/tweedles")
+ request = webob.Request.blank("/123/tweedles")
response = request.get_response(ext_midware)
self.assertEqual(200, response.status_int)
self.assertEqual(response_body, response.body)
@@ -247,7 +247,7 @@ class ExtensionManagerTest(test.TestCase):
def test_get_resources(self):
app = openstack.APIRouterV11()
ext_midware = extensions.ExtensionMiddleware(app)
- request = webob.Request.blank("/foxnsocks")
+ request = webob.Request.blank("/123/foxnsocks")
response = request.get_response(ext_midware)
self.assertEqual(200, response.status_int)
self.assertEqual(response_body, response.body)
@@ -280,23 +280,26 @@ class ActionExtensionTest(test.TestCase):
def test_extended_action(self):
body = dict(add_tweedle=dict(name="test"))
- response = self._send_server_action_request("/servers/1/action", body)
+ url = "/123/servers/1/action"
+ response = self._send_server_action_request(url, body)
self.assertEqual(200, response.status_int)
self.assertEqual("Tweedle Beetle Added.", response.body)
body = dict(delete_tweedle=dict(name="test"))
- response = self._send_server_action_request("/servers/1/action", body)
+ response = self._send_server_action_request(url, body)
self.assertEqual(200, response.status_int)
self.assertEqual("Tweedle Beetle Deleted.", response.body)
def test_invalid_action_body(self):
body = dict(blah=dict(name="test")) # Doesn't exist
- response = self._send_server_action_request("/servers/1/action", body)
+ url = "/123/servers/1/action"
+ response = self._send_server_action_request(url, body)
self.assertEqual(400, response.status_int)
def test_invalid_action(self):
body = dict(blah=dict(name="test"))
- response = self._send_server_action_request("/fdsa/1/action", body)
+ url = "/123/fdsa/1/action"
+ response = self._send_server_action_request(url, body)
self.assertEqual(404, response.status_int)
@@ -317,13 +320,13 @@ class RequestExtensionTest(test.TestCase):
return res
req_ext = extensions.RequestExtension('GET',
- '/v1.1/flavors/:(id)',
+ '/v1.1/123/flavors/:(id)',
_req_handler)
manager = StubExtensionManager(None, None, req_ext)
app = fakes.wsgi_app()
ext_midware = extensions.ExtensionMiddleware(app, manager)
- request = webob.Request.blank("/v1.1/flavors/1?chewing=bluegoo")
+ request = webob.Request.blank("/v1.1/123/flavors/1?chewing=bluegoo")
request.environ['api.version'] = '1.1'
response = request.get_response(ext_midware)
self.assertEqual(200, response.status_int)
@@ -334,7 +337,7 @@ class RequestExtensionTest(test.TestCase):
app = fakes.wsgi_app()
ext_midware = extensions.ExtensionMiddleware(app)
- request = webob.Request.blank("/v1.1/flavors/1?chewing=newblue")
+ request = webob.Request.blank("/v1.1/123/flavors/1?chewing=newblue")
request.environ['api.version'] = '1.1'
response = request.get_response(ext_midware)
self.assertEqual(200, response.status_int)
diff --git a/nova/tests/api/openstack/test_flavors.py b/nova/tests/api/openstack/test_flavors.py
index d0fe72001..812bece42 100644
--- a/nova/tests/api/openstack/test_flavors.py
+++ b/nova/tests/api/openstack/test_flavors.py
@@ -138,7 +138,7 @@ class FlavorsTest(test.TestCase):
self.assertEqual(res.status_int, 404)
def test_get_flavor_by_id_v1_1(self):
- req = webob.Request.blank('/v1.1/flavors/12')
+ req = webob.Request.blank('/v1.1/fake/flavors/12')
req.environ['api.version'] = '1.1'
res = req.get_response(fakes.wsgi_app())
self.assertEqual(res.status_int, 200)
@@ -152,11 +152,11 @@ class FlavorsTest(test.TestCase):
"links": [
{
"rel": "self",
- "href": "http://localhost/v1.1/flavors/12",
+ "href": "http://localhost/v1.1/fake/flavors/12",
},
{
"rel": "bookmark",
- "href": "http://localhost/flavors/12",
+ "href": "http://localhost/fake/flavors/12",
},
],
},
@@ -164,7 +164,7 @@ class FlavorsTest(test.TestCase):
self.assertEqual(flavor, expected)
def test_get_flavor_list_v1_1(self):
- req = webob.Request.blank('/v1.1/flavors')
+ req = webob.Request.blank('/v1.1/fake/flavors')
req.environ['api.version'] = '1.1'
res = req.get_response(fakes.wsgi_app())
self.assertEqual(res.status_int, 200)
@@ -177,11 +177,11 @@ class FlavorsTest(test.TestCase):
"links": [
{
"rel": "self",
- "href": "http://localhost/v1.1/flavors/1",
+ "href": "http://localhost/v1.1/fake/flavors/1",
},
{
"rel": "bookmark",
- "href": "http://localhost/flavors/1",
+ "href": "http://localhost/fake/flavors/1",
},
],
},
@@ -191,11 +191,11 @@ class FlavorsTest(test.TestCase):
"links": [
{
"rel": "self",
- "href": "http://localhost/v1.1/flavors/2",
+ "href": "http://localhost/v1.1/fake/flavors/2",
},
{
"rel": "bookmark",
- "href": "http://localhost/flavors/2",
+ "href": "http://localhost/fake/flavors/2",
},
],
},
@@ -204,7 +204,7 @@ class FlavorsTest(test.TestCase):
self.assertEqual(flavor, expected)
def test_get_flavor_list_detail_v1_1(self):
- req = webob.Request.blank('/v1.1/flavors/detail')
+ req = webob.Request.blank('/v1.1/fake/flavors/detail')
req.environ['api.version'] = '1.1'
res = req.get_response(fakes.wsgi_app())
self.assertEqual(res.status_int, 200)
@@ -219,11 +219,11 @@ class FlavorsTest(test.TestCase):
"links": [
{
"rel": "self",
- "href": "http://localhost/v1.1/flavors/1",
+ "href": "http://localhost/v1.1/fake/flavors/1",
},
{
"rel": "bookmark",
- "href": "http://localhost/flavors/1",
+ "href": "http://localhost/fake/flavors/1",
},
],
},
@@ -235,11 +235,11 @@ class FlavorsTest(test.TestCase):
"links": [
{
"rel": "self",
- "href": "http://localhost/v1.1/flavors/2",
+ "href": "http://localhost/v1.1/fake/flavors/2",
},
{
"rel": "bookmark",
- "href": "http://localhost/flavors/2",
+ "href": "http://localhost/fake/flavors/2",
},
],
},
@@ -252,7 +252,7 @@ class FlavorsTest(test.TestCase):
return {}
self.stubs.Set(nova.db.api, "instance_type_get_all", _return_empty)
- req = webob.Request.blank('/v1.1/flavors')
+ req = webob.Request.blank('/v1.1/fake/flavors')
res = req.get_response(fakes.wsgi_app())
self.assertEqual(res.status_int, 200)
flavors = json.loads(res.body)["flavors"]
@@ -274,11 +274,11 @@ class FlavorsXMLSerializationTest(test.TestCase):
"links": [
{
"rel": "self",
- "href": "http://localhost/v1.1/flavors/12",
+ "href": "http://localhost/v1.1/fake/flavors/12",
},
{
"rel": "bookmark",
- "href": "http://localhost/flavors/12",
+ "href": "http://localhost/fake/flavors/12",
},
],
},
@@ -294,8 +294,10 @@ class FlavorsXMLSerializationTest(test.TestCase):
name="asdf"
ram="256"
disk="10">
- <atom:link href="http://localhost/v1.1/flavors/12" rel="self"/>
- <atom:link href="http://localhost/flavors/12" rel="bookmark"/>
+ <atom:link href="http://localhost/v1.1/fake/flavors/12"
+ rel="self"/>
+ <atom:link href="http://localhost/fake/flavors/12"
+ rel="bookmark"/>
</flavor>
""".replace(" ", ""))
@@ -313,11 +315,11 @@ class FlavorsXMLSerializationTest(test.TestCase):
"links": [
{
"rel": "self",
- "href": "http://localhost/v1.1/flavors/12",
+ "href": "http://localhost/v1.1/fake/flavors/12",
},
{
"rel": "bookmark",
- "href": "http://localhost/flavors/12",
+ "href": "http://localhost/fake/flavors/12",
},
],
},
@@ -333,8 +335,10 @@ class FlavorsXMLSerializationTest(test.TestCase):
name="asdf"
ram="256"
disk="10">
- <atom:link href="http://localhost/v1.1/flavors/12" rel="self"/>
- <atom:link href="http://localhost/flavors/12" rel="bookmark"/>
+ <atom:link href="http://localhost/v1.1/fake/flavors/12"
+ rel="self"/>
+ <atom:link href="http://localhost/fake/flavors/12"
+ rel="bookmark"/>
</flavor>
""".replace(" ", ""))
@@ -353,11 +357,11 @@ class FlavorsXMLSerializationTest(test.TestCase):
"links": [
{
"rel": "self",
- "href": "http://localhost/v1.1/flavors/23",
+ "href": "http://localhost/v1.1/fake/flavors/23",
},
{
"rel": "bookmark",
- "href": "http://localhost/flavors/23",
+ "href": "http://localhost/fake/flavors/23",
},
],
}, {
@@ -368,11 +372,11 @@ class FlavorsXMLSerializationTest(test.TestCase):
"links": [
{
"rel": "self",
- "href": "http://localhost/v1.1/flavors/13",
+ "href": "http://localhost/v1.1/fake/flavors/13",
},
{
"rel": "bookmark",
- "href": "http://localhost/flavors/13",
+ "href": "http://localhost/fake/flavors/13",
},
],
},
@@ -389,15 +393,19 @@ class FlavorsXMLSerializationTest(test.TestCase):
name="flavor 23"
ram="512"
disk="20">
- <atom:link href="http://localhost/v1.1/flavors/23" rel="self"/>
- <atom:link href="http://localhost/flavors/23" rel="bookmark"/>
+ <atom:link href="http://localhost/v1.1/fake/flavors/23"
+ rel="self"/>
+ <atom:link href="http://localhost/fake/flavors/23"
+ rel="bookmark"/>
</flavor>
<flavor id="13"
name="flavor 13"
ram="256"
disk="10">
- <atom:link href="http://localhost/v1.1/flavors/13" rel="self"/>
- <atom:link href="http://localhost/flavors/13" rel="bookmark"/>
+ <atom:link href="http://localhost/v1.1/fake/flavors/13"
+ rel="self"/>
+ <atom:link href="http://localhost/fake/flavors/13"
+ rel="bookmark"/>
</flavor>
</flavors>
""".replace(" ", "") % locals())
@@ -417,11 +425,11 @@ class FlavorsXMLSerializationTest(test.TestCase):
"links": [
{
"rel": "self",
- "href": "http://localhost/v1.1/flavors/23",
+ "href": "http://localhost/v1.1/fake/flavors/23",
},
{
"rel": "bookmark",
- "href": "http://localhost/flavors/23",
+ "href": "http://localhost/fake/flavors/23",
},
],
}, {
@@ -432,11 +440,11 @@ class FlavorsXMLSerializationTest(test.TestCase):
"links": [
{
"rel": "self",
- "href": "http://localhost/v1.1/flavors/13",
+ "href": "http://localhost/v1.1/fake/flavors/13",
},
{
"rel": "bookmark",
- "href": "http://localhost/flavors/13",
+ "href": "http://localhost/fake/flavors/13",
},
],
},
@@ -450,12 +458,16 @@ class FlavorsXMLSerializationTest(test.TestCase):
<flavors xmlns="http://docs.openstack.org/compute/api/v1.1"
xmlns:atom="http://www.w3.org/2005/Atom">
<flavor id="23" name="flavor 23">
- <atom:link href="http://localhost/v1.1/flavors/23" rel="self"/>
- <atom:link href="http://localhost/flavors/23" rel="bookmark"/>
+ <atom:link href="http://localhost/v1.1/fake/flavors/23"
+ rel="self"/>
+ <atom:link href="http://localhost/fake/flavors/23"
+ rel="bookmark"/>
</flavor>
<flavor id="13" name="flavor 13">
- <atom:link href="http://localhost/v1.1/flavors/13" rel="self"/>
- <atom:link href="http://localhost/flavors/13" rel="bookmark"/>
+ <atom:link href="http://localhost/v1.1/fake/flavors/13"
+ rel="self"/>
+ <atom:link href="http://localhost/fake/flavors/13"
+ rel="bookmark"/>
</flavor>
</flavors>
""".replace(" ", "") % locals())
diff --git a/nova/tests/api/openstack/test_flavors_extra_specs.py b/nova/tests/api/openstack/test_flavors_extra_specs.py
index ccd1b0d9f..f382d06e9 100644
--- a/nova/tests/api/openstack/test_flavors_extra_specs.py
+++ b/nova/tests/api/openstack/test_flavors_extra_specs.py
@@ -63,7 +63,7 @@ class FlavorsExtraSpecsTest(test.TestCase):
def test_index(self):
self.stubs.Set(nova.db.api, 'instance_type_extra_specs_get',
return_flavor_extra_specs)
- request = webob.Request.blank('/v1.1/flavors/1/os-extra_specs')
+ request = webob.Request.blank('/v1.1/123/flavors/1/os-extra_specs')
res = request.get_response(fakes.wsgi_app())
self.assertEqual(200, res.status_int)
res_dict = json.loads(res.body)
@@ -73,7 +73,7 @@ class FlavorsExtraSpecsTest(test.TestCase):
def test_index_no_data(self):
self.stubs.Set(nova.db.api, 'instance_type_extra_specs_get',
return_empty_flavor_extra_specs)
- req = webob.Request.blank('/v1.1/flavors/1/os-extra_specs')
+ req = webob.Request.blank('/v1.1/123/flavors/1/os-extra_specs')
res = req.get_response(fakes.wsgi_app())
res_dict = json.loads(res.body)
self.assertEqual(200, res.status_int)
@@ -83,7 +83,7 @@ class FlavorsExtraSpecsTest(test.TestCase):
def test_show(self):
self.stubs.Set(nova.db.api, 'instance_type_extra_specs_get',
return_flavor_extra_specs)
- req = webob.Request.blank('/v1.1/flavors/1/os-extra_specs/key5')
+ req = webob.Request.blank('/v1.1/123/flavors/1/os-extra_specs/key5')
res = req.get_response(fakes.wsgi_app())
self.assertEqual(200, res.status_int)
res_dict = json.loads(res.body)
@@ -93,7 +93,7 @@ class FlavorsExtraSpecsTest(test.TestCase):
def test_show_spec_not_found(self):
self.stubs.Set(nova.db.api, 'instance_type_extra_specs_get',
return_empty_flavor_extra_specs)
- req = webob.Request.blank('/v1.1/flavors/1/os-extra_specs/key6')
+ req = webob.Request.blank('/v1.1/123/flavors/1/os-extra_specs/key6')
res = req.get_response(fakes.wsgi_app())
res_dict = json.loads(res.body)
self.assertEqual(404, res.status_int)
@@ -101,7 +101,7 @@ class FlavorsExtraSpecsTest(test.TestCase):
def test_delete(self):
self.stubs.Set(nova.db.api, 'instance_type_extra_specs_delete',
delete_flavor_extra_specs)
- req = webob.Request.blank('/v1.1/flavors/1/os-extra_specs/key5')
+ req = webob.Request.blank('/v1.1/123/flavors/1/os-extra_specs/key5')
req.method = 'DELETE'
res = req.get_response(fakes.wsgi_app())
self.assertEqual(200, res.status_int)
@@ -110,7 +110,7 @@ class FlavorsExtraSpecsTest(test.TestCase):
self.stubs.Set(nova.db.api,
'instance_type_extra_specs_update_or_create',
return_create_flavor_extra_specs)
- req = webob.Request.blank('/v1.1/flavors/1/os-extra_specs')
+ req = webob.Request.blank('/v1.1/123/flavors/1/os-extra_specs')
req.method = 'POST'
req.body = '{"extra_specs": {"key1": "value1"}}'
req.headers["content-type"] = "application/json"
@@ -124,7 +124,7 @@ class FlavorsExtraSpecsTest(test.TestCase):
self.stubs.Set(nova.db.api,
'instance_type_extra_specs_update_or_create',
return_create_flavor_extra_specs)
- req = webob.Request.blank('/v1.1/flavors/1/os-extra_specs')
+ req = webob.Request.blank('/v1.1/123/flavors/1/os-extra_specs')
req.method = 'POST'
req.headers["content-type"] = "application/json"
res = req.get_response(fakes.wsgi_app())
@@ -134,7 +134,7 @@ class FlavorsExtraSpecsTest(test.TestCase):
self.stubs.Set(nova.db.api,
'instance_type_extra_specs_update_or_create',
return_create_flavor_extra_specs)
- req = webob.Request.blank('/v1.1/flavors/1/os-extra_specs/key1')
+ req = webob.Request.blank('/v1.1/123/flavors/1/os-extra_specs/key1')
req.method = 'PUT'
req.body = '{"key1": "value1"}'
req.headers["content-type"] = "application/json"
@@ -148,7 +148,7 @@ class FlavorsExtraSpecsTest(test.TestCase):
self.stubs.Set(nova.db.api,
'instance_type_extra_specs_update_or_create',
return_create_flavor_extra_specs)
- req = webob.Request.blank('/v1.1/flavors/1/os-extra_specs/key1')
+ req = webob.Request.blank('/v1.1/123/flavors/1/os-extra_specs/key1')
req.method = 'PUT'
req.headers["content-type"] = "application/json"
res = req.get_response(fakes.wsgi_app())
@@ -158,7 +158,7 @@ class FlavorsExtraSpecsTest(test.TestCase):
self.stubs.Set(nova.db.api,
'instance_type_extra_specs_update_or_create',
return_create_flavor_extra_specs)
- req = webob.Request.blank('/v1.1/flavors/1/os-extra_specs/key1')
+ req = webob.Request.blank('/v1.1/123/flavors/1/os-extra_specs/key1')
req.method = 'PUT'
req.body = '{"key1": "value1", "key2": "value2"}'
req.headers["content-type"] = "application/json"
@@ -169,7 +169,7 @@ class FlavorsExtraSpecsTest(test.TestCase):
self.stubs.Set(nova.db.api,
'instance_type_extra_specs_update_or_create',
return_create_flavor_extra_specs)
- req = webob.Request.blank('/v1.1/flavors/1/os-extra_specs/bad')
+ req = webob.Request.blank('/v1.1/123/flavors/1/os-extra_specs/bad')
req.method = 'PUT'
req.body = '{"key1": "value1"}'
req.headers["content-type"] = "application/json"
diff --git a/nova/tests/api/openstack/test_image_metadata.py b/nova/tests/api/openstack/test_image_metadata.py
index 21743eeef..fe42e35e5 100644
--- a/nova/tests/api/openstack/test_image_metadata.py
+++ b/nova/tests/api/openstack/test_image_metadata.py
@@ -90,7 +90,7 @@ class ImageMetaDataTest(test.TestCase):
fakes.stub_out_glance(self.stubs, self.IMAGE_FIXTURES)
def test_index(self):
- req = webob.Request.blank('/v1.1/images/1/metadata')
+ req = webob.Request.blank('/v1.1/123/images/1/metadata')
res = req.get_response(fakes.wsgi_app())
res_dict = json.loads(res.body)
self.assertEqual(200, res.status_int)
@@ -100,7 +100,7 @@ class ImageMetaDataTest(test.TestCase):
self.assertEqual(value, res_dict['metadata'][key])
def test_show(self):
- req = webob.Request.blank('/v1.1/images/1/metadata/key1')
+ req = webob.Request.blank('/v1.1/fake/images/1/metadata/key1')
res = req.get_response(fakes.wsgi_app())
res_dict = json.loads(res.body)
self.assertEqual(200, res.status_int)
@@ -109,12 +109,12 @@ class ImageMetaDataTest(test.TestCase):
self.assertEqual('value1', res_dict['meta']['key1'])
def test_show_not_found(self):
- req = webob.Request.blank('/v1.1/images/1/metadata/key9')
+ req = webob.Request.blank('/v1.1/fake/images/1/metadata/key9')
res = req.get_response(fakes.wsgi_app())
self.assertEqual(404, res.status_int)
def test_create(self):
- req = webob.Request.blank('/v1.1/images/2/metadata')
+ req = webob.Request.blank('/v1.1/fake/images/2/metadata')
req.method = 'POST'
req.body = '{"metadata": {"key9": "value9"}}'
req.headers["content-type"] = "application/json"
@@ -134,7 +134,7 @@ class ImageMetaDataTest(test.TestCase):
self.assertEqual(expected_output, actual_output)
def test_update_all(self):
- req = webob.Request.blank('/v1.1/images/2/metadata')
+ req = webob.Request.blank('/v1.1/fake/images/1/metadata')
req.method = 'PUT'
req.body = '{"metadata": {"key9": "value9"}}'
req.headers["content-type"] = "application/json"
@@ -152,7 +152,7 @@ class ImageMetaDataTest(test.TestCase):
self.assertEqual(expected_output, actual_output)
def test_update_item(self):
- req = webob.Request.blank('/v1.1/images/1/metadata/key1')
+ req = webob.Request.blank('/v1.1/fake/images/1/metadata/key1')
req.method = 'PUT'
req.body = '{"meta": {"key1": "zz"}}'
req.headers["content-type"] = "application/json"
@@ -168,7 +168,7 @@ class ImageMetaDataTest(test.TestCase):
self.assertEqual(actual_output, expected_output)
def test_update_item_bad_body(self):
- req = webob.Request.blank('/v1.1/images/1/metadata/key1')
+ req = webob.Request.blank('/v1.1/fake/images/1/metadata/key1')
req.method = 'PUT'
req.body = '{"key1": "zz"}'
req.headers["content-type"] = "application/json"
@@ -176,7 +176,7 @@ class ImageMetaDataTest(test.TestCase):
self.assertEqual(400, res.status_int)
def test_update_item_too_many_keys(self):
- req = webob.Request.blank('/v1.1/images/1/metadata/key1')
+ req = webob.Request.blank('/v1.1/fake/images/1/metadata/key1')
req.method = 'PUT'
req.body = '{"meta": {"key1": "value1", "key2": "value2"}}'
req.headers["content-type"] = "application/json"
@@ -184,7 +184,7 @@ class ImageMetaDataTest(test.TestCase):
self.assertEqual(400, res.status_int)
def test_update_item_body_uri_mismatch(self):
- req = webob.Request.blank('/v1.1/images/1/metadata/bad')
+ req = webob.Request.blank('/v1.1/fake/images/1/metadata/bad')
req.method = 'PUT'
req.body = '{"meta": {"key1": "value1"}}'
req.headers["content-type"] = "application/json"
@@ -192,7 +192,7 @@ class ImageMetaDataTest(test.TestCase):
self.assertEqual(400, res.status_int)
def test_update_item_xml(self):
- req = webob.Request.blank('/v1.1/images/1/metadata/key1')
+ req = webob.Request.blank('/v1.1/fake/images/1/metadata/key1')
req.method = 'PUT'
req.body = '<meta key="key1">five</meta>'
req.headers["content-type"] = "application/xml"
@@ -208,14 +208,14 @@ class ImageMetaDataTest(test.TestCase):
self.assertEqual(actual_output, expected_output)
def test_delete(self):
- req = webob.Request.blank('/v1.1/images/2/metadata/key1')
+ req = webob.Request.blank('/v1.1/fake/images/2/metadata/key1')
req.method = 'DELETE'
res = req.get_response(fakes.wsgi_app())
self.assertEqual(204, res.status_int)
self.assertEqual('', res.body)
def test_delete_not_found(self):
- req = webob.Request.blank('/v1.1/images/2/metadata/blah')
+ req = webob.Request.blank('/v1.1/fake/images/2/metadata/blah')
req.method = 'DELETE'
res = req.get_response(fakes.wsgi_app())
self.assertEqual(404, res.status_int)
@@ -225,7 +225,7 @@ class ImageMetaDataTest(test.TestCase):
for num in range(FLAGS.quota_metadata_items + 1):
data['metadata']['key%i' % num] = "blah"
json_string = str(data).replace("\'", "\"")
- req = webob.Request.blank('/v1.1/images/2/metadata')
+ req = webob.Request.blank('/v1.1/fake/images/2/metadata')
req.method = 'POST'
req.body = json_string
req.headers["content-type"] = "application/json"
@@ -233,7 +233,7 @@ class ImageMetaDataTest(test.TestCase):
self.assertEqual(413, res.status_int)
def test_too_many_metadata_items_on_put(self):
- req = webob.Request.blank('/v1.1/images/3/metadata/blah')
+ req = webob.Request.blank('/v1.1/fake/images/3/metadata/blah')
req.method = 'PUT'
req.body = '{"meta": {"blah": "blah"}}'
req.headers["content-type"] = "application/json"
diff --git a/nova/tests/api/openstack/test_images.py b/nova/tests/api/openstack/test_images.py
index 383ed2e03..2a7cfc382 100644
--- a/nova/tests/api/openstack/test_images.py
+++ b/nova/tests/api/openstack/test_images.py
@@ -339,6 +339,11 @@ class ImageControllerWithGlanceServiceTest(test.TestCase):
self.stubs.UnsetAll()
super(ImageControllerWithGlanceServiceTest, self).tearDown()
+ def _get_fake_context(self):
+ class Context(object):
+ project_id = 'fake'
+ return Context()
+
def _applicable_fixture(self, fixture, user_id):
"""Determine if this fixture is applicable for given user id."""
is_public = fixture["is_public"]
@@ -386,13 +391,13 @@ class ImageControllerWithGlanceServiceTest(test.TestCase):
self.assertEqual(expected_image, actual_image)
def test_get_image_v1_1(self):
- request = webob.Request.blank('/v1.1/images/124')
+ request = webob.Request.blank('/v1.1/fake/images/124')
response = request.get_response(fakes.wsgi_app())
actual_image = json.loads(response.body)
- href = "http://localhost/v1.1/images/124"
- bookmark = "http://localhost/images/124"
+ href = "http://localhost/v1.1/fake/images/124"
+ bookmark = "http://localhost/fake/images/124"
server_href = "http://localhost/v1.1/servers/42"
server_bookmark = "http://localhost/servers/42"
@@ -508,7 +513,7 @@ class ImageControllerWithGlanceServiceTest(test.TestCase):
self.assertEqual(expected.toxml(), actual.toxml())
def test_get_image_404_v1_1_json(self):
- request = webob.Request.blank('/v1.1/images/NonExistantImage')
+ request = webob.Request.blank('/v1.1/fake/images/NonExistantImage')
response = request.get_response(fakes.wsgi_app())
self.assertEqual(404, response.status_int)
@@ -524,7 +529,7 @@ class ImageControllerWithGlanceServiceTest(test.TestCase):
self.assertEqual(expected, actual)
def test_get_image_404_v1_1_xml(self):
- request = webob.Request.blank('/v1.1/images/NonExistantImage')
+ request = webob.Request.blank('/v1.1/fake/images/NonExistantImage')
request.accept = "application/xml"
response = request.get_response(fakes.wsgi_app())
self.assertEqual(404, response.status_int)
@@ -545,7 +550,7 @@ class ImageControllerWithGlanceServiceTest(test.TestCase):
self.assertEqual(expected.toxml(), actual.toxml())
def test_get_image_index_v1_1(self):
- request = webob.Request.blank('/v1.1/images')
+ request = webob.Request.blank('/v1.1/fake/images')
response = request.get_response(fakes.wsgi_app())
response_dict = json.loads(response.body)
@@ -558,8 +563,8 @@ class ImageControllerWithGlanceServiceTest(test.TestCase):
fixtures.remove(image)
continue
- href = "http://localhost/v1.1/images/%s" % image["id"]
- bookmark = "http://localhost/images/%s" % image["id"]
+ href = "http://localhost/v1.1/fake/images/%s" % image["id"]
+ bookmark = "http://localhost/fake/images/%s" % image["id"]
test_image = {
"id": image["id"],
"name": image["name"],
@@ -637,7 +642,7 @@ class ImageControllerWithGlanceServiceTest(test.TestCase):
self.assertDictListMatch(expected, response_list)
def test_get_image_details_v1_1(self):
- request = webob.Request.blank('/v1.1/images/detail')
+ request = webob.Request.blank('/v1.1/fake/images/detail')
response = request.get_response(fakes.wsgi_app())
response_dict = json.loads(response.body)
@@ -655,11 +660,11 @@ class ImageControllerWithGlanceServiceTest(test.TestCase):
'progress': 100,
"links": [{
"rel": "self",
- "href": "http://localhost/v1.1/images/123",
+ "href": "http://localhost/v1.1/fake/images/123",
},
{
"rel": "bookmark",
- "href": "http://localhost/images/123",
+ "href": "http://localhost/fake/images/123",
}],
},
{
@@ -686,11 +691,11 @@ class ImageControllerWithGlanceServiceTest(test.TestCase):
},
"links": [{
"rel": "self",
- "href": "http://localhost/v1.1/images/124",
+ "href": "http://localhost/v1.1/fake/images/124",
},
{
"rel": "bookmark",
- "href": "http://localhost/images/124",
+ "href": "http://localhost/fake/images/124",
}],
},
{
@@ -717,11 +722,11 @@ class ImageControllerWithGlanceServiceTest(test.TestCase):
},
"links": [{
"rel": "self",
- "href": "http://localhost/v1.1/images/125",
+ "href": "http://localhost/v1.1/fake/images/125",
},
{
"rel": "bookmark",
- "href": "http://localhost/images/125",
+ "href": "http://localhost/fake/images/125",
}],
},
{
@@ -748,11 +753,11 @@ class ImageControllerWithGlanceServiceTest(test.TestCase):
},
"links": [{
"rel": "self",
- "href": "http://localhost/v1.1/images/126",
+ "href": "http://localhost/v1.1/fake/images/126",
},
{
"rel": "bookmark",
- "href": "http://localhost/images/126",
+ "href": "http://localhost/fake/images/126",
}],
},
{
@@ -779,11 +784,11 @@ class ImageControllerWithGlanceServiceTest(test.TestCase):
},
"links": [{
"rel": "self",
- "href": "http://localhost/v1.1/images/127",
+ "href": "http://localhost/v1.1/fake/images/127",
},
{
"rel": "bookmark",
- "href": "http://localhost/images/127",
+ "href": "http://localhost/fake/images/127",
}],
},
{
@@ -796,11 +801,11 @@ class ImageControllerWithGlanceServiceTest(test.TestCase):
'progress': 100,
"links": [{
"rel": "self",
- "href": "http://localhost/v1.1/images/129",
+ "href": "http://localhost/v1.1/fake/images/129",
},
{
"rel": "bookmark",
- "href": "http://localhost/images/129",
+ "href": "http://localhost/fake/images/129",
}],
},
]
@@ -809,7 +814,7 @@ class ImageControllerWithGlanceServiceTest(test.TestCase):
def test_image_filter_with_name(self):
image_service = self.mox.CreateMockAnything()
- context = object()
+ context = self._get_fake_context()
filters = {'name': 'testname'}
image_service.index(context, filters=filters).AndReturn([])
self.mox.ReplayAll()
@@ -821,7 +826,7 @@ class ImageControllerWithGlanceServiceTest(test.TestCase):
def test_image_filter_with_status(self):
image_service = self.mox.CreateMockAnything()
- context = object()
+ context = self._get_fake_context()
filters = {'status': 'ACTIVE'}
image_service.index(context, filters=filters).AndReturn([])
self.mox.ReplayAll()
@@ -833,7 +838,7 @@ class ImageControllerWithGlanceServiceTest(test.TestCase):
def test_image_filter_with_property(self):
image_service = self.mox.CreateMockAnything()
- context = object()
+ context = self._get_fake_context()
filters = {'property-test': '3'}
image_service.index(context, filters=filters).AndReturn([])
self.mox.ReplayAll()
@@ -845,7 +850,7 @@ class ImageControllerWithGlanceServiceTest(test.TestCase):
def test_image_filter_server(self):
image_service = self.mox.CreateMockAnything()
- context = object()
+ context = self._get_fake_context()
# 'server' should be converted to 'property-instance_ref'
filters = {'property-instance_ref': 'http://localhost:8774/servers/12'}
image_service.index(context, filters=filters).AndReturn([])
@@ -859,7 +864,7 @@ class ImageControllerWithGlanceServiceTest(test.TestCase):
def test_image_filter_changes_since(self):
image_service = self.mox.CreateMockAnything()
- context = object()
+ context = self._get_fake_context()
filters = {'changes-since': '2011-01-24T17:08Z'}
image_service.index(context, filters=filters).AndReturn([])
self.mox.ReplayAll()
@@ -872,7 +877,7 @@ class ImageControllerWithGlanceServiceTest(test.TestCase):
def test_image_filter_with_type(self):
image_service = self.mox.CreateMockAnything()
- context = object()
+ context = self._get_fake_context()
filters = {'property-image_type': 'BASE'}
image_service.index(context, filters=filters).AndReturn([])
self.mox.ReplayAll()
@@ -884,7 +889,7 @@ class ImageControllerWithGlanceServiceTest(test.TestCase):
def test_image_filter_not_supported(self):
image_service = self.mox.CreateMockAnything()
- context = object()
+ context = self._get_fake_context()
filters = {'status': 'ACTIVE'}
image_service.detail(context, filters=filters).AndReturn([])
self.mox.ReplayAll()
@@ -897,7 +902,7 @@ class ImageControllerWithGlanceServiceTest(test.TestCase):
def test_image_no_filters(self):
image_service = self.mox.CreateMockAnything()
- context = object()
+ context = self._get_fake_context()
filters = {}
image_service.index(
context, filters=filters).AndReturn([])
@@ -911,11 +916,11 @@ class ImageControllerWithGlanceServiceTest(test.TestCase):
def test_image_detail_filter_with_name(self):
image_service = self.mox.CreateMockAnything()
- context = object()
+ context = self._get_fake_context()
filters = {'name': 'testname'}
image_service.detail(context, filters=filters).AndReturn([])
self.mox.ReplayAll()
- request = webob.Request.blank('/v1.1/images/detail?name=testname')
+ request = webob.Request.blank('/v1.1/fake/images/detail?name=testname')
request.environ['nova.context'] = context
controller = images.ControllerV11(image_service=image_service)
controller.detail(request)
@@ -923,11 +928,11 @@ class ImageControllerWithGlanceServiceTest(test.TestCase):
def test_image_detail_filter_with_status(self):
image_service = self.mox.CreateMockAnything()
- context = object()
+ context = self._get_fake_context()
filters = {'status': 'ACTIVE'}
image_service.detail(context, filters=filters).AndReturn([])
self.mox.ReplayAll()
- request = webob.Request.blank('/v1.1/images/detail?status=ACTIVE')
+ request = webob.Request.blank('/v1.1/fake/images/detail?status=ACTIVE')
request.environ['nova.context'] = context
controller = images.ControllerV11(image_service=image_service)
controller.detail(request)
@@ -935,11 +940,12 @@ class ImageControllerWithGlanceServiceTest(test.TestCase):
def test_image_detail_filter_with_property(self):
image_service = self.mox.CreateMockAnything()
- context = object()
+ context = self._get_fake_context()
filters = {'property-test': '3'}
image_service.detail(context, filters=filters).AndReturn([])
self.mox.ReplayAll()
- request = webob.Request.blank('/v1.1/images/detail?property-test=3')
+ request = webob.Request.blank(
+ '/v1.1/fake/images/detail?property-test=3')
request.environ['nova.context'] = context
controller = images.ControllerV11(image_service=image_service)
controller.detail(request)
@@ -947,12 +953,12 @@ class ImageControllerWithGlanceServiceTest(test.TestCase):
def test_image_detail_filter_server(self):
image_service = self.mox.CreateMockAnything()
- context = object()
+ context = self._get_fake_context()
# 'server' should be converted to 'property-instance_ref'
filters = {'property-instance_ref': 'http://localhost:8774/servers/12'}
image_service.index(context, filters=filters).AndReturn([])
self.mox.ReplayAll()
- request = webob.Request.blank('/v1.1/images/detail?server='
+ request = webob.Request.blank('/v1.1/fake/images/detail?server='
'http://localhost:8774/servers/12')
request.environ['nova.context'] = context
controller = images.ControllerV11(image_service=image_service)
@@ -961,11 +967,11 @@ class ImageControllerWithGlanceServiceTest(test.TestCase):
def test_image_detail_filter_changes_since(self):
image_service = self.mox.CreateMockAnything()
- context = object()
+ context = self._get_fake_context()
filters = {'changes-since': '2011-01-24T17:08Z'}
image_service.index(context, filters=filters).AndReturn([])
self.mox.ReplayAll()
- request = webob.Request.blank('/v1.1/images/detail?changes-since='
+ request = webob.Request.blank('/v1.1/fake/images/detail?changes-since='
'2011-01-24T17:08Z')
request.environ['nova.context'] = context
controller = images.ControllerV11(image_service=image_service)
@@ -974,11 +980,11 @@ class ImageControllerWithGlanceServiceTest(test.TestCase):
def test_image_detail_filter_with_type(self):
image_service = self.mox.CreateMockAnything()
- context = object()
+ context = self._get_fake_context()
filters = {'property-image_type': 'BASE'}
image_service.index(context, filters=filters).AndReturn([])
self.mox.ReplayAll()
- request = webob.Request.blank('/v1.1/images/detail?type=BASE')
+ request = webob.Request.blank('/v1.1/fake/images/detail?type=BASE')
request.environ['nova.context'] = context
controller = images.ControllerV11(image_service=image_service)
controller.index(request)
@@ -986,11 +992,11 @@ class ImageControllerWithGlanceServiceTest(test.TestCase):
def test_image_detail_filter_not_supported(self):
image_service = self.mox.CreateMockAnything()
- context = object()
+ context = self._get_fake_context()
filters = {'status': 'ACTIVE'}
image_service.detail(context, filters=filters).AndReturn([])
self.mox.ReplayAll()
- request = webob.Request.blank('/v1.1/images/detail?status=ACTIVE&'
+ request = webob.Request.blank('/v1.1/fake/images/detail?status=ACTIVE&'
'UNSUPPORTEDFILTER=testname')
request.environ['nova.context'] = context
controller = images.ControllerV11(image_service=image_service)
@@ -999,11 +1005,11 @@ class ImageControllerWithGlanceServiceTest(test.TestCase):
def test_image_detail_no_filters(self):
image_service = self.mox.CreateMockAnything()
- context = object()
+ context = self._get_fake_context()
filters = {}
image_service.detail(context, filters=filters).AndReturn([])
self.mox.ReplayAll()
- request = webob.Request.blank('/v1.1/images/detail')
+ request = webob.Request.blank('/v1.1/fake/images/detail')
request.environ['nova.context'] = context
controller = images.ControllerV11(image_service=image_service)
controller.detail(request)
@@ -1123,8 +1129,8 @@ class ImageXMLSerializationTest(test.TestCase):
TIMESTAMP = "2010-10-11T10:30:22Z"
SERVER_HREF = 'http://localhost/v1.1/servers/123'
SERVER_BOOKMARK = 'http://localhost/servers/123'
- IMAGE_HREF = 'http://localhost/v1.1/images/%s'
- IMAGE_BOOKMARK = 'http://localhost/images/%s'
+ IMAGE_HREF = 'http://localhost/v1.1/fake/images/%s'
+ IMAGE_BOOKMARK = 'http://localhost/fake/images/%s'
def test_show(self):
serializer = images.ImageXMLSerializer()
diff --git a/nova/tests/api/openstack/test_server_actions.py b/nova/tests/api/openstack/test_server_actions.py
index 80a27e30f..90fe2f0b3 100644
--- a/nova/tests/api/openstack/test_server_actions.py
+++ b/nova/tests/api/openstack/test_server_actions.py
@@ -489,7 +489,7 @@ class ServerActionsTestV11(test.TestCase):
def test_server_bad_body(self):
body = {}
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/fake/servers/1/action')
req.method = 'POST'
req.content_type = 'application/json'
req.body = json.dumps(body)
@@ -498,7 +498,7 @@ class ServerActionsTestV11(test.TestCase):
def test_server_unknown_action(self):
body = {'sockTheFox': {'fakekey': '1234'}}
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/fake/servers/1/action')
req.method = 'POST'
req.content_type = 'application/json'
req.body = json.dumps(body)
@@ -509,7 +509,7 @@ class ServerActionsTestV11(test.TestCase):
mock_method = MockSetAdminPassword()
self.stubs.Set(nova.compute.api.API, 'set_admin_password', mock_method)
body = {'changePassword': {'adminPass': '1234pass'}}
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/fake/servers/1/action')
req.method = 'POST'
req.content_type = 'application/json'
req.body = json.dumps(body)
@@ -521,7 +521,7 @@ class ServerActionsTestV11(test.TestCase):
def test_server_change_password_xml(self):
mock_method = MockSetAdminPassword()
self.stubs.Set(nova.compute.api.API, 'set_admin_password', mock_method)
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/fake/servers/1/action')
req.method = 'POST'
req.content_type = "application/xml"
req.body = """<?xml version="1.0" encoding="UTF-8"?>
@@ -535,7 +535,7 @@ class ServerActionsTestV11(test.TestCase):
def test_server_change_password_not_a_string(self):
body = {'changePassword': {'adminPass': 1234}}
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/fake/servers/1/action')
req.method = 'POST'
req.content_type = 'application/json'
req.body = json.dumps(body)
@@ -544,7 +544,7 @@ class ServerActionsTestV11(test.TestCase):
def test_server_change_password_bad_request(self):
body = {'changePassword': {'pass': '12345'}}
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/fake/servers/1/action')
req.method = 'POST'
req.content_type = 'application/json'
req.body = json.dumps(body)
@@ -553,7 +553,7 @@ class ServerActionsTestV11(test.TestCase):
def test_server_change_password_empty_string(self):
body = {'changePassword': {'adminPass': ''}}
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/fake/servers/1/action')
req.method = 'POST'
req.content_type = 'application/json'
req.body = json.dumps(body)
@@ -562,7 +562,7 @@ class ServerActionsTestV11(test.TestCase):
def test_server_change_password_none(self):
body = {'changePassword': {'adminPass': None}}
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/fake/servers/1/action')
req.method = 'POST'
req.content_type = 'application/json'
req.body = json.dumps(body)
@@ -571,7 +571,7 @@ class ServerActionsTestV11(test.TestCase):
def test_server_reboot_hard(self):
body = dict(reboot=dict(type="HARD"))
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/fake/servers/1/action')
req.method = 'POST'
req.content_type = 'application/json'
req.body = json.dumps(body)
@@ -580,7 +580,7 @@ class ServerActionsTestV11(test.TestCase):
def test_server_reboot_soft(self):
body = dict(reboot=dict(type="SOFT"))
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/fake/servers/1/action')
req.method = 'POST'
req.content_type = 'application/json'
req.body = json.dumps(body)
@@ -589,7 +589,7 @@ class ServerActionsTestV11(test.TestCase):
def test_server_reboot_incorrect_type(self):
body = dict(reboot=dict(type="NOT_A_TYPE"))
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/fake/servers/1/action')
req.method = 'POST'
req.content_type = 'application/json'
req.body = json.dumps(body)
@@ -598,7 +598,7 @@ class ServerActionsTestV11(test.TestCase):
def test_server_reboot_missing_type(self):
body = dict(reboot=dict())
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/fake/servers/1/action')
req.method = 'POST'
req.content_type = 'application/json'
req.body = json.dumps(body)
@@ -612,7 +612,7 @@ class ServerActionsTestV11(test.TestCase):
},
}
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/fake/servers/1/action')
req.method = 'POST'
req.content_type = 'application/json'
req.body = json.dumps(body)
@@ -633,7 +633,7 @@ class ServerActionsTestV11(test.TestCase):
self.stubs.Set(nova.db, 'instance_get_by_uuid',
return_server_with_uuid_and_power_state(state))
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/fake/servers/1/action')
req.method = 'POST'
req.content_type = 'application/json'
req.body = json.dumps(body)
@@ -651,7 +651,7 @@ class ServerActionsTestV11(test.TestCase):
},
}
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/fake/servers/1/action')
req.method = 'POST'
req.content_type = 'application/json'
req.body = json.dumps(body)
@@ -667,7 +667,7 @@ class ServerActionsTestV11(test.TestCase):
},
}
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/fake/servers/1/action')
req.method = 'POST'
req.content_type = 'application/json'
req.body = json.dumps(body)
@@ -682,7 +682,7 @@ class ServerActionsTestV11(test.TestCase):
},
}
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/fake/servers/1/action')
req.method = 'POST'
req.content_type = 'application/json'
req.body = json.dumps(body)
@@ -701,7 +701,7 @@ class ServerActionsTestV11(test.TestCase):
},
}
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/fake/servers/1/action')
req.method = 'POST'
req.content_type = 'application/json'
req.body = json.dumps(body)
@@ -720,7 +720,7 @@ class ServerActionsTestV11(test.TestCase):
},
}
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/fake/servers/1/action')
req.method = 'POST'
req.content_type = 'application/json'
req.body = json.dumps(body)
@@ -730,7 +730,7 @@ class ServerActionsTestV11(test.TestCase):
def test_resize_server(self):
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/fake/servers/1/action')
req.content_type = 'application/json'
req.method = 'POST'
body_dict = dict(resize=dict(flavorRef="http://localhost/3"))
@@ -748,7 +748,7 @@ class ServerActionsTestV11(test.TestCase):
self.assertEqual(self.resize_called, True)
def test_resize_server_no_flavor(self):
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/fake/servers/1/action')
req.content_type = 'application/json'
req.method = 'POST'
body_dict = dict(resize=dict())
@@ -758,7 +758,7 @@ class ServerActionsTestV11(test.TestCase):
self.assertEqual(res.status_int, 400)
def test_resize_server_no_flavor_ref(self):
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/fake/servers/1/action')
req.content_type = 'application/json'
req.method = 'POST'
body_dict = dict(resize=dict(flavorRef=None))
@@ -768,7 +768,7 @@ class ServerActionsTestV11(test.TestCase):
self.assertEqual(res.status_int, 400)
def test_confirm_resize_server(self):
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/fake/servers/1/action')
req.content_type = 'application/json'
req.method = 'POST'
body_dict = dict(confirmResize=None)
@@ -786,7 +786,7 @@ class ServerActionsTestV11(test.TestCase):
self.assertEqual(self.confirm_resize_called, True)
def test_revert_resize_server(self):
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/fake/servers/1/action')
req.content_type = 'application/json'
req.method = 'POST'
body_dict = dict(revertResize=None)
@@ -809,7 +809,7 @@ class ServerActionsTestV11(test.TestCase):
'name': 'Snapshot 1',
},
}
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/fake/servers/1/action')
req.method = 'POST'
req.body = json.dumps(body)
req.headers["content-type"] = "application/json"
@@ -828,7 +828,7 @@ class ServerActionsTestV11(test.TestCase):
'name': 'Snapshot 1',
},
}
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/fake/servers/1/action')
req.method = 'POST'
req.body = json.dumps(body)
req.headers["content-type"] = "application/json"
@@ -842,7 +842,7 @@ class ServerActionsTestV11(test.TestCase):
'metadata': {'key': 'asdf'},
},
}
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/fake/servers/1/action')
req.method = 'POST'
req.body = json.dumps(body)
req.headers["content-type"] = "application/json"
@@ -860,7 +860,7 @@ class ServerActionsTestV11(test.TestCase):
}
for num in range(FLAGS.quota_metadata_items + 1):
body['createImage']['metadata']['foo%i' % num] = "bar"
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/fake/servers/1/action')
req.method = 'POST'
req.body = json.dumps(body)
req.headers["content-type"] = "application/json"
@@ -871,7 +871,7 @@ class ServerActionsTestV11(test.TestCase):
body = {
'createImage': {},
}
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/fake/servers/1/action')
req.method = 'POST'
req.body = json.dumps(body)
req.headers["content-type"] = "application/json"
@@ -885,7 +885,7 @@ class ServerActionsTestV11(test.TestCase):
'metadata': 'henry',
},
}
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/fake/servers/1/action')
req.method = 'POST'
req.body = json.dumps(body)
req.headers["content-type"] = "application/json"
@@ -904,7 +904,7 @@ class ServerActionsTestV11(test.TestCase):
},
}
- req = webob.Request.blank('/v1.1/servers/1/action')
+ req = webob.Request.blank('/v1.1/fake/servers/1/action')
req.method = 'POST'
req.body = json.dumps(body)
req.headers["content-type"] = "application/json"
diff --git a/nova/tests/api/openstack/test_server_metadata.py b/nova/tests/api/openstack/test_server_metadata.py
index 8512bd518..296bbd9dc 100644
--- a/nova/tests/api/openstack/test_server_metadata.py
+++ b/nova/tests/api/openstack/test_server_metadata.py
@@ -83,7 +83,7 @@ class ServerMetaDataTest(test.TestCase):
def test_index(self):
self.stubs.Set(nova.db.api, 'instance_metadata_get',
return_server_metadata)
- req = webob.Request.blank('/v1.1/servers/1/metadata')
+ req = webob.Request.blank('/v1.1/fake/servers/1/metadata')
res = req.get_response(fakes.wsgi_app())
self.assertEqual(200, res.status_int)
res_dict = json.loads(res.body)
@@ -100,7 +100,7 @@ class ServerMetaDataTest(test.TestCase):
def test_index_xml(self):
self.stubs.Set(nova.db.api, 'instance_metadata_get',
return_server_metadata)
- request = webob.Request.blank("/v1.1/servers/1/metadata")
+ request = webob.Request.blank("/v1.1/fake/servers/1/metadata")
request.accept = "application/xml"
response = request.get_response(fakes.wsgi_app())
self.assertEqual(200, response.status_int)
@@ -120,14 +120,14 @@ class ServerMetaDataTest(test.TestCase):
def test_index_nonexistant_server(self):
self.stubs.Set(nova.db.api, 'instance_get', return_server_nonexistant)
- req = webob.Request.blank('/v1.1/servers/1/metadata')
+ req = webob.Request.blank('/v1.1/fake/servers/1/metadata')
res = req.get_response(fakes.wsgi_app())
self.assertEqual(404, res.status_int)
def test_index_no_data(self):
self.stubs.Set(nova.db.api, 'instance_metadata_get',
return_empty_server_metadata)
- req = webob.Request.blank('/v1.1/servers/1/metadata')
+ req = webob.Request.blank('/v1.1/fake/servers/1/metadata')
res = req.get_response(fakes.wsgi_app())
self.assertEqual(200, res.status_int)
res_dict = json.loads(res.body)
@@ -137,7 +137,7 @@ class ServerMetaDataTest(test.TestCase):
def test_show(self):
self.stubs.Set(nova.db.api, 'instance_metadata_get',
return_server_metadata)
- req = webob.Request.blank('/v1.1/servers/1/metadata/key2')
+ req = webob.Request.blank('/v1.1/fake/servers/1/metadata/key2')
res = req.get_response(fakes.wsgi_app())
res_dict = json.loads(res.body)
self.assertEqual(200, res.status_int)
@@ -147,7 +147,7 @@ class ServerMetaDataTest(test.TestCase):
def test_show_xml(self):
self.stubs.Set(nova.db.api, 'instance_metadata_get',
return_server_metadata)
- request = webob.Request.blank("/v1.1/servers/1/metadata/key2")
+ request = webob.Request.blank("/v1.1/fake/servers/1/metadata/key2")
request.accept = "application/xml"
response = request.get_response(fakes.wsgi_app())
self.assertEqual(200, response.status_int)
@@ -164,14 +164,14 @@ class ServerMetaDataTest(test.TestCase):
def test_show_nonexistant_server(self):
self.stubs.Set(nova.db.api, 'instance_get', return_server_nonexistant)
- req = webob.Request.blank('/v1.1/servers/1/metadata/key2')
+ req = webob.Request.blank('/v1.1/fake/servers/1/metadata/key2')
res = req.get_response(fakes.wsgi_app())
self.assertEqual(404, res.status_int)
def test_show_meta_not_found(self):
self.stubs.Set(nova.db.api, 'instance_metadata_get',
return_empty_server_metadata)
- req = webob.Request.blank('/v1.1/servers/1/metadata/key6')
+ req = webob.Request.blank('/v1.1/fake/servers/1/metadata/key6')
res = req.get_response(fakes.wsgi_app())
self.assertEqual(404, res.status_int)
@@ -180,7 +180,7 @@ class ServerMetaDataTest(test.TestCase):
return_server_metadata)
self.stubs.Set(nova.db.api, 'instance_metadata_delete',
delete_server_metadata)
- req = webob.Request.blank('/v1.1/servers/1/metadata/key2')
+ req = webob.Request.blank('/v1.1/fake/servers/1/metadata/key2')
req.method = 'DELETE'
res = req.get_response(fakes.wsgi_app())
self.assertEqual(204, res.status_int)
@@ -188,7 +188,7 @@ class ServerMetaDataTest(test.TestCase):
def test_delete_nonexistant_server(self):
self.stubs.Set(nova.db.api, 'instance_get', return_server_nonexistant)
- req = webob.Request.blank('/v1.1/servers/1/metadata/key1')
+ req = webob.Request.blank('/v1.1/fake/servers/1/metadata/key1')
req.method = 'DELETE'
res = req.get_response(fakes.wsgi_app())
self.assertEqual(404, res.status_int)
@@ -196,7 +196,7 @@ class ServerMetaDataTest(test.TestCase):
def test_delete_meta_not_found(self):
self.stubs.Set(nova.db.api, 'instance_metadata_get',
return_empty_server_metadata)
- req = webob.Request.blank('/v1.1/servers/1/metadata/key6')
+ req = webob.Request.blank('/v1.1/fake/servers/1/metadata/key6')
req.method = 'DELETE'
res = req.get_response(fakes.wsgi_app())
self.assertEqual(404, res.status_int)
@@ -206,7 +206,7 @@ class ServerMetaDataTest(test.TestCase):
return_server_metadata)
self.stubs.Set(nova.db.api, 'instance_metadata_update',
return_create_instance_metadata)
- req = webob.Request.blank('/v1.1/servers/1/metadata')
+ req = webob.Request.blank('/v1.1/fake/servers/1/metadata')
req.method = 'POST'
req.content_type = "application/json"
input = {"metadata": {"key9": "value9"}}
@@ -227,7 +227,7 @@ class ServerMetaDataTest(test.TestCase):
return_server_metadata)
self.stubs.Set(nova.db.api, "instance_metadata_update",
return_create_instance_metadata)
- req = webob.Request.blank("/v1.1/servers/1/metadata")
+ req = webob.Request.blank("/v1.1/fake/servers/1/metadata")
req.method = "POST"
req.content_type = "application/xml"
req.accept = "application/xml"
@@ -258,7 +258,7 @@ class ServerMetaDataTest(test.TestCase):
def test_create_empty_body(self):
self.stubs.Set(nova.db.api, 'instance_metadata_update',
return_create_instance_metadata)
- req = webob.Request.blank('/v1.1/servers/1/metadata')
+ req = webob.Request.blank('/v1.1/fake/servers/1/metadata')
req.method = 'POST'
req.headers["content-type"] = "application/json"
res = req.get_response(fakes.wsgi_app())
@@ -266,7 +266,7 @@ class ServerMetaDataTest(test.TestCase):
def test_create_nonexistant_server(self):
self.stubs.Set(nova.db.api, 'instance_get', return_server_nonexistant)
- req = webob.Request.blank('/v1.1/servers/100/metadata')
+ req = webob.Request.blank('/v1.1/fake/servers/100/metadata')
req.method = 'POST'
req.body = '{"metadata": {"key1": "value1"}}'
req.headers["content-type"] = "application/json"
@@ -276,7 +276,7 @@ class ServerMetaDataTest(test.TestCase):
def test_update_all(self):
self.stubs.Set(nova.db.api, 'instance_metadata_update',
return_create_instance_metadata)
- req = webob.Request.blank('/v1.1/servers/1/metadata')
+ req = webob.Request.blank('/v1.1/fake/servers/1/metadata')
req.method = 'PUT'
req.content_type = "application/json"
expected = {
@@ -294,7 +294,7 @@ class ServerMetaDataTest(test.TestCase):
def test_update_all_empty_container(self):
self.stubs.Set(nova.db.api, 'instance_metadata_update',
return_create_instance_metadata)
- req = webob.Request.blank('/v1.1/servers/1/metadata')
+ req = webob.Request.blank('/v1.1/fake/servers/1/metadata')
req.method = 'PUT'
req.content_type = "application/json"
expected = {'metadata': {}}
@@ -307,7 +307,7 @@ class ServerMetaDataTest(test.TestCase):
def test_update_all_malformed_container(self):
self.stubs.Set(nova.db.api, 'instance_metadata_update',
return_create_instance_metadata)
- req = webob.Request.blank('/v1.1/servers/1/metadata')
+ req = webob.Request.blank('/v1.1/fake/servers/1/metadata')
req.method = 'PUT'
req.content_type = "application/json"
expected = {'meta': {}}
@@ -318,7 +318,7 @@ class ServerMetaDataTest(test.TestCase):
def test_update_all_malformed_data(self):
self.stubs.Set(nova.db.api, 'instance_metadata_update',
return_create_instance_metadata)
- req = webob.Request.blank('/v1.1/servers/1/metadata')
+ req = webob.Request.blank('/v1.1/fake/servers/1/metadata')
req.method = 'PUT'
req.content_type = "application/json"
expected = {'metadata': ['asdf']}
@@ -328,7 +328,7 @@ class ServerMetaDataTest(test.TestCase):
def test_update_all_nonexistant_server(self):
self.stubs.Set(nova.db.api, 'instance_get', return_server_nonexistant)
- req = webob.Request.blank('/v1.1/servers/100/metadata')
+ req = webob.Request.blank('/v1.1/fake/servers/100/metadata')
req.method = 'PUT'
req.content_type = "application/json"
req.body = json.dumps({'metadata': {'key10': 'value10'}})
@@ -338,7 +338,7 @@ class ServerMetaDataTest(test.TestCase):
def test_update_item(self):
self.stubs.Set(nova.db.api, 'instance_metadata_update',
return_create_instance_metadata)
- req = webob.Request.blank('/v1.1/servers/1/metadata/key1')
+ req = webob.Request.blank('/v1.1/fake/servers/1/metadata/key1')
req.method = 'PUT'
req.body = '{"meta": {"key1": "value1"}}'
req.headers["content-type"] = "application/json"
@@ -352,7 +352,7 @@ class ServerMetaDataTest(test.TestCase):
def test_update_item_xml(self):
self.stubs.Set(nova.db.api, 'instance_metadata_update',
return_create_instance_metadata)
- req = webob.Request.blank('/v1.1/servers/1/metadata/key9')
+ req = webob.Request.blank('/v1.1/fake/servers/1/metadata/key9')
req.method = 'PUT'
req.accept = "application/json"
req.content_type = "application/xml"
@@ -369,7 +369,7 @@ class ServerMetaDataTest(test.TestCase):
def test_update_item_nonexistant_server(self):
self.stubs.Set(nova.db.api, 'instance_get', return_server_nonexistant)
- req = webob.Request.blank('/v1.1/servers/asdf/metadata/key1')
+ req = webob.Request.blank('/v1.1/fake/servers/asdf/metadata/key1')
req.method = 'PUT'
req.body = '{"meta":{"key1": "value1"}}'
req.headers["content-type"] = "application/json"
@@ -379,7 +379,7 @@ class ServerMetaDataTest(test.TestCase):
def test_update_item_empty_body(self):
self.stubs.Set(nova.db.api, 'instance_metadata_update',
return_create_instance_metadata)
- req = webob.Request.blank('/v1.1/servers/1/metadata/key1')
+ req = webob.Request.blank('/v1.1/fake/servers/1/metadata/key1')
req.method = 'PUT'
req.headers["content-type"] = "application/json"
res = req.get_response(fakes.wsgi_app())
@@ -388,7 +388,7 @@ class ServerMetaDataTest(test.TestCase):
def test_update_item_too_many_keys(self):
self.stubs.Set(nova.db.api, 'instance_metadata_update',
return_create_instance_metadata)
- req = webob.Request.blank('/v1.1/servers/1/metadata/key1')
+ req = webob.Request.blank('/v1.1/fake/servers/1/metadata/key1')
req.method = 'PUT'
req.body = '{"meta": {"key1": "value1", "key2": "value2"}}'
req.headers["content-type"] = "application/json"
@@ -398,7 +398,7 @@ class ServerMetaDataTest(test.TestCase):
def test_update_item_body_uri_mismatch(self):
self.stubs.Set(nova.db.api, 'instance_metadata_update',
return_create_instance_metadata)
- req = webob.Request.blank('/v1.1/servers/1/metadata/bad')
+ req = webob.Request.blank('/v1.1/fake/servers/1/metadata/bad')
req.method = 'PUT'
req.body = '{"meta": {"key1": "value1"}}'
req.headers["content-type"] = "application/json"
@@ -412,7 +412,7 @@ class ServerMetaDataTest(test.TestCase):
for num in range(FLAGS.quota_metadata_items + 1):
data['metadata']['key%i' % num] = "blah"
json_string = str(data).replace("\'", "\"")
- req = webob.Request.blank('/v1.1/servers/1/metadata')
+ req = webob.Request.blank('/v1.1/fake/servers/1/metadata')
req.method = 'POST'
req.body = json_string
req.headers["content-type"] = "application/json"
@@ -422,7 +422,7 @@ class ServerMetaDataTest(test.TestCase):
def test_too_many_metadata_items_on_update_item(self):
self.stubs.Set(nova.db.api, 'instance_metadata_update',
return_create_instance_metadata_max)
- req = webob.Request.blank('/v1.1/servers/1/metadata/key1')
+ req = webob.Request.blank('/v1.1/fake/servers/1/metadata/key1')
req.method = 'PUT'
req.body = '{"meta": {"a new key": "a new value"}}'
req.headers["content-type"] = "application/json"
diff --git a/nova/tests/api/openstack/test_servers.py b/nova/tests/api/openstack/test_servers.py
index d3eb4c517..800a2e229 100644
--- a/nova/tests/api/openstack/test_servers.py
+++ b/nova/tests/api/openstack/test_servers.py
@@ -304,10 +304,10 @@ class ServersTest(test.TestCase):
self.assertEqual(res_dict['server']['name'], 'server1')
def test_get_server_by_id_v1_1(self):
- image_bookmark = "http://localhost/images/10"
- flavor_ref = "http://localhost/v1.1/flavors/1"
+ image_bookmark = "http://localhost/fake/images/10"
+ flavor_ref = "http://localhost/v1.1/fake/flavors/1"
flavor_id = "1"
- flavor_bookmark = "http://localhost/flavors/1"
+ flavor_bookmark = "http://localhost/fake/flavors/1"
public_ip = '192.168.0.3'
private_ip = '172.19.0.1'
@@ -329,7 +329,7 @@ class ServersTest(test.TestCase):
interfaces=interfaces)
self.stubs.Set(nova.db.api, 'instance_get', new_return_server)
- req = webob.Request.blank('/v1.1/servers/1')
+ req = webob.Request.blank('/v1.1/fake/servers/1')
res = req.get_response(fakes.wsgi_app())
res_dict = json.loads(res.body)
expected_server = {
@@ -383,11 +383,11 @@ class ServersTest(test.TestCase):
{
"rel": "self",
#FIXME(wwolf) Do we want the links to be id or uuid?
- "href": "http://localhost/v1.1/servers/1",
+ "href": "http://localhost/v1.1/fake/servers/1",
},
{
"rel": "bookmark",
- "href": "http://localhost/servers/1",
+ "href": "http://localhost/fake/servers/1",
},
],
}
@@ -396,12 +396,12 @@ class ServersTest(test.TestCase):
self.assertDictMatch(res_dict, expected_server)
def test_get_server_by_id_v1_1_xml(self):
- image_bookmark = "http://localhost/images/10"
- flavor_ref = "http://localhost/v1.1/flavors/1"
+ image_bookmark = "http://localhost/fake/images/10"
+ flavor_ref = "http://localhost/v1.1/fake/flavors/1"
flavor_id = "1"
- flavor_bookmark = "http://localhost/flavors/1"
- server_href = "http://localhost/v1.1/servers/1"
- server_bookmark = "http://localhost/servers/1"
+ flavor_bookmark = "http://localhost/fake/flavors/1"
+ server_href = "http://localhost/v1.1/fake/servers/1"
+ server_bookmark = "http://localhost/fake/servers/1"
public_ip = '192.168.0.3'
private_ip = '172.19.0.1'
@@ -423,7 +423,7 @@ class ServersTest(test.TestCase):
interfaces=interfaces)
self.stubs.Set(nova.db.api, 'instance_get', new_return_server)
- req = webob.Request.blank('/v1.1/servers/1')
+ req = webob.Request.blank('/v1.1/fake/servers/1')
req.headers['Accept'] = 'application/xml'
res = req.get_response(fakes.wsgi_app())
actual = minidom.parseString(res.body.replace(' ', ''))
@@ -470,10 +470,10 @@ class ServersTest(test.TestCase):
self.assertEqual(expected.toxml(), actual.toxml())
def test_get_server_with_active_status_by_id_v1_1(self):
- image_bookmark = "http://localhost/images/10"
- flavor_ref = "http://localhost/v1.1/flavors/1"
+ image_bookmark = "http://localhost/fake/images/10"
+ flavor_ref = "http://localhost/v1.1/fake/flavors/1"
flavor_id = "1"
- flavor_bookmark = "http://localhost/flavors/1"
+ flavor_bookmark = "http://localhost/fake/flavors/1"
private_ip = "192.168.0.3"
public_ip = "1.2.3.4"
@@ -495,7 +495,7 @@ class ServersTest(test.TestCase):
interfaces=interfaces, power_state=1)
self.stubs.Set(nova.db.api, 'instance_get', new_return_server)
- req = webob.Request.blank('/v1.1/servers/1')
+ req = webob.Request.blank('/v1.1/fake/servers/1')
res = req.get_response(fakes.wsgi_app())
res_dict = json.loads(res.body)
expected_server = {
@@ -548,11 +548,11 @@ class ServersTest(test.TestCase):
"links": [
{
"rel": "self",
- "href": "http://localhost/v1.1/servers/1",
+ "href": "http://localhost/v1.1/fake/servers/1",
},
{
"rel": "bookmark",
- "href": "http://localhost/servers/1",
+ "href": "http://localhost/fake/servers/1",
},
],
}
@@ -562,10 +562,10 @@ class ServersTest(test.TestCase):
def test_get_server_with_id_image_ref_by_id_v1_1(self):
image_ref = "10"
- image_bookmark = "http://localhost/images/10"
- flavor_ref = "http://localhost/v1.1/flavors/1"
+ image_bookmark = "http://localhost/fake/images/10"
+ flavor_ref = "http://localhost/v1.1/fake/flavors/1"
flavor_id = "1"
- flavor_bookmark = "http://localhost/flavors/1"
+ flavor_bookmark = "http://localhost/fake/flavors/1"
private_ip = "192.168.0.3"
public_ip = "1.2.3.4"
@@ -588,7 +588,7 @@ class ServersTest(test.TestCase):
flavor_id=flavor_id)
self.stubs.Set(nova.db.api, 'instance_get', new_return_server)
- req = webob.Request.blank('/v1.1/servers/1')
+ req = webob.Request.blank('/v1.1/fake/servers/1')
res = req.get_response(fakes.wsgi_app())
res_dict = json.loads(res.body)
expected_server = {
@@ -641,11 +641,11 @@ class ServersTest(test.TestCase):
"links": [
{
"rel": "self",
- "href": "http://localhost/v1.1/servers/1",
+ "href": "http://localhost/v1.1/fake/servers/1",
},
{
"rel": "bookmark",
- "href": "http://localhost/servers/1",
+ "href": "http://localhost/fake/servers/1",
},
],
}
@@ -790,7 +790,7 @@ class ServersTest(test.TestCase):
interfaces=interfaces)
self.stubs.Set(nova.db.api, 'instance_get', new_return_server)
- req = webob.Request.blank('/v1.1/servers/1')
+ req = webob.Request.blank('/v1.1/fake/servers/1')
res = req.get_response(fakes.wsgi_app())
res_dict = json.loads(res.body)
@@ -834,7 +834,7 @@ class ServersTest(test.TestCase):
interfaces=interfaces)
self.stubs.Set(nova.db.api, 'instance_get', new_return_server)
- req = webob.Request.blank('/v1.1/servers/1')
+ req = webob.Request.blank('/v1.1/fake/servers/1')
res = req.get_response(fakes.wsgi_app())
res_dict = json.loads(res.body)
@@ -884,7 +884,7 @@ class ServersTest(test.TestCase):
'virtual_interface_get_by_instance',
_return_vifs)
- req = webob.Request.blank('/v1.1/servers/1/ips')
+ req = webob.Request.blank('/v1.1/fake/servers/1/ips')
res = req.get_response(fakes.wsgi_app())
res_dict = json.loads(res.body)
@@ -934,7 +934,7 @@ class ServersTest(test.TestCase):
'virtual_interface_get_by_instance',
_return_vifs)
- req = webob.Request.blank('/v1.1/servers/1/ips/network_2')
+ req = webob.Request.blank('/v1.1/fake/servers/1/ips/network_2')
res = req.get_response(fakes.wsgi_app())
self.assertEqual(res.status_int, 200)
res_dict = json.loads(res.body)
@@ -954,7 +954,7 @@ class ServersTest(test.TestCase):
'virtual_interface_get_by_instance',
_return_vifs)
- req = webob.Request.blank('/v1.1/servers/1/ips/network_0')
+ req = webob.Request.blank('/v1.1/fake/servers/1/ips/network_0')
res = req.get_response(fakes.wsgi_app())
self.assertEqual(res.status_int, 404)
@@ -964,7 +964,7 @@ class ServersTest(test.TestCase):
'virtual_interface_get_by_instance',
_return_vifs)
- req = webob.Request.blank('/v1.1/servers/600/ips')
+ req = webob.Request.blank('/v1.1/fake/servers/600/ips')
res = req.get_response(fakes.wsgi_app())
self.assertEqual(res.status_int, 404)
@@ -1033,7 +1033,7 @@ class ServersTest(test.TestCase):
i += 1
def test_get_server_list_v1_1(self):
- req = webob.Request.blank('/v1.1/servers')
+ req = webob.Request.blank('/v1.1/fake/servers')
res = req.get_response(fakes.wsgi_app())
res_dict = json.loads(res.body)
@@ -1046,11 +1046,11 @@ class ServersTest(test.TestCase):
expected_links = [
{
"rel": "self",
- "href": "http://localhost/v1.1/servers/%s" % s['id'],
+ "href": "http://localhost/v1.1/fake/servers/%s" % s['id'],
},
{
"rel": "bookmark",
- "href": "http://localhost/servers/%s" % s['id'],
+ "href": "http://localhost/fake/servers/%s" % s['id'],
},
]
@@ -1097,19 +1097,19 @@ class ServersTest(test.TestCase):
self.assertTrue(res.body.find('offset param') > -1)
def test_get_servers_with_marker(self):
- req = webob.Request.blank('/v1.1/servers?marker=2')
+ req = webob.Request.blank('/v1.1/fake/servers?marker=2')
res = req.get_response(fakes.wsgi_app())
servers = json.loads(res.body)['servers']
self.assertEqual([s['name'] for s in servers], ["server3", "server4"])
def test_get_servers_with_limit_and_marker(self):
- req = webob.Request.blank('/v1.1/servers?limit=2&marker=1')
+ req = webob.Request.blank('/v1.1/fake/servers?limit=2&marker=1')
res = req.get_response(fakes.wsgi_app())
servers = json.loads(res.body)['servers']
self.assertEqual([s['name'] for s in servers], ['server2', 'server3'])
def test_get_servers_with_bad_marker(self):
- req = webob.Request.blank('/v1.1/servers?limit=2&marker=asdf')
+ req = webob.Request.blank('/v1.1/fake/servers?limit=2&marker=asdf')
res = req.get_response(fakes.wsgi_app())
self.assertEqual(res.status_int, 400)
self.assertTrue(res.body.find('marker param') > -1)
@@ -1135,7 +1135,7 @@ class ServersTest(test.TestCase):
self.stubs.Set(nova.compute.API, 'get_all', fake_get_all)
- req = webob.Request.blank('/v1.1/servers?unknownoption=whee')
+ req = webob.Request.blank('/v1.1/fake/servers?unknownoption=whee')
res = req.get_response(fakes.wsgi_app())
self.assertEqual(res.status_int, 200)
servers = json.loads(res.body)['servers']
@@ -1152,7 +1152,7 @@ class ServersTest(test.TestCase):
self.stubs.Set(nova.compute.API, 'get_all', fake_get_all)
self.flags(allow_admin_api=False)
- req = webob.Request.blank('/v1.1/servers?image=12345')
+ req = webob.Request.blank('/v1.1/fake/servers?image=12345')
res = req.get_response(fakes.wsgi_app())
# The following assert will fail if either of the asserts in
# fake_get_all() fail
@@ -1172,7 +1172,7 @@ class ServersTest(test.TestCase):
self.stubs.Set(nova.compute.API, 'get_all', fake_get_all)
self.flags(allow_admin_api=False)
- req = webob.Request.blank('/v1.1/servers?flavor=12345')
+ req = webob.Request.blank('/v1.1/fake/servers?flavor=12345')
res = req.get_response(fakes.wsgi_app())
# The following assert will fail if either of the asserts in
# fake_get_all() fail
@@ -1192,7 +1192,7 @@ class ServersTest(test.TestCase):
self.stubs.Set(nova.compute.API, 'get_all', fake_get_all)
self.flags(allow_admin_api=False)
- req = webob.Request.blank('/v1.1/servers?status=active')
+ req = webob.Request.blank('/v1.1/fake/servers?status=active')
res = req.get_response(fakes.wsgi_app())
# The following assert will fail if either of the asserts in
# fake_get_all() fail
@@ -1206,7 +1206,7 @@ class ServersTest(test.TestCase):
self.flags(allow_admin_api=False)
- req = webob.Request.blank('/v1.1/servers?status=running')
+ req = webob.Request.blank('/v1.1/fake/servers?status=running')
res = req.get_response(fakes.wsgi_app())
# The following assert will fail if either of the asserts in
# fake_get_all() fail
@@ -1223,7 +1223,7 @@ class ServersTest(test.TestCase):
self.stubs.Set(nova.compute.API, 'get_all', fake_get_all)
self.flags(allow_admin_api=False)
- req = webob.Request.blank('/v1.1/servers?name=whee.*')
+ req = webob.Request.blank('/v1.1/fake/servers?name=whee.*')
res = req.get_response(fakes.wsgi_app())
# The following assert will fail if either of the asserts in
# fake_get_all() fail
@@ -1254,7 +1254,7 @@ class ServersTest(test.TestCase):
self.stubs.Set(nova.compute.API, 'get_all', fake_get_all)
query_str = "name=foo&ip=10.*&status=active&unknown_option=meow"
- req = webob.Request.blank('/v1.1/servers?%s' % query_str)
+ req = webob.Request.blank('/v1.1/fake/servers?%s' % query_str)
# Request admin context
context = nova.context.RequestContext('testuser', 'testproject',
is_admin=True)
@@ -1288,7 +1288,7 @@ class ServersTest(test.TestCase):
self.stubs.Set(nova.compute.API, 'get_all', fake_get_all)
query_str = "name=foo&ip=10.*&status=active&unknown_option=meow"
- req = webob.Request.blank('/v1.1/servers?%s' % query_str)
+ req = webob.Request.blank('/v1.1/fake/servers?%s' % query_str)
# Request admin context
context = nova.context.RequestContext('testuser', 'testproject',
is_admin=False)
@@ -1321,7 +1321,7 @@ class ServersTest(test.TestCase):
self.stubs.Set(nova.compute.API, 'get_all', fake_get_all)
query_str = "name=foo&ip=10.*&status=active&unknown_option=meow"
- req = webob.Request.blank('/v1.1/servers?%s' % query_str)
+ req = webob.Request.blank('/v1.1/fake/servers?%s' % query_str)
# Request admin context
context = nova.context.RequestContext('testuser', 'testproject',
is_admin=True)
@@ -1347,7 +1347,7 @@ class ServersTest(test.TestCase):
self.stubs.Set(nova.compute.API, 'get_all', fake_get_all)
- req = webob.Request.blank('/v1.1/servers?ip=10\..*')
+ req = webob.Request.blank('/v1.1/fake/servers?ip=10\..*')
# Request admin context
context = nova.context.RequestContext('testuser', 'testproject',
is_admin=True)
@@ -1373,7 +1373,7 @@ class ServersTest(test.TestCase):
self.stubs.Set(nova.compute.API, 'get_all', fake_get_all)
- req = webob.Request.blank('/v1.1/servers?ip6=ffff.*')
+ req = webob.Request.blank('/v1.1/fake/servers?ip6=ffff.*')
# Request admin context
context = nova.context.RequestContext('testuser', 'testproject',
is_admin=True)
@@ -1600,8 +1600,8 @@ class ServersTest(test.TestCase):
self._setup_for_create_instance()
# proper local hrefs must start with 'http://localhost/v1.1/'
- image_href = 'http://localhost/v1.1/images/2'
- flavor_ref = 'http://localhost/flavors/3'
+ image_href = 'http://localhost/v1.1/123/images/2'
+ flavor_ref = 'http://localhost/123/flavors/3'
access_ipv4 = '1.2.3.4'
access_ipv6 = 'fead::1234'
expected_flavor = {
@@ -1609,7 +1609,7 @@ class ServersTest(test.TestCase):
"links": [
{
"rel": "bookmark",
- "href": 'http://localhost/flavors/3',
+ "href": 'http://localhost/123/flavors/3',
},
],
}
@@ -1618,7 +1618,7 @@ class ServersTest(test.TestCase):
"links": [
{
"rel": "bookmark",
- "href": 'http://localhost/images/2',
+ "href": 'http://localhost/123/images/2',
},
],
}
@@ -1642,7 +1642,7 @@ class ServersTest(test.TestCase):
},
}
- req = webob.Request.blank('/v1.1/servers')
+ req = webob.Request.blank('/v1.1/123/servers')
req.method = 'POST'
req.body = json.dumps(body)
req.headers["content-type"] = "application/json"
@@ -1665,13 +1665,13 @@ class ServersTest(test.TestCase):
# proper local hrefs must start with 'http://localhost/v1.1/'
image_href = 'http://localhost/v1.1/images/2'
- flavor_ref = 'http://localhost/flavors/3'
+ flavor_ref = 'http://localhost/123/flavors/3'
expected_flavor = {
"id": "3",
"links": [
{
"rel": "bookmark",
- "href": 'http://localhost/flavors/3',
+ "href": 'http://localhost/fake/flavors/3',
},
],
}
@@ -1680,7 +1680,7 @@ class ServersTest(test.TestCase):
"links": [
{
"rel": "bookmark",
- "href": 'http://localhost/images/2',
+ "href": 'http://localhost/fake/images/2',
},
],
}
@@ -1702,7 +1702,7 @@ class ServersTest(test.TestCase):
},
}
- req = webob.Request.blank('/v1.1/servers')
+ req = webob.Request.blank('/v1.1/fake/servers')
req.method = 'POST'
req.body = json.dumps(body)
req.headers["content-type"] = "application/json"
@@ -1729,7 +1729,7 @@ class ServersTest(test.TestCase):
name='server_test', imageRef=image_href, flavorRef=flavor_ref,
metadata={'hello': 'world', 'open': 'stack'},
personality={}))
- req = webob.Request.blank('/v1.1/servers')
+ req = webob.Request.blank('/v1.1/fake/servers')
req.method = 'POST'
req.body = json.dumps(body)
req.headers["content-type"] = "application/json"
@@ -1739,13 +1739,13 @@ class ServersTest(test.TestCase):
def test_create_instance_v1_1_invalid_flavor_id_int(self):
self._setup_for_create_instance()
- image_href = 'http://localhost/v1.1/images/2'
+ image_href = 'http://localhost/v1.1/123/images/2'
flavor_ref = -1
body = dict(server=dict(
name='server_test', imageRef=image_href, flavorRef=flavor_ref,
metadata={'hello': 'world', 'open': 'stack'},
personality={}))
- req = webob.Request.blank('/v1.1/servers')
+ req = webob.Request.blank('/v1.1/123/servers')
req.method = 'POST'
req.body = json.dumps(body)
req.headers["content-type"] = "application/json"
@@ -1761,7 +1761,7 @@ class ServersTest(test.TestCase):
name='server_test', imageRef=image_href, flavorRef=flavor_ref,
metadata={'hello': 'world', 'open': 'stack'},
personality={}))
- req = webob.Request.blank('/v1.1/servers')
+ req = webob.Request.blank('/v1.1/fake/servers')
req.method = 'POST'
req.body = json.dumps(body)
req.headers["content-type"] = "application/json"
@@ -1777,7 +1777,7 @@ class ServersTest(test.TestCase):
name='server_test', imageRef=image_href, flavorRef=flavor_ref,
metadata={'hello': 'world', 'open': 'stack'},
personality={}))
- req = webob.Request.blank('/v1.1/servers')
+ req = webob.Request.blank('/v1.1/fake/servers')
req.method = 'POST'
req.body = json.dumps(body)
req.headers["content-type"] = "application/json"
@@ -1794,7 +1794,7 @@ class ServersTest(test.TestCase):
"links": [
{
"rel": "bookmark",
- "href": 'http://localhost/flavors/3',
+ "href": 'http://localhost/fake/flavors/3',
},
],
}
@@ -1803,7 +1803,7 @@ class ServersTest(test.TestCase):
"links": [
{
"rel": "bookmark",
- "href": 'http://localhost/images/2',
+ "href": 'http://localhost/fake/images/2',
},
],
}
@@ -1815,7 +1815,7 @@ class ServersTest(test.TestCase):
},
}
- req = webob.Request.blank('/v1.1/servers')
+ req = webob.Request.blank('/v1.1/fake/servers')
req.method = 'POST'
req.body = json.dumps(body)
req.headers["content-type"] = "application/json"
@@ -1862,7 +1862,7 @@ class ServersTest(test.TestCase):
},
}
- req = webob.Request.blank('/v1.1/servers')
+ req = webob.Request.blank('/v1.1/fake/servers')
req.method = 'POST'
req.body = json.dumps(body)
req.headers['content-type'] = "application/json"
@@ -1883,7 +1883,7 @@ class ServersTest(test.TestCase):
},
}
- req = webob.Request.blank('/v1.1/servers')
+ req = webob.Request.blank('/v1.1/fake/servers')
req.method = 'POST'
req.body = json.dumps(body)
req.headers['content-type'] = "application/json"
@@ -1957,7 +1957,7 @@ class ServersTest(test.TestCase):
self.assertEqual(mock_method.password, 'bacon')
def test_update_server_no_body_v1_1(self):
- req = webob.Request.blank('/v1.0/servers/1')
+ req = webob.Request.blank('/v1.1/fake/servers/1')
req.method = 'PUT'
res = req.get_response(fakes.wsgi_app())
self.assertEqual(res.status_int, 400)
@@ -1967,7 +1967,7 @@ class ServersTest(test.TestCase):
return_server_with_attributes(name='server_test',
access_ipv4='0.0.0.0',
access_ipv6='beef::0123'))
- req = webob.Request.blank('/v1.1/servers/1')
+ req = webob.Request.blank('/v1.1/123/servers/1')
req.method = 'PUT'
req.content_type = 'application/json'
body = {'server': {
@@ -1987,7 +1987,7 @@ class ServersTest(test.TestCase):
def test_update_server_name_v1_1(self):
self.stubs.Set(nova.db.api, 'instance_get',
return_server_with_attributes(name='server_test'))
- req = webob.Request.blank('/v1.1/servers/1')
+ req = webob.Request.blank('/v1.1/fake/servers/1')
req.method = 'PUT'
req.content_type = 'application/json'
req.body = json.dumps({'server': {'name': 'server_test'}})
@@ -2000,7 +2000,7 @@ class ServersTest(test.TestCase):
def test_update_server_access_ipv4_v1_1(self):
self.stubs.Set(nova.db.api, 'instance_get',
return_server_with_attributes(access_ipv4='0.0.0.0'))
- req = webob.Request.blank('/v1.1/servers/1')
+ req = webob.Request.blank('/v1.1/123/servers/1')
req.method = 'PUT'
req.content_type = 'application/json'
req.body = json.dumps({'server': {'accessIPv4': '0.0.0.0'}})
@@ -2013,7 +2013,7 @@ class ServersTest(test.TestCase):
def test_update_server_access_ipv6_v1_1(self):
self.stubs.Set(nova.db.api, 'instance_get',
return_server_with_attributes(access_ipv6='beef::0123'))
- req = webob.Request.blank('/v1.1/servers/1')
+ req = webob.Request.blank('/v1.1/123/servers/1')
req.method = 'PUT'
req.content_type = 'application/json'
req.body = json.dumps({'server': {'accessIPv6': 'beef::0123'}})
@@ -2036,7 +2036,7 @@ class ServersTest(test.TestCase):
self.stubs.Set(nova.db.api, 'instance_get',
return_server_with_attributes(name='server_test'))
- req = webob.Request.blank('/v1.1/servers/1')
+ req = webob.Request.blank('/v1.1/fake/servers/1')
req.method = 'PUT'
req.content_type = "application/json"
req.body = self.body
@@ -2069,7 +2069,7 @@ class ServersTest(test.TestCase):
self.assertEqual(res.status_int, 501)
def test_server_backup_schedule_deprecated_v1_1(self):
- req = webob.Request.blank('/v1.1/servers/1/backup_schedule')
+ req = webob.Request.blank('/v1.1/fake/servers/1/backup_schedule')
res = req.get_response(fakes.wsgi_app())
self.assertEqual(res.status_int, 404)
@@ -2109,7 +2109,7 @@ class ServersTest(test.TestCase):
"links": [
{
"rel": "bookmark",
- "href": 'http://localhost/flavors/1',
+ "href": 'http://localhost/fake/flavors/1',
},
],
}
@@ -2118,11 +2118,11 @@ class ServersTest(test.TestCase):
"links": [
{
"rel": "bookmark",
- "href": 'http://localhost/images/10',
+ "href": 'http://localhost/fake/images/10',
},
],
}
- req = webob.Request.blank('/v1.1/servers/detail')
+ req = webob.Request.blank('/v1.1/fake/servers/detail')
res = req.get_response(fakes.wsgi_app())
res_dict = json.loads(res.body)
@@ -2281,7 +2281,7 @@ class ServersTest(test.TestCase):
self.assertEqual(res.status_int, 422)
def test_delete_server_instance_v1_1(self):
- req = webob.Request.blank('/v1.1/servers/1')
+ req = webob.Request.blank('/v1.1/fake/servers/1')
req.method = 'DELETE'
self.server_delete_called = False
@@ -3234,18 +3234,20 @@ class ServersViewBuilderV11Test(test.TestCase):
return instance
- def _get_view_builder(self):
+ def _get_view_builder(self, project_id=""):
base_url = "http://localhost/v1.1"
views = nova.api.openstack.views
address_builder = views.addresses.ViewBuilderV11()
- flavor_builder = views.flavors.ViewBuilderV11(base_url)
- image_builder = views.images.ViewBuilderV11(base_url)
+ flavor_builder = views.flavors.ViewBuilderV11(base_url, project_id)
+ image_builder = views.images.ViewBuilderV11(base_url, project_id)
view_builder = nova.api.openstack.views.servers.ViewBuilderV11(
address_builder,
flavor_builder,
image_builder,
- base_url)
+ base_url,
+ project_id,
+ )
return view_builder
def test_build_server(self):
@@ -3270,6 +3272,29 @@ class ServersViewBuilderV11Test(test.TestCase):
output = self.view_builder.build(self.instance, False)
self.assertDictMatch(output, expected_server)
+ def test_build_server_with_project_id(self):
+ expected_server = {
+ "server": {
+ "id": 1,
+ "uuid": self.instance['uuid'],
+ "name": "test_server",
+ "links": [
+ {
+ "rel": "self",
+ "href": "http://localhost/v1.1/fake/servers/1",
+ },
+ {
+ "rel": "bookmark",
+ "href": "http://localhost/fake/servers/1",
+ },
+ ],
+ }
+ }
+
+ view_builder = self._get_view_builder(project_id='fake')
+ output = view_builder.build(self.instance, False)
+ self.assertDictMatch(output, expected_server)
+
def test_build_server_detail(self):
image_bookmark = "http://localhost/images/5"
flavor_bookmark = "http://localhost/flavors/1"
diff --git a/nova/tests/integrated/api/client.py b/nova/tests/integrated/api/client.py
index 035a35aab..67c35fe6b 100644
--- a/nova/tests/integrated/api/client.py
+++ b/nova/tests/integrated/api/client.py
@@ -48,6 +48,14 @@ class OpenStackApiAuthenticationException(OpenStackApiException):
response)
+class OpenStackApiAuthorizationException(OpenStackApiException):
+ def __init__(self, response=None, message=None):
+ if not message:
+ message = _("Authorization error")
+ super(OpenStackApiAuthorizationException, self).__init__(message,
+ response)
+
+
class OpenStackApiNotFoundException(OpenStackApiException):
def __init__(self, response=None, message=None):
if not message:
@@ -69,6 +77,8 @@ class TestOpenStackClient(object):
self.auth_user = auth_user
self.auth_key = auth_key
self.auth_uri = auth_uri
+ # default project_id
+ self.project_id = 'openstack'
def request(self, url, method='GET', body=None, headers=None):
_headers = {'Content-Type': 'application/json'}
@@ -105,7 +115,8 @@ class TestOpenStackClient(object):
auth_uri = self.auth_uri
headers = {'X-Auth-User': self.auth_user,
- 'X-Auth-Key': self.auth_key}
+ 'X-Auth-Key': self.auth_key,
+ 'X-Auth-Project-Id': self.project_id}
response = self.request(auth_uri,
headers=headers)
@@ -127,7 +138,8 @@ class TestOpenStackClient(object):
# NOTE(justinsb): httplib 'helpfully' converts headers to lower case
base_uri = auth_result['x-server-management-url']
- full_uri = base_uri + relative_uri
+
+ full_uri = '%s/%s' % (base_uri, relative_uri)
headers = kwargs.setdefault('headers', {})
headers['X-Auth-Token'] = auth_result['x-auth-token']
@@ -141,6 +153,8 @@ class TestOpenStackClient(object):
if not http_status in check_response_status:
if http_status == 404:
raise OpenStackApiNotFoundException(response=response)
+ elif http_status == 401:
+ raise OpenStackApiAuthorizationException(response=response)
else:
raise OpenStackApiException(
message=_("Unexpected status code"),
@@ -256,7 +270,8 @@ class TestOpenStackClient(object):
def post_server_volume(self, server_id, volume_attachment):
return self.api_post('/servers/%s/os-volume_attachments' %
- (server_id), volume_attachment)['volumeAttachment']
+ (server_id), volume_attachment
+ )['volumeAttachment']
def delete_server_volume(self, server_id, attachment_id):
return self.api_delete('/servers/%s/os-volume_attachments/%s' %
diff --git a/nova/tests/integrated/test_login.py b/nova/tests/integrated/test_login.py
index 06359a52f..9d1925bc0 100644
--- a/nova/tests/integrated/test_login.py
+++ b/nova/tests/integrated/test_login.py
@@ -59,6 +59,12 @@ class LoginTest(integrated_helpers._IntegratedTestBase):
self.assertRaises(client.OpenStackApiAuthenticationException,
bad_credentials_api.get_flavors)
+ def test_good_login_bad_project(self):
+ """Test that I get a 401 with valid user/pass but bad project"""
+ self.api.project_id = 'openstackBAD'
+
+ self.assertRaises(client.OpenStackApiAuthorizationException,
+ self.api.get_flavors)
if __name__ == "__main__":
unittest.main()
diff --git a/nova/tests/test_compute.py b/nova/tests/test_compute.py
index 4f5d36f14..993a87f23 100644
--- a/nova/tests/test_compute.py
+++ b/nova/tests/test_compute.py
@@ -347,7 +347,7 @@ class ComputeTestCase(test.TestCase):
self.assertEquals(msg['priority'], 'INFO')
self.assertEquals(msg['event_type'], 'compute.instance.create')
payload = msg['payload']
- self.assertEquals(payload['tenant_id'], self.project_id)
+ self.assertEquals(payload['project_id'], self.project_id)
self.assertEquals(payload['user_id'], self.user_id)
self.assertEquals(payload['instance_id'], instance_id)
self.assertEquals(payload['instance_type'], 'm1.tiny')
@@ -371,7 +371,7 @@ class ComputeTestCase(test.TestCase):
self.assertEquals(msg['priority'], 'INFO')
self.assertEquals(msg['event_type'], 'compute.instance.delete')
payload = msg['payload']
- self.assertEquals(payload['tenant_id'], self.project_id)
+ self.assertEquals(payload['project_id'], self.project_id)
self.assertEquals(payload['user_id'], self.user_id)
self.assertEquals(payload['instance_id'], instance_id)
self.assertEquals(payload['instance_type'], 'm1.tiny')
@@ -454,7 +454,7 @@ class ComputeTestCase(test.TestCase):
self.assertEquals(msg['priority'], 'INFO')
self.assertEquals(msg['event_type'], 'compute.instance.resize.prep')
payload = msg['payload']
- self.assertEquals(payload['tenant_id'], self.project_id)
+ self.assertEquals(payload['project_id'], self.project_id)
self.assertEquals(payload['user_id'], self.user_id)
self.assertEquals(payload['instance_id'], instance_id)
self.assertEquals(payload['instance_type'], 'm1.tiny')
diff --git a/nova/utils.py b/nova/utils.py
index b42f76457..f6e98c2eb 100644
--- a/nova/utils.py
+++ b/nova/utils.py
@@ -295,7 +295,7 @@ EASIER_PASSWORD_SYMBOLS = ('23456789' # Removed: 0, 1
def usage_from_instance(instance_ref, **kw):
usage_info = dict(
- tenant_id=instance_ref['project_id'],
+ project_id=instance_ref['project_id'],
user_id=instance_ref['user_id'],
instance_id=instance_ref['id'],
instance_type=instance_ref['instance_type']['name'],