31
31
32
32
from zerorpc import zmq
33
33
import zerorpc
34
- from testutils import teardown , random_ipc_endpoint
34
+ from testutils import teardown , random_ipc_endpoint , skip
35
35
36
36
37
37
def test_resolve_endpoint ():
@@ -49,11 +49,11 @@ def resolve(endpoint):
49
49
print 'registered_count:' , cnt
50
50
assert cnt == 1
51
51
52
- print 'resolve titi:' , c .middleware_resolve_endpoint ('titi' )
53
- assert c .middleware_resolve_endpoint ('titi' ) == test_endpoint
52
+ print 'resolve titi:' , c .hook_resolve_endpoint ('titi' )
53
+ assert c .hook_resolve_endpoint ('titi' ) == test_endpoint
54
54
55
- print 'resolve toto:' , c .middleware_resolve_endpoint ('toto' )
56
- assert c .middleware_resolve_endpoint ('toto' ) == 'toto'
55
+ print 'resolve toto:' , c .hook_resolve_endpoint ('toto' )
56
+ assert c .hook_resolve_endpoint ('toto' ) == 'toto'
57
57
58
58
class Resolver ():
59
59
@@ -66,16 +66,16 @@ def resolve_endpoint(self, endpoint):
66
66
print 'registered_count:' , cnt
67
67
assert cnt == 1
68
68
69
- print 'resolve titi:' , c .middleware_resolve_endpoint ('titi' )
70
- assert c .middleware_resolve_endpoint ('titi' ) == test_endpoint
71
- print 'resolve toto:' , c .middleware_resolve_endpoint ('toto' )
72
- assert c .middleware_resolve_endpoint ('toto' ) == test_endpoint
69
+ print 'resolve titi:' , c .hook_resolve_endpoint ('titi' )
70
+ assert c .hook_resolve_endpoint ('titi' ) == test_endpoint
71
+ print 'resolve toto:' , c .hook_resolve_endpoint ('toto' )
72
+ assert c .hook_resolve_endpoint ('toto' ) == test_endpoint
73
73
74
74
c2 = zerorpc .Context ()
75
- print 'resolve titi:' , c2 .middleware_resolve_endpoint ('titi' )
76
- assert c2 .middleware_resolve_endpoint ('titi' ) == 'titi'
77
- print 'resolve toto:' , c2 .middleware_resolve_endpoint ('toto' )
78
- assert c2 .middleware_resolve_endpoint ('toto' ) == 'toto'
75
+ print 'resolve titi:' , c2 .hook_resolve_endpoint ('titi' )
76
+ assert c2 .hook_resolve_endpoint ('titi' ) == 'titi'
77
+ print 'resolve toto:' , c2 .hook_resolve_endpoint ('toto' )
78
+ assert c2 .hook_resolve_endpoint ('toto' ) == 'toto'
79
79
80
80
81
81
def test_resolve_endpoint_events ():
@@ -110,151 +110,6 @@ def hello(self):
110
110
srv .close ()
111
111
112
112
113
- def test_raise_error ():
114
- endpoint = random_ipc_endpoint ()
115
- c = zerorpc .Context ()
116
-
117
- class DummyRaiser ():
118
- def raise_error (self , event ):
119
- pass
120
-
121
- class Srv (zerorpc .Server ):
122
- pass
123
-
124
- srv = Srv (context = c )
125
- srv .bind (endpoint )
126
- gevent .spawn (srv .run )
127
-
128
- client = zerorpc .Client (context = c )
129
- client .connect (endpoint )
130
-
131
- with assert_raises (zerorpc .RemoteError ):
132
- client .donotexist ()
133
-
134
- cnt = c .register_middleware (DummyRaiser ())
135
- assert cnt == 1
136
-
137
- with assert_raises (zerorpc .RemoteError ):
138
- client .donotexist ()
139
-
140
- class HorribleEvalRaiser ():
141
- def raise_error (self , event ):
142
- (name , msg , tb ) = event .args
143
- etype = eval (name )
144
- e = etype (tb )
145
- raise e
146
-
147
- cnt = c .register_middleware (HorribleEvalRaiser ())
148
- assert cnt == 1
149
-
150
- with assert_raises (NameError ):
151
- try :
152
- client .donotexist ()
153
- except NameError as e :
154
- print 'got it:' , e
155
- raise
156
-
157
- client .close ()
158
- srv .close ()
159
-
160
-
161
- def test_call_procedure ():
162
- c = zerorpc .Context ()
163
-
164
- def test (argument ):
165
- return 'ret_real:' + argument
166
- assert c .middleware_call_procedure (test , 'dummy' ) == 'ret_real:dummy'
167
-
168
- def middleware_1 (procedure , * args , ** kwargs ):
169
- return 'ret_middleware_1:' + procedure (* args , ** kwargs )
170
- cnt = c .register_middleware ({
171
- 'call_procedure' : middleware_1
172
- })
173
- assert cnt == 1
174
- assert c .middleware_call_procedure (test , 'dummy' ) == \
175
- 'ret_middleware_1:ret_real:dummy'
176
-
177
- def middleware_2 (procedure , * args , ** kwargs ):
178
- return 'ret_middleware_2:' + procedure (* args , ** kwargs )
179
- cnt = c .register_middleware ({
180
- 'call_procedure' : middleware_2
181
- })
182
- assert cnt == 1
183
- assert c .middleware_call_procedure (test , 'dummy' ) == \
184
- 'ret_middleware_2:ret_middleware_1:ret_real:dummy'
185
-
186
- def mangle_arguments (procedure , * args , ** kwargs ):
187
- return procedure (args [0 ].upper ())
188
- cnt = c .register_middleware ({
189
- 'call_procedure' : mangle_arguments
190
- })
191
- assert cnt == 1
192
- assert c .middleware_call_procedure (test , 'dummy' ) == \
193
- 'ret_middleware_2:ret_middleware_1:ret_real:DUMMY'
194
-
195
- endpoint = random_ipc_endpoint ()
196
-
197
- # client/server
198
- class Server (zerorpc .Server ):
199
- def test (self , argument ):
200
- return 'ret_real:' + argument
201
- server = Server (heartbeat = 1 , context = c )
202
- server .bind (endpoint )
203
- gevent .spawn (server .run )
204
- client = zerorpc .Client (heartbeat = 1 , context = c )
205
- client .connect (endpoint )
206
- assert client .test ('dummy' ) == \
207
- 'ret_middleware_2:ret_middleware_1:ret_real:DUMMY'
208
- client .close ()
209
- server .close ()
210
-
211
- # push/pull
212
- trigger = gevent .event .Event ()
213
- class Puller (zerorpc .Puller ):
214
- argument = None
215
-
216
- def test (self , argument ):
217
- self .argument = argument
218
- trigger .set ()
219
- return self .argument
220
-
221
- puller = Puller (context = c )
222
- puller .bind (endpoint )
223
- gevent .spawn (puller .run )
224
- pusher = zerorpc .Pusher (context = c )
225
- pusher .connect (endpoint )
226
- trigger .clear ()
227
- pusher .test ('dummy' )
228
- trigger .wait ()
229
- assert puller .argument == 'DUMMY'
230
- #FIXME: These seems to be broken
231
- # pusher.close()
232
- # puller.close()
233
-
234
- # pub/sub
235
- trigger = gevent .event .Event ()
236
- class Subscriber (zerorpc .Subscriber ):
237
- argument = None
238
-
239
- def test (self , argument ):
240
- self .argument = argument
241
- trigger .set ()
242
- return self .argument
243
-
244
- subscriber = Subscriber (context = c )
245
- subscriber .bind (endpoint )
246
- gevent .spawn (subscriber .run )
247
- publisher = zerorpc .Publisher (context = c )
248
- publisher .connect (endpoint )
249
- trigger .clear ()
250
- publisher .test ('dummy' )
251
- trigger .wait ()
252
- assert subscriber .argument == 'DUMMY'
253
- #FIXME: These seems to be broken
254
- # publisher.close()
255
- # subscriber.close()
256
-
257
-
258
113
class Tracer :
259
114
'''Used by test_task_context_* tests'''
260
115
def __init__ (self , identity ):
@@ -488,6 +343,7 @@ def echo(self, msg):
488
343
]
489
344
490
345
346
+ @skip ("PUB/SUB is badly broken in ZMQ and make this test fails" )
491
347
def test_task_context_pubsub ():
492
348
endpoint = random_ipc_endpoint ()
493
349
subscriber_ctx = zerorpc .Context ()
@@ -525,25 +381,38 @@ def echo(self, msg):
525
381
('load' , publisher_tracer .trace_id ),
526
382
]
527
383
528
- def test_inspect_error_middleware ():
529
384
530
- class InspectErrorMiddleware (Tracer ):
531
- def __init__ (self ):
532
- self .called = False
533
- Tracer .__init__ (self , identity = '[server]' )
385
+ class InspectExceptionMiddleware (Tracer ):
386
+ def __init__ (self , barrier = None ):
387
+ self .called = False
388
+ self ._barrier = barrier
389
+ Tracer .__init__ (self , identity = '[server]' )
390
+
391
+ def server_inspect_exception (self , request_event , reply_event , task_context , exc_info ):
392
+ assert 'trace_id' in task_context
393
+ assert request_event .name == 'echo'
394
+ if self ._barrier : # Push/Pull
395
+ assert reply_event is None
396
+ else : # Req/Rep or Req/Stream
397
+ assert reply_event .name == 'ERR'
398
+ exc_type , exc_value , exc_traceback = exc_info
399
+ self .called = True
400
+ if self ._barrier :
401
+ self ._barrier .set ()
534
402
535
- def inspect_error (self , task_context , exc_info ):
536
- assert 'trace_id' in task_context
537
- exc_type , exc_value , exc_traceback = exc_info
538
- self .called = True
403
+ class Srv (object ):
539
404
540
- class Srv (object ):
541
- def echo (self , msg ):
542
- raise RuntimeError (msg )
405
+ def echo (self , msg ):
406
+ raise RuntimeError (msg )
543
407
408
+ @zerorpc .stream
409
+ def echoes (self , msg ):
410
+ raise RuntimeError (msg )
411
+
412
+ def test_server_inspect_exception_middleware ():
544
413
endpoint = random_ipc_endpoint ()
545
414
546
- middleware = InspectErrorMiddleware ()
415
+ middleware = InspectExceptionMiddleware ()
547
416
ctx = zerorpc .Context ()
548
417
ctx .register_middleware (middleware )
549
418
@@ -556,7 +425,7 @@ def echo(self, msg):
556
425
client .connect (endpoint )
557
426
558
427
try :
559
- client .echo ('This is a test which should call the InspectErrorMiddleware ' )
428
+ client .echo ('This is a test which should call the InspectExceptionMiddleware ' )
560
429
except zerorpc .exceptions .RemoteError as ex :
561
430
assert ex .name == 'RuntimeError'
562
431
@@ -565,28 +434,11 @@ def echo(self, msg):
565
434
566
435
assert middleware .called is True
567
436
568
- def test_inspect_error_middleware_puller ():
569
-
570
- class InspectErrorMiddleware (Tracer ):
571
- def __init__ (self , barrier ):
572
- self .called = False
573
- self ._barrier = barrier
574
- Tracer .__init__ (self , identity = '[server]' )
575
-
576
- def inspect_error (self , task_context , exc_info ):
577
- assert 'trace_id' in task_context
578
- exc_type , exc_value , exc_traceback = exc_info
579
- self .called = True
580
- self ._barrier .set ()
581
-
582
- class Srv (object ):
583
- def echo (self , msg ):
584
- raise RuntimeError (msg )
585
-
437
+ def test_server_inspect_exception_middleware_puller ():
586
438
endpoint = random_ipc_endpoint ()
587
439
588
440
barrier = gevent .event .Event ()
589
- middleware = InspectErrorMiddleware (barrier )
441
+ middleware = InspectExceptionMiddleware (barrier )
590
442
ctx = zerorpc .Context ()
591
443
ctx .register_middleware (middleware )
592
444
@@ -599,8 +451,33 @@ def echo(self, msg):
599
451
client .connect (endpoint )
600
452
601
453
barrier .clear ()
602
- client .echo ('This is a test which should call the InspectErrorMiddleware' )
603
- barrier .wait ()
454
+ client .echo ('This is a test which should call the InspectExceptionMiddleware' )
455
+ barrier .wait (timeout = 2 )
456
+
457
+ client .close ()
458
+ server .close ()
459
+
460
+ assert middleware .called is True
461
+
462
+ def test_server_inspect_exception_middleware_stream ():
463
+ endpoint = random_ipc_endpoint ()
464
+
465
+ middleware = InspectExceptionMiddleware ()
466
+ ctx = zerorpc .Context ()
467
+ ctx .register_middleware (middleware )
468
+
469
+ module = Srv ()
470
+ server = zerorpc .Server (module , context = ctx )
471
+ server .bind (endpoint )
472
+ gevent .spawn (server .run )
473
+
474
+ client = zerorpc .Client ()
475
+ client .connect (endpoint )
476
+
477
+ try :
478
+ client .echo ('This is a test which should call the InspectExceptionMiddleware' )
479
+ except zerorpc .exceptions .RemoteError as ex :
480
+ assert ex .name == 'RuntimeError'
604
481
605
482
client .close ()
606
483
server .close ()
0 commit comments