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)
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)
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)
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")
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]
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
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
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")
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
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)
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")
@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}