Exemple #1
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)
Exemple #2
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)
Exemple #3
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)
Exemple #4
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)
Exemple #5
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)
Exemple #6
0
 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"])
Exemple #7
0
    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)
Exemple #8
0
 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'])
Exemple #9
0
    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)
Exemple #10
0
    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