def test_unregister(self): chid = str(uuid.uuid4()) m = get_rotating_message_table() message = Message(m, SinkMetrics()) message.register_channel(self.uaid, chid) # Verify its in the db rows = m.query_2(uaid__eq=self.uaid, chidmessageid__eq=" ") results = list(rows) assert (len(results) == 1) eq_(results[0]["chids"], set([chid])) message.unregister_channel(self.uaid, chid) # Verify its not in the db rows = m.query_2(uaid__eq=self.uaid, chidmessageid__eq=" ") results = list(rows) assert (len(results) == 1) eq_(results[0]["chids"], set([])) # Test for the very unlikely case that there's no 'chid' m.connection.update_item = Mock() m.connection.update_item.return_value = { 'Attributes': { 'uaid': { 'S': self.uaid } }, 'ConsumedCapacityUnits': 0.5 } r = message.unregister_channel(self.uaid, dummy_chid) eq_(r, False)
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_unregister(self): chid = str(uuid.uuid4()) m = get_rotating_message_table() message = Message(m, SinkMetrics()) message.register_channel(self.uaid, chid) # Verify its in the db rows = m.query_2(uaid__eq=self.uaid, chidmessageid__eq=" ") results = list(rows) assert len(results) == 1 eq_(results[0]["chids"], set([chid])) message.unregister_channel(self.uaid, chid) # Verify its not in the db rows = m.query_2(uaid__eq=self.uaid, chidmessageid__eq=" ") results = list(rows) assert len(results) == 1 eq_(results[0]["chids"], set([])) # Test for the very unlikely case that there's no 'chid' m.connection.update_item = Mock() m.connection.update_item.return_value = {"Attributes": {"uaid": {"S": self.uaid}}, "ConsumedCapacityUnits": 0.5} r = message.unregister_channel(self.uaid, "test") eq_(r, False)
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_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_unregister(self): chid = str(uuid.uuid4()) m = get_rotating_message_tablename(boto_resource=self.resource) message = Message(m, boto_resource=self.resource) message.register_channel(self.uaid, chid) # Verify its in the db lm = self.resource.Table(m) # Verify it's in the db response = lm.query( KeyConditions={ 'uaid': { 'AttributeValueList': [self.uaid], 'ComparisonOperator': 'EQ' }, 'chidmessageid': { 'AttributeValueList': [" "], 'ComparisonOperator': 'EQ' }, }, ConsistentRead=True, ) results = list(response.get('Items')) assert len(results) == 1 assert results[0]["chids"] == {chid} message.unregister_channel(self.uaid, chid) # Verify its not in the db response = lm.query( KeyConditions={ 'uaid': { 'AttributeValueList': [self.uaid], 'ComparisonOperator': 'EQ' }, 'chidmessageid': { 'AttributeValueList': [" "], 'ComparisonOperator': 'EQ' }, }, ConsistentRead=True, ) results = list(response.get('Items')) assert len(results) == 1 assert results[0].get("chids") is None # Test for the very unlikely case that there's no 'chid' mtable = Mock() mtable.update_item = Mock(return_value={ 'Attributes': { 'uaid': self.uaid }, 'ResponseMetaData': {} }) message.table = mtable r = message.unregister_channel(self.uaid, dummy_chid) assert r is False
def test_register(self): chid = str(uuid.uuid4()) m = get_rotating_message_table() message = Message(m, SinkMetrics()) message.register_channel(self.uaid, chid) # Verify its in the db rows = m.query_2(uaid__eq=self.uaid, chidmessageid__eq=" ") results = list(rows) assert (len(results) == 1)
def test_register(self): chid = str(uuid.uuid4()) m = get_rotating_message_table() message = Message(m, SinkMetrics()) message.register_channel(self.uaid, chid) # Verify its in the db rows = m.query_2(uaid__eq=self.uaid, chidmessageid__eq=" ") results = list(rows) assert len(results) == 1
def test_save_channels(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) exists, chans = message.all_channels(self.uaid) new_uaid = uuid.uuid4().hex message.save_channels(new_uaid, chans) _, new_chans = message.all_channels(new_uaid) eq_(chans, new_chans)
def test_save_channels(self): chid = str(uuid.uuid4()) chid2 = str(uuid.uuid4()) 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) exists, chans = message.all_channels(self.uaid) new_uaid = uuid.uuid4().hex message.save_channels(new_uaid, chans) _, new_chans = message.all_channels(new_uaid) assert chans == new_chans
def test_save_channels(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) exists, chans = message.all_channels(self.uaid) new_uaid = uuid.uuid4().hex message.save_channels(new_uaid, chans) _, new_chans = message.all_channels(new_uaid) eq_(chans, new_chans)
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) message.store_message(make_webpush_notification(self.uaid, chid)) message.store_message(make_webpush_notification(self.uaid, chid)) message.store_message(make_webpush_notification(self.uaid, chid)) _, all_messages = message.fetch_timestamp_messages( uuid.UUID(self.uaid), " ") eq_(len(all_messages), 3)
def test_all_channels(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) _, chans = message.all_channels(self.uaid) assert chid in chans assert chid2 in chans message.unregister_channel(self.uaid, chid2) _, chans = message.all_channels(self.uaid) assert chid2 not in chans assert chid in chans
def test_all_channels(self): chid = str(uuid.uuid4()) chid2 = str(uuid.uuid4()) 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) _, chans = message.all_channels(self.uaid) assert chid in chans assert chid2 in chans message.unregister_channel(self.uaid, chid2) _, chans = message.all_channels(self.uaid) assert chid2 not in chans assert chid in chans
def test_all_channels(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) _, chans = message.all_channels(self.uaid) assert (chid in chans) assert (chid2 in chans) message.unregister_channel(self.uaid, chid2) _, chans = message.all_channels(self.uaid) assert (chid2 not in chans) assert (chid in chans)
def test_message_storage(self): chid = str(uuid.uuid4()) chid2 = str(uuid.uuid4()) 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) # Ensure that sort keys are fetched from DB in order. notifs = [make_webpush_notification(self.uaid, chid) for x in range(3)] keys = [notif.sort_key for notif in notifs] for msg in notifs: message.store_message(msg) _, all_messages = message.fetch_timestamp_messages( uuid.UUID(self.uaid), " ") assert len(all_messages) == len(notifs) assert keys == [msg.sort_key for msg in all_messages]
def test_unregister(self): chid = str(uuid.uuid4()) m = get_message_table() message = Message(m, SinkMetrics()) message.register_channel(self.uaid, chid) # Verify its in the db rows = m.query_2(uaid__eq=self.uaid, chidmessageid__eq=" ") results = list(rows) assert (len(results) == 1) eq_(results[0]["chids"], set([chid])) message.unregister_channel(self.uaid, chid) # Verify its not in the db rows = m.query_2(uaid__eq=self.uaid, chidmessageid__eq=" ") results = list(rows) assert (len(results) == 1) eq_(results[0]["chids"], set([]))
def test_unregister(self): chid = str(uuid.uuid4()) m = get_message_table() message = Message(m, SinkMetrics()) message.register_channel(self.uaid, chid) # Verify its in the db rows = m.query_2(uaid__eq=self.uaid, chidmessageid__eq=" ") results = list(rows) assert(len(results) == 1) eq_(results[0]["chids"], set([chid])) message.unregister_channel(self.uaid, chid) # Verify its not in the db rows = m.query_2(uaid__eq=self.uaid, chidmessageid__eq=" ") results = list(rows) assert(len(results) == 1) eq_(results[0]["chids"], set([]))
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
def test_register(self): chid = str(uuid.uuid4()) m = get_rotating_message_table() message = Message(m, SinkMetrics()) message.register_channel(self.uaid, chid) # Verify it's in the db response = m.query( KeyConditions={ 'uaid': { 'AttributeValueList': [self.uaid], 'ComparisonOperator': 'EQ' }, 'chidmessageid': { 'AttributeValueList': ['02'], 'ComparisonOperator': 'LT' } }, ConsistentRead=True, ) assert len(response.get('Items'))