Skip to content

Commit 13221ce

Browse files
committed
Merge branch 'aiohttp_1_1'
2 parents c318bd7 + 39a12c6 commit 13221ce

5 files changed

Lines changed: 78 additions & 21 deletions

File tree

aiohttp_cors/urldispatcher_router_adapter.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,8 @@ def add_preflight_handler(
152152
# Preflight handler already added for this resource.
153153
return
154154

155-
preflight_route = resource.set_options_route(handler)
155+
resource.set_options_route(handler)
156+
preflight_route = resource._routes[hdrs.METH_OPTIONS]
156157
self._preflight_routes.add(preflight_route)
157158
self._resources_with_preflight_handlers.add(resource)
158159

tests/aio_test_base.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,13 @@
2323

2424

2525
@asyncio.coroutine
26-
def create_server(protocol_factory, loop=None):
26+
def create_server(protocol_factory, loop=None, sock=None):
2727
"""Create server listening on random port"""
2828

29-
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
30-
sock.bind(("127.0.0.1", 0))
31-
sock.listen(10)
29+
if sock is None:
30+
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
31+
sock.bind(("127.0.0.1", 0))
32+
sock.listen(10)
3233

3334
if loop is None:
3435
loop = asyncio.get_event_loop()

tests/integration/test_main.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616
"""
1717

1818
import asyncio
19+
import pathlib
20+
21+
from yarl import URL
1922

2023
from tests.aio_test_base import AioTestBase, create_server, asynctest
2124

@@ -802,6 +805,38 @@ def test_preflight_request_headers(self):
802805
"headers are not allowed: TEST",
803806
(yield from response.text()))
804807

808+
@asynctest
809+
@asyncio.coroutine
810+
def test_static_route(self):
811+
"""Test a static route with CORS."""
812+
app = web.Application()
813+
cors = setup(app, defaults={
814+
"*": ResourceOptions(
815+
allow_credentials=True,
816+
expose_headers="*",
817+
allow_methods="*",
818+
allow_headers=("Content-Type", "X-Header"),
819+
)
820+
})
821+
822+
test_static_path = pathlib.Path(__file__).parent
823+
cors.add(app.router.add_static("/static", test_static_path, name='static'))
824+
825+
yield from self.create_server(app)
826+
827+
response = yield from aiohttp.request(
828+
"OPTIONS", URL(self.server_url) / "static/test_page.html",
829+
headers={
830+
hdrs.ORIGIN: "http://example.org",
831+
hdrs.ACCESS_CONTROL_REQUEST_METHOD: "OPTIONS",
832+
hdrs.ACCESS_CONTROL_REQUEST_HEADERS: "content-type",
833+
}
834+
)
835+
data = yield from response.text()
836+
self.assertEqual(response.status, 200)
837+
self.assertEqual(data, '')
838+
839+
805840
# TODO: test requesting resources with not configured CORS.
806841
# TODO: test wildcard origin in default config.
807842
# TODO: test different combinations of ResourceOptions options.

tests/integration/test_real_browser.py

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import os
1919
import json
2020
import asyncio
21+
import socket
2122
import unittest
2223
import pathlib
2324
import logging
@@ -111,10 +112,21 @@ def handle_servers_addresses(
111112
assert server_name not in self.servers
112113
self.servers[server_name] = _ServerDescr()
113114

114-
# Create applications.
115-
for server_descr in self.servers.values():
115+
server_sockets = {}
116+
117+
# Create applications and sockets.
118+
for server_name, server_descr in self.servers.items():
116119
server_descr.app = web.Application()
117120

121+
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
122+
sock.bind(("127.0.0.1", 0))
123+
sock.listen(10)
124+
server_sockets[server_name] = sock
125+
126+
hostaddr, port = sock.getsockname()
127+
server_descr.url = "http://{host}:{port}".format(
128+
host=hostaddr, port=port)
129+
118130
# Server test page from origin server.
119131
self.servers["origin"].app.router.add_route(
120132
"GET", "/", handle_test_page)
@@ -128,20 +140,6 @@ def handle_servers_addresses(
128140
app.router.add_route("GET", "/cors_resource", handle_resource,
129141
name="cors_resource")
130142

131-
# Start servers.
132-
for server_name, server_descr in self.servers.items():
133-
handler = server_descr.app.make_handler()
134-
server = yield from create_server(handler, self.loop)
135-
server_descr.handler = handler
136-
server_descr.server = server
137-
138-
hostaddr, port = server.sockets[0].getsockname()
139-
server_descr.url = "http://{host}:{port}".format(
140-
host=hostaddr, port=port)
141-
142-
self._logger.info("Started server '%s' at '%s'",
143-
server_name, server_descr.url)
144-
145143
cors_default_configs = {
146144
"allowing": {
147145
self.servers["origin"].url:
@@ -187,6 +185,17 @@ def handle_servers_addresses(
187185
else:
188186
server_descr.cors.add(route)
189187

188+
# Start servers.
189+
for server_name, server_descr in self.servers.items():
190+
handler = server_descr.app.make_handler()
191+
server = yield from create_server(handler, self.loop,
192+
sock=server_sockets[server_name])
193+
server_descr.handler = handler
194+
server_descr.server = server
195+
196+
self._logger.info("Started server '%s' at '%s'",
197+
server_name, server_descr.url)
198+
190199
@asyncio.coroutine
191200
def stop_servers(self):
192201
for server_descr in self.servers.values():

tests/unit/test_cors_config.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,3 +77,14 @@ def test_static_named_route(self):
7777
self.assertEqual(len(self.app.router.keys()), 1)
7878
self.cors.add(route)
7979
self.assertEqual(len(self.app.router.keys()), 1)
80+
81+
def test_static_resource(self):
82+
"""Test adding static resource."""
83+
self.assertEqual(len(self.app.router.keys()), 0)
84+
self.app.router.add_static(
85+
"/file", "/", name="dynamic_named_route")
86+
self.assertEqual(len(self.app.router.keys()), 1)
87+
for resource in list(self.app.router.resources()):
88+
if issubclass(resource, web.StaticResource):
89+
self.cors.add(resource)
90+
self.assertEqual(len(self.app.router.keys()), 1)

0 commit comments

Comments
 (0)