Skip to content

Commit 7eac9e3

Browse files
committed
Work on tests
1 parent 4bf83a8 commit 7eac9e3

File tree

4 files changed

+44
-39
lines changed

4 files changed

+44
-39
lines changed

CHANGES.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ CHANGES
1818
- Avoid using of mutable CIMultiDict kw param in make_mocked_request
1919
#997
2020

21+
- Make WebSocketResponse.close a little bit faster by avoiding new
22+
task creating just for timeout measurement
23+
2124
0.22.2 (07-23-2016)
2225
-------------------
2326

aiohttp/web_ws.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import json
44
import warnings
55

6-
from . import hdrs
6+
from . import hdrs, Timeout
77
from .errors import HttpProcessingError, ClientDisconnectedError
88
from .websocket import do_handshake, Message, WebSocketError
99
from .websocket_client import MsgType, closedMessage
@@ -186,9 +186,9 @@ def close(self, *, code=1000, message=b''):
186186

187187
while True:
188188
try:
189-
msg = yield from asyncio.wait_for(
190-
self._reader.read(),
191-
timeout=self._timeout, loop=self._loop)
189+
with Timeout(timeout=self._timeout,
190+
loop=self._loop):
191+
msg = yield from self._reader.read()
192192
except asyncio.CancelledError:
193193
self._close_code = 1006
194194
raise

tests/test_web_websocket_functional.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
import asyncio
44
import pytest
5+
import aiohttp
56
from aiohttp import web
7+
from aiohttp import helpers
68

79

810
@pytest.mark.run_loop
@@ -85,3 +87,38 @@ def handler(request):
8587

8688
resp = yield from ws.receive()
8789
assert resp.data == expected_value
90+
91+
92+
@pytest.mark.run_loop
93+
def test_send_recv_text(create_app_and_client, loop):
94+
95+
closed = helpers.create_future(loop)
96+
97+
@asyncio.coroutine
98+
def handler(request):
99+
ws = web.WebSocketResponse()
100+
yield from ws.prepare(request)
101+
msg = yield from ws.receive_str()
102+
ws.send_str(msg+'/answer')
103+
yield from ws.close()
104+
closed.set_result(1)
105+
return ws
106+
107+
app, client = yield from create_app_and_client()
108+
app.router.add_route('GET', '/', handler)
109+
110+
ws = yield from client.ws_connect('/')
111+
ws.send_str('ask')
112+
msg = yield from ws.receive()
113+
assert msg.tp == aiohttp.MsgType.text
114+
assert 'ask/answer' == msg.data
115+
116+
msg = yield from ws.receive()
117+
assert msg.tp == aiohttp.MsgType.close
118+
assert msg.data == 1000
119+
assert msg.extra == ''
120+
121+
assert ws.closed
122+
assert ws.close_code == 1000
123+
124+
yield from closed

tests/test_web_websocket_functional_oldstyle.py

Lines changed: 0 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -82,41 +82,6 @@ def connect_ws(self, url, protocol=None):
8282

8383
return response, reader, writer
8484

85-
def test_send_recv_text(self):
86-
87-
closed = helpers.create_future(self.loop)
88-
89-
@asyncio.coroutine
90-
def handler(request):
91-
ws = web.WebSocketResponse()
92-
yield from ws.prepare(request)
93-
msg = yield from ws.receive_str()
94-
ws.send_str(msg+'/answer')
95-
yield from ws.close()
96-
closed.set_result(1)
97-
return ws
98-
99-
@asyncio.coroutine
100-
def go():
101-
_, _, url = yield from self.create_server('GET', '/', handler)
102-
resp, reader, writer = yield from self.connect_ws(url)
103-
writer.send('ask')
104-
msg = yield from reader.read()
105-
self.assertEqual(msg.tp, websocket.MSG_TEXT)
106-
self.assertEqual('ask/answer', msg.data)
107-
108-
msg = yield from reader.read()
109-
self.assertEqual(msg.tp, websocket.MSG_CLOSE)
110-
self.assertEqual(msg.data, 1000)
111-
self.assertEqual(msg.extra, '')
112-
113-
writer.close()
114-
115-
yield from closed
116-
resp.close()
117-
118-
self.loop.run_until_complete(go())
119-
12085
def test_send_recv_bytes(self):
12186

12287
closed = helpers.create_future(self.loop)

0 commit comments

Comments
 (0)