コード例 #1
0
async def test_shield_middleware_funcitonal(loop, method, value):
    flag = False
    client_ready = asyncio.Event()
    handler_ready = asyncio.Event()

    async def handler(request):
        handler_ready.set()

        # Cancellation point.
        # When not shielded, CancelledError will be raised here.
        await client_ready.wait()

        nonlocal flag
        flag = True

        return web.Response(status=200)

    # Run handler in a task.
    middleware = shield_middleware(methods=frozenset({"POST"}))
    task = loop.create_task(
        middleware(make_mocked_request(method, "/"), handler))
    await handler_ready.wait()

    # Cancel the handler.
    task.cancel()
    client_ready.set()
    # Wait for completion.
    await asyncio.wait([task])

    assert flag is value
コード例 #2
0
def create_app(*, methods=None, urls=None, ignore=None):
    app = web.Application(middlewares=[
        shield_middleware(methods=methods, urls=urls, ignore=ignore)
    ])

    app.router.add_get("/one", handler)
    app.router.add_post("/one", handler)
    app.router.add_get("/two", handler)
    app.router.add_post("/two", handler)
    app.router.add_patch("/three", handler)

    return app
コード例 #3
0
def test_shield_middleware_mixed_urls_and_ignore():
    with pytest.raises(ValueError):
        shield_middleware(urls=["/one"], ignore=["/two"])
コード例 #4
0
def test_shield_middleware_mixed_methods_and_urls():
    with pytest.raises(ValueError):
        shield_middleware(methods=NON_IDEMPOTENT_METHODS, urls=["/one"])
コード例 #5
0
def test_shield_middleware_no_arguments():
    with pytest.raises(ValueError):
        shield_middleware()