Created
October 26, 2011 19:23
-
-
Save minrk/1317498 to your computer and use it in GitHub Desktop.
Script for comparing different behavior of various socket pairs in libzmq2,3
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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