]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Fix context.elevated
authorAnn Kamyshnikova <akamyshnikova@mirantis.com>
Thu, 20 Nov 2014 16:13:52 +0000 (19:13 +0300)
committerAnn Kamyshnikova <akamyshnikova@mirantis.com>
Fri, 21 Nov 2014 10:36:58 +0000 (13:36 +0300)
The current version of elevated method sets for the original context
the admin role too. This change fix this.

Added unittest.

Closes-bug: #1386932

Change-Id: Ife881112efa151e53bfa4b7af35643dcf2d1114f

neutron/context.py
neutron/tests/unit/test_api_v2_resource.py

index 107022fb96abc9672df1d1a1a91e7178bd08624a..7d294427ab7fa92e8c72f924f9b6fd9ad1654b7d 100644 (file)
@@ -145,7 +145,7 @@ class ContextBase(common_context.RequestContext):
         context.is_admin = True
 
         if 'admin' not in [x.lower() for x in context.roles]:
-            context.roles.append('admin')
+            context.roles = context.roles + ["admin"]
 
         if read_deleted is not None:
             context.read_deleted = read_deleted
index 223b05267a2fe9aaf4e9ffc50b273a238a130c38..12f30afcadd527bcd23a77bf2d91f91edc3259de 100644 (file)
@@ -89,6 +89,16 @@ class RequestTestCase(base.BaseTestCase):
     def test_context_without_neutron_context(self):
         self.assertTrue(self.req.context.is_admin)
 
+    def test_request_context_elevated(self):
+        user_context = context.Context(
+            '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.assertNotIn('admin', user_context.roles)
+        self.assertIn('admin', admin_context.roles)
+
     def test_best_match_language(self):
         # Test that we are actually invoking language negotiation by webop
         request = wsgi.Request.blank('/')