Exemple #1
0
async def test_created_as_off():
    toggleset = ToggleSet()
    assert len(toggleset) == 0
    assert set(toggleset) == set()
    assert Toggle() not in toggleset
    assert not toggleset.is_on()
    assert toggleset.is_off()
Exemple #2
0
async def test_blocking_when_operator_is_not_ready(resource, settings,
                                                   registry, indexers, caplog,
                                                   event_type, handlers,
                                                   timer):
    caplog.set_level(logging.DEBUG)

    operator_indexed = ToggleSet(all)
    resource_listed = await operator_indexed.make_toggle()
    resource_indexed = await operator_indexed.make_toggle()
    with pytest.raises(asyncio.TimeoutError):
        async with timer, async_timeout.timeout(0.2) as timeout:
            await process_resource_event(
                lifecycle=all_at_once,
                registry=registry,
                settings=settings,
                resource=resource,
                indexers=indexers,
                memories=ResourceMemories(),
                memobase=Memo(),
                raw_event={
                    'type': event_type,
                    'object': {}
                },
                event_queue=asyncio.Queue(),
                operator_indexed=operator_indexed,
                resource_indexed=resource_indexed,
            )
    assert timeout.expired
    assert 0.2 < timer.seconds < 0.4
    assert operator_indexed.is_off()
    assert set(operator_indexed) == {resource_listed}
    assert not handlers.event_mock.called
Exemple #3
0
async def test_unblocking_once_operator_is_ready(resource, settings, registry,
                                                 indexers, caplog, event_type,
                                                 handlers, timer):
    caplog.set_level(logging.DEBUG)

    async def delayed_readiness(delay: float):
        await asyncio.sleep(delay)
        await resource_listed.turn_to(True)

    operator_indexed = ToggleSet(all)
    resource_listed = await operator_indexed.make_toggle()
    resource_indexed = await operator_indexed.make_toggle()
    async with timer, async_timeout.timeout(1.0) as timeout:
        asyncio.create_task(delayed_readiness(0.2))
        await process_resource_event(
            lifecycle=all_at_once,
            registry=registry,
            settings=settings,
            resource=resource,
            indexers=indexers,
            memories=ResourceMemories(),
            memobase=Memo(),
            raw_event={
                'type': event_type,
                'object': {}
            },
            event_queue=asyncio.Queue(),
            operator_indexed=operator_indexed,
            resource_indexed=resource_indexed,
        )
    assert not timeout.expired
    assert 0.2 < timer.seconds < 0.4
    assert operator_indexed.is_on()
    assert set(operator_indexed) == {resource_listed}
    assert handlers.event_mock.called
Exemple #4
0
async def test_reporting_on_resource_readiness(resource, settings, registry,
                                               indexers, caplog, event_type,
                                               handlers, timer):
    caplog.set_level(logging.DEBUG)

    operator_indexed = ToggleSet(all)
    resource_indexed = await operator_indexed.make_toggle()
    async with timer, async_timeout.timeout(0.5) as timeout:
        await process_resource_event(
            lifecycle=all_at_once,
            registry=registry,
            settings=settings,
            resource=resource,
            indexers=indexers,
            memories=ResourceMemories(),
            memobase=Memo(),
            raw_event={
                'type': event_type,
                'object': {}
            },
            event_queue=asyncio.Queue(),
            operator_indexed=operator_indexed,
            resource_indexed=resource_indexed,
        )
    assert not timeout.expired
    assert timer.seconds < 0.2  # asap, nowait
    assert operator_indexed.is_on()
    assert set(operator_indexed) == set()  # save RAM
    assert handlers.event_mock.called
Exemple #5
0
async def test_created_empty(fn, expected):
    toggleset = ToggleSet(fn)
    assert len(toggleset) == 0
    assert set(toggleset) == set()
    assert Toggle() not in toggleset
    assert toggleset.is_on() == expected
    assert toggleset.is_off() == (not expected)
Exemple #6
0
async def test_dropping_an_unexistent_toggle():
    toggleset = ToggleSet()
    toggle = Toggle()
    await toggleset.drop_toggle(toggle)
    assert len(toggleset) == 0
    assert set(toggleset) == set()
    assert toggle not in toggleset
    assert not toggleset.is_on()
    assert toggleset.is_off()
Exemple #7
0
async def test_making_a_turned_on_toggle():
    toggleset = ToggleSet()
    toggle = await toggleset.make_toggle(True)
    assert len(toggleset) == 1
    assert set(toggleset) == {toggle}
    assert toggle in toggleset
    assert Toggle() not in toggleset
    assert toggleset.is_on()
    assert not toggleset.is_off()
Exemple #8
0
async def test_dropping_an_unexistent_toggle(fn, expected):
    toggleset = ToggleSet(fn)
    toggle = Toggle()
    await toggleset.drop_toggle(toggle)
    assert len(toggleset) == 0
    assert set(toggleset) == set()
    assert toggle not in toggleset
    assert toggleset.is_on() == expected
    assert toggleset.is_off() == (not expected)
Exemple #9
0
async def test_making_a_turned_off_toggle(fn):
    toggleset = ToggleSet(fn)
    toggle = await toggleset.make_toggle(False)
    assert len(toggleset) == 1
    assert set(toggleset) == {toggle}
    assert toggle in toggleset
    assert Toggle() not in toggleset
    assert toggleset.is_on() == False
    assert toggleset.is_off() == True
Exemple #10
0
async def test_dropping_a_turned_on_toggle(fn, expected):
    toggleset = ToggleSet(fn)
    toggle = await toggleset.make_toggle(True)
    await toggleset.drop_toggle(toggle)
    assert len(toggleset) == 0
    assert set(toggleset) == set()
    assert toggle not in toggleset
    assert toggleset.is_on() == expected
    assert toggleset.is_off() == (not expected)
Exemple #11
0
async def test_dropping_a_turned_on_toggle():
    toggleset = ToggleSet()
    toggle = await toggleset.make_toggle(True)
    await toggleset.drop_toggle(toggle)
    assert len(toggleset) == 0
    assert set(toggleset) == set()
    assert toggle not in toggleset
    assert not toggleset.is_on()
    assert toggleset.is_off()
Exemple #12
0
async def test_dropping_multiple_toggles():
    toggleset = ToggleSet()
    toggle1 = await toggleset.make_toggle(True)
    toggle2 = Toggle()
    await toggleset.drop_toggles([toggle1, toggle2])
    assert len(toggleset) == 0
    assert set(toggleset) == set()
    assert toggle1 not in toggleset
    assert toggle2 not in toggleset
    assert not toggleset.is_on()
    assert toggleset.is_off()
Exemple #13
0
async def test_waiting_until_off_wakes_when_turned_off(timer):
    toggleset = ToggleSet()
    toggle = await toggleset.make_toggle(True)

    async def delayed_turning_off(delay: float):
        await asyncio.sleep(delay)
        await toggle.turn_to(False)

    with timer:
        asyncio.create_task(delayed_turning_off(0.05))
        await asyncio.wait_for(toggleset.wait_for(False), timeout=1.0)

    assert toggleset.is_off()
    assert timer.seconds < 0.5  # approx. 0.05 plus some code overhead
async def test_pausing_waits_until_resumed(resource, namespace, timer, caplog,
                                           assert_logs):
    caplog.set_level(logging.DEBUG)

    operator_paused = ToggleSet(any)
    conflicts_found = await operator_paused.make_toggle(True)

    async def delayed_resuming(delay: float):
        await asyncio.sleep(delay)
        await conflicts_found.turn_to(False)

    async with timer, async_timeout.timeout(1.0) as timeout:
        asyncio.create_task(delayed_resuming(0.2))
        async with streaming_block(
                resource=resource,
                namespace=namespace,
                operator_paused=operator_paused,
        ):
            pass

    assert not timeout.expired
    assert timer.seconds >= 0.2
    assert timer.seconds <= 0.5
    assert_logs([
        r"Pausing the watch-stream for",
        r"Resuming the watch-stream for",
    ])
async def test_freezing_waits_until_resumed(
        resource, namespace, timer, caplog, assert_logs):
    caplog.set_level(logging.DEBUG)

    freeze_checker = ToggleSet()
    freeze_toggle = await freeze_checker.make_toggle(True)

    async def delayed_resuming(delay: float):
        await asyncio.sleep(delay)
        await freeze_toggle.turn_to(False)

    async with timer, async_timeout.timeout(1.0) as timeout:
        asyncio.create_task(delayed_resuming(0.2))
        async with streaming_block(
            resource=resource,
            namespace=namespace,
            freeze_checker=freeze_checker,
        ):
            pass

    assert not timeout.expired
    assert timer.seconds >= 0.2
    assert timer.seconds <= 0.5
    assert_logs([
        r"Freezing the watch-stream for",
        r"Resuming the watch-stream for",
    ])
Exemple #16
0
async def test_all_toggles_must_be_off_for_toggleset_to_be_off():
    toggleset = ToggleSet()
    toggle1 = await toggleset.make_toggle(True)
    toggle2 = await toggleset.make_toggle(True)
    assert toggleset.is_on()
    assert not toggleset.is_off()

    await toggle1.turn_to(False)
    assert toggleset.is_on()
    assert not toggleset.is_off()

    await toggle2.turn_to(False)
    assert not toggleset.is_on()
    assert toggleset.is_off()
Exemple #17
0
async def test_all_toggles_must_be_off_for_anytoggleset_to_be_off(fn):
    toggleset = ToggleSet(fn)
    toggle1 = await toggleset.make_toggle(True)
    toggle2 = await toggleset.make_toggle(True)
    assert toggleset.is_on() == True
    assert toggleset.is_off() == False

    await toggle1.turn_to(False)
    assert toggleset.is_on() == True
    assert toggleset.is_off() == False

    await toggle2.turn_to(False)
    assert toggleset.is_on() == False
    assert toggleset.is_off() == True
Exemple #18
0
async def test_turning_a_toggle_off_turns_the_toggleset_off(fn):
    toggleset = ToggleSet(fn)
    toggle = await toggleset.make_toggle(True)
    assert toggleset.is_on() == True
    assert toggleset.is_off() == False

    await toggle.turn_to(False)
    assert toggleset.is_on() == False
    assert toggleset.is_off() == True
Exemple #19
0
async def test_turning_a_toggle_on_turns_the_toggleset_on():
    toggleset = ToggleSet()
    toggle = await toggleset.make_toggle(False)
    assert not toggleset.is_on()
    assert toggleset.is_off()

    await toggle.turn_to(True)
    assert toggleset.is_on()
    assert not toggleset.is_off()
async def test_freezing_is_ignored_if_turned_off(
        resource, namespace, timer, caplog, assert_logs):
    caplog.set_level(logging.DEBUG)

    freeze_checker = ToggleSet()
    await freeze_checker.make_toggle(False)

    async with timer, async_timeout.timeout(0.5) as timeout:
        async with streaming_block(
            resource=resource,
            namespace=namespace,
            freeze_checker=freeze_checker,
        ):
            pass

    assert not timeout.expired
    assert timer.seconds < 0.2  # no waits, exits as soon as possible
    assert_logs([], prohibited=[
        r"Freezing the watch-stream for",
        r"Resuming the watch-stream for",
    ])
async def test_freezing_waits_forever_if_not_resumed(
        resource, namespace, timer, caplog, assert_logs):
    caplog.set_level(logging.DEBUG)

    freeze_checker = ToggleSet()
    await freeze_checker.make_toggle(True)

    with pytest.raises(asyncio.TimeoutError):
        async with timer, async_timeout.timeout(0.5) as timeout:
            async with streaming_block(
                resource=resource,
                namespace=namespace,
                freeze_checker=freeze_checker,
            ):
                pass

    assert timeout.expired
    assert timer.seconds >= 0.5
    assert_logs([
        r"Freezing the watch-stream for",
    ], prohibited=[
        r"Resuming the watch-stream for",
    ])
async def test_pausing_waits_forever_if_not_resumed(resource, namespace, timer,
                                                    caplog, assert_logs):
    caplog.set_level(logging.DEBUG)

    operator_paused = ToggleSet(any)
    await operator_paused.make_toggle(True)

    with pytest.raises(asyncio.TimeoutError):
        async with timer, async_timeout.timeout(0.5) as timeout:
            async with streaming_block(
                    resource=resource,
                    namespace=namespace,
                    operator_paused=operator_paused,
            ):
                pass

    assert timeout.expired
    assert timer.seconds >= 0.5
    assert_logs([
        r"Pausing the watch-stream for",
    ],
                prohibited=[
                    r"Resuming the watch-stream for",
                ])
Exemple #23
0
async def operator_paused():
    return ToggleSet(any)
Exemple #24
0
async def test_waiting_until_off_fails_when_not_turned_off():
    toggleset = ToggleSet()
    await toggleset.make_toggle(True)
    with pytest.raises(asyncio.TimeoutError):
        await asyncio.wait_for(toggleset.wait_for(False), timeout=0.1)
    assert toggleset.is_on()
Exemple #25
0
async def test_repr_when_named_and_off(fn):
    toggleset = ToggleSet(fn)
    await toggleset.make_toggle(False, name='xyz')
    assert repr(toggleset) == "{<Toggle: xyz: off>}"
Exemple #26
0
async def test_repr_when_named_and_on():
    toggleset = ToggleSet()
    await toggleset.make_toggle(True, name='xyz')
    assert repr(toggleset) == "{<Toggle: xyz: on>}"
Exemple #27
0
async def test_repr_when_unnamed_and_on():
    toggleset = ToggleSet()
    await toggleset.make_toggle(True)
    assert repr(toggleset) == "{<Toggle: on>}"
Exemple #28
0
async def test_repr_when_unnamed_and_off():
    toggleset = ToggleSet()
    await toggleset.make_toggle(False)
    assert repr(toggleset) == "{<Toggle: off>}"
Exemple #29
0
async def test_repr_when_empty():
    toggleset = ToggleSet()
    assert repr(toggleset) == "set()"
Exemple #30
0
async def test_secures_against_usage_as_a_boolean():
    toggle = ToggleSet()
    with pytest.raises(NotImplementedError):
        bool(toggle)