Пример #1
0
 def test_subscription_filter(self):
     service = PubSub('test_subscription_filter')
     sub1 = Subscriber('sub1')
     sub2 = Subscriber('sub2')
     service.subscribe(sub1, sub1.key, 'topic1', sub1.cb1)
     service.subscribe(sub1, sub1.key, 'topic1', sub1.cb2)
     service.subscribe(sub1, sub1.key, 'topic2', sub1.cb1)
     service.subscribe(sub1, sub1.key, 'topic2', sub1.cb2)
     service.subscribe(sub2, sub2.key, 'topic1', sub2.cb1)
     service.subscribe(sub2, sub2.key, 'topic1', sub2.cb2)
     service.subscribe(sub2, sub2.key, 'topic2', sub2.cb1)
     service.subscribe(sub2, sub2.key, 'topic2', sub2.cb2)
     subscriptions = service.subscriptions(subscriber=sub2)
     self.assertEqual(len(subscriptions), 2)
     self.assertIn('topic1', subscriptions)
     self.assertNotIn((sub1, sub1.key, sub1.cb1), subscriptions['topic1'])
     self.assertNotIn((sub1, sub1.key, sub1.cb2), subscriptions['topic1'])
     self.assertIn((sub2, sub2.key, sub2.cb1), subscriptions['topic1'])
     self.assertIn((sub2, sub2.key, sub2.cb2), subscriptions['topic1'])
     self.assertIn('topic2', subscriptions)
     self.assertNotIn((sub1, sub1.key, sub1.cb1), subscriptions['topic2'])
     self.assertNotIn((sub1, sub1.key, sub1.cb2), subscriptions['topic2'])
     self.assertIn((sub2, sub2.key, sub2.cb1), subscriptions['topic2'])
     self.assertIn((sub2, sub2.key, sub2.cb2), subscriptions['topic2'])
     subscriptions = service.subscriptions(key=sub1.key)
     self.assertEqual(len(subscriptions), 2)
     self.assertIn('topic1', subscriptions)
     self.assertIn((sub1, sub1.key, sub1.cb1), subscriptions['topic1'])
     self.assertIn((sub1, sub1.key, sub1.cb2), subscriptions['topic1'])
     self.assertNotIn((sub2, sub2.key, sub2.cb1), subscriptions['topic1'])
     self.assertNotIn((sub2, sub2.key, sub2.cb2), subscriptions['topic1'])
     self.assertIn('topic2', subscriptions)
     self.assertIn((sub1, sub1.key, sub1.cb1), subscriptions['topic2'])
     self.assertIn((sub1, sub1.key, sub1.cb2), subscriptions['topic2'])
     self.assertNotIn((sub2, sub2.key, sub2.cb1), subscriptions['topic2'])
     self.assertNotIn((sub2, sub2.key, sub2.cb2), subscriptions['topic2'])
     subscriptions = service.subscriptions(topic='topic1')
     self.assertEqual(len(subscriptions), 1)
     self.assertIn('topic1', subscriptions)
     self.assertIn((sub1, sub1.key, sub1.cb1), subscriptions['topic1'])
     self.assertIn((sub1, sub1.key, sub1.cb2), subscriptions['topic1'])
     self.assertIn((sub2, sub2.key, sub2.cb1), subscriptions['topic1'])
     self.assertIn((sub2, sub2.key, sub2.cb2), subscriptions['topic1'])
     self.assertNotIn('topic2', subscriptions)
     subscriptions = service.subscriptions(callback=sub1.cb1)
     self.assertEqual(len(subscriptions), 2)
     self.assertIn('topic1', subscriptions)
     self.assertIn((sub1, sub1.key, sub1.cb1), subscriptions['topic1'])
     self.assertNotIn((sub1, sub1.key, sub1.cb2), subscriptions['topic1'])
     self.assertNotIn((sub2, sub2.key, sub2.cb1), subscriptions['topic1'])
     self.assertNotIn((sub2, sub2.key, sub2.cb2), subscriptions['topic1'])
     self.assertIn('topic2', subscriptions)
     self.assertIn((sub1, sub1.key, sub1.cb1), subscriptions['topic2'])
     self.assertNotIn((sub1, sub1.key, sub1.cb2), subscriptions['topic2'])
     self.assertNotIn((sub2, sub2.key, sub2.cb1), subscriptions['topic2'])
     self.assertNotIn((sub2, sub2.key, sub2.cb2), subscriptions['topic2'])
Пример #2
0
 def test_weak_subscriptions(self):
     service = PubSub('test_weak_subscriptions')
     sub = Subscriber('sub')
     weaksub = weakref.ref(sub)
     service.subscribe(sub, sub.key, 'topic', sub.cb1)
     subscriptions = service.subscriptions()
     self.assertEqual(len(subscriptions), 1)
     self.assertIn('topic', subscriptions)
     self.assertIn((sub, sub.key, sub.cb1), subscriptions['topic'])
     del subscriptions
     del sub
     gc.collect()
     self.assertEqual(weaksub(), None)
     subscriptions = service.subscriptions()
     self.assertEqual(len(subscriptions), 0)
Пример #3
0
 def test_subscription(self):
     service = PubSub('test_subscription')
     sub = Subscriber('sub')
     service.subscribe(sub, sub.key, 'topic', sub.cb1)
     subscriptions = service.subscriptions()
     self.assertIn('topic', subscriptions)
     self.assertIn((sub, sub.key, sub.cb1), subscriptions['topic'])
Пример #4
0
 def test_persistent_subscriptions(self):
     service = PubSub('test_pseristsent_subscriptions')
     sub = Subscriber('sub')
     service.subscribe(sub, sub.key, 'topic', sub.cb1)
     del service
     service = PubSub('test_pseristsent_subscriptions')
     subscriptions = service.subscriptions()
     self.assertIn('topic', subscriptions)
     self.assertIn((sub, sub.key, sub.cb1), subscriptions['topic'])
Пример #5
0
 def test_duplicate_subscription(self):
     service = PubSub('test_duplicate_subscription')
     sub = Subscriber('sub')
     local_dict = WeakValueDictionary()
     service.subscribe(sub, sub.key, 'topic', sub.cb1)
     service.subscribe(sub, sub.key, 'topic', sub.cb1)
     subscriptions = service.subscriptions()
     self.assertIn('topic', subscriptions)
     self.assertEqual(len(subscriptions['topic']), 1)
     self.assertIn((sub, sub.key, sub.cb1), subscriptions['topic'])
Пример #6
0
 def test_mutliple_subscriptions(self):
     service = PubSub('test_multiple_subscription')
     sub1 = Subscriber('sub1')
     sub2 = Subscriber('sub2')
     service.subscribe(sub1, sub1.key, 'topic1', sub1.cb1)
     service.subscribe(sub1, sub1.key, 'topic1', sub1.cb2)
     service.subscribe(sub1, sub1.key, 'topic2', sub1.cb1)
     service.subscribe(sub1, sub1.key, 'topic2', sub1.cb2)
     service.subscribe(sub2, sub2.key, 'topic1', sub2.cb1)
     service.subscribe(sub2, sub2.key, 'topic1', sub2.cb2)
     service.subscribe(sub2, sub2.key, 'topic2', sub2.cb1)
     service.subscribe(sub2, sub2.key, 'topic2', sub2.cb2)
     subscriptions = service.subscriptions()
     self.assertEqual(len(subscriptions), 2)
     self.assertIn('topic1', subscriptions)
     self.assertIn((sub1, sub1.key, sub1.cb1), subscriptions['topic1'])
     self.assertIn((sub1, sub1.key, sub1.cb2), subscriptions['topic1'])
     self.assertIn((sub2, sub2.key, sub2.cb1), subscriptions['topic1'])
     self.assertIn((sub2, sub2.key, sub2.cb2), subscriptions['topic1'])
     self.assertIn('topic2', subscriptions)
     self.assertIn((sub1, sub1.key, sub1.cb1), subscriptions['topic2'])
     self.assertIn((sub1, sub1.key, sub1.cb2), subscriptions['topic2'])
     self.assertIn((sub2, sub2.key, sub2.cb1), subscriptions['topic2'])
     self.assertIn((sub2, sub2.key, sub2.cb2), subscriptions['topic2'])
Пример #7
0
 def test_unsubscribe(self):
     service = PubSub('test_unsubscribe')
     sub1 = Subscriber('sub1')
     sub2 = Subscriber('sub2')
     service.subscribe(sub1, sub1.key, 'topic1', sub1.cb1)
     service.subscribe(sub1, sub1.key, 'topic1', sub1.cb2)
     service.subscribe(sub1, sub1.key, 'topic2', sub1.cb1)
     service.subscribe(sub1, sub1.key, 'topic2', sub1.cb2)
     service.subscribe(sub2, sub2.key, 'topic1', sub2.cb1)
     service.subscribe(sub2, sub2.key, 'topic1', sub2.cb2)
     service.subscribe(sub2, sub2.key, 'topic2', sub2.cb1)
     service.subscribe(sub2, sub2.key, 'topic2', sub2.cb2)
     subscriptions = service.subscriptions()
     self.assertEqual(len(subscriptions), 2)
     self.assertIn('topic1', subscriptions)
     self.assertIn((sub1, sub1.key, sub1.cb1), subscriptions['topic1'])
     self.assertIn((sub1, sub1.key, sub1.cb2), subscriptions['topic1'])
     self.assertIn((sub2, sub2.key, sub2.cb1), subscriptions['topic1'])
     self.assertIn((sub2, sub2.key, sub2.cb2), subscriptions['topic1'])
     self.assertIn('topic2', subscriptions)
     self.assertIn((sub1, sub1.key, sub1.cb1), subscriptions['topic2'])
     self.assertIn((sub1, sub1.key, sub1.cb2), subscriptions['topic2'])
     self.assertIn((sub2, sub2.key, sub2.cb1), subscriptions['topic2'])
     self.assertIn((sub2, sub2.key, sub2.cb2), subscriptions['topic2'])
     self.assertIn((sub2, sub2.key, sub2.cb2), subscriptions['topic1'])
     service.unsubscribe(sub2, sub2.key, 'topic2', sub2.cb2)
     subscriptions = service.subscriptions()
     self.assertEqual(len(subscriptions), 2)
     self.assertIn('topic1', subscriptions)
     self.assertIn((sub1, sub1.key, sub1.cb1), subscriptions['topic1'])
     self.assertIn((sub1, sub1.key, sub1.cb2), subscriptions['topic1'])
     self.assertIn((sub2, sub2.key, sub2.cb1), subscriptions['topic1'])
     self.assertIn((sub2, sub2.key, sub2.cb2), subscriptions['topic1'])
     self.assertIn('topic2', subscriptions)
     self.assertIn((sub1, sub1.key, sub1.cb1), subscriptions['topic2'])
     self.assertIn((sub1, sub1.key, sub1.cb2), subscriptions['topic2'])
     self.assertIn((sub2, sub2.key, sub2.cb1), subscriptions['topic2'])
     self.assertNotIn((sub2, sub2.key, sub2.cb2), subscriptions['topic2'])
     service.unsubscribe(sub1, sub1.key, callback=sub1.cb2)
     subscriptions = service.subscriptions()
     self.assertEqual(len(subscriptions), 2)
     self.assertIn('topic1', subscriptions)
     self.assertIn((sub1, sub1.key, sub1.cb1), subscriptions['topic1'])
     self.assertNotIn((sub1, sub1.key, sub1.cb2), subscriptions['topic1'])
     self.assertIn((sub2, sub2.key, sub2.cb1), subscriptions['topic1'])
     self.assertIn((sub2, sub2.key, sub2.cb2), subscriptions['topic1'])
     self.assertIn('topic2', subscriptions)
     self.assertIn((sub1, sub1.key, sub1.cb1), subscriptions['topic2'])
     self.assertNotIn((sub1, sub1.key, sub1.cb2), subscriptions['topic2'])
     self.assertIn((sub2, sub2.key, sub2.cb1), subscriptions['topic2'])
     self.assertNotIn((sub2, sub2.key, sub2.cb2), subscriptions['topic2'])
     service.unsubscribe(callback=sub1.cb1)
     subscriptions = service.subscriptions()
     self.assertEqual(len(subscriptions), 2)
     self.assertIn('topic1', subscriptions)
     self.assertNotIn((sub1, sub1.key, sub1.cb1), subscriptions['topic1'])
     self.assertNotIn((sub1, sub1.key, sub1.cb2), subscriptions['topic1'])
     self.assertIn((sub2, sub2.key, sub2.cb1), subscriptions['topic1'])
     self.assertIn((sub2, sub2.key, sub2.cb2), subscriptions['topic1'])
     self.assertIn('topic2', subscriptions)
     self.assertNotIn((sub1, sub1.key, sub1.cb1), subscriptions['topic2'])
     self.assertNotIn((sub1, sub1.key, sub1.cb2), subscriptions['topic2'])
     self.assertIn((sub2, sub2.key, sub2.cb1), subscriptions['topic2'])
     self.assertNotIn((sub2, sub2.key, sub2.cb2), subscriptions['topic2'])
     service.unsubscribe(callback=sub2.cb1)
     subscriptions = service.subscriptions()
     self.assertEqual(len(subscriptions), 1)
     self.assertIn('topic1', subscriptions)
     self.assertNotIn((sub1, sub1.key, sub1.cb1), subscriptions['topic1'])
     self.assertNotIn((sub1, sub1.key, sub1.cb2), subscriptions['topic1'])
     self.assertNotIn((sub2, sub2.key, sub2.cb1), subscriptions['topic1'])
     self.assertIn((sub2, sub2.key, sub2.cb2), subscriptions['topic1'])
     self.assertNotIn('topic2', subscriptions)
     service.unsubscribe()
     subscriptions = service.subscriptions()
     self.assertEqual(len(subscriptions), 0)