コード例 #1
0
  def test_call_session_close_idle_managed_queries(self):
    finish = (
        MAX_NUMBER_OF_SESSIONS.set_for_testing(-1),
        CLOSE_SESSIONS.set_for_testing(True)
    )

    try:
      with patch('beeswax.server.hive_server2_lib.thrift_util.get_client') as get_client:
        with patch('beeswax.server.hive_server2_lib.HiveServerClient.open_session') as open_session:
          with patch('beeswax.server.hive_server2_lib.HiveServerClient.close_session') as close_session:
            with patch('beeswax.server.hive_server2_lib.HiveServerTRowSet') as HiveServerTRowSet:
              status = MagicMock(status=MagicMock(statusCode=0))
              status_return = MagicMock(return_value=status)
              get_client.return_value = MagicMock(
                  return_value=status, GetSchemas=status_return, FetchResults=status_return, GetResultSetMetadata=status_return,
                  CloseOperation=status_return, ExecuteStatement=status_return, GetTables=status_return, GetColumns=status_return
              )
              open_session.return_value = MagicMock(status_code=0)
              server_config = get_query_server_config(name='beeswax')

              client = HiveServerClient(server_config, self.user)

              res = client.get_databases()
              assert_equal(open_session.call_count, 1)
              assert_equal(close_session.call_count, 1)

              res = client.get_database(MagicMock())
              assert_equal(open_session.call_count, 2)
              assert_equal(close_session.call_count, 2)

              res = client.get_tables_meta(MagicMock(), MagicMock())
              assert_equal(open_session.call_count, 3)
              assert_equal(close_session.call_count, 3)

              res = client.get_tables(MagicMock(), MagicMock())
              assert_equal(open_session.call_count, 4)
              assert_equal(close_session.call_count, 4)

              res = client.get_table(MagicMock(), MagicMock())
              assert_equal(open_session.call_count, 5)
              assert_equal(close_session.call_count, 5)

              res = client.get_columns(MagicMock(), MagicMock())
              assert_equal(open_session.call_count, 6)
              assert_equal(close_session.call_count, 6)

              res = client.get_partitions(MagicMock(), MagicMock()) # get_partitions does 2 requests with 1 session each
              assert_equal(open_session.call_count, 8)
              assert_equal(close_session.call_count, 8)
    finally:
      for f in finish:
        f()
コード例 #2
0
  def test_get_table_with_error(self):
    query = Mock(
      get_query_statement=Mock(return_value=['SELECT 1']),
      settings=[]
    )

    with patch('beeswax.server.hive_server2_lib.thrift_util.get_client') as get_client:
      get_client.return_value = Mock(
        OpenSession=Mock(
          return_value=Mock(
            status=Mock(
              statusCode=TStatusCode.SUCCESS_STATUS
            ),
            configuration={},
            sessionHandle=Mock(
              sessionId=Mock(
                secret=b'1',
                guid=b'1'
              )
            ),
            serverProtocolVersion=11
          )
        ),
        ExecuteStatement=Mock(
          return_value=Mock(
            status=Mock(
              statusCode=TStatusCode.SUCCESS_STATUS
            ),
          )
        ),
        get_coordinator_host=Mock(return_value='hive-host')
      )

      client = HiveServerClient(self.query_server, self.user)

      # Non empty error message from HS2
      client._client.GetTables = Mock(
        return_value=Mock(
          status=Mock(
            errorMessage='Error while compiling statement: FAILED: HiveAccessControlException Permission denied'
          )
        )
      )

      assert_raises(QueryServerException, client.get_table, database='database', table_name='table_name')

      try:
        client.get_table(database='database', table_name='table_name')
      except QueryServerException as e:
        assert_equal(
          'Error while compiling statement: FAILED: HiveAccessControlException Permission denied',
          str(e)
        )

      # Empty error message from HS2
      get_tables_res = Mock(
          status=Mock(
            errorMessage=None
          )
      )
      client._client.GetTables = Mock(
        return_value=get_tables_res
      )

      try:
        client.get_table(database='database', table_name='table_name')
      except QueryServerException as e:
        if sys.version_info[0] > 2:
          req_string = ("TGetTablesReq(sessionHandle=TSessionHandle(sessionId=THandleIdentifier(guid=b'l\\xc4', secret=b'l\\xc4')), "
            "catalogName=None, schemaName='database', tableName='table_name', tableTypes=None)")
        else:
          req_string = ("TGetTablesReq(schemaName='database', sessionHandle=TSessionHandle(sessionId=THandleIdentifier"
            "(secret='1', guid='1')), tableName='table_name', tableTypes=None, catalogName=None)")
        assert_equal(
          "Bad status for request %s:\n%s" % (req_string, get_tables_res),
          str(e)
        )
コード例 #3
0
  def test_get_table_with_error(self):
    query = Mock(
      get_query_statement=Mock(return_value=['SELECT 1']),
      settings=[]
    )

    original_secret = b's\xb6\x0ePP\xbdL\x17\xa3\x0f\\\xf7K\xe8Y\x1d'
    original_guid = b'\xd9\xe0hT\xd6wO\xe1\xa3S\xfb\x04\xca\x93V\x01'
    with patch('beeswax.server.hive_server2_lib.thrift_util.get_client') as get_client:
      get_client.return_value = Mock(
        OpenSession=Mock(
          return_value=Mock(
            status=Mock(
              statusCode=TStatusCode.SUCCESS_STATUS
            ),
            configuration={},
            sessionHandle=Mock(
              sessionId=Mock(
                secret=original_secret,
                guid=original_guid
              )
            ),
            serverProtocolVersion=11
          )
        ),
        ExecuteStatement=Mock(
          return_value=Mock(
            status=Mock(
              statusCode=TStatusCode.SUCCESS_STATUS
            ),
          )
        ),
        get_coordinator_host=Mock(return_value='hive-host')
      )

      client = HiveServerClient(self.query_server, self.user)

      # Non empty error message from HS2
      client._client.GetTables = Mock(
        return_value=Mock(
          status=Mock(
            errorMessage='Error while compiling statement: FAILED: HiveAccessControlException Permission denied'
          )
        )
      )

      assert_raises(QueryServerException, client.get_table, database='database', table_name='table_name')

      try:
        client.get_table(database='database', table_name='table_name')
      except QueryServerException as e:
        assert_equal(
          'Error while compiling statement: FAILED: HiveAccessControlException Permission denied',
          str(e)
        )

      # Empty error message from HS2
      get_tables_res = Mock(
          status=Mock(
            errorMessage=None
          )
      )
      client._client.GetTables = Mock(
        return_value=get_tables_res
      )

      try:
        client.get_table(database='database', table_name='table_name')
      except QueryServerException as e:
        if sys.version_info[0] > 2:
          req_string = ("TGetTablesReq(sessionHandle=TSessionHandle(sessionId=THandleIdentifier(guid=%s, secret=%s)), "
            "catalogName=None, schemaName='database', tableName='table_name', tableTypes=None)")\
            % (str(original_guid), str(original_secret))
        else:
          req_string = ("TGetTablesReq(schemaName='database', sessionHandle=TSessionHandle(sessionId=THandleIdentifier"
            "(secret='%s', guid='%s')), tableName='table_name', tableTypes=None, catalogName=None)")\
            % ('s\\xb6\\x0ePP\\xbdL\\x17\\xa3\\x0f\\\\\\xf7K\\xe8Y\\x1d',
               '\\xd9\\xe0hT\\xd6wO\\xe1\\xa3S\\xfb\\x04\\xca\\x93V\\x01') # manually adding '\'
        assert_equal(
          "Bad status for request %s:\n%s" % (req_string, get_tables_res),
          str(e)
        )