Jelajahi Sumber

[metadata] Add logging and navigator test

Jenny Kim 10 tahun lalu
induk
melakukan
0dccf37

+ 4 - 5
desktop/libs/metadata/src/metadata/conf.py

@@ -18,8 +18,8 @@
 from django.utils.translation import ugettext_lazy as _t
 from django.utils.translation import ugettext_lazy as _t
 
 
 from desktop.conf import AUTH_USERNAME as DEFAULT_AUTH_USERNAME, AUTH_PASSWORD as DEFAULT_AUTH_PASSWORD, \
 from desktop.conf import AUTH_USERNAME as DEFAULT_AUTH_USERNAME, AUTH_PASSWORD as DEFAULT_AUTH_PASSWORD, \
-  AUTH_PASSWORD_SCRIPT, coerce_password_from_script
-from desktop.lib.conf import Config, ConfigSection, coerce_string
+                         AUTH_PASSWORD_SCRIPT, coerce_password_from_script
+from desktop.lib.conf import Config, ConfigSection
 
 
 
 
 def get_auth_username():
 def get_auth_username():
@@ -41,9 +41,8 @@ NAVIGATOR = ConfigSection(
   members=dict(
   members=dict(
     API_URL=Config(
     API_URL=Config(
       key='api_url',
       key='api_url',
-      help=_t('Base URL to Navigator API'),
-      default='http://localhost:7187/api/v2',
-      type=coerce_string),
+      help=_t('Base URL to Navigator API (e.g. - http://localhost:7187/api/v2)'),
+      default=None),
     AUTH_USERNAME=Config(
     AUTH_USERNAME=Config(
       key="auth_username",
       key="auth_username",
       help=_t("Auth username of the hue user used for authentications."),
       help=_t("Auth username of the hue user used for authentications."),

+ 11 - 6
desktop/libs/metadata/src/metadata/navigator.py

@@ -77,14 +77,16 @@ class NavigatorApi(object):
 
 
       response = self._root.get('entities', headers=self.__headers, params=params)
       response = self._root.get('entities', headers=self.__headers, params=params)
 
 
-      if len(response) == 0:
+      if not response:
         raise NavigatorApiException('Could not find entity with query filters: %s' % str(query_filters))
         raise NavigatorApiException('Could not find entity with query filters: %s' % str(query_filters))
       elif len(response) > 1:
       elif len(response) > 1:
         raise NavigatorApiException('Found more than 1 entity with query filters: %s' % str(query_filters))
         raise NavigatorApiException('Found more than 1 entity with query filters: %s' % str(query_filters))
 
 
       return response[0]
       return response[0]
     except RestException, e:
     except RestException, e:
-      raise NavigatorApiException('Failed to find entity: %s' % str(e))
+      msg = 'Failed to find entity: %s' % str(e)
+      LOG.exception(msg)
+      raise NavigatorApiException(msg)
 
 
 
 
   def get_entity(self, entity_id):
   def get_entity(self, entity_id):
@@ -95,7 +97,9 @@ class NavigatorApi(object):
     try:
     try:
       return self._root.get('entities/%s' % entity_id, headers=self.__headers, params=self.__params)
       return self._root.get('entities/%s' % entity_id, headers=self.__headers, params=self.__params)
     except RestException, e:
     except RestException, e:
-      raise NavigatorApiException('Failed to get entity %s: %s' % (entity_id, str(e)))
+      msg = 'Failed to get entity %s: %s' % (entity_id, str(e))
+      LOG.exception(msg)
+      raise NavigatorApiException(msg)
 
 
 
 
   def update_entity(self, entity_id, **metadata):
   def update_entity(self, entity_id, **metadata):
@@ -106,10 +110,11 @@ class NavigatorApi(object):
     try:
     try:
       # TODO: Check permissions of entity
       # TODO: Check permissions of entity
       data = json.dumps(metadata)
       data = json.dumps(metadata)
-      response = self._root.put('entities/%s' % entity_id, params=self.__params, data=data)
-      return response
+      return self._root.put('entities/%s' % entity_id, params=self.__params, data=data)
     except RestException, e:
     except RestException, e:
-      raise NavigatorApiException('Failed to update entity %s: %s' % (entity_id, str(e)))
+      msg = 'Failed to update entity %s: %s' % (entity_id, str(e))
+      LOG.exception(msg)
+      raise NavigatorApiException(msg)
 
 
 
 
   def get_database(self, name):
   def get_database(self, name):

+ 59 - 1
desktop/libs/metadata/src/metadata/tests.py

@@ -15,4 +15,62 @@
 # See the License for the specific language governing permissions and
 # See the License for the specific language governing permissions and
 # limitations under the License.
 # limitations under the License.
 
 
-from nose.tools import assert_equal, assert_true, assert_false
+import logging
+import json
+
+from nose.plugins.skip import SkipTest
+from nose.tools import assert_equal, assert_true
+
+from django.contrib.auth.models import User
+from django.core.urlresolvers import reverse
+
+from hadoop.pseudo_hdfs4 import is_live_cluster
+from desktop.lib.django_test_util import make_logged_in_client
+from desktop.lib.test_utils import add_to_group, grant_access
+
+from metadata.navigator import NavigatorApi
+
+
+LOG = logging.getLogger(__name__)
+
+
+class TestNavigatorApi(object):
+
+  @staticmethod
+  def is_navigator_enabled():
+    is_enabled = True
+    try:
+      from metadata.conf import NAVIGATOR
+      if not NAVIGATOR.API_URL.get():
+        is_enabled = False
+    except:
+      LOG.info('Testing navigator requires a configured navigator api_url')
+      is_enabled = False
+
+    return is_enabled
+
+
+  @classmethod
+  def setup_class(cls):
+
+    if not is_live_cluster() or not cls.is_navigator_enabled():
+      raise SkipTest
+
+    cls.client = make_logged_in_client(username='test', is_superuser=False)
+    cls.user = User.objects.get(username='test')
+    add_to_group('test')
+    grant_access("test", "test", "metadata")
+    grant_access("test", "test", "navigator")
+
+    cls.api = NavigatorApi()
+
+
+  @classmethod
+  def teardown_class(cls):
+    cls.user.is_superuser = False
+    cls.user.save()
+
+
+  def test_find_entity(self):
+    entity = self.api.find_entity(source_type='HIVE', type='DATABASE', name='default')
+    assert_true('identity' in entity, entity)