mirror of
https://github.com/django/daphne.git
synced 2024-11-21 15:36:33 +03:00
Don't apply HTTP timeout to WebSocket connections!
This commit is contained in:
parent
6eeb280e1b
commit
105e1d5436
|
@ -118,6 +118,7 @@ class WebRequest(http.Request):
|
|||
protocol.dataReceived(data)
|
||||
# Remove our HTTP reply channel association
|
||||
logger.debug("Upgraded connection %s to WebSocket", self.client_addr)
|
||||
self.server.discard_protocol(self)
|
||||
# Resume the producer so we keep getting data, if it's available as a method
|
||||
self.channel._networkProducer.resumeProducing()
|
||||
|
||||
|
|
|
@ -18,8 +18,9 @@ class DaphneTestingInstance:
|
|||
Works as a context manager.
|
||||
"""
|
||||
|
||||
def __init__(self, xff=False):
|
||||
def __init__(self, xff=False, http_timeout=60):
|
||||
self.xff = xff
|
||||
self.http_timeout = http_timeout
|
||||
self.host = "127.0.0.1"
|
||||
|
||||
def port_in_use(self, port):
|
||||
|
@ -59,6 +60,8 @@ class DaphneTestingInstance:
|
|||
# Optionally enable X-Forwarded-For support.
|
||||
if self.xff:
|
||||
daphne_args += ["--proxy-headers"]
|
||||
if self.http_timeout:
|
||||
daphne_args += ["--http-timeout=%i" % self.http_timeout]
|
||||
# Start up process and make sure it begins listening. Try this 3 times.
|
||||
for _ in range(3):
|
||||
self.process = subprocess.Popen(daphne_args + ["daphne.test_application:TestApplication"])
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
# coding: utf8
|
||||
|
||||
import collections
|
||||
import time
|
||||
from urllib import parse
|
||||
|
||||
from hypothesis import given, settings
|
||||
|
@ -242,3 +243,31 @@ class TestWebsocket(DaphneTestCase):
|
|||
# Make sure it got our frame
|
||||
_, messages = test_app.get_received()
|
||||
assert messages[1] == {"type": "websocket.receive", "bytes": b"what is here? \xe2"}
|
||||
|
||||
def test_http_timeout(self):
|
||||
"""
|
||||
Tests that the HTTP timeout doesn't kick in for WebSockets
|
||||
"""
|
||||
with DaphneTestingInstance(http_timeout=1) as test_app:
|
||||
# Connect
|
||||
test_app.add_send_messages([
|
||||
{
|
||||
"type": "websocket.accept",
|
||||
}
|
||||
])
|
||||
sock, _ = self.websocket_handshake(test_app)
|
||||
_, messages = test_app.get_received()
|
||||
self.assert_valid_websocket_connect_message(messages[0])
|
||||
# Wait 2 seconds
|
||||
time.sleep(2)
|
||||
# Prep frame for it to send
|
||||
test_app.add_send_messages([
|
||||
{
|
||||
"type": "websocket.send",
|
||||
"text": "cake",
|
||||
}
|
||||
])
|
||||
# Send it a frame
|
||||
self.websocket_send_frame(sock, "still alive?")
|
||||
# Receive a frame and make sure it's correct
|
||||
assert self.websocket_receive_frame(sock) == "cake"
|
||||
|
|
Loading…
Reference in New Issue
Block a user