#!/usr/bin/env python from zio.util import guess_hostname, modlog import zmq from zio.port import Port from zio.peer import Peer log = modlog(__name__) class Node: ''' A vertex in a ported graph with ZIO edges ''' def __init__(self, nick, origin=0, hostname='127.0.0.1'): ''' Create a node. A node has a nickname. It may assert a unique origin number. A hostname may be specified for default binds of its ports or one will attempt to be autodetected. ''' self.nick = nick self.origin = origin self._hostname = hostname or guess_hostname() self.ports = dict() # by name def __str__(self): sp = ' '.join([str(p) for p in self.ports.values()]) return "[node %s]: origin:%d ports:[%s]" % (self.nick, self.origin, sp)
#!/usr/bin/env python3 import json import zmq import zio from zio.flow import Broker, Flow, TransmissionEnd from pyre.zactor import ZActor from zio.util import objectify, modlog, mainlog, DEBUG, INFO log = modlog("test_flowbroker") def client_actor(ctx, pipe, address): 'An actor function talking to a broker on given address' pipe.signal() port = zio.Port("client", zmq.CLIENT,'') port.connect(address) port.online(None) # peer not needed if port only direct connects log.debug ("made flow") direction='extract' credit=2 cflow = Flow(port, direction, credit) bot = cflow.bot() log.debug (f'client did BOT: {bot}') assert(bot) cflow.begin()
#!/usr/bin/env python3 ''' test zio.flow ''' import unittest import zmq from zio import Node, Message from zio.flow import Flow from zio.util import modlog, mainlog log = modlog('test_flow') class TestFlow(unittest.TestCase): origin = 42 credit = 2 def setUp(self): self.snode = Node("server", self.origin) sport = self.snode.port("sport", zmq.SERVER) sport.bind() self.snode.online() self.sflow = Flow(sport, "extract", TestFlow.credit) assert (self.sflow.sm.is_giver()) self.cnode = Node("client") cport = self.cnode.port("cport", zmq.CLIENT) cport.connect("server", "sport") self.cnode.online()
#!/usr/bin/env python3 ''' test zio.port ''' import time import unittest import zmq from zio import Port, Node, Message from zio.util import modlog, mainlog log = modlog('test_port') class TestPort(unittest.TestCase): origin = 42 def setUp(self): self.snode = Node("server", self.origin) sport = self.snode.port("sport", zmq.SERVER) sport.bind() self.snode.online() self.cnode = Node("client") cport = self.cnode.port("cport", zmq.CLIENT) cport.connect("server", "sport") self.cnode.online() def tearDown(self): pass
#!/usr/bin/env python3 ''' test zio.Message ''' import zmq import unittest import zio from zio.util import modlog, mainlog log = modlog('test_message') class TestMessage(unittest.TestCase): def setUp(self): pass def test_ctor_default(self): m = zio.Message(form='FORM') log.debug(m.origin) assert (m.origin == 0) assert (m.seqno == 0) assert (m.level == zio.MessageLevel.undefined) assert (m.label == "") assert (m.form == "FORM") assert (m.routing_id == 0) def test_ctor_parts(self): ph = zio.PrefixHeader() assert (ph.form == ' ')