Beispiel #1
0
    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 )
Beispiel #2
0
    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))
Beispiel #3
0
    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))
Beispiel #4
0
    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") )
Beispiel #5
0
    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)
Beispiel #6
0
    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"))
Beispiel #7
0
    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"))
Beispiel #8
0
    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"))
Beispiel #9
0
    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"))
Beispiel #10
0
    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"))
Beispiel #11
0
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 )
Beispiel #12
0
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)