Skip to content

Commit

Permalink
Add WebSocketServer.sockets.
Browse files Browse the repository at this point in the history
Also refactor tests to bind to an arbitrary available port instead of
hardcoding port 8642.
  • Loading branch information
aaugustin committed Nov 2, 2017
1 parent 2599b8a commit 11a16d9
Show file tree
Hide file tree
Showing 6 changed files with 149 additions and 87 deletions.
1 change: 1 addition & 0 deletions docs/api.rst
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ Server

.. automethod:: close()
.. automethod:: wait_closed()
.. autoattribute:: sockets

.. autoclass:: WebSocketServerProtocol(ws_handler, ws_server, *, host=None, port=None, secure=None, timeout=10, max_size=2 ** 20, max_queue=2 ** 5, read_limit=2 ** 16, write_limit=2 ** 16, loop=None, origins=None, extensions=None, subprotocols=None, extra_headers=None)

Expand Down
2 changes: 2 additions & 0 deletions docs/changelog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ Also:

* Added :func:`~websockets.server.unix_serve` for listening on Unix sockets.

* Added the :attr:`~websockets.server.WebSocketServer.sockets` attribute.

* Reorganized and extended documentation.

* Aborted connections if they don't close within the configured ``timeout``.
Expand Down
16 changes: 8 additions & 8 deletions websockets/py35/_test_client_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

from ..client import *
from ..server import *
from ..test_client_server import handler
from ..test_client_server import get_server_uri, handler


class ContextManagerTests(unittest.TestCase):
Expand All @@ -18,24 +18,24 @@ def tearDown(self):
self.loop.close()

def test_client(self):
server = serve(handler, 'localhost', 8642)
self.server = self.loop.run_until_complete(server)
start_server = serve(handler, 'localhost', 0)
server = self.loop.run_until_complete(start_server)

async def run_client():
async with connect('ws://localhost:8642/') as client:
async with connect(get_server_uri(server)) as client:
await client.send("Hello!")
reply = await client.recv()
self.assertEqual(reply, "Hello!")

self.loop.run_until_complete(run_client())

self.server.close()
self.loop.run_until_complete(self.server.wait_closed())
server.close()
self.loop.run_until_complete(server.wait_closed())

def test_server(self):
async def run_server():
async with serve(handler, 'localhost', 8642):
client = await connect('ws://localhost:8642/')
async with serve(handler, 'localhost', 0) as server:
client = await connect(get_server_uri(server))
await client.send("Hello!")
reply = await client.recv()
self.assertEqual(reply, "Hello!")
Expand Down
21 changes: 11 additions & 10 deletions websockets/py36/_test_client_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from ..client import *
from ..exceptions import ConnectionClosed
from ..server import *
from ..test_client_server import get_server_uri


# Fail at import time, not just at run time, to prevent test
Expand Down Expand Up @@ -36,23 +37,23 @@ async def handler(ws, path):
for message in MESSAGES:
await ws.send(message)

server = serve(handler, 'localhost', 8642)
self.server = self.loop.run_until_complete(server)
start_server = serve(handler, 'localhost', 0)
server = self.loop.run_until_complete(start_server)

messages = []

async def run_client():
nonlocal messages
async with connect('ws://localhost:8642/') as ws:
async with connect(get_server_uri(server)) as ws:
async for message in ws:
messages.append(message)

self.loop.run_until_complete(run_client())

self.assertEqual(messages, MESSAGES)

self.server.close()
self.loop.run_until_complete(self.server.wait_closed())
server.close()
self.loop.run_until_complete(server.wait_closed())

def test_iterate_on_messages_exit_not_ok(self):

Expand All @@ -61,14 +62,14 @@ async def handler(ws, path):
await ws.send(message)
await ws.close(1001)

server = serve(handler, 'localhost', 8642)
self.server = self.loop.run_until_complete(server)
start_server = serve(handler, 'localhost', 0)
server = self.loop.run_until_complete(start_server)

messages = []

async def run_client():
nonlocal messages
async with connect('ws://localhost:8642/') as ws:
async with connect(get_server_uri(server)) as ws:
async for message in ws:
messages.append(message)

Expand All @@ -77,5 +78,5 @@ async def run_client():

self.assertEqual(messages, MESSAGES)

self.server.close()
self.loop.run_until_complete(self.server.wait_closed())
server.close()
self.loop.run_until_complete(server.wait_closed())
10 changes: 10 additions & 0 deletions websockets/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -582,6 +582,16 @@ def wait_closed(self):
loop=self.loop)
yield from self.server.wait_closed()

@property
def sockets(self):
"""
List of :class:`~socket.socket` objects the server is listening to.
``None`` if the server is closed.
"""
return self.server.sockets


class Serve:
"""
Expand Down
Loading

0 comments on commit 11a16d9

Please sign in to comment.