def test_message_storage(self): chid = str(uuid.uuid4()) chid2 = str(uuid.uuid4()) m = get_rotating_message_table() message = Message(m, SinkMetrics()) message.register_channel(self.uaid, chid) message.register_channel(self.uaid, chid2) data1 = str(uuid.uuid4()) data2 = str(uuid.uuid4()) ttl = int(time.time()) + 100 time1, time2, time3 = self._nstime(), self._nstime(), self._nstime() + 1 message.store_message(self.uaid, chid, time1, ttl, data1, {}) message.store_message(self.uaid, chid2, time2, ttl, data2, {}) message.store_message(self.uaid, chid2, time3, ttl, data1, {}) all_messages = list(message.fetch_messages(self.uaid)) eq_(len(all_messages), 3) message.delete_messages_for_channel(self.uaid, chid2) all_messages = list(message.fetch_messages(self.uaid)) eq_(len(all_messages), 1) message.delete_message(self.uaid, chid, time1) all_messages = list(message.fetch_messages(self.uaid)) eq_(len(all_messages), 0)
def test_message_delete_pagination(self): def make_messages(channel_id, count): m = [] t = self._nstime() ttl = int(time.time()) + 200 for i in range(count): m.append((self.uaid, channel_id, str(uuid.uuid4()), ttl, {}, t + i)) return m chid = str(uuid.uuid4()) m = get_rotating_message_table() message = Message(m, SinkMetrics()) message.register_channel(self.uaid, chid) # Shove 80 messages in for message_args in make_messages(chid, 80): message.store_message(*message_args) # Verify we can see them all all_messages = list(message.fetch_messages(self.uaid, limit=100)) eq_(len(all_messages), 80) # Delete them all message.delete_messages_for_channel(self.uaid, chid) # Verify they're gone all_messages = list(message.fetch_messages(self.uaid, limit=100)) eq_(len(all_messages), 0)
def test_message_delete_pagination(self): def make_messages(channel_id, count): m = [] t = self._nstime() ttl = int(time.time()) + 200 for i in range(count): m.append( (self.uaid, channel_id, str(uuid.uuid4()), ttl, {}, t + i)) return m chid = str(uuid.uuid4()) m = get_rotating_message_table() message = Message(m, SinkMetrics()) message.register_channel(self.uaid, chid) # Shove 80 messages in for message_args in make_messages(chid, 80): message.store_message(*message_args) # Verify we can see them all all_messages = list(message.fetch_messages(self.uaid, limit=100)) eq_(len(all_messages), 80) # Delete them all message.delete_messages_for_channel(self.uaid, chid) # Verify they're gone all_messages = list(message.fetch_messages(self.uaid, limit=100)) eq_(len(all_messages), 0)
def test_message_storage(self): chid = str(uuid.uuid4()) chid2 = str(uuid.uuid4()) m = get_rotating_message_table() message = Message(m, SinkMetrics()) message.register_channel(self.uaid, chid) message.register_channel(self.uaid, chid2) data1 = str(uuid.uuid4()) data2 = str(uuid.uuid4()) ttl = int(time.time()) + 100 time1, time2, time3 = self._nstime(), self._nstime( ), self._nstime() + 1 message.store_message(self.uaid, chid, time1, ttl, data1, {}) message.store_message(self.uaid, chid2, time2, ttl, data2, {}) message.store_message(self.uaid, chid2, time3, ttl, data1, {}) all_messages = list(message.fetch_messages(self.uaid)) eq_(len(all_messages), 3) message.delete_messages_for_channel(self.uaid, chid2) all_messages = list(message.fetch_messages(self.uaid)) eq_(len(all_messages), 1) message.delete_message(self.uaid, chid, time1) all_messages = list(message.fetch_messages(self.uaid)) eq_(len(all_messages), 0)
def test_preflight_check(self): router = Router(get_router_table(), SinkMetrics()) message = Message(get_rotating_message_table(), SinkMetrics()) pf_uaid = "deadbeef00000000deadbeef01010101" preflight_check(message, router, pf_uaid) # now check that the database reports no entries. _, notifs = message.fetch_messages(uuid.UUID(pf_uaid)) assert len(notifs) == 0 with pytest.raises(ItemNotFound): router.get_uaid(pf_uaid)
def test_update_message(self): chid = uuid.uuid4().hex m = get_rotating_message_table() message = Message(m, SinkMetrics()) data1 = str(uuid.uuid4()) data2 = str(uuid.uuid4()) time1 = self._nstime() time2 = self._nstime() + 100 ttl = self._nstime() + 1000 message.store_message(self.uaid, chid, time1, ttl, data1, {}) message.update_message(self.uaid, chid, time2, ttl, data2, {}) messages = list(message.fetch_messages(self.uaid)) eq_(data2, messages[0]["#dd"])
def test_preflight_check(self): global test_router message = Message( get_rotating_message_tablename(boto_resource=self.resource), boto_resource=self.resource) pf_uaid = "deadbeef00000000deadbeef01010101" preflight_check(message, test_router, pf_uaid) # now check that the database reports no entries. _, notifs = message.fetch_messages(uuid.UUID(pf_uaid)) assert len(notifs) == 0 with pytest.raises(ItemNotFound): self.router.get_uaid(pf_uaid)
def test_update_message(self): chid = uuid.uuid4().hex m = get_rotating_message_table() message = Message(m, SinkMetrics()) data1 = str(uuid.uuid4()) data2 = str(uuid.uuid4()) time1 = self._nstime() time2 = self._nstime() + 100 ttl = self._nstime() + 1000 message.store_message(self.uaid, chid, time1, ttl, data1, {}) message.update_message(self.uaid, chid, time2, ttl, data2, {}) messages = list(message.fetch_messages(self.uaid)) eq_(data2, messages[0]['#dd'])
def test_preflight_check_wait(self): router = Router(get_router_table(), SinkMetrics()) message = Message(get_rotating_message_table(), SinkMetrics()) values = ["PENDING", "ACTIVE"] message.table_status = Mock(side_effect=values) pf_uaid = "deadbeef00000000deadbeef01010101" preflight_check(message, router, pf_uaid) # now check that the database reports no entries. _, notifs = message.fetch_messages(uuid.UUID(pf_uaid)) assert len(notifs) == 0 with pytest.raises(ItemNotFound): router.get_uaid(pf_uaid)
def test_message_storage_overwrite(self): """Test that store_message can overwrite existing messages which can occur in some reconnect cases but shouldn't error""" chid = str(uuid.uuid4()) chid2 = str(uuid.uuid4()) notif1 = make_webpush_notification(self.uaid, chid) notif2 = make_webpush_notification(self.uaid, chid) notif3 = make_webpush_notification(self.uaid, chid2) notif2.message_id = notif1.message_id m = get_rotating_message_tablename(boto_resource=self.resource) message = Message(m, boto_resource=self.resource) message.register_channel(self.uaid, chid) message.register_channel(self.uaid, chid2) message.store_message(notif1) message.store_message(notif2) message.store_message(notif3) all_messages = list(message.fetch_messages(uuid.UUID(self.uaid))) assert len(all_messages) == 2