Skip to content

Commit 4321c82

Browse files
committed
Merge branch 'development'
2 parents 9b8f655 + cf487b7 commit 4321c82

File tree

10 files changed

+58
-85
lines changed

10 files changed

+58
-85
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ from websocket_server import WebsocketServer
104104
def new_client(client, server):
105105
server.send_message_to_all("Hey all, a new client has joined us")
106106

107-
server = WebsocketServer(13254, host='127.0.0.1', loglevel=logging.INFO)
107+
server = WebsocketServer(host='127.0.0.1', port=13254, loglevel=logging.INFO)
108108
server.set_fn_new_client(new_client)
109109
server.run_forever()
110110
````
@@ -116,7 +116,7 @@ from websocket_server import WebsocketServer
116116
def new_client(client, server):
117117
server.send_message_to_all("Hey all, a new client has joined us")
118118

119-
server = WebsocketServer(13254, host='127.0.0.1', loglevel=logging.INFO, key="key.pem", cert="cert.pem")
119+
server = WebsocketServer(host='127.0.0.1', port=13254, loglevel=logging.INFO, key="key.pem", cert="cert.pem")
120120
server.set_fn_new_client(new_client)
121121
server.run_forever()
122122
````

releases.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,7 @@
1414

1515
0.5.6
1616
- Support from Python3.6+
17+
18+
0.6.0
19+
- Change order of params 'host' and 'port'
20+
- Add host attribute to server

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from distutils.command.install import install
1313

1414

15-
VERSION = '0.5.6'
15+
VERSION = '0.6.0'
1616

1717

1818
def get_tag_version():

tests/_bootstrap_.py

Lines changed: 0 additions & 6 deletions
This file was deleted.

tests/utils.py renamed to tests/conftest.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,12 @@
55
import pytest
66
import websocket # websocket-client
77

8-
import _bootstrap_
8+
# Add path to source code
9+
import sys, os
10+
if os.getcwd().endswith('tests'):
11+
sys.path.insert(0, '..')
12+
elif os.path.exists('websocket_server'):
13+
sys.path.insert(0, '.')
914
from websocket_server import WebsocketServer
1015

1116

@@ -59,7 +64,7 @@ def handle_received_message(self, client, server, message):
5964
@pytest.fixture(scope='function')
6065
def threaded_server():
6166
""" Returns the response of a server after"""
62-
server = TestServer(0, loglevel=logging.DEBUG)
67+
server = TestServer(loglevel=logging.DEBUG)
6368
server.run_forever(threaded=True)
6469
yield server
6570
server.server_close()

tests/test_handshake.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import _bootstrap_
21
from websocket_server import WebSocketHandler
32

43

tests/test_message_lengths.py

Lines changed: 16 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,96 +1,67 @@
1-
from time import sleep
2-
import logging
3-
from threading import Thread
4-
5-
import pytest
6-
from websocket import create_connection # websocket-client
7-
8-
import _bootstrap_
9-
from websocket_server import WebsocketServer
10-
11-
12-
@pytest.fixture(scope='function')
13-
def server():
14-
""" Returns the response of a server after"""
15-
s = WebsocketServer(0, loglevel=logging.DEBUG)
16-
server_thread = Thread(target=s.run_forever)
17-
server_thread.daemon = True
18-
server_thread.start()
19-
yield s
20-
s.server_close()
21-
22-
23-
@pytest.fixture
24-
def session(server):
25-
ws = create_connection("ws://{}:{}".format(*server.server_address))
26-
yield ws, server
27-
ws.close()
28-
29-
301
def test_text_message_of_length_1(session):
31-
client, server = session
2+
conn, server = session
323
server.send_message_to_all('$')
33-
assert client.recv() == '$'
4+
assert conn.recv() == '$'
345

356

367
def test_text_message_of_length_125B(session):
37-
client, server = session
8+
conn, server = session
389
msg = 'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz'\
3910
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz'\
4011
'abcdefghijklmnopqr125'
4112
server.send_message_to_all(msg)
42-
assert client.recv() == msg
13+
assert conn.recv() == msg
4314

4415

4516
def test_text_message_of_length_126B(session):
46-
client, server = session
17+
conn, server = session
4718
msg = 'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz'\
4819
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz'\
4920
'abcdefghijklmnopqrs126'
5021
server.send_message_to_all(msg)
51-
assert client.recv() == msg
22+
assert conn.recv() == msg
5223

5324

5425
def test_text_message_of_length_127B(session):
55-
client, server = session
26+
conn, server = session
5627
msg = 'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz'\
5728
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz'\
5829
'abcdefghijklmnopqrst127'
5930
server.send_message_to_all(msg)
60-
assert client.recv() == msg
31+
assert conn.recv() == msg
6132

6233

6334
def test_text_message_of_length_208B(session):
64-
client, server = session
35+
conn, server = session
6536
msg = 'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz'\
6637
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz'\
6738
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz'\
6839
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvw208'
6940
server.send_message_to_all(msg)
70-
assert client.recv() == msg
41+
assert conn.recv() == msg
7142

7243

7344
def test_text_message_of_length_1251B(session):
74-
client, server = session
45+
conn, server = session
7546
msg = ('abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz'\
7647
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz'\
7748
'abcdefghijklmnopqr125'*10)+'1'
7849
server.send_message_to_all(msg)
79-
assert client.recv() == msg
50+
assert conn.recv() == msg
8051

8152

8253
def test_text_message_of_length_68KB(session):
83-
client, server = session
54+
conn, server = session
8455
msg = '$'+('a'*67993)+'68000'+'^'
8556
assert len(msg) == 68000
8657
server.send_message_to_all(msg)
87-
assert client.recv() == msg
58+
assert conn.recv() == msg
8859

8960

9061
def test_text_message_of_length_1500KB(session):
9162
""" An enormous message (well beyond 65K) """
92-
client, server = session
63+
conn, server = session
9364
msg = '$'+('a'*1499991)+'1500000'+'^'
9465
assert len(msg) == 1500000
9566
server.send_message_to_all(msg)
96-
assert client.recv() == msg
67+
assert conn.recv() == msg

tests/test_server.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
1-
from utils import session, client_session, threaded_server
21
from time import sleep
32
import threading
43

5-
from websocket_server import WebsocketServer
6-
74
import websocket
85
import pytest
96

@@ -14,6 +11,11 @@ def test_run_forever(self, threaded_server):
1411
assert not isinstance(threaded_server.thread, threading._MainThread)
1512
assert threaded_server.thread.is_alive()
1613

14+
def test_attributes(self, threaded_server):
15+
tpl = threaded_server.server_address
16+
assert threaded_server.port == tpl[1]
17+
assert threaded_server.host == tpl[0]
18+
1719
def test_shutdown(self, threaded_server):
1820
assert threaded_server.thread.is_alive()
1921

tests/test_text_messages.py

Lines changed: 21 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,97 +1,94 @@
1-
from utils import session, threaded_server
2-
3-
41
def test_text_message_of_length_1(session):
5-
client, server = session
2+
conn, server = session
63
server.send_message_to_all('$')
7-
assert client.recv() == '$'
4+
assert conn.recv() == '$'
85

96

107
def test_text_message_of_length_125B(session):
11-
client, server = session
8+
conn, server = session
129
msg = 'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz'\
1310
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz'\
1411
'abcdefghijklmnopqr125'
1512
server.send_message_to_all(msg)
16-
assert client.recv() == msg
13+
assert conn.recv() == msg
1714

1815

1916
def test_text_message_of_length_126B(session):
20-
client, server = session
17+
conn, server = session
2118
msg = 'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz'\
2219
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz'\
2320
'abcdefghijklmnopqrs126'
2421
server.send_message_to_all(msg)
25-
assert client.recv() == msg
22+
assert conn.recv() == msg
2623

2724

2825
def test_text_message_of_length_127B(session):
29-
client, server = session
26+
conn, server = session
3027
msg = 'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz'\
3128
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz'\
3229
'abcdefghijklmnopqrst127'
3330
server.send_message_to_all(msg)
34-
assert client.recv() == msg
31+
assert conn.recv() == msg
3532

3633

3734
def test_text_message_of_length_208B(session):
38-
client, server = session
35+
conn, server = session
3936
msg = 'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz'\
4037
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz'\
4138
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz'\
4239
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvw208'
4340
server.send_message_to_all(msg)
44-
assert client.recv() == msg
41+
assert conn.recv() == msg
4542

4643

4744
def test_text_message_of_length_1251B(session):
48-
client, server = session
45+
conn, server = session
4946
msg = ('abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz'\
5047
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz'\
5148
'abcdefghijklmnopqr125'*10)+'1'
5249
server.send_message_to_all(msg)
53-
assert client.recv() == msg
50+
assert conn.recv() == msg
5451

5552

5653
def test_text_message_of_length_68KB(session):
57-
client, server = session
54+
conn, server = session
5855
msg = '$'+('a'*67993)+'68000'+'^'
5956
assert len(msg) == 68000
6057
server.send_message_to_all(msg)
61-
assert client.recv() == msg
58+
assert conn.recv() == msg
6259

6360

6461
def test_text_message_of_length_1500KB(session):
6562
""" An enormous message (well beyond 65K) """
66-
client, server = session
63+
conn, server = session
6764
msg = '$'+('a'*1499991)+'1500000'+'^'
6865
assert len(msg) == 1500000
6966
server.send_message_to_all(msg)
70-
assert client.recv() == msg
67+
assert conn.recv() == msg
7168

7269

7370
def test_text_message_with_unicode_characters(session):
74-
client, server = session
71+
conn, server = session
7572
msg = '$äüö^'
7673
server.send_message_to_all(msg)
77-
assert client.recv() == msg
74+
assert conn.recv() == msg
7875

7976

8077
def test_text_message_stress_bursts(session):
81-
""" Scenario: server sends multiple different message to the same client
78+
""" Scenario: server sends multiple different message to the same conn
8279
at once """
8380
from threading import Thread
8481
NUM_THREADS = 100
8582
MESSAGE_LEN = 1000
86-
client, server = session
83+
conn, server = session
8784
messages_received = []
8885

8986
# Threads receing
9087
threads_receiving = []
9188
for i in range(NUM_THREADS):
9289
th = Thread(
9390
target=lambda fn: messages_received.append(fn()),
94-
args=(client.recv,)
91+
args=(conn.recv,)
9592
)
9693
th.daemon = True
9794
threads_receiving.append(th)

websocket_server/websocket_server.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,9 +112,10 @@ class WebsocketServer(ThreadingMixIn, TCPServer, API):
112112
allow_reuse_address = True
113113
daemon_threads = True # comment to keep threads alive until finished
114114

115-
def __init__(self, port, host='127.0.0.1', loglevel=logging.WARNING, key=None, cert=None):
115+
def __init__(self, host='127.0.0.1', port=0, loglevel=logging.WARNING, key=None, cert=None):
116116
logger.setLevel(loglevel)
117117
TCPServer.__init__(self, (host, port), WebSocketHandler)
118+
self.host = host
118119
self.port = self.socket.getsockname()[1]
119120

120121
self.key = key

0 commit comments

Comments
 (0)