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 doesn't use msgpackrpc.server.
6+ """
7+
8+ import SocketServer
9+ from msgpack import packs , Unpacker
10+
11+ class EchoHandler (SocketServer .BaseRequestHandler ):
12+
13+ def handle (self ):
14+ unpacker = Unpacker ()
15+
16+ while 1 :
17+ data = self .request .recv (4096 )
18+ if len (data ) == 0 :
19+ break
20+ unpacker .feed (data )
21+ for msg in unpacker :
22+ print msg
23+ assert len (msg ) == 4
24+ assert msg [0 ] == 0
25+ assert msg [2 ] == "echo"
26+ sdata = packs ((1 , msg [1 ], None , msg [- 1 ]))
27+ self .request .sendall (sdata )
28+
29+ def serve_background (server , daemon = False ):
30+ import threading
31+ t = threading .Thread (target = server .serve_forever )
32+ t .setDaemon (daemon )
33+ t .start ()
34+
35+ def serve (daemon = False ):
36+ """Serve echo server in background on localhost.
37+ This returns (server, port). port is number in integer.
38+
39+ To stop, use ``server.shutdown()``
40+ """
41+ for port in xrange (9000 , 10000 ):
42+ try :
43+ server = SocketServer .TCPServer (('localhost' , port ), EchoHandler )
44+ serve_background (server , daemon )
45+ return server , port
46+ except Exception :
47+ pass
48+
49+ if __name__ == '__main__' :
50+ port = serve (False )
51+ print "Serving on localhost:%d\n " % (port ,)
Original file line number Diff line number Diff line change 1+ #!/usr/bin/env python
2+ # coding: utf-8
3+
4+ from msgpackrpc .client import *
5+ from msgpackrpc .transport import tcp
6+
7+ import echoserver
8+
9+ SERVER = PORT = None
10+
11+ def setup ():
12+ global SERVER , PORT
13+ SERVER , PORT = echoserver .serve ()
14+
15+ def teardown ():
16+ global SERVER , PORT
17+ SERVER .shutdown ()
18+ SERVER = PORT = None
19+
20+ def test_client ():
21+ client = Client (tcp .TCPTransport , ('localhost' , PORT ), {})
22+
23+ f1 = client .send_request ('echo' , 'foo' )
24+ f2 = client .send_request ('echo' , 'bar' )
25+ f3 = client .send_request ('echo' , 'baz' )
26+
27+ assert f2 .result () == 'bar'
28+ assert f1 .result () == 'foo'
29+ assert f3 .result () == 'baz'
30+
31+ if __name__ == '__main__' :
32+ setup ()
33+ test_client ()
34+ teardown ()
You can’t perform that action at this time.
0 commit comments