Esempio n. 1
0
 def test_no_concurrent(self):
     bus = VoomBus()
     bus.loader = functools.partial(self.load, 0)
     self.assertEqual(self.loaded, None)
     bus.publish(0)
     self.assertEqual(self.loaded, 1)
     bus.publish(0)
     self.assertEqual(self.loaded, 1)
Esempio n. 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)
Esempio n. 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)
Esempio n. 4
0
    def test_concurrent(self):
        bus = VoomBus()
        bus.loader = functools.partial(self.load, 0.1)
        self.assertEqual(self.loaded, None)

        def spawn():
            t = threading.Thread(target=bus.publish, args=(0,))
            t.start()

        spawn()
        spawn()
        time.sleep(.2)
        self.assertEqual(self.loaded, 1)
        bus.publish(0)
        self.assertEqual(self.loaded, 1)
Esempio n. 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")
Esempio n. 6
0
class TestDefer(unittest.TestCase):
    def setUp(self):
        self.bus = VoomBus()

    def test1(self):
        @receiver(str)
        def h1(msg):
            self.msgs.append(msg)
            self.bus.defer(1)

        @receiver(int, str)
        def h2(msg):
            self.msgs.append(msg)

        self.msgs = []
        self.bus.register(h1)
        self.bus.register(h2)
        self.bus.publish("s")
        assert self.msgs == ['s', 's', 1]
Esempio n. 7
0
class TestDefer(unittest.TestCase):
    def setUp(self):
        self.bus = VoomBus()

    def test1(self):
        @receiver(str)
        def h1(msg):
            self.msgs.append(msg)
            self.bus.defer(1)

        @receiver(int, str)
        def h2(msg):
            self.msgs.append(msg)

        self.msgs = []
        self.bus.register(h1)
        self.bus.register(h2)
        self.bus.publish("s")
        assert self.msgs == ['s', 's', 1]
Esempio n. 8
0
class TestHeaders(unittest.TestCase):
    def setUp(self):
        self.bus = VoomBus()

    def test_arbitrary_headers(self):
        uni = u'\u014b'
        r = ChainedDict(**{'foo': 1, uni: 2})
        assert r['foo'] == 1
        assert r[uni] == 2
        assert uni in r
        assert r.get('bar') == None
        assert 'bar' not in r

    def test_unicode(self):
        uni = u'\u014b'
        r = ChainedDict(**{'foo': 1, uni: 2})
        unicode(r)
        repr(r)
        print r

    def test_abort(self):
        self.bus.resetConfig()
        self.msg = None

        @receiver(str)
        def aborter(msg):
            if msg == "cancel":
                raise AbortProcessing()

        @receiver(str)
        def not_aborter(msg):
            self.msg = msg

        self.bus.raise_errors = True
        self.bus.register(aborter)
        self.bus.register(not_aborter, priority=BusPriority.LOW_PRIORITY)

        self.bus.publish("foo")
        assert self.msg == "foo"
        self.msg = None
        self.bus.publish("cancel")
        assert self.msg == None
Esempio n. 9
0
class TestHeaders(unittest.TestCase):
    def setUp(self):
        self.bus = VoomBus()

    def test_arbitrary_headers(self):
        uni = u'\u014b'
        r = Session(**{'foo': 1, uni: 2})
        assert r['foo'] == 1
        assert r[uni] == 2
        assert uni in r
        assert r.get('bar') == None
        assert 'bar' not in r

    def test_unicode(self):
        uni = u'\u014b'
        r = Session(**{'foo': 1, uni: 2})
        unicode(r)
        repr(r)
        print r

    def test_abort(self):
        self.bus.resetConfig()
        self.msg = None

        @receiver(str)
        def aborter(msg):
            if msg == "cancel":
                raise AbortProcessing()

        @receiver(str)
        def not_aborter(msg):
            self.msg = msg

        self.bus.raise_errors = True
        self.bus.register(aborter)
        self.bus.register(not_aborter, priority=BusPriority.LOW_PRIORITY)

        self.bus.publish("foo")
        assert self.msg == "foo"
        self.msg = None
        self.bus.publish("cancel")
        assert self.msg == None
Esempio n. 10
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")
Esempio n. 11
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
Esempio n. 12
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)
Esempio n. 13
0
import sys, os
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..")) # make this file executable

### BEGIN
from voom.bus import VoomBus
from voom.priorities import BusPriority

bus = VoomBus()
bus.subscribe(int, lambda msg: sys.stdout.write("I see %d\n" % msg))
bus.subscribe(int, lambda msg: sys.stdout.write("squared %d\n" % msg**2), priority=BusPriority.LOW_PRIORITY)
bus.subscribe(str, lambda msg: bus.publish(int(msg[::-1])))
bus.publish(101)
bus.publish("102")
Esempio n. 14
0
@receiver(VoomBus.ALL)
def log_it(event):
    print "An event happened, yo:", event

#
# configure the bus
#
bus = VoomBus()
bus.register(incrementUserActivity)
bus.register(incrementGlobalActivity)
bus.register(appendToStream)
bus.register(log_it)

# publish some messages
bus.publish(UserDidSomething("bob", "loggedin", time.time()))
bus.publish(UserDidSomething("bob", "loggedin", time.time()))
bus.publish(UserDidSomethingElse("bob", "viewed_thing", time.time()))

assert len(activity_db["bob"]) == 3 # we see the three activities here
assert user_stats_db["bob"] == {'loggedin': 2} # but counter logic executed for only 2 of them

# publish more messages
bus.publish(UserDidSomething("alice", "loggedin", time.time()))
bus.publish(UserDidSomething("alice", "unsubscribed", time.time()))
bus.publish(UserDidSomethingElse("alice", "viewed_thing", time.time()))

assert user_stats_db["alice"] == {'loggedin': 1, 'unsubscribed': 1}

# check the global state; we only should have counted the countable events
assert stats_db == {'loggedin': 3, 'unsubscribed': 1}