Пример #1
0
async def test_target_sends_to_result_callback():
    result_callback = Mock()
    proc = DaemonProcess(
        target=target_sending_result_to_finished_callback,
        result_callback=result_callback,
    )
    proc.start()
    await proc.join()
    assert result_callback.call_args_list == [call('foo')]
Пример #2
0
async def test_target_sends_to_error_callback():
    error_callback = Mock()
    proc = DaemonProcess(
        target=target_sending_to_error_callback,
        error_callback=error_callback,
    )
    proc.start()
    await proc.join()
    assert error_callback.call_args_list == [call(0), call(1)]
Пример #3
0
async def test_target_sends_to_info_callback():
    info_callback = Mock()
    proc = DaemonProcess(
        target=target_sending_to_info_callback,
        info_callback=info_callback,
    )
    proc.start()
    await proc.join()
    assert info_callback.call_args_list == [call(0), call(1), call(2), call(3)]
Пример #4
0
async def test_error_callback_raises_exception():
    exception = RuntimeError('Boo!')
    error_callback = Mock(side_effect=exception)
    proc = DaemonProcess(
        target=target_sending_to_error_callback,
        error_callback=error_callback,
    )
    proc.start()
    with pytest.raises(RuntimeError, match=r'^Boo!$'):
        await proc.join()
    assert proc.exception is exception
    assert error_callback.call_args_list == [call(0), call(exception)]
Пример #5
0
async def test_exceptions_from_target_are_reraised_when_process_is_joined():
    error_callback = Mock()
    proc = DaemonProcess(
        target=target_raising_exception,
        error_callback=error_callback,
    )
    proc.start()
    with pytest.raises(ValueError, match=r'^Kaboom!$') as exc_info:
        await proc.join()
    assert exc_info.value.original_traceback.startswith(
        'Subprocess traceback:\n')
    assert 'target_raising_exception' in exc_info.value.original_traceback
    assert exc_info.value.original_traceback.endswith('ValueError: Kaboom!')
    assert len(error_callback.call_args_list) == 1
    assert isinstance(error_callback.call_args_list[0][0][0], ValueError)
    assert str(error_callback.call_args_list[0][0][0]) == 'Kaboom!'
Пример #6
0
async def test_is_alive_property():
    proc = DaemonProcess(target=target_never_terminating, )
    assert proc.is_alive is False
    proc.start()
    assert proc.is_alive is True
    proc.stop()
    await proc.join()
    assert proc.is_alive is False
Пример #7
0
async def test_target_gets_positional_and_keyword_arguments():
    class LocalString(str):
        pass

    class LocalStringSubclass(LocalString):
        pass

    class LocalInteger(int):
        pass

    info_callback = Mock()
    proc = DaemonProcess(
        target=target_taking_arguments,
        args=(LocalString('Foo'), LocalStringSubclass('Bar')),
        kwargs={
            LocalString('baz'): LocalInteger(847),
        },
        info_callback=info_callback,
    )
    proc.start()
    await proc.join()
    assert info_callback.call_args_list == [
        call('Foo'), call('Bar'), call(847)
    ]
Пример #8
0
async def test_stop_sends_termination_signal_to_running_process():
    info_callback = Mock()
    proc = DaemonProcess(
        target=target_never_terminating,
        info_callback=info_callback,
    )
    proc.start()
    await asyncio.sleep(1)
    assert proc.is_alive
    proc.stop()
    await proc.join()
    assert info_callback.call_args_list == [call('something')]
Пример #9
0
async def test_target_calls_finished_callback(target):
    finished_callback = Mock()
    proc = DaemonProcess(
        target=target,
        finished_callback=finished_callback,
    )
    proc.start()
    if target is target_never_terminating:
        proc.stop()
    try:
        await proc.join()
    except BaseException:
        pass
    assert finished_callback.call_args_list == [call()]