예제 #1
0
    def test_Unplugging(self):
        """Plug will unplug and shutdown when child component dies."""
        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, 100):
            execute.next()

        #send shutdown msg
        msg = producerFinished()
        target._deliver(msg, "control")

        for i in xrange(1, 100):
            execute.next()

        # verify it reached the target
        self.assert_(target.controllog == [msg])

        # verify the plug has shutdown
        self.assert_(plug._isStopped())

        # verify the plug has no linkages
        self.assert_(not plug.postoffice.linkages)

        # verify that splitter only has outboxes "outbox" and "signal" now
        self.assert_(len(splitter.outboxes) == 2)
        self.assert_("outbox" in splitter.outboxes)
        self.assert_("signal" in splitter.outboxes)
예제 #2
0
    def test_Unplugging(self):
        """Plug will unplug and shutdown when child component dies."""
        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,100):
            execute.next()

        #send shutdown msg
        msg = producerFinished()
        target._deliver(msg, "control")

        for i in xrange(1,100):
            execute.next()

        # verify it reached the target
        self.assert_(target.controllog == [msg])

        # verify the plug has shutdown
        self.assert_(plug._isStopped())

        # verify the plug has no linkages
        self.assert_(not plug.postoffice.linkages)

        # verify that splitter only has outboxes "outbox" and "signal" now
        self.assert_( len(splitter.outboxes) == 2)
        self.assert_( "outbox" in splitter.outboxes)
        self.assert_( "signal" in splitter.outboxes)
예제 #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))
예제 #4
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))
예제 #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()
            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")
            self.assert_(msg == received)
예제 #6
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()
         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")
         self.assert_( msg == received )
예제 #7
0
    def test_PassThroughControlSignal(self):
        """Data sent to the inbox is sent on to the outbox"""
        split = Splitter()
        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"))

        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"))
예제 #8
0
    def test_PassThroughControlSignal(self):
        """Data sent to the inbox is sent on to the outbox"""
        split = Splitter()
        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") )

        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") )
예제 #9
0
 def test_InstantiateNoArgs(self):
     """Splitter instantiated with no args is just passthrough"""
     split = Splitter()
     split.activate()
예제 #10
0
 def test_InstantiateNoArgs(self):
     """Splitter instantiated with no args is just passthrough"""
     split = Splitter()
     split.activate()