def test_SplitterShutdown(self): """If producerFinished or shutdownMicroprocess is received on the 'control' inbox they are passed on and the component shuts down""" for msg in [producerFinished(self), shutdownMicroprocess(self)]: split = Splitter() Dummy = Axon.Component.component() split.link((split, "outbox"), (Dummy, "inbox")) split.link((split, "signal"), (Dummy, "control")) split.activate() for _ in xrange(0,10): split.next() self.assert_(0==len(split.outboxes["outbox"])) self.assert_(0==len(split.outboxes["signal"])) split._deliver( msg, "control" ) try: for _ in xrange(0,10): split.next() self.fail() except StopIteration: pass self.assert_(0==len(split.outboxes["outbox"])) self.assert_(1==len(split.outboxes["signal"])) # received = split._collect("signal") received = Dummy.recv("control") self.assert_( msg == received )
def test_PluggingInAndTxfer(self): """Plug instantiated with splitter and component and passes data through to component.""" Axon.Scheduler.scheduler.run = Axon.Scheduler.scheduler() splitter = Splitter() splitter.activate() target = DummyComponent() plug = Plug(splitter, target).activate() execute = Axon.Scheduler.scheduler.run.main() for i in xrange(1,1000): execute.next() #pass some data in for i in xrange(1,10): splitter._deliver(i, "inbox") splitter._deliver(10+i, "control") for i in xrange(1,100): execute.next() # verify it reached the target self.assert_(target.inboxlog == range(1,10)) self.assert_(target.controllog == range(11,20))
def test_PluggingInAndTxfer(self): """Plug instantiated with splitter and component and passes data through to component.""" Axon.Scheduler.scheduler.run = Axon.Scheduler.scheduler() splitter = Splitter() splitter.activate() target = DummyComponent() plug = Plug(splitter, target).activate() execute = Axon.Scheduler.scheduler.run.main() for i in xrange(1, 1000): execute.next() #pass some data in for i in xrange(1, 10): splitter._deliver(i, "inbox") splitter._deliver(10 + i, "control") for i in xrange(1, 100): execute.next() # verify it reached the target self.assert_(target.inboxlog == range(1, 10)) self.assert_(target.controllog == range(11, 20))
def test_PassThroughControlSignal(self): """Data sent to the inbox is sent on to the outbox""" split = Splitter() Dummy = Axon.Component.component() split.link((split, "outbox"), (Dummy, "inbox")) split.link((split, "signal"), (Dummy, "control")) split.activate() for i in xrange(1,10): split._deliver( i, "control" ) for _ in xrange(0,100): split.next() for i in xrange(1,10): self.assert_(len(split.outboxes["signal"])) self.assert_(0==len(split.outboxes["outbox"])) # self.assert_( i == split._collect("signal") ) self.assert_( i == Dummy.recv("control") ) for i in xrange(1,10): split._deliver( i, "control" ) split.next() split.next() for _ in xrange(0,10): split.next() for i in xrange(1,10): self.assert_(len(split.outboxes["signal"])) self.assert_(0==len(split.outboxes["outbox"])) # self.assert_( i == split._collect("signal") ) self.assert_( i == Dummy.recv("control") )
def test_SplitterShutdown(self): """If producerFinished or shutdownMicroprocess is received on the 'control' inbox they are passed on and the component shuts down""" for msg in [producerFinished(self), shutdownMicroprocess(self)]: split = Splitter() Dummy = Axon.Component.component() split.link((split, "outbox"), (Dummy, "inbox")) split.link((split, "signal"), (Dummy, "control")) split.activate() for _ in xrange(0, 10): split.next() self.assert_(0 == len(split.outboxes["outbox"])) self.assert_(0 == len(split.outboxes["signal"])) split._deliver(msg, "control") try: for _ in xrange(0, 10): split.next() self.fail() except StopIteration: pass self.assert_(0 == len(split.outboxes["outbox"])) self.assert_(1 == len(split.outboxes["signal"])) # received = split._collect("signal") received = Dummy.recv("control") self.assert_(msg == received)
def test_PassThroughControlSignal(self): """Data sent to the inbox is sent on to the outbox""" split = Splitter() Dummy = Axon.Component.component() split.link((split, "outbox"), (Dummy, "inbox")) split.link((split, "signal"), (Dummy, "control")) split.activate() for i in xrange(1, 10): split._deliver(i, "control") for _ in xrange(0, 100): split.next() for i in xrange(1, 10): self.assert_(len(split.outboxes["signal"])) self.assert_(0 == len(split.outboxes["outbox"])) # self.assert_( i == split._collect("signal") ) self.assert_(i == Dummy.recv("control")) for i in xrange(1, 10): split._deliver(i, "control") split.next() split.next() for _ in xrange(0, 10): split.next() for i in xrange(1, 10): self.assert_(len(split.outboxes["signal"])) self.assert_(0 == len(split.outboxes["outbox"])) # self.assert_( i == split._collect("signal") ) self.assert_(i == Dummy.recv("control"))
def test_SplitterDelLinkBoth(self): """Sending an delSink message to splitter unlinks in the extra outbox and signal""" Axon.Scheduler.scheduler.run = Axon.Scheduler.scheduler() split = Splitter().activate() target1 = Axon.Component.component().activate() target2 = Axon.Component.component().activate() target1.link( (split,"outbox"), (target1, "inbox") ) target1.link( (split,"signal"), (target1, "control") ) addmsg = addsink(target2, "inbox", "control") split._deliver(addmsg, "configuration") execute = Axon.Scheduler.scheduler.run.main() for i in xrange(1,10): execute.next() for i in xrange(1,10): if i == 5: delmsg = removesink(target2, "inbox", "control") split._deliver(delmsg, "configuration") split._deliver(i, "inbox") split._deliver(10+i, "control") for j in xrange(1,10): execute.next() for i in xrange(1,40): execute.next() # verify that the data has made it to the targets for i in xrange(1,5): self.assert_(target1.dataReady("inbox")) self.assert_(target1.dataReady("control")) self.assert_(i == target1.recv("inbox")) self.assert_(10+i == target1.recv("control")) self.assert_(target2.dataReady("inbox")) self.assert_(target2.dataReady("control")) self.assert_(i == target2.recv("inbox")) self.assert_(10+i == target2.recv("control")) for i in xrange(5,10): self.assert_(target1.dataReady("inbox")) self.assert_(target1.dataReady("control")) self.assert_(i == target1.recv("inbox")) self.assert_(10+i == target1.recv("control")) self.assert_(not target2.dataReady("inbox")) self.assert_(not target2.dataReady("control")) # verify there is nothing left self.assert_(not target1.dataReady("inbox")) self.assert_(not target1.dataReady("control")) self.assert_(not target2.dataReady("inbox")) self.assert_(not target2.dataReady("control"))
def test_SplitterDelLinkBoth(self): """Sending an delSink message to splitter unlinks in the extra outbox and signal""" Axon.Scheduler.scheduler.run = Axon.Scheduler.scheduler() split = Splitter().activate() target1 = Axon.Component.component().activate() target2 = Axon.Component.component().activate() target1.link((split, "outbox"), (target1, "inbox")) target1.link((split, "signal"), (target1, "control")) addmsg = addsink(target2, "inbox", "control") split._deliver(addmsg, "configuration") execute = Axon.Scheduler.scheduler.run.main() for i in xrange(1, 10): execute.next() for i in xrange(1, 10): if i == 5: delmsg = removesink(target2, "inbox", "control") split._deliver(delmsg, "configuration") split._deliver(i, "inbox") split._deliver(10 + i, "control") for j in xrange(1, 10): execute.next() for i in xrange(1, 40): execute.next() # verify that the data has made it to the targets for i in xrange(1, 5): self.assert_(target1.dataReady("inbox")) self.assert_(target1.dataReady("control")) self.assert_(i == target1.recv("inbox")) self.assert_(10 + i == target1.recv("control")) self.assert_(target2.dataReady("inbox")) self.assert_(target2.dataReady("control")) self.assert_(i == target2.recv("inbox")) self.assert_(10 + i == target2.recv("control")) for i in xrange(5, 10): self.assert_(target1.dataReady("inbox")) self.assert_(target1.dataReady("control")) self.assert_(i == target1.recv("inbox")) self.assert_(10 + i == target1.recv("control")) self.assert_(not target2.dataReady("inbox")) self.assert_(not target2.dataReady("control")) # verify there is nothing left self.assert_(not target1.dataReady("inbox")) self.assert_(not target1.dataReady("control")) self.assert_(not target2.dataReady("inbox")) self.assert_(not target2.dataReady("control"))
def test_SplitterAddLinkSignalOnly(self): """Sending an addSink message to splitter links in an extra signal""" Axon.Scheduler.scheduler.run = Axon.Scheduler.scheduler() split = Splitter().activate() target1 = Axon.Component.component().activate() target2 = Axon.Component.component().activate() target1.link( (split,"outbox"), (target1, "inbox") ) target1.link( (split,"signal"), (target1, "control") ) addmsg = addsink(target2, None, "control") split._deliver(addmsg, "configuration") execute = Axon.Scheduler.scheduler.run.main() for i in xrange(1,10): execute.next() for i in xrange(1,10): split._deliver(i, "inbox") split._deliver(10+i, "control") for j in xrange(1,10): execute.next() # verify that the data has made it to the targets for i in xrange(1,10): self.assert_(target1.dataReady("inbox")) self.assert_(target1.dataReady("control")) self.assert_(i == target1.recv("inbox")) self.assert_(10+i == target1.recv("control")) self.assert_(not target2.dataReady("inbox")) self.assert_(target2.dataReady("control")) self.assert_(10+i == target2.recv("control")) # verify there is nothing left self.assert_(not target1.dataReady("inbox")) self.assert_(not target1.dataReady("control")) self.assert_(not target2.dataReady("inbox")) self.assert_(not target2.dataReady("control"))
def test_SplitterAddLinkSignalOnly(self): """Sending an addSink message to splitter links in an extra signal""" Axon.Scheduler.scheduler.run = Axon.Scheduler.scheduler() split = Splitter().activate() target1 = Axon.Component.component().activate() target2 = Axon.Component.component().activate() target1.link((split, "outbox"), (target1, "inbox")) target1.link((split, "signal"), (target1, "control")) addmsg = addsink(target2, None, "control") split._deliver(addmsg, "configuration") execute = Axon.Scheduler.scheduler.run.main() for i in xrange(1, 10): execute.next() for i in xrange(1, 10): split._deliver(i, "inbox") split._deliver(10 + i, "control") for j in xrange(1, 10): execute.next() # verify that the data has made it to the targets for i in xrange(1, 10): self.assert_(target1.dataReady("inbox")) self.assert_(target1.dataReady("control")) self.assert_(i == target1.recv("inbox")) self.assert_(10 + i == target1.recv("control")) self.assert_(not target2.dataReady("inbox")) self.assert_(target2.dataReady("control")) self.assert_(10 + i == target2.recv("control")) # verify there is nothing left self.assert_(not target1.dataReady("inbox")) self.assert_(not target1.dataReady("control")) self.assert_(not target2.dataReady("inbox")) self.assert_(not target2.dataReady("control"))
class Splitter_Test(unittest.TestCase): def setUp(self): self.src = component() self.dst = component() self.dst2 = TestComponent() self.controller = component() self.split = Splitter() self.runner = self.split.main() self.linkin = linkage(self.src,self.split) self.linkcont = linkage(self.controller, self.split, sinkbox="configuration") self.links = [self.linkin, self.linkcont] # self.linkout1 = linkage(self.split,self.dst) # self.linkout2 = linkage(self.split,self.dst2, sourcebox="out2") # # -- NEW STUFF ------ # Axon.Scheduler.scheduler.run = Axon.Scheduler.scheduler() self.execute = Axon.Scheduler.scheduler.run.main() self.S = Splitter().activate() self.D = component().activate() self.D2 = TestComponent().activate() self.W = component().activate() self.W.link( (self.W, "outbox"), (self.S, "configuration") ) def waitEvent(self, cycles, conditionFunc, *args): i = 0 while 1: self.execute.next() if conditionFunc(*args): break else: i += 1 if i > cycles: raise Timeout(i) def runCycles(self, cycles=20): for _ in xrange(cycles): self.execute.next() def deliverhelper(self): # Next bit not really needed due to direct delivery was implemented since then... pass def test_isacomponent(self): "__init__ - Splitter is a component." self.failUnless(isinstance(self.split,component)) def test_simplepassthrough_defaultbox(self): """mainBody - This test sets up a sink and checks it receives sent messages using the default box.""" self.W.send(addsink(self.D), "outbox") data = [ 1,2,3,4,5,6] for i in data: self.S._deliver(i, "inbox") try: self.waitEvent(10, self.D.dataReady, "inbox" ) except Timeout, e: self.fail("Data hasn't arrived after "+str(e.t)+" cycles") R = [] while 1: try: R.append(self.D.recv("inbox")) except: break self.assert_( R == data )
class Splitter_Test(unittest.TestCase): def setUp(self): self.src = component() self.dst = component() self.dst2 = TestComponent() self.controller = component() self.split = Splitter() self.runner = self.split.main() self.linkin = linkage(self.src, self.split) self.linkcont = linkage(self.controller, self.split, sinkbox="configuration") self.links = [self.linkin, self.linkcont] # self.linkout1 = linkage(self.split,self.dst) # self.linkout2 = linkage(self.split,self.dst2, sourcebox="out2") # # -- NEW STUFF ------ # Axon.Scheduler.scheduler.run = Axon.Scheduler.scheduler() self.execute = Axon.Scheduler.scheduler.run.main() self.S = Splitter().activate() self.D = component().activate() self.D2 = TestComponent().activate() self.W = component().activate() self.W.link((self.W, "outbox"), (self.S, "configuration")) def waitEvent(self, cycles, conditionFunc, *args): i = 0 while 1: self.execute.next() if conditionFunc(*args): break else: i += 1 if i > cycles: raise Timeout(i) def runCycles(self, cycles=20): for _ in xrange(cycles): self.execute.next() def deliverhelper(self): # Next bit not really needed due to direct delivery was implemented since then... pass def test_isacomponent(self): "__init__ - Splitter is a component." self.failUnless(isinstance(self.split, component)) def test_simplepassthrough_defaultbox(self): """mainBody - This test sets up a sink and checks it receives sent messages using the default box.""" self.W.send(addsink(self.D), "outbox") data = [1, 2, 3, 4, 5, 6] for i in data: self.S._deliver(i, "inbox") try: self.waitEvent(10, self.D.dataReady, "inbox") except Timeout, e: self.fail("Data hasn't arrived after " + str(e.t) + " cycles") R = [] while 1: try: R.append(self.D.recv("inbox")) except: break self.assert_(R == data)