Browse Source

HUE-5275 [libsentry] Add privilege_checker test with mock API response

Jenny Kim 9 năm trước cách đây
mục cha
commit
d2dc60b

+ 4 - 4
desktop/libs/libsentry/src/libsentry/privilege_checker.py

@@ -37,10 +37,9 @@ class PrivilegeChecker(object):
   Given a user, checks and applies Sentry privilege and authorization rules against Sentry objects
   """
 
-  def __init__(self, user):
+  def __init__(self, user, api=None):
     self.user = user
-    self.api = get_api(self.user)
-    self.user_roles = self.api.list_sentry_roles_by_group('*')  # Get all roles for user
+    self.api = api if api else get_api(self.user)
 
 
   def filter_objects(self, authorizableSet, action='SELECT'):
@@ -51,7 +50,8 @@ class PrivilegeChecker(object):
     filtered_objects = []
     privileges = []
 
-    for role in self.user_roles:
+    user_roles = self.api.list_sentry_roles_by_group('*')  # Get all roles for user
+    for role in user_roles:
       role_privileges = self.api.list_sentry_privileges_by_role(role['name'])
       privileges.extend(role_privileges)  # This may result in duplicates but will get reduced in hierarchy tree
 

+ 15 - 9
desktop/libs/libsentry/src/libsentry/test_privilege_checker.py

@@ -23,22 +23,19 @@ from nose.tools import assert_equal, assert_false, assert_true
 from desktop.lib.django_test_util import make_logged_in_client
 from desktop.lib.test_utils import grant_access
 
-from libsentry.api import SentryApi
+from libsentry.api import get_api, SentryApi
 from libsentry.privilege_checker import PrivilegeChecker
 
 
 class TestDocumentConverter(object):
 
-  @classmethod
-  def setup_class(cls):
-    cls.api_class = SentryApi
-
   def setUp(self):
     self.client = make_logged_in_client(username="test", groupname="test", recreate=True, is_superuser=False)
     self.user = User.objects.get(username="test")
     grant_access("test", "test", "libsentry")
 
-    self.checker = PrivilegeChecker(user=self.user)
+    self.api = get_api(self.user)
+    self.checker = PrivilegeChecker(user=self.user, api=self.api)
 
 
   def test_select_privilege(self):
@@ -59,8 +56,8 @@ class TestDocumentConverter(object):
       {u'column': 'total_emp', u'table': u'sample_07', u'db': u'default', u'server': u'server1'},
     ]
 
-    self.api_class.list_sentry_roles_by_group = Mock(return_value=['test'])
-    self.api_class.list_sentry_privileges_by_role = Mock(return_value=[
+    self.api.list_sentry_roles_by_group = Mock(return_value=[{'name': 'test', 'group': 'test'}])
+    self.api.list_sentry_privileges_by_role = Mock(return_value=[
         {'column': 'total_emp', 'grantOption': False, 'timestamp': 1478810635378, 'database': 'default', 'action': 'INSERT', 'scope': 'COLUMN', 'table': 'sample_08', 'URI': '', 'server': 'server1'},
         {'column': '', 'grantOption': False, 'timestamp': 1478810422058, 'database': 'default', 'action': 'SELECT', 'scope': 'TABLE', 'table': 'customers', 'URI': '', 'server': 'server1'},
         {'column': '', 'grantOption': False, 'timestamp': 1478810513849, 'database': 'default', 'action': 'SELECT', 'scope': 'TABLE', 'table': 'web_logs', 'URI': '', 'server': 'server1'},
@@ -69,4 +66,13 @@ class TestDocumentConverter(object):
     ])
 
     filtered_set = self.checker.filter_objects(authorizableSet=authorizableSet, action=action)
-    #assert_equal([], filtered_set)
+    expected_filtered_set = [
+      {u'column': None, u'table': u'customers', u'db': u'default', u'server': u'server1'},
+      {u'column': None, u'table': u'sample_08', u'db': u'default', u'server': u'server1'},
+      {u'column': 'code', u'table': u'sample_08', u'db': u'default', u'server': u'server1'},
+      {u'column': 'salary', u'table': u'sample_08', u'db': u'default', u'server': u'server1'},
+      {u'column': 'total_emp', u'table': u'sample_08', u'db': u'default', u'server': u'server1'},
+      {u'column': None, u'table': u'web_logs', u'db': u'default', u'server': u'server1'},
+
+    ]
+    assert_equal(expected_filtered_set, sorted(filtered_set, key=lambda obj: (obj['table'], obj['column'])))