|
|
@@ -17,7 +17,6 @@
|
|
|
|
|
|
import logging
|
|
|
|
|
|
-from nose.plugins.skip import SkipTest
|
|
|
from nose.tools import assert_equal
|
|
|
|
|
|
from django.core.cache import cache
|
|
|
@@ -26,13 +25,11 @@ from django.contrib.auth.models import User
|
|
|
from desktop.auth.backend import rewrite_user
|
|
|
from desktop.lib.django_test_util import make_logged_in_client
|
|
|
from desktop.lib.test_utils import add_to_group, grant_access
|
|
|
-from hadoop.pseudo_hdfs4 import is_live_cluster
|
|
|
+from libsentry.privilege_checker import SENTRY_PRIVILEGE_CACHE_KEY, PrivilegeChecker
|
|
|
+from libsentry.test_privilege_checker import MockSentryApiV2
|
|
|
|
|
|
-from metadata.conf import has_navigator, NAVIGATOR
|
|
|
+from metadata.conf import NAVIGATOR
|
|
|
from metadata.navigator_client import NavigatorApi
|
|
|
-from libsentry.privilege_checker import SENTRY_PRIVILEGE_CACHE_KEY,\
|
|
|
- PrivilegeChecker
|
|
|
-from libsentry.test_privilege_checker import MockSentryApiV2
|
|
|
|
|
|
|
|
|
LOG = logging.getLogger(__name__)
|
|
|
@@ -53,9 +50,6 @@ class NavigatorClientTest:
|
|
|
add_to_group('test')
|
|
|
grant_access("test", "test", "metadata")
|
|
|
|
|
|
- if not has_navigator(cls.user):
|
|
|
- raise SkipTest
|
|
|
-
|
|
|
cls.api = NavigatorApi(cls.user)
|
|
|
cls.api._root = MockedRoot()
|
|
|
|
|
|
@@ -89,10 +83,11 @@ class TestNavigatorClientSecure(NavigatorClientTest):
|
|
|
cache_key = SENTRY_PRIVILEGE_CACHE_KEY % {'username': self.user.username}
|
|
|
|
|
|
try:
|
|
|
+ # All single privileges
|
|
|
api_v1 = MockSentryApiHive(privileges=[
|
|
|
{'column': '', 'grantOption': False, 'timestamp': 1478810513849, 'database': 'etl', 'action': 'SELECT', 'scope': 'DATABASE', 'table': '', 'URI': '', 'server': 'server1'},
|
|
|
{'column': '', 'grantOption': False, 'timestamp': 1478810422058, 'database': 'etl', 'action': 'SELECT', 'scope': 'TABLE', 'table': 'finance', 'URI': '', 'server': 'server1'},
|
|
|
- {'column': 'col3', 'grantOption': False, 'timestamp': 1478810590335, 'database': 'etl', 'action': 'SELECT', 'scope': 'TABLE', 'table': 'finance', 'URI': '', 'server': 'server1'},
|
|
|
+ {'column': 'col3', 'grantOption': False, 'timestamp': 1478810590335, 'database': 'etl', 'action': 'SELECT', 'scope': 'COLUMN', 'table': 'finance', 'URI': '', 'server': 'server1'},
|
|
|
])
|
|
|
api_v2 = MockSentryApiV2()
|
|
|
checker = PrivilegeChecker(user=self.user, api_v1=api_v1, api_v2=api_v2)
|
|
|
@@ -121,9 +116,8 @@ class TestNavigatorClientSecure(NavigatorClientTest):
|
|
|
results = list(self.api._secure_results(records, checker=checker))
|
|
|
assert_equal(0, len(results), results)
|
|
|
|
|
|
- # All privileges
|
|
|
+ # Only table privilege
|
|
|
api_v1 = MockSentryApiHive(privileges=[
|
|
|
- # Table SELECT
|
|
|
{'column': '', 'grantOption': False, 'timestamp': 1478810422058, 'database': 'etl', 'action': 'SELECT', 'scope': 'TABLE', 'table': 'finance', 'URI': '', 'server': 'server1'},
|
|
|
])
|
|
|
checker = PrivilegeChecker(user=self.user, api_v1=api_v1, api_v2=api_v2)
|
|
|
@@ -137,6 +131,24 @@ class TestNavigatorClientSecure(NavigatorClientTest):
|
|
|
|
|
|
results = list(self.api._secure_results(records, checker=checker))
|
|
|
assert_equal(2, len(results), results) # Table + its Column
|
|
|
+
|
|
|
+ # Only table 2 privilege
|
|
|
+ api_v1 = MockSentryApiHive(privileges=[
|
|
|
+ {'column': '', 'grantOption': False, 'timestamp': 1478810513849, 'database': 'etl2', 'action': 'SELECT', 'scope': 'DATABASE', 'table': '', 'URI': '', 'server': 'server1'},
|
|
|
+ ])
|
|
|
+ checker = PrivilegeChecker(user=self.user, api_v1=api_v1, api_v2=api_v2)
|
|
|
+
|
|
|
+ records = [
|
|
|
+ {u'type': u'DATABASE', u'originalName': u'etl', u'description': None, u'params': None, u'internalType': u'hv_database', u'sourceType': u'HIVE', u'tags': None, u'originalDescription': None, u'metaClassName': u'hv_database', u'properties': None, u'identity': u'51002517', u'firstClassParentId': None, u'name': None, u'extractorRunId': u'845beb21b95783c4f55276a4ae38a332##3', u'sourceId': u'56850544', u'packageName': u'nav', u'parentPath': None},
|
|
|
+ {u'type': u'TABLE', u'parentPath': u'/etl', u'originalName': u'finance', u'clusteredByColNames': None, u'customProperties': None, u'owner': u'elt', u'serdeName': None, u'sourceType': u'HIVE', u'serdeLibName': u'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe', u'internalType': u'hv_table', u'description': None, u'tags': None, u'originalDescription': None, u'compressed': False, u'metaClassName': u'hv_table', u'properties': None, u'identity': u'51340470', u'outputFormat': u'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat', u'firstClassParentId': None, u'name': None, u'extractorRunId': u'845beb21b95783c4f55276a4ae38a332##1185', u'created': u'2015-08-14T00:04:01.000Z', u'sourceId': u'56850544', u'lastModified': None, u'packageName': u'nav', u'lastAccessed': u'1970-01-01T00:00:00.000Z'},
|
|
|
+ {u'type': u'FIELD', u'parentPath': u'/etl/finance', u'originalName': u'col1', u'customProperties': None, u'deleteTime': None, u'description': None, u'dataType': u'string', u'internalType': u'hv_column', u'sourceType': u'HIVE', u'tags': None, u'technicalProperties': None, u'userEntity': False, u'originalDescription': None, u'metaClassName': u'hv_column', u'properties': None, u'identity': u'51001004', u'firstClassParentId': u'59444965', u'name': None, u'extractorRunId': u'845beb21b95783c4f55276a4ae38a332##1582', u'sourceId': u'56850544', u'packageName': u'nav'},
|
|
|
+ {u'type': u'VIEW', u'parentPath': u'/etl', u'originalName': u'finance_view', u'customProperties': None, u'deleteTime': None, u'description': None, u'lastModifiedBy': None, u'internalType': u'hv_view', u'sourceType': u'HIVE', u'tags': None, u'deleted': False, u'technicalProperties': None, u'userEntity': False, u'originalDescription': None, u'metaClassName': u'hv_view', u'properties': None, u'identity': u'51012354', u'firstClassParentId': None, u'name': None, u'extractorRunId': u'845beb21b95783c4f55276a4ae38a332##394', u'created': u'2015-09-02T08:01:14.000Z', u'sourceId': u'56850544', u'lastModified': None, u'packageName': u'nav', u'queryText': u"SELECT * FROM etl.finance LIMIT 10", u'lastAccessed': u'1970-01-01T00:00:00.000Z'},
|
|
|
+
|
|
|
+ {u'type': u'TABLE', u'parentPath': u'/etl2', u'originalName': u'finance2', u'clusteredByColNames': None, u'customProperties': None, u'owner': u'elt', u'serdeName': None, u'sourceType': u'HIVE', u'serdeLibName': u'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe', u'internalType': u'hv_table', u'description': None, u'tags': None, u'originalDescription': None, u'compressed': False, u'metaClassName': u'hv_table', u'properties': None, u'identity': u'51340470', u'outputFormat': u'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat', u'firstClassParentId': None, u'name': None, u'extractorRunId': u'845beb21b95783c4f55276a4ae38a332##1185', u'created': u'2015-08-14T00:04:01.000Z', u'sourceId': u'56850544', u'lastModified': None, u'packageName': u'nav', u'lastAccessed': u'1970-01-01T00:00:00.000Z'},
|
|
|
+ ]
|
|
|
+
|
|
|
+ results = list(self.api._secure_results(records, checker=checker))
|
|
|
+ assert_equal(1, len(results), results) # Table2 only
|
|
|
finally:
|
|
|
cache.delete(cache_key)
|
|
|
|