swindon 0.2.1

An HTTP edge (frontend) server with smart websockets support
import aiohttp


async def test_ok(swindon, http_request, debug_routing):
    resp, data = await http_request(swindon.url / 'empty.gif')
    assert resp.status == 200
    assert resp.headers['Content-Type'] == 'image/gif'
    assert resp.headers['Content-Length'] == '26'
    assert resp.headers['Server'] == 'swindon/func-tests'
    if debug_routing:
        assert resp.headers['X-Swindon-Route'] == 'empty_gif'
    assert len(data) == 26


async def test_request_methods(swindon, http_request):
    resp, data = await http_request(swindon.url / 'empty.gif')
    assert resp.status == 200
    assert resp.headers['Content-Type'] == 'image/gif'
    assert resp.headers['Content-Length'] == '26'
    assert resp.headers['Server'] == 'swindon/func-tests'
    assert len(data) == 26


async def test_request_HEAD(swindon):
    async with aiohttp.ClientSession() as s:
        async with s.head(swindon.url / 'empty.gif') as resp:
            assert resp.status == 200
            assert resp.headers['Content-Type'] == 'image/gif'
            assert resp.headers['Content-Length'] == '26'
            assert resp.headers['Server'] == 'swindon/func-tests'
            data = await resp.content.read()
            assert len(data) == 0


async def test_extra_headers(swindon, http_request):
    resp, data = await http_request(swindon.url / 'empty-w-headers.gif')
    assert resp.status == 200
    assert resp.headers['X-Some-Header'] == 'some value'


async def test_headers_override(swindon, http_request):
    url = swindon.url / 'empty-w-content-length.gif'
    resp, data = await http_request(url)
    assert resp.status == 200
    clen = [val for key, val in resp.raw_headers
            if key == b'CONTENT-LENGTH']
    assert len(clen) == 1
    assert resp.headers['Content-Length'] == '26'

    ctype = [val for key, val in resp.raw_headers
             if key == b'CONTENT-TYPE']
    assert len(ctype) == 1
    assert ctype[0] == b'image/other'