Skip to content

Instantly share code, notes, and snippets.

@minrk
Created October 26, 2011 19:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save minrk/1317498 to your computer and use it in GitHub Desktop.
Save minrk/1317498 to your computer and use it in GitHub Desktop.
Script for comparing different behavior of various socket pairs in libzmq2,3
libzmq version: 2.1.10 | libzmq version: 3.0.2
pyzmq version: 2.1dev pyzmq version: 2.1dev
Testing REQ -> DEALER Testing REQ -> DEALER
REQ sending 'hi': ok REQ sending 'hi': ok
DEALER receiving: ['', 'hi'] | DEALER receiving: ['hi'] Labels: ['\xb5\xbe\x13|']
DEALER sending reply: ok DEALER sending reply: ok
REQ receiving: ['hi'] REQ receiving: ['hi']
Testing REQ -> ROUTER Testing REQ -> ROUTER
REQ sending 'hi': ok REQ sending 'hi': ok
ROUTER receiving: ['REQ', '', 'hi'] | ROUTER receiving: ['REQ', 'O\xce\xb5\xee', 'hi']
ROUTER sending reply: ok ROUTER sending reply: ok
REQ receiving: ['hi'] | REQ receiving: Resource temporarily unavailable
Testing REQ -> XREQ Testing REQ -> XREQ
REQ sending 'hi': ok REQ sending 'hi': ok
XREQ receiving: ['', 'hi'] | XREQ receiving: ['hi'] Labels: ['\xc1/l$']
XREQ sending reply: ok XREQ sending reply: ok
REQ receiving: ['hi'] REQ receiving: ['hi']
Testing REQ -> XREP Testing REQ -> XREP
REQ sending 'hi': ok REQ sending 'hi': ok
XREP receiving: ['REQ', '', 'hi'] | XREP receiving: ['hi'] Labels: ['\xea\xe5\xac\xdf', '\xe8\x05h\x06']
XREP sending reply: ok XREP sending reply: ok
REQ receiving: ['hi'] REQ receiving: ['hi']
Testing REQ -> REP Testing REQ -> REP
REQ sending 'hi': ok REQ sending 'hi': ok
REP receiving: ['hi'] REP receiving: ['hi']
REP sending reply: ok REP sending reply: ok
REQ receiving: ['hi'] REQ receiving: ['hi']
Testing REQ -> REQ Testing REQ -> REQ
REQ sending 'hi': ok REQ sending 'hi': ok
REQ receiving: Operation cannot be accomplished in current state REQ receiving: Operation cannot be accomplished in current state
Testing XREQ -> DEALER Testing XREQ -> DEALER
XREQ sending 'hi': ok XREQ sending 'hi': ok
DEALER receiving: ['hi'] DEALER receiving: ['hi']
DEALER sending reply: ok DEALER sending reply: ok
XREQ receiving: ['hi'] XREQ receiving: ['hi']
Testing XREQ -> ROUTER Testing XREQ -> ROUTER
XREQ sending 'hi': ok XREQ sending 'hi': ok
ROUTER receiving: ['XREQ', 'hi'] ROUTER receiving: ['XREQ', 'hi']
ROUTER sending reply: ok ROUTER sending reply: ok
XREQ receiving: ['hi'] XREQ receiving: ['hi']
Testing XREQ -> XREQ Testing XREQ -> XREQ
XREQ sending 'hi': ok XREQ sending 'hi': ok
XREQ receiving: ['hi'] XREQ receiving: ['hi']
XREQ sending reply: ok XREQ sending reply: ok
XREQ receiving: ['hi'] XREQ receiving: ['hi']
Testing XREQ -> XREP Testing XREQ -> XREP
XREQ sending 'hi': ok XREQ sending 'hi': ok
XREP receiving: ['XREQ', 'hi'] | XREP receiving: ['hi'] Labels: ['\xf9\x9c\x88}']
XREP sending reply: ok XREP sending reply: ok
XREQ receiving: ['hi'] XREQ receiving: ['hi']
Testing XREQ -> REP Testing XREQ -> REP
XREQ sending 'hi': ok XREQ sending 'hi': ok
REP receiving: Resource temporarily unavailable | REP receiving: ['hi']
> REP sending reply: ok
> XREQ receiving: ['hi']
Testing XREQ -> REQ Testing XREQ -> REQ
XREQ sending 'hi': ok XREQ sending 'hi': ok
REQ receiving: Operation cannot be accomplished in current state REQ receiving: Operation cannot be accomplished in current state
Testing DEALER -> DEALER Testing DEALER -> DEALER
DEALER sending 'hi': ok DEALER sending 'hi': ok
DEALER receiving: ['hi'] DEALER receiving: ['hi']
DEALER sending reply: ok DEALER sending reply: ok
DEALER receiving: ['hi'] DEALER receiving: ['hi']
Testing DEALER -> ROUTER Testing DEALER -> ROUTER
DEALER sending 'hi': ok DEALER sending 'hi': ok
ROUTER receiving: ['DEALER', 'hi'] ROUTER receiving: ['DEALER', 'hi']
ROUTER sending reply: ok ROUTER sending reply: ok
DEALER receiving: ['hi'] DEALER receiving: ['hi']
Testing DEALER -> XREQ Testing DEALER -> XREQ
DEALER sending 'hi': ok DEALER sending 'hi': ok
XREQ receiving: ['hi'] XREQ receiving: ['hi']
XREQ sending reply: ok XREQ sending reply: ok
DEALER receiving: ['hi'] DEALER receiving: ['hi']
Testing DEALER -> XREP Testing DEALER -> XREP
DEALER sending 'hi': ok DEALER sending 'hi': ok
XREP receiving: ['DEALER', 'hi'] | XREP receiving: ['hi'] Labels: ['7\xc6\xc6+']
XREP sending reply: ok XREP sending reply: ok
DEALER receiving: ['hi'] DEALER receiving: ['hi']
Testing DEALER -> REP Testing DEALER -> REP
DEALER sending 'hi': ok DEALER sending 'hi': ok
REP receiving: Resource temporarily unavailable | REP receiving: ['hi']
> REP sending reply: ok
> DEALER receiving: ['hi']
Testing DEALER -> REQ Testing DEALER -> REQ
DEALER sending 'hi': ok DEALER sending 'hi': ok
REQ receiving: Operation cannot be accomplished in current state REQ receiving: Operation cannot be accomplished in current state
import time
import zmq
ctx = zmq.Context.instance()
iface = 'tcp://127.0.0.1'
def run_test(client_type, server_type):
"""run test with socket types *by name* for easier printing
Test is:
client sends 'hi'
server recvs
server echoes back
"""
print "Testing %s -> %s" % (client_type, server_type)
# create sockets
s = ctx.socket(getattr(zmq, server_type))
s.identity = server_type
c = ctx.socket(getattr(zmq, client_type))
c.identity = client_type
# bind sockets
port = s.bind_to_random_port(iface)
c.connect("%s:%s" % (iface, port))
time.sleep(0.5)
# use poll+NOBLOCK, so we can avoid hangs
poller = zmq.Poller()
poller.register(c, zmq.POLLOUT)
poller.poll(1)
msg = b'hi'
print " %s sending %r:" % (client_type, msg),
c.send(msg, zmq.NOBLOCK)
print "ok"
poller.unregister(c)
poller.register(s, zmq.POLLIN)
poller.poll(1)
print " %s receiving:" % server_type,
msg = s.recv_multipart(zmq.NOBLOCK)
poller.unregister(s)
if isinstance(msg, tuple):
prefix, msg = msg
prefix_s = ", Labels: %s" % prefix
else:
prefix = None
prefix_s = ""
if prefix:
print msg, "Labels:", prefix
else:
print msg
print " %s sending reply:" % server_type,
s.send_multipart(msg, zmq.NOBLOCK, prefix=prefix)
print "ok"
poller.register(c, zmq.POLLIN)
poller.poll(1)
print " %s receiving:" % client_type,
msg = c.recv_multipart(zmq.NOBLOCK)
print msg
c.close()
s.close()
tests = {
'REQ' : ['DEALER', 'ROUTER', 'XREQ', 'XREP', 'REP', 'REQ'],
'XREQ' : ['DEALER', 'ROUTER', 'XREQ', 'XREP', 'REP', 'REQ'],
'DEALER' : ['DEALER', 'ROUTER', 'XREQ', 'XREP', 'REP', 'REQ'],
}
if __name__ == '__main__':
print "libzmq version: %s" % zmq.zmq_version()
print "pyzmq version: %s" % zmq.__version__
for client_type, server_types in tests.iteritems():
for server_type in server_types:
try:
run_test(client_type, server_type)
except zmq.ZMQError as e:
print " %s" % e
libzmq version: 2.1.10
pyzmq version: 2.1dev
Testing REQ -> DEALER
REQ sending 'hi': ok
DEALER receiving: ['', 'hi']
DEALER sending reply: ok
REQ receiving: ['hi']
Testing REQ -> ROUTER
REQ sending 'hi': ok
ROUTER receiving: ['REQ', '', 'hi']
ROUTER sending reply: ok
REQ receiving: ['hi']
Testing REQ -> XREQ
REQ sending 'hi': ok
XREQ receiving: ['', 'hi']
XREQ sending reply: ok
REQ receiving: ['hi']
Testing REQ -> XREP
REQ sending 'hi': ok
XREP receiving: ['REQ', '', 'hi']
XREP sending reply: ok
REQ receiving: ['hi']
Testing REQ -> REP
REQ sending 'hi': ok
REP receiving: ['hi']
REP sending reply: ok
REQ receiving: ['hi']
Testing REQ -> REQ
REQ sending 'hi': ok
REQ receiving: Operation cannot be accomplished in current state
Testing XREQ -> DEALER
XREQ sending 'hi': ok
DEALER receiving: ['hi']
DEALER sending reply: ok
XREQ receiving: ['hi']
Testing XREQ -> ROUTER
XREQ sending 'hi': ok
ROUTER receiving: ['XREQ', 'hi']
ROUTER sending reply: ok
XREQ receiving: ['hi']
Testing XREQ -> XREQ
XREQ sending 'hi': ok
XREQ receiving: ['hi']
XREQ sending reply: ok
XREQ receiving: ['hi']
Testing XREQ -> XREP
XREQ sending 'hi': ok
XREP receiving: ['XREQ', 'hi']
XREP sending reply: ok
XREQ receiving: ['hi']
Testing XREQ -> REP
XREQ sending 'hi': ok
REP receiving: Resource temporarily unavailable
Testing XREQ -> REQ
XREQ sending 'hi': ok
REQ receiving: Operation cannot be accomplished in current state
Testing DEALER -> DEALER
DEALER sending 'hi': ok
DEALER receiving: ['hi']
DEALER sending reply: ok
DEALER receiving: ['hi']
Testing DEALER -> ROUTER
DEALER sending 'hi': ok
ROUTER receiving: ['DEALER', 'hi']
ROUTER sending reply: ok
DEALER receiving: ['hi']
Testing DEALER -> XREQ
DEALER sending 'hi': ok
XREQ receiving: ['hi']
XREQ sending reply: ok
DEALER receiving: ['hi']
Testing DEALER -> XREP
DEALER sending 'hi': ok
XREP receiving: ['DEALER', 'hi']
XREP sending reply: ok
DEALER receiving: ['hi']
Testing DEALER -> REP
DEALER sending 'hi': ok
REP receiving: Resource temporarily unavailable
Testing DEALER -> REQ
DEALER sending 'hi': ok
REQ receiving: Operation cannot be accomplished in current state
libzmq version: 3.0.2
pyzmq version: 2.1dev
Testing REQ -> DEALER
REQ sending 'hi': ok
DEALER receiving: ['hi'] Labels: ['\xb5\xbe\x13|']
DEALER sending reply: ok
REQ receiving: ['hi']
Testing REQ -> ROUTER
REQ sending 'hi': ok
ROUTER receiving: ['REQ', 'O\xce\xb5\xee', 'hi']
ROUTER sending reply: ok
REQ receiving: Resource temporarily unavailable
Testing REQ -> XREQ
REQ sending 'hi': ok
XREQ receiving: ['hi'] Labels: ['\xc1/l$']
XREQ sending reply: ok
REQ receiving: ['hi']
Testing REQ -> XREP
REQ sending 'hi': ok
XREP receiving: ['hi'] Labels: ['\xea\xe5\xac\xdf', '\xe8\x05h\x06']
XREP sending reply: ok
REQ receiving: ['hi']
Testing REQ -> REP
REQ sending 'hi': ok
REP receiving: ['hi']
REP sending reply: ok
REQ receiving: ['hi']
Testing REQ -> REQ
REQ sending 'hi': ok
REQ receiving: Operation cannot be accomplished in current state
Testing XREQ -> DEALER
XREQ sending 'hi': ok
DEALER receiving: ['hi']
DEALER sending reply: ok
XREQ receiving: ['hi']
Testing XREQ -> ROUTER
XREQ sending 'hi': ok
ROUTER receiving: ['XREQ', 'hi']
ROUTER sending reply: ok
XREQ receiving: ['hi']
Testing XREQ -> XREQ
XREQ sending 'hi': ok
XREQ receiving: ['hi']
XREQ sending reply: ok
XREQ receiving: ['hi']
Testing XREQ -> XREP
XREQ sending 'hi': ok
XREP receiving: ['hi'] Labels: ['\xf9\x9c\x88}']
XREP sending reply: ok
XREQ receiving: ['hi']
Testing XREQ -> REP
XREQ sending 'hi': ok
REP receiving: ['hi']
REP sending reply: ok
XREQ receiving: ['hi']
Testing XREQ -> REQ
XREQ sending 'hi': ok
REQ receiving: Operation cannot be accomplished in current state
Testing DEALER -> DEALER
DEALER sending 'hi': ok
DEALER receiving: ['hi']
DEALER sending reply: ok
DEALER receiving: ['hi']
Testing DEALER -> ROUTER
DEALER sending 'hi': ok
ROUTER receiving: ['DEALER', 'hi']
ROUTER sending reply: ok
DEALER receiving: ['hi']
Testing DEALER -> XREQ
DEALER sending 'hi': ok
XREQ receiving: ['hi']
XREQ sending reply: ok
DEALER receiving: ['hi']
Testing DEALER -> XREP
DEALER sending 'hi': ok
XREP receiving: ['hi'] Labels: ['7\xc6\xc6+']
XREP sending reply: ok
DEALER receiving: ['hi']
Testing DEALER -> REP
DEALER sending 'hi': ok
REP receiving: ['hi']
REP sending reply: ok
DEALER receiving: ['hi']
Testing DEALER -> REQ
DEALER sending 'hi': ok
REQ receiving: Operation cannot be accomplished in current state
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment