Example #1
0
class TestContextVars(unittest.TestCase):
    def setUp(self):
        self.bus = VoomBus(raise_errors=True)
        self.context2 = 0

    def do1(self, msg):
        self.msg = msg
        self.context = self.bus.message_context['c']
        with self.bus.using(dict(c=self.context + 1), local=True):
            with self.bus.using(dict(c=self.context + 2), local=True):
                self.bus.publish("hello")
            self.bus.publish("hello")

    def do2(self, msg):
        self.msg2 = msg
        self.context2 += self.bus.message_context['c']

    def test_vars(self):
        msg = 1
        self.bus.subscribe(int, self.do1)
        self.bus.subscribe(str, self.do2)
        with self.bus.using(dict(c=100), local=True):
            self.bus.publish(msg)
        assert self.context == 100
        assert self.context2 == 101 + 102
Example #2
0
class TestSession(unittest.TestCase):
    def setUp(self):
        self.bus = VoomBus()

    def test_1(self):
        session = {}

        @receiver(str)
        def doer1(s):
            self.bus.session[s] = True
            session.update(self.bus.session)

        self.bus.register(doer1)
        with self.bus.using(dict(a=1, b=2)):
            self.bus.publish("meow")
        assert session == dict(a=1, b=2, meow=True)

        session = {}
        self.bus.publish("meow")
        assert session == dict(meow=True)

        @receiver(str)
        def doer2(s):
            if s == "meow":
                self.bus.publish("grr")
        self.bus.register(doer2)
        session = {}
        self.bus.publish("meow")
        assert session == dict(meow=True, grr=True)
Example #3
0
class TestSession(unittest.TestCase):
    def setUp(self):
        self.bus = VoomBus()

    def test_1(self):
        session = {}

        @receiver(str)
        def doer1(s):
            self.bus.session[s] = True
            session.update(self.bus.session)

        self.bus.register(doer1)
        with self.bus.using(dict(a=1, b=2)):
            self.bus.publish("meow")
        assert session == dict(a=1, b=2, meow=True)

        session = {}
        self.bus.publish("meow")
        assert session == dict(meow=True)

        @receiver(str)
        def doer2(s):
            if s == "meow":
                self.bus.publish("grr")

        self.bus.register(doer2)
        session = {}
        self.bus.publish("meow")
        assert session == dict(meow=True, grr=True)
Example #4
0
class TestContextVars(unittest.TestCase):
    def setUp(self):
        self.bus = VoomBus(raise_errors=True)
        self.context = 0
        self.context2 = 0

    def do1(self, msg):
        self.msg = msg
        self.context += self.bus.session['c']
        with self.bus.using(dict(c=self.context + 1)):
            with self.bus.using(dict(c=self.context + 2)):
                self.bus.publish("hello")
            self.bus.publish("hello")

    def do2(self, msg):
        self.msg2 = msg
        self.context2 += self.bus.session['c']

    def test_vars_should_add_up(self):
        msg = 1
        self.bus.subscribe(int, self.do1)
        self.bus.subscribe(str, self.do2)
        with self.bus.using(dict(c=100)):
            self.bus.publish(msg)
        assert self.context == 100
        assert self.context2 == 101 + 102

    def test_vars_should_add_up_twice(self):
        msg = 1
        self.bus.subscribe(int, self.do1)
        self.bus.subscribe(str, self.do2)
        with self.bus.using(dict(c=100)):
            self.bus.publish(msg)
            self.bus.publish(msg)
        self.assertEquals(200, self.context)
        self.assertEquals(606, self.context2)
Example #5
0
class TestBusReply(unittest.TestCase):
    def setUp(self):
        self.bus = VoomBus()
        self.forward = None

    def test_errors(self):
        with patch('voom.bus.VoomBus.session', {}):
            nose.tools.assert_raises(InvalidAddressError, self.bus.reply,
                                     None)  #@UndefinedVariable

        with patch('voom.bus.VoomBus.session',
                   {SessionKeys.REPLY_TO: "badaddr"}):
            assert self.bus.session == {
                SessionKeys.REPLY_TO: "badaddr"
            }, self.bus.session
            nose.tools.assert_raises(InvalidStateError, self.bus.reply,
                                     None)  #@UndefinedVariable

    def test_reply_1(self):
        @receiver(str)
        def what_is_it(_):
            self.bus.reply('ponies')

        @receiver(MessageForwarded)
        def forward(msg):
            self.forward = msg

        self.bus.register(what_is_it)
        self.bus.register(forward)

        with self.bus.using(
            {SessionKeys.REPLY_TO: CurrentThreadChannel.ADDRESS}):
            self.bus.publish("meow")
        assert self.bus.thread_channel.pop_all() == ['ponies']
        assert self.forward
        assert self.forward.message == "ponies", self.forward
        assert self.forward.address == CurrentThreadChannel.ADDRESS

    def test_reply_2(self):
        @receiver(str)
        def what_is_it(_):
            self.bus.reply('ponies')

        self.bus.register(what_is_it)
        self.bus.raise_errors = True

        nose.tools.assert_raises(InvalidAddressError, self.bus.publish,
                                 "my little")
Example #6
0
class TestBusReply(unittest.TestCase):
    def setUp(self):
        self.bus = VoomBus()
        self.forward = None

    def test_errors(self):
        with patch('voom.bus.VoomBus.session', {}):
            nose.tools.assert_raises(InvalidAddressError, self.bus.reply, None) #@UndefinedVariable

        with patch('voom.bus.VoomBus.session', {SessionKeys.REPLY_TO: "badaddr"}):
            assert self.bus.session == {SessionKeys.REPLY_TO: "badaddr"}, self.bus.session
            nose.tools.assert_raises(InvalidStateError, self.bus.reply, None) #@UndefinedVariable

    def test_reply_1(self):
        @receiver(str)
        def what_is_it(_):
            self.bus.reply('ponies')

        @receiver(MessageForwarded)
        def forward(msg):
            self.forward = msg

        self.bus.register(what_is_it)
        self.bus.register(forward)

        with self.bus.using({SessionKeys.REPLY_TO: CurrentThreadChannel.ADDRESS}):
            self.bus.publish("meow")
        assert self.bus.thread_channel.pop_all() == ['ponies']
        assert self.forward
        assert self.forward.message == "ponies", self.forward
        assert self.forward.address == CurrentThreadChannel.ADDRESS

    def test_reply_2(self):
        @receiver(str)
        def what_is_it(_):
            self.bus.reply('ponies')

        self.bus.register(what_is_it)
        self.bus.raise_errors = True

        nose.tools.assert_raises(InvalidAddressError, self.bus.publish, "my little")