Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 6e3b122

Browse files
committed
Merge pull request 0rpc#115 from bombela/master
Lots of long-standing bugfixes and small updates.
2 parents 3ba8bb5 + 316dd3d commit 6e3b122

25 files changed

+594
-667
lines changed

.travis.yml

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,16 @@ python:
33
- 2.7
44
env:
55
matrix:
6-
- PYZMQ='pyzmq==14.1.1'
7-
- PYZMQ='pyzmq==14.1.0'
8-
- PYZMQ='pyzmq==14.0.1'
9-
- PYZMQ='pyzmq==14.0.0'
10-
- PYZMQ='pyzmq==13.1.0'
11-
- PYZMQ='pyzmq==13.0.2'
12-
- PYZMQ='pyzmq==13.0.0'
6+
- PYZMQ='pyzmq>=14.3'
7+
- PYZMQ='pyzmq>=14.2,<14.3'
8+
- PYZMQ='pyzmq>=14.1,<14.2'
9+
- PYZMQ='pyzmq>=14.0,<14.1'
10+
- PYZMQ='pyzmq<14'
1311
matrix:
1412
fast_finish: true
15-
allow_failures:
16-
- env: PYZMQ='pyzmq==14.0.0'
17-
- env: PYZMQ='pyzmq==14.0.1'
18-
- env: PYZMQ='pyzmq==14.1.0'
19-
- env: PYZMQ='pyzmq==14.1.1'
2013
script:
2114
- flake8 --ignore=E501,E128 zerorpc bin
22-
- nosetests
15+
- ZPC_TEST_TIME_FACTOR=0.1 nosetests
2316
before_install:
2417
- sudo apt-get update
2518
- sudo apt-get install python-dev libevent-dev

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
requirements = [
3838
'gevent>=1.0',
3939
'msgpack-python',
40-
'pyzmq==13.1.0'
40+
'pyzmq>=13.1.0'
4141
]
4242
if sys.version_info < (2, 7):
4343
requirements.append('argparse')

tests/test_buffered_channel.py

Lines changed: 72 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929

3030
from zerorpc import zmq
3131
import zerorpc
32-
from testutils import teardown, random_ipc_endpoint
32+
from testutils import teardown, random_ipc_endpoint, TIME_FACTOR
3333

3434

3535
def test_close_server_bufchan():
@@ -43,17 +43,17 @@ def test_close_server_bufchan():
4343
client = zerorpc.ChannelMultiplexer(client_events, ignore_broadcast=True)
4444

4545
client_channel = client.channel()
46-
client_hbchan = zerorpc.HeartBeatOnChannel(client_channel, freq=2)
46+
client_hbchan = zerorpc.HeartBeatOnChannel(client_channel, freq=TIME_FACTOR * 2)
4747
client_bufchan = zerorpc.BufferedChannel(client_hbchan)
4848
client_bufchan.emit('openthat', None)
4949

5050
event = server.recv()
5151
server_channel = server.channel(event)
52-
server_hbchan = zerorpc.HeartBeatOnChannel(server_channel, freq=2)
52+
server_hbchan = zerorpc.HeartBeatOnChannel(server_channel, freq=TIME_FACTOR * 2)
5353
server_bufchan = zerorpc.BufferedChannel(server_hbchan)
5454
server_bufchan.recv()
5555

56-
gevent.sleep(3)
56+
gevent.sleep(TIME_FACTOR * 3)
5757
print 'CLOSE SERVER SOCKET!!!'
5858
server_bufchan.close()
5959
if sys.version_info < (2, 7):
@@ -78,17 +78,17 @@ def test_close_client_bufchan():
7878
client = zerorpc.ChannelMultiplexer(client_events, ignore_broadcast=True)
7979

8080
client_channel = client.channel()
81-
client_hbchan = zerorpc.HeartBeatOnChannel(client_channel, freq=2)
81+
client_hbchan = zerorpc.HeartBeatOnChannel(client_channel, freq=TIME_FACTOR * 2)
8282
client_bufchan = zerorpc.BufferedChannel(client_hbchan)
8383
client_bufchan.emit('openthat', None)
8484

8585
event = server.recv()
8686
server_channel = server.channel(event)
87-
server_hbchan = zerorpc.HeartBeatOnChannel(server_channel, freq=2)
87+
server_hbchan = zerorpc.HeartBeatOnChannel(server_channel, freq=TIME_FACTOR * 2)
8888
server_bufchan = zerorpc.BufferedChannel(server_hbchan)
8989
server_bufchan.recv()
9090

91-
gevent.sleep(3)
91+
gevent.sleep(TIME_FACTOR * 3)
9292
print 'CLOSE CLIENT SOCKET!!!'
9393
client_bufchan.close()
9494
if sys.version_info < (2, 7):
@@ -113,15 +113,15 @@ def test_heartbeat_can_open_channel_server_close():
113113
client = zerorpc.ChannelMultiplexer(client_events, ignore_broadcast=True)
114114

115115
client_channel = client.channel()
116-
client_hbchan = zerorpc.HeartBeatOnChannel(client_channel, freq=2)
116+
client_hbchan = zerorpc.HeartBeatOnChannel(client_channel, freq=TIME_FACTOR * 2)
117117
client_bufchan = zerorpc.BufferedChannel(client_hbchan)
118118

119119
event = server.recv()
120120
server_channel = server.channel(event)
121-
server_hbchan = zerorpc.HeartBeatOnChannel(server_channel, freq=2)
121+
server_hbchan = zerorpc.HeartBeatOnChannel(server_channel, freq=TIME_FACTOR * 2)
122122
server_bufchan = zerorpc.BufferedChannel(server_hbchan)
123123

124-
gevent.sleep(3)
124+
gevent.sleep(TIME_FACTOR * 3)
125125
print 'CLOSE SERVER SOCKET!!!'
126126
server_bufchan.close()
127127
if sys.version_info < (2, 7):
@@ -146,25 +146,31 @@ def test_heartbeat_can_open_channel_client_close():
146146
client = zerorpc.ChannelMultiplexer(client_events, ignore_broadcast=True)
147147

148148
client_channel = client.channel()
149-
client_hbchan = zerorpc.HeartBeatOnChannel(client_channel, freq=2)
149+
client_hbchan = zerorpc.HeartBeatOnChannel(client_channel, freq=TIME_FACTOR * 2)
150150
client_bufchan = zerorpc.BufferedChannel(client_hbchan)
151151

152-
event = server.recv()
153-
server_channel = server.channel(event)
154-
server_hbchan = zerorpc.HeartBeatOnChannel(server_channel, freq=2)
155-
server_bufchan = zerorpc.BufferedChannel(server_hbchan)
156-
157-
gevent.sleep(3)
152+
def server_fn():
153+
event = server.recv()
154+
server_channel = server.channel(event)
155+
server_hbchan = zerorpc.HeartBeatOnChannel(server_channel, freq=TIME_FACTOR * 2)
156+
server_bufchan = zerorpc.BufferedChannel(server_hbchan)
157+
try:
158+
while True:
159+
gevent.sleep(1)
160+
finally:
161+
server_bufchan.close()
162+
server_coro = gevent.spawn(server_fn)
163+
164+
gevent.sleep(TIME_FACTOR * 3)
158165
print 'CLOSE CLIENT SOCKET!!!'
159166
client_bufchan.close()
160167
client.close()
161168
if sys.version_info < (2, 7):
162-
assert_raises(zerorpc.LostRemote, client_bufchan.recv)
169+
assert_raises(zerorpc.LostRemote, server_coro.get())
163170
else:
164171
with assert_raises(zerorpc.LostRemote):
165-
client_bufchan.recv()
172+
server_coro.get()
166173
print 'SERVER LOST CLIENT :)'
167-
server_bufchan.close()
168174
server.close()
169175

170176

@@ -178,16 +184,11 @@ def test_do_some_req_rep():
178184
client_events.connect(endpoint)
179185
client = zerorpc.ChannelMultiplexer(client_events, ignore_broadcast=True)
180186

181-
client_channel = client.channel()
182-
client_hbchan = zerorpc.HeartBeatOnChannel(client_channel, freq=2)
183-
client_bufchan = zerorpc.BufferedChannel(client_hbchan)
184-
185-
event = server.recv()
186-
server_channel = server.channel(event)
187-
server_hbchan = zerorpc.HeartBeatOnChannel(server_channel, freq=2)
188-
server_bufchan = zerorpc.BufferedChannel(server_hbchan)
189187

190188
def client_do():
189+
client_channel = client.channel()
190+
client_hbchan = zerorpc.HeartBeatOnChannel(client_channel, freq=TIME_FACTOR * 2)
191+
client_bufchan = zerorpc.BufferedChannel(client_hbchan)
191192
for x in xrange(20):
192193
client_bufchan.emit('add', (x, x * x))
193194
event = client_bufchan.recv()
@@ -199,6 +200,11 @@ def client_do():
199200
coro_pool.spawn(client_do)
200201

201202
def server_do():
203+
event = server.recv()
204+
server_channel = server.channel(event)
205+
server_hbchan = zerorpc.HeartBeatOnChannel(server_channel, freq=TIME_FACTOR * 2)
206+
server_bufchan = zerorpc.BufferedChannel(server_hbchan)
207+
202208
for x in xrange(20):
203209
event = server_bufchan.recv()
204210
assert event.name == 'add'
@@ -225,7 +231,7 @@ def test_do_some_req_rep_lost_server():
225231
def client_do():
226232
print 'running'
227233
client_channel = client.channel()
228-
client_hbchan = zerorpc.HeartBeatOnChannel(client_channel, freq=2)
234+
client_hbchan = zerorpc.HeartBeatOnChannel(client_channel, freq=TIME_FACTOR * 2)
229235
client_bufchan = zerorpc.BufferedChannel(client_hbchan)
230236
for x in xrange(10):
231237
client_bufchan.emit('add', (x, x * x))
@@ -246,7 +252,7 @@ def client_do():
246252
def server_do():
247253
event = server.recv()
248254
server_channel = server.channel(event)
249-
server_hbchan = zerorpc.HeartBeatOnChannel(server_channel, freq=2)
255+
server_hbchan = zerorpc.HeartBeatOnChannel(server_channel, freq=TIME_FACTOR * 2)
250256
server_bufchan = zerorpc.BufferedChannel(server_hbchan)
251257
for x in xrange(10):
252258
event = server_bufchan.recv()
@@ -273,7 +279,7 @@ def test_do_some_req_rep_lost_client():
273279

274280
def client_do():
275281
client_channel = client.channel()
276-
client_hbchan = zerorpc.HeartBeatOnChannel(client_channel, freq=2)
282+
client_hbchan = zerorpc.HeartBeatOnChannel(client_channel, freq=TIME_FACTOR * 2)
277283
client_bufchan = zerorpc.BufferedChannel(client_hbchan)
278284

279285
for x in xrange(10):
@@ -289,7 +295,7 @@ def client_do():
289295
def server_do():
290296
event = server.recv()
291297
server_channel = server.channel(event)
292-
server_hbchan = zerorpc.HeartBeatOnChannel(server_channel, freq=2)
298+
server_hbchan = zerorpc.HeartBeatOnChannel(server_channel, freq=TIME_FACTOR * 2)
293299
server_bufchan = zerorpc.BufferedChannel(server_hbchan)
294300

295301
for x in xrange(10):
@@ -323,22 +329,22 @@ def test_do_some_req_rep_client_timeout():
323329

324330
def client_do():
325331
client_channel = client.channel()
326-
client_hbchan = zerorpc.HeartBeatOnChannel(client_channel, freq=2)
332+
client_hbchan = zerorpc.HeartBeatOnChannel(client_channel, freq=TIME_FACTOR * 2)
327333
client_bufchan = zerorpc.BufferedChannel(client_hbchan)
328334

329335
if sys.version_info < (2, 7):
330336
def _do_with_assert_raises():
331337
for x in xrange(10):
332338
client_bufchan.emit('sleep', (x,))
333-
event = client_bufchan.recv(timeout=3)
339+
event = client_bufchan.recv(timeout=TIME_FACTOR * 3)
334340
assert event.name == 'OK'
335341
assert list(event.args) == [x]
336342
assert_raises(zerorpc.TimeoutExpired, _do_with_assert_raises)
337343
else:
338344
with assert_raises(zerorpc.TimeoutExpired):
339345
for x in xrange(10):
340346
client_bufchan.emit('sleep', (x,))
341-
event = client_bufchan.recv(timeout=3)
347+
event = client_bufchan.recv(timeout=TIME_FACTOR * 3)
342348
assert event.name == 'OK'
343349
assert list(event.args) == [x]
344350
client_bufchan.close()
@@ -349,23 +355,23 @@ def _do_with_assert_raises():
349355
def server_do():
350356
event = server.recv()
351357
server_channel = server.channel(event)
352-
server_hbchan = zerorpc.HeartBeatOnChannel(server_channel, freq=2)
358+
server_hbchan = zerorpc.HeartBeatOnChannel(server_channel, freq=TIME_FACTOR * 2)
353359
server_bufchan = zerorpc.BufferedChannel(server_hbchan)
354360

355361
if sys.version_info < (2, 7):
356362
def _do_with_assert_raises():
357363
for x in xrange(20):
358364
event = server_bufchan.recv()
359365
assert event.name == 'sleep'
360-
gevent.sleep(event.args[0])
366+
gevent.sleep(TIME_FACTOR * event.args[0])
361367
server_bufchan.emit('OK', event.args)
362368
assert_raises(zerorpc.LostRemote, _do_with_assert_raises)
363369
else:
364370
with assert_raises(zerorpc.LostRemote):
365371
for x in xrange(20):
366372
event = server_bufchan.recv()
367373
assert event.name == 'sleep'
368-
gevent.sleep(event.args[0])
374+
gevent.sleep(TIME_FACTOR * event.args[0])
369375
server_bufchan.emit('OK', event.args)
370376
server_bufchan.close()
371377

@@ -377,10 +383,6 @@ def _do_with_assert_raises():
377383
server.close()
378384

379385

380-
class CongestionError(Exception):
381-
pass
382-
383-
384386
def test_congestion_control_server_pushing():
385387
endpoint = random_ipc_endpoint()
386388
server_events = zerorpc.Events(zmq.ROUTER)
@@ -391,56 +393,56 @@ def test_congestion_control_server_pushing():
391393
client_events.connect(endpoint)
392394
client = zerorpc.ChannelMultiplexer(client_events, ignore_broadcast=True)
393395

394-
client_channel = client.channel()
395-
client_hbchan = zerorpc.HeartBeatOnChannel(client_channel, freq=2)
396-
client_bufchan = zerorpc.BufferedChannel(client_hbchan)
397-
398-
event = server.recv()
399-
server_channel = server.channel(event)
400-
server_hbchan = zerorpc.HeartBeatOnChannel(server_channel, freq=2)
401-
server_bufchan = zerorpc.BufferedChannel(server_hbchan)
396+
read_cnt = 0
402397

403398
def client_do():
399+
client_channel = client.channel()
400+
client_hbchan = zerorpc.HeartBeatOnChannel(client_channel, freq=TIME_FACTOR * 2)
401+
client_bufchan = zerorpc.BufferedChannel(client_hbchan, inqueue_size=100)
404402
for x in xrange(200):
405403
event = client_bufchan.recv()
406404
assert event.name == 'coucou'
407405
assert event.args == x
406+
global read_cnt
407+
read_cnt += 1
408+
client_bufchan.close()
408409

409410
coro_pool = gevent.pool.Pool()
410411
coro_pool.spawn(client_do)
411412

412413
def server_do():
414+
event = server.recv()
415+
server_channel = server.channel(event)
416+
server_hbchan = zerorpc.HeartBeatOnChannel(server_channel, freq=TIME_FACTOR * 2)
417+
server_bufchan = zerorpc.BufferedChannel(server_hbchan, inqueue_size=100)
413418
if sys.version_info < (2, 7):
414419
def _do_with_assert_raises():
415420
for x in xrange(200):
416-
if not server_bufchan.emit('coucou', x, block=False):
417-
raise CongestionError() # will fail when x == 1
418-
assert_raises(CongestionError, _do_with_assert_raises)
421+
server_bufchan.emit('coucou', x, timeout=0) # will fail when x == 1
422+
assert_raises(zerorpc.TimeoutExpired, _do_with_assert_raises)
419423
else:
420-
with assert_raises(CongestionError):
424+
with assert_raises(zerorpc.TimeoutExpired):
421425
for x in xrange(200):
422-
if not server_bufchan.emit('coucou', x, block=False):
423-
raise CongestionError() # will fail when x == 1
426+
server_bufchan.emit('coucou', x, timeout=0) # will fail when x == 1
424427
server_bufchan.emit('coucou', 1) # block until receiver is ready
425428
if sys.version_info < (2, 7):
426429
def _do_with_assert_raises():
427430
for x in xrange(2, 200):
428-
if not server_bufchan.emit('coucou', x, block=False):
429-
raise CongestionError() # will fail when x == 100
430-
assert_raises(CongestionError, _do_with_assert_raises)
431+
server_bufchan.emit('coucou', x, timeout=0) # will fail when x == 100
432+
assert_raises(zerorpc.TimeoutExpired, _do_with_assert_raises)
431433
else:
432-
with assert_raises(CongestionError):
434+
with assert_raises(zerorpc.TimeoutExpired):
433435
for x in xrange(2, 200):
434-
if not server_bufchan.emit('coucou', x, block=False):
435-
raise CongestionError() # will fail when x == 100
436-
for x in xrange(101, 200):
436+
server_bufchan.emit('coucou', x, timeout=0) # will fail when x == 100
437+
for x in xrange(read_cnt, 200):
437438
server_bufchan.emit('coucou', x) # block until receiver is ready
438-
439+
server_bufchan.close()
439440

440441
coro_pool.spawn(server_do)
441-
442-
coro_pool.join()
443-
client_bufchan.close()
444-
client.close()
445-
server_bufchan.close()
446-
server.close()
442+
try:
443+
coro_pool.join()
444+
except zerorpc.LostRemote:
445+
pass
446+
finally:
447+
client.close()
448+
server.close()

0 commit comments

Comments
 (0)