def test_zbeacon(): ctx = zctx.new() # Create a service socket and bind to an ephemeral port service = zsocket.new(ctx, zmq.PUSH) port_nbr = zsocket.bind(service, "inproc://foo") # Create beacon to broadcast our service announcement = str(port_nbr) service_beacon = zbeacon.new(ctx, 9999) zbeacon.set_interval(service_beacon, 100) zbeacon.publish(service_beacon, announcement) # Create beacon to lookup service client_beacon = zbeacon.new(ctx, 9999) zbeacon.subscribe(client_beacon, '') # Wait for at most 1/2 second if there's no broadcast networking beacon_socket = zbeacon.socket(client_beacon) zsocket.set_rcvtimeo(beacon_socket, 500) ipaddress = zstr.recv(beacon_socket) content = zframe.recv(beacon_socket) received_port = int(zframe.data(content)) assert received_port == port_nbr zframe.destroy(content) del service_beacon del ctx
def test_zbeacon(): ctx = zctx.new() # Create a service socket and bind to an ephemeral port service = zsocket.new(ctx, zmq.PUB) port_nbr = zsocket.bind(service, "tcp:#*:*") # Create beacon to broadcast our service announcement = str(port_nbr) service_beacon = zbeacon.new(9999) zbeacon.set_interval(service_beacon, 100) zbeacon.publish(service_beacon, announcement) # Create beacon to lookup service client_beacon = zbeacon.new (9999) zbeacon.subscribe(client_beacon, '') # Wait for at most 1/2 second if there's no broadcast networking zsockopt.set_rcvtimeo(zbeacon.socket(client_beacon), 500) ipaddress = zstr.recv(zbeacon.socket(client_beacon)) if ipaddress: content = zframe.recv(zbeacon.socket(client_beacon)) received_port = int(zframe.data(content)) assert received_port == port_nbr zframe.destroy(content)
def test_zsocket(): ctx = zctx.new() # Create a detached thread, let it run interf = "*" domain = "localhost" service = 5560 writer = zsocket.new(ctx, zmq.PUSH) assert (writer) reader = zsocket.new(ctx, zmq.PULL) assert (reader) assert zsocket.type_str(writer) == "PUSH" assert zsocket.type_str(reader) == "PULL" rc = zsocket.bind(writer, "tcp://{0}:{1}".format(interf, service)) assert rc == service # Check unbind rc = zsocket.unbind(writer, "tcp://{0}:{1}".format(interf, service)) assert rc == 0 # In some cases and especially when running under Valgrind, doing # a bind immediately after an unbind causes an EADDRINUSE error. # Even a short sleep allows the OS to release the port for reuse. time.sleep(0.1) # Bind again rc = zsocket.bind(writer, "tcp://{0}:{1}".format(interf, service)) assert rc == service rc = zsocket.connect(reader, "tcp://{0}:{1}".format(domain, service)) assert rc == 0 zstr.send(writer, "HELLO") message = zstr.recv(reader) assert message assert message == "HELLO" # Test binding to ports port = zsocket.bind(writer, "tcp://{0}:*".format(interf)) assert (port >= zsocket.DYNFROM and port <= zsocket.DYNTO) assert zsocket.poll(writer, 100) == False rc = zsocket.connect(reader, "txp://{0}:{1}".format(domain, service)) assert rc == -1 # Test sending frames to socket frame = zframe.new("ABC") rc = zframe.send(frame, writer, zframe.MORE) assert rc == 0 frame = zframe.new("DEFG") rc = zframe.send(frame, writer, 0) assert rc == 0 frame = zframe.recv(reader) assert zframe.streq(frame, "ABC") assert zframe.more(frame) zframe.destroy(frame) frame = zframe.recv(reader) assert zframe.streq(frame, "DEFG") assert not zframe.more(frame) zframe.destroy(frame) del writer del ctx