File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ #!/usr/bin/env python
2+ # coding: utf-8
3+
4+ """Echo service.
5+ This server using msgpackrpc.Server.
6+ """
7+
8+ import msgpackrpc
9+
10+ class EchoHandler (object ):
11+
12+ def echo (self , msg ):
13+ return msg
14+
15+ def serve_background (server , daemon = False ):
16+ def _start_server (server ):
17+ server .start ()
18+ server .close ()
19+
20+ import threading
21+ t = threading .Thread (target = _start_server , args = (server ,))
22+ t .setDaemon (daemon )
23+ t .start ()
24+ return t
25+
26+ def serve (daemon = False ):
27+ """Serve echo server in background on localhost.
28+ This returns (server, port). port is number in integer.
29+
30+ To stop, use ``server.shutdown()``
31+ """
32+ for port in xrange (9000 , 10000 ):
33+ try :
34+ addr = msgpackrpc .Address ('localhost' , port )
35+ server = msgpackrpc .Server (EchoHandler ())
36+ print server
37+ server .listen (addr )
38+ thread = serve_background (server , daemon )
39+ return (addr , server , thread )
40+ except Exception as err :
41+ print err
42+ pass
43+
44+ if __name__ == '__main__' :
45+ port = serve (False )
46+ print "Serving on localhost:%d\n " % port [1 ]
47+
Original file line number Diff line number Diff line change 1+ #!/usr/bin/env python
2+ # coding: utf-8
3+
4+ import msgpackrpc
5+ import echoserver
6+
7+ ADDR = SERVER = THREAD = None
8+
9+
10+ def setup ():
11+ global ADDR , SERVER , THREAD
12+ (ADDR , SERVER , THREAD ) = echoserver .serve ()
13+
14+
15+ def teardown ():
16+ global SERVER , THREAD
17+ SERVER .stop ()
18+ THREAD .join ()
19+
20+
21+ def test_client ():
22+ global ADDR
23+ client = msgpackrpc .Client (ADDR , unpack_encoding = 'utf-8' )
24+
25+ f1 = client .call ('echo' , 'foo' )
26+ f2 = client .call ('echo' , 'bar' )
27+ f3 = client .call ('echo' , 'baz' )
28+
29+ assert f2 == 'bar'
30+ assert f1 == 'foo'
31+ assert f3 == 'baz'
32+
33+ print "EchoHandler#echo via msgpackrpc"
34+
35+
36+ if __name__ == '__main__' :
37+ setup ()
38+ test_client ()
39+ teardown ()
40+
You can’t perform that action at this time.
0 commit comments