File: test_asyncio.py

package info (click to toggle)
python-snitun 0.45.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 664 kB
  • sloc: python: 6,703; sh: 5; makefile: 3
file content (74 lines) | stat: -rw-r--r-- 2,156 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
"""Tests for asyncio utils."""

import asyncio

import pytest

from snitun.utils.asyncio import (
    asyncio_timeout,
    create_eager_task,
    make_task_waiter_future,
)


async def test_asyncio_timeout() -> None:
    """Init aiohttp client for test."""
    with pytest.raises(asyncio.TimeoutError):
        async with asyncio_timeout.timeout(0.1):
            task = asyncio.create_task(asyncio.sleep(10))
            await task

    with pytest.raises(asyncio.CancelledError):
        await task


async def test_create_eager_task() -> None:
    """Test create eager task."""
    task = create_eager_task(asyncio.sleep(0.01))
    await task
    assert task.done()
    assert not task.cancelled()
    assert task.result() is None


async def test_make_task_waiter_future_running_task() -> None:
    """Test make task waiter future for a running task."""
    task = asyncio.create_task(asyncio.sleep(0.01))
    future = make_task_waiter_future(task)
    assert not future.done()
    assert not future.cancelled()
    assert await future is None


async def test_make_task_waiter_future_cancelled_task() -> None:
    """Test make task waiter future when the task is cancelled."""
    task = asyncio.create_task(asyncio.sleep(0.01))
    future = make_task_waiter_future(task)
    task.cancel()
    assert not future.done()
    assert not future.cancelled()
    assert await future is None


async def test_make_task_waiter_future_exception_task() -> None:
    """Test make task waiter future when the task raises."""

    async def _raise_exception() -> None:
        await asyncio.sleep(0)
        raise ValueError("test")

    task = asyncio.create_task(_raise_exception())
    future = make_task_waiter_future(task)
    assert not future.done()
    assert not future.cancelled()
    assert await future is None


async def test_make_task_waiter_future_already_done_task() -> None:
    """Test make task waiter future when the task is already done."""
    task = asyncio.create_task(asyncio.sleep(0))
    await task
    future = make_task_waiter_future(task)
    assert future.done()
    assert not future.cancelled()
    assert future.result() is None