Пример #1
0
    async def start_driver(self):
        if self._fut_stop is not None:
            await self._fut_stop
            self._fut_stop = None

        self._fut_running = Future()

        if self._fut_start:
            await self._fut_start
            return

        self._fut_start = ensure_future(self._internal_start_driver())
        await self._fut_start
async def test_redis_error_recovery(job_processor):
    reset_redis = asynctest.CoroutineMock()
    job_processor.reset_callback = reset_redis
    job = JobRequest('polyswarmd-addr', 'guid', 0, 'uri', ArtifactType.FILE.value, 1, None, 'side', int(time.time()))

    future = Future()
    job_processor.stop()
    job_processor.redis.close()
    await job_processor.redis.wait_closed()
    await job_processor.register_jobs('guid', 'test_redis_error_recovery', [job], future)
    await job_processor.fetch_results()

    reset_redis.assert_called()
Пример #3
0
 def wait_for_alert(self,
                    success_type,
                    success_getter=None,
                    fail_type=None,
                    fail_getter=None):
     future = Future()
     if success_type:
         self.futures[success_type].append(
             (future, future.set_result, success_getter))
     if fail_type:
         self.futures[fail_type].append(
             (future, future.set_exception, fail_getter))
     return future
Пример #4
0
    def _consume(self):
        self.waiter = Future()

        def process(_):
            while len(self.receive_queue):
                data = self.receive_queue.popleft()
                if self.transport:
                    self._dataReceived(data)
                else:
                    print("WebSocketAdapterProtocol._consume: no transport")
            self._consume()

        self.waiter.add_done_callback(process)
Пример #5
0
 def on_verify_request(self, peer, attribute_hash):
     """
     Return the measurement of an attribute for a certain peer.
     """
     metadata = self.identity_overlay.get_attestation_by_hash(
         attribute_hash)
     if not metadata:
         return succeed(None)
     attribute_name = json.loads(metadata.serialized_json_dict)["name"]
     future = Future()
     self.verify_requests[(b64encode(peer.mid).decode(),
                           attribute_name)] = future
     return future
    def create_skill_handler_for_testing(
            self, adapter) -> SkillHandlerInstanceForTests:
        mock_bot = Mock()
        mock_bot.on_turn = MagicMock(return_value=Future())
        mock_bot.on_turn.return_value.set_result(Mock())

        return SkillHandlerInstanceForTests(
            adapter,
            mock_bot,
            self._test_id_factory,
            Mock(),
            AuthenticationConfiguration(),
        )
Пример #7
0
def call(nvim: Nvim, fn: Callable[[], T]) -> Awaitable[T]:
    fut: Future = Future()

    def cont() -> None:
        try:
            ret = fn()
        except Exception as e:
            fut.set_exception(e)
        else:
            fut.set_result(ret)

    nvim.async_call(cont)
    return fut
Пример #8
0
    def connect(self, address: tuple) -> None:
        future = Future()
        try:
            self.socket.connect(address)
        except BlockingIOError:
            pass

        def _handle_connect():
            self.io_loop.remove_writer(self.socket)
            future.set_result(None)

        self.io_loop.add_writer(self.socket, _handle_connect)
        return future
Пример #9
0
    def callback_run(self, custom_process=False):
        host = getenv('IP', '0.0.0.0')
        port = int(getenv('PORT', 8000))

        self.logger.info("Started to process messages")

        try:
            server_generator, handler, app = self.loop.run_until_complete(
                self.init_app(host, port, self.loop))
            server = self.loop.run_until_complete(server_generator)
        except OSError:
            self.logger.error("Address already in use: " + str(host) + ":" +
                              str(port))
            return

        self.main_task = Future()

        if custom_process:
            return self.main_task

        print("======== Running on http://{}:{} ========\n"
              "         (Press CTRL+C to quit)".format(
                  *server.sockets[0].getsockname()))

        def stop_server():
            server.close()

            if not self.loop.is_running():
                return

            self.loop.run_until_complete(server.wait_closed())
            self.loop.run_until_complete(app.shutdown())
            self.loop.run_until_complete(handler.shutdown(10))
            self.loop.run_until_complete(app.cleanup())

        try:
            self.loop.run_until_complete(self.main_task)
        except KeyboardInterrupt:
            self.stop()

            stop_server()

            self.loop.close()

        except asyncio.CancelledError:
            pass

        finally:
            stop_server()

            self.logger.info("Stopped to process messages")
Пример #10
0
async def test_async_alive_terminates(mocker):
    mock_start_process = mocker.patch('watchgod.main._start_process')
    mock_start_process.return_value = FakeProcess()
    mock_kill = mocker.patch('watchgod.main.os.kill')
    f = Future()
    f.set_result(1)
    c = mocker.MagicMock(return_value=f)

    reloads = await arun_process('/x/y/async', object(), watcher_cls=FakeWatcher, callback=c, debounce=5, min_sleep=1)
    assert reloads == 1
    assert mock_start_process.call_count == 2
    assert mock_kill.call_count == 1
    assert c.call_count == 1
    c.assert_called_with({'x'})
Пример #11
0
def mock_get_sender(name: str):
    """
    Mocked sender factory that returns mock senders!
    """

    sender = mock.Mock()
    sender.name = name

    for action in ("open", "close", "send_raw"):
        func = Future()
        func.set_result(None)
        getattr(sender, action).return_value = func

    return sender
Пример #12
0
    def crawl_chain(self, peer, latest_block_num=0):
        """
        Crawl the whole chain of a specific peer.
        :param latest_block_num: The latest block number of the peer in question, if available.
        """
        if self.request_cache.has("chaincrawl", ChainCrawlCache.get_number_for(peer)):
            self.logger.debug("Skipping crawl of peer %s, another crawl is pending", peer)
            return succeed(None)

        crawl_future = Future()
        cache = ChainCrawlCache(self, peer, crawl_future, known_chain_length=latest_block_num)
        self.request_cache.add(cache)
        get_event_loop().call_soon_threadsafe(ensure_future, self.send_next_partial_chain_crawl_request(cache))
        return crawl_future
Пример #13
0
    async def app_list(self) -> Optional[List[Dict[str, Any]]]:
        _LOGGING.debug("Get app list (not available on all TVs)")
        # See https://github.com/xchwarze/samsung-tv-ws-api/issues/23
        app_list_future: Future[Dict[str, Any]] = Future()
        self._app_list_futures.add(app_list_future)
        await self.send_command(remote.ChannelEmitCommand.get_installed_app())

        try:
            async with async_timeout.timeout(self.timeout):
                response = await app_list_future
        except AsyncioTimeoutError as err:
            _LOGGING.debug("Failed to get app list: %s", err)
            return None
        return parse_installed_app(response)
 def mock_future(self, method, return_value):
     """
     Mock 协程/Future对象
     :param method: 需要被 mock 的方法
     :param return_value: 期望的返回值
     :return: 
     """
     _patcher = mock.patch(method)
     ft = Future()
     ft.set_result(return_value)
     self._patcher.append(_patcher)
     mocker = _patcher.start()
     mocker.return_value = ft
     return mocker
Пример #15
0
    def test_remove_user_from_db_calls_db_remove_user(self):
        self.bot.part_channels = MagicMock(return_value=Future())
        self.bot.part_channels.return_value.set_result('')

        cog = AdminCog(self.bot)

        test_twitch_username = '******'

        self.loop.run_until_complete(
            cog.remove_user_from_db._callback(cog, self.ctx,
                                              test_twitch_username))

        self.bot.users_db.remove_user.assert_called_once_with(
            twitch_username='******')
async def in_terminal(
        render_cli_done: bool = False) -> AsyncGenerator[None, None]:
    """
    Context manager that suspends the current application and runs the body in
    the terminal.
    """
    app = get_app_or_none()
    if app is None or not app._is_running:
        yield
        return

    # When a previous `run_in_terminal` call was in progress. Wait for that
    # to finish, before starting this one. Chain to previous call.
    previous_run_in_terminal_f = app._running_in_terminal_f
    new_run_in_terminal_f: Future[None] = Future()
    app._running_in_terminal_f = new_run_in_terminal_f

    # Wait for the previous `run_in_terminal` to finish.
    if previous_run_in_terminal_f is not None:
        await previous_run_in_terminal_f

    # Wait for all CPRs to arrive. We don't want to detach the input until
    # all cursor position responses have been arrived. Otherwise, the tty
    # will echo its input and can show stuff like ^[[39;1R.
    if app.input.responds_to_cpr:
        await app.renderer.wait_for_cpr_responses()

    # Draw interface in 'done' state, or erase.
    if render_cli_done:
        app._redraw(render_as_done=True)
    else:
        app.renderer.erase()

    # Disable rendering.
    app._running_in_terminal = True

    # Detach input.
    try:
        with app.input.detach():
            with app.input.cooked_mode():
                yield
    finally:
        # Redraw interface again.
        try:
            app._running_in_terminal = False
            app.renderer.reset()
            app._request_absolute_cursor_position()
            app._redraw()
        finally:
            new_run_in_terminal_f.set_result(None)
    async def test_ignored_error_logging(self):
        request = MagicMock()
        response = MagicMock(status_code=404)
        response_wrapper = Future()
        response_wrapper.set_result(response)
        logger = MagicMock()

        middleware = under_test.StructlogRequestMiddleware(
            MagicMock(), logger=logger, ignored_status_codes={404})

        response = await middleware.dispatch(request,
                                             lambda _: response_wrapper)

        assert logger.log.call_count == 2
Пример #18
0
    async def send_data(self, destination_node_id: int, command: List[int]):
        self.ack[destination_node_id] = Future()

        self.network_controller.send_message_in_current_network(
            destination_node_id, 'APPLICATION_COMMAND', {'command': command})

        try:
            await asyncio.wait_for(self.ack[destination_node_id],
                                   timeout=self.TIMEOUT_SECONDS)
            yield TransmitStatus.OK
        except asyncio.TimeoutError:
            yield TransmitStatus.NO_ACK
        finally:
            del self.ack[destination_node_id]
Пример #19
0
    def invoke_func(*args, **kwargs):
        result_future = Future()

        def done_cb(fut):
            with suppress(CancelledError):
                handle = fut.result()
            if not fut.cancelled() and not result_future.done(
            ) and handle == download.handle and handle.is_valid():
                result_future.set_result(func(*args, **kwargs))

        download = args[0]
        handle_future = download.get_handle()
        handle_future.add_done_callback(done_cb)
        return result_future
Пример #20
0
async def test_rabbit_progress_connection(loop, client, progress_channel,
                                          fake_progress_message, mocker):
    mock = mocker.patch(
        'simcore_service_webserver.computation_subscribe.sio.emit',
        return_value=Future())
    mock.return_value.set_result("")

    for i in range(1000):
        await progress_channel.publish(aio_pika.Message(
            body=json.dumps(fake_progress_message).encode(),
            content_type="text/json"),
                                       routing_key="")

    mock.assert_called_with("progress", data=json.dumps(fake_progress_message))
Пример #21
0
async def _(state: str, request: Request, wait: bool = False) -> JSONDict:
    while True:
        try:
            return core.lock(state)
        except core.NotAllowed as e:
            raise HTTPException(400, e.args[0])
        except core.NotFound:
            if not wait:
                raise HTTPException(404, f"{state} is not found")
            future = Future()
            waitings[state].append((future, request))
            if await future == "disconnected":
                return {}  # this request has gone, return any has no meaning
            continue
Пример #22
0
    def test_toggle_test_for_user_calls_db_toggle_setting(self):
        self.bot.part_channels = MagicMock(return_value=Future())
        self.bot.part_channels.return_value.set_result('')

        cog = AdminCog(self.bot)

        test_twitch_username = '******'

        self.loop.run_until_complete(
            cog.toggle_test_for_user._callback(cog, self.ctx,
                                               test_twitch_username))

        self.bot.users_db.toggle_setting.assert_called_once_with(
            'test', 'test_twitch_username')
Пример #23
0
    def read_bytes(self, num_bytes):
        assert self._read_future is None, "Already reading"
        if self._closed:
            raise StreamClosedError(IOError('Already Closed'))

        future = self._read_future = Future()
        self._read_bytes = num_bytes
        if self._read_buffer_size >= self._read_bytes:
            future, self._read_future = self._read_future, None
            self._read_buffer, data = bytearray(), self._read_buffer
            self._read_buffer_size = 0
            self._read_bytes = 0
            future.set_result(data)
        return future
async def test_run_coroutine_job(asyncio_scheduler, asyncio_executor, exception):
    from asyncio import Future, sleep

    future = Future()
    job = asyncio_scheduler.add_job(waiter, 'interval', seconds=1, args=[sleep, exception])
    asyncio_executor._run_job_success = lambda job_id, events: future.set_result(events)
    asyncio_executor._run_job_error = lambda job_id, exc, tb: future.set_exception(exc)
    asyncio_executor.submit_job(job, [datetime.now(utc)])
    events = await future
    assert len(events) == 1
    if exception:
        assert str(events[0].exception) == 'dummy error'
    else:
        assert events[0].retval is True
    async def test_start_and_end_requests_logged(self):
        request = MagicMock()
        response = MagicMock(status_code=200)
        response_wrapper = Future()
        response_wrapper.set_result(response)
        logger = MagicMock()

        middleware = under_test.StructlogRequestMiddleware(MagicMock(),
                                                           logger=logger)

        response = await middleware.dispatch(request,
                                             lambda _: response_wrapper)

        assert logger.log.call_count == 2
Пример #26
0
async def generic_test_all(mocker, fake, service_class):
    expected = [fake(1), fake(2)]
    repository = mocker.Mock()
    f = Future()
    f.set_result(expected)
    repository.all = mocker.MagicMock(return_value=f)
    service = service_class(repository)
    result = await service.all(1, 100)
    assert result == expected
    repository.all.assert_called_once_with(1, 100)
    repository.all.reset_data()
    result = await service.all(None, None)
    assert result == expected
    repository.all.assert_called_with(0, 100)
Пример #27
0
def test_close(mocker):
    # arrange
    consumer = get_consumer(callback=simple_callback)
    consumer._closed = asyncio.Future()

    connection = mocker.patch.object(consumer, '_connection', autospec=True)
    connection.closed = Future()

    # act
    consumer.close()

    # assert
    assert consumer._closed.done()
    assert isinstance(consumer._closed.exception(), ConsumerCloseException)
Пример #28
0
def test_transmit_handles_failure():
    """
    Test transmit failures don't kill the interface handling.
    """
    my_port = UnreliableDummyKISS()
    my_frame_1 = AX25UnnumberedInformationFrame(destination='VK4BWI-4',
                                                source='VK4MSL',
                                                pid=0xf0,
                                                payload=b'testing 1')
    my_frame_2 = AX25UnnumberedInformationFrame(destination='VK4BWI-4',
                                                source='VK4MSL',
                                                pid=0xf0,
                                                payload=b'testing 2')
    transmit_future = Future()

    my_interface = AX25Interface(my_port, cts_delay=0.250)

    # Override clear to send expiry
    my_interface._cts_expiry = 0

    def _on_transmit(interface, frame, **kwargs):
        try:
            eq_(len(kwargs), 0, msg='Too many arguments')
            assert_is(interface, my_interface, msg='Wrong interface')
            eq_(bytes(frame), bytes(my_frame_2), msg='Wrong frame')
            transmit_future.set_result(None)
        except Exception as e:
            transmit_future.set_exception(e)

    def _on_timeout():
        transmit_future.set_exception(AssertionError('Timed out'))

    # The time before transmission
    time_before = time.monotonic()

    # Set a timeout
    get_event_loop().call_later(2.0, _on_timeout)

    # Send the messages
    my_interface.transmit(my_frame_1, _on_transmit)  # This will fail
    my_interface.transmit(my_frame_2, _on_transmit)  # This will work

    yield from transmit_future

    eq_(len(my_port.sent), 1)
    (send_time, sent_frame) = my_port.sent.pop(0)

    eq_(bytes(sent_frame), bytes(my_frame_2))
    assert_less((time.monotonic() - send_time), 0.05)
    assert_greater_equal((send_time - time_before), 0.25)
Пример #29
0
    async def test_request_response_error(self):
        message = b'something went wrong'
        response_future = Future()
        response_future.set_result((404, message))
        self.make_request_mock.return_value = response_future

        with self.assertRaises(TTransportException) as e:
            await self.transport.request(FContext(),
                                         bytearray([0, 0, 0, 3, 1, 2, 3]))

        self.assertEqual(
            str(e.exception),
            'request errored with code {0} and message {1}'.format(
                404, str(message)))
Пример #30
0
 def test_notify_with_non_recognized_connections(self):
     data = {
         "name":
         "test",
         "condition":
         V1StatusCondition(type=V1Statuses.FAILED, status=True).to_dict(),
         "connections": ["test1", "test2"],
     }
     with patch("polyaxon.agents.spawners.async_spawner.AsyncK8SManager"
                ) as manager_mock:
         manager_mock.return_value.setup.return_value = Future()
         manager_mock.return_value.setup.return_value.set_result(None)
         response = self.client.post(self.base_url, json=data)
         assert response.status_code == 200