コード例 #1
0
    def test_column_fetch_slow(self):
        mock_response_future = Future()
        mock_response_future.executed = False

        # noinspection PyUnusedLocal
        def upon_execute(
            query
        ):  # Parameter required since function is passed as Callable[[RecordedQuery], None]
            mock_response_future.result()
            mock_response_future.executed = True

        try:
            mock_kusto_client = MockKustoClient(upon_execute=upon_execute,
                                                record_metadata=True)
            table = PyKustoClient(
                mock_kusto_client,
                fetch_by_default=False)['test_db']['mock_table']
            table.refresh()
            self.assertEqual(type(table['foo']), _AnyTypeColumn)
            self.assertEqual(type(table['bar']), _AnyTypeColumn)
            self.assertEqual(type(table['baz']), _AnyTypeColumn)
            # Make sure above lines were called while the fetch query was still waiting
            assert not mock_response_future.executed
        finally:
            # Return the fetch
            mock_response_future.set_result(None)

        table.wait_for_items()
        # Make sure the fetch query was indeed called
        assert mock_response_future.executed
コード例 #2
0
    def test_query_before_fetch_returned(self):
        mock_response_future = Future()
        mock_response_future.returned_queries = []
        mock_response_future.called = False
        mock_response_future.executed = False
        future_called_lock = Lock()

        def upon_execute(query):
            with future_called_lock:
                if mock_response_future.called:
                    first_run = False
                else:
                    mock_response_future.called = True
                    first_run = True
            if first_run:
                mock_response_future.result()
                mock_response_future.executed = True
            mock_response_future.returned_queries.append(query)

        try:
            mock_kusto_client = MockKustoClient(upon_execute=upon_execute,
                                                record_metadata=True)
            table = PyKustoClient(
                mock_kusto_client,
                fetch_by_default=False)['test_db']['mock_table']
            table.refresh()

            # Executing a query in a separate thread, because it is supposed to block until the fetch returns
            query_thread = Thread(target=Query(table).take(5).execute)
            query_thread.start()

            # Make sure above lines were called while the fetch query was still waiting
            assert not mock_response_future.executed
        finally:
            # Return the fetch
            mock_response_future.set_result(None)

        table.wait_for_items()
        query_thread.join()
        # Make sure the fetch query was indeed called
        assert mock_response_future.executed
        # Before the fix the order of returned query was reversed
        self.assertEqual(
            [
                RecordedQuery(
                    'test_db',
                    '.show table mock_table | project AttributeName, AttributeType | limit 10000'
                ),
                RecordedQuery('test_db', 'mock_table | take 5'),
            ],
            mock_response_future.returned_queries,
        )
コード例 #3
0
ファイル: test_client_fetch.py プロジェクト: roeap/pykusto
 def test_column_fetch_slow(self):
     mock_client = MockKustoClient(block=True)
     table = PyKustoClient(mock_client, fetch_by_default=False)['test_db']['mock_table']
     table.refresh()
     mock_client.wait_until_blocked()
     self.assertType(table['foo'], _AnyTypeColumn)
     self.assertType(table['bar'], _AnyTypeColumn)
     self.assertType(table['baz'], _AnyTypeColumn)
     # Return the fetch
     mock_client.release()
     table.wait_for_items()
     # Make sure the fetch query was indeed called
     assert not mock_client.blocked()
コード例 #4
0
ファイル: test_client_fetch.py プロジェクト: roeap/pykusto
 def test_query_before_fetch_returned(self):
     mock_client = MockKustoClient(block=True, record_metadata=True)
     table = PyKustoClient(mock_client, fetch_by_default=False)['test_db']['mock_table']
     table.refresh()
     mock_client.wait_until_blocked()
     mock_client.do_not_block_next_requests()
     self.query_in_background(Query(table).take(5).execute)
     # Return the fetch
     mock_client.release()
     table.wait_for_items()
     self.get_background_query_result()
     # Make sure the fetch query was indeed called
     assert not mock_client.blocked()
     # Before the fix the order of returned query was reversed
     self.assertEqual(
         [
             RecordedQuery('test_db', '.show table mock_table | project AttributeName, AttributeType | limit 10000'),
             RecordedQuery('test_db', 'mock_table | take 5'),
         ],
         mock_client.recorded_queries,
     )