diff --git a/cinder/context.py b/cinder/context.py index a67c6426f60..7fa6d59395c 100644 --- a/cinder/context.py +++ b/cinder/context.py @@ -149,7 +149,7 @@ class RequestContext(object): def elevated(self, read_deleted=None, overwrite=False): """Return a version of this context with admin flag set.""" - context = copy.copy(self) + context = self.deepcopy() context.is_admin = True if 'admin' not in context.roles: diff --git a/cinder/tests/test_context.py b/cinder/tests/test_context.py index bcb25859b86..4ae9b4b52f4 100644 --- a/cinder/tests/test_context.py +++ b/cinder/tests/test_context.py @@ -54,6 +54,16 @@ class ContextTestCase(test.TestCase): 'read_deleted', True) + def test_request_context_elevated(self): + user_context = context.RequestContext( + 'fake_user', 'fake_project', admin=False) + self.assertFalse(user_context.is_admin) + admin_context = user_context.elevated() + self.assertFalse(user_context.is_admin) + self.assertTrue(admin_context.is_admin) + self.assertFalse('admin' in user_context.roles) + self.assertTrue('admin' in admin_context.roles) + def test_service_catalog_nova_and_swift(self): service_catalog = [ {u'type': u'compute', u'name': u'nova'},