From 9f9fbc54e7336da10fc3056bdaca2ec7d01c7f94 Mon Sep 17 00:00:00 2001 From: Chris Behrens Date: Mon, 25 Jun 2012 23:17:33 +0000 Subject: Remove extra DB calls for instances from OS API extensions Allow the core API to store DB results so that extensions can use data already retrieved within the same API request...eliminating extra expensive DB calls. This implements storing of instances only, so far. Fixes bug 1017756 Change-Id: I98a2e3323f5ea69ab9e7470f95d821790510989e --- nova/tests/api/openstack/fakes.py | 4 ++-- nova/tests/api/openstack/test_wsgi.py | 23 ++++++++++++++++++++++- 2 files changed, 24 insertions(+), 3 deletions(-) (limited to 'nova/tests') diff --git a/nova/tests/api/openstack/fakes.py b/nova/tests/api/openstack/fakes.py index 1479a8f6e..ca6b25c67 100644 --- a/nova/tests/api/openstack/fakes.py +++ b/nova/tests/api/openstack/fakes.py @@ -301,13 +301,13 @@ class FakeRequestContext(context.RequestContext): return super(FakeRequestContext, self).__init__(*args, **kwargs) -class HTTPRequest(webob.Request): +class HTTPRequest(os_wsgi.Request): @classmethod def blank(cls, *args, **kwargs): kwargs['base_url'] = 'http://localhost/v2' use_admin_context = kwargs.pop('use_admin_context', False) - out = webob.Request.blank(*args, **kwargs) + out = os_wsgi.Request.blank(*args, **kwargs) out.environ['nova.context'] = FakeRequestContext('fake_user', 'fake', is_admin=use_admin_context) return out diff --git a/nova/tests/api/openstack/test_wsgi.py b/nova/tests/api/openstack/test_wsgi.py index f32704775..f45450495 100644 --- a/nova/tests/api/openstack/test_wsgi.py +++ b/nova/tests/api/openstack/test_wsgi.py @@ -75,6 +75,27 @@ class RequestTest(test.TestCase): result = request.best_match_content_type() self.assertEqual(result, "application/json") + def test_cache_and_retrieve_instances(self): + request = wsgi.Request.blank('/foo') + instances = [] + for x in xrange(3): + instances.append({'uuid': 'uuid%s' % x}) + # Store 2 + request.cache_db_instances(instances[:2]) + # Store 1 + request.cache_db_instance(instances[2]) + self.assertEqual(request.get_db_instance('uuid0'), + instances[0]) + self.assertEqual(request.get_db_instance('uuid1'), + instances[1]) + self.assertEqual(request.get_db_instance('uuid2'), + instances[2]) + self.assertEqual(request.get_db_instance('uuid3'), None) + self.assertEqual(request.get_db_instances(), + {'uuid0': instances[0], + 'uuid1': instances[1], + 'uuid2': instances[2]}) + class ActionDispatcherTest(test.TestCase): def test_dispatch(self): @@ -215,7 +236,7 @@ class ResourceTest(test.TestCase): expected = 'off' self.assertEqual(actual, expected) - def test_get_method_unknown_controller_action(self): + def test_get_method_unknown_controller_method(self): class Controller(object): def index(self, req, pants=None): return pants -- cgit