def test_consume_message(self): expected_datapoints = [ ("vumi.test.v1", 1234, 1.0), ("vumi.test.v2", 3456, 2.0), ] datapoints = [] consumer = metrics.MetricsConsumer(lambda *v: datapoints.append(v)) msg = metrics.MetricMessage() msg.extend(expected_datapoints) vumi_msg = Message.from_json(msg.to_json()) consumer.consume_message(vumi_msg) self.assertEqual(datapoints, expected_datapoints)
def test_consume(self): """The consume helper should direct all incoming messages matching the specified routing_key, queue_name & exchange to the given callback""" message = fake_amq_message({"key": "value"}) worker = get_stubbed_worker(Worker) # buffer to check messages consumed log = [Message.from_json(message.content.body)] # consume all messages on the given routing key and append # them to the log worker.consume('test.routing.key', lambda msg: log.append(msg)) # if all works well then the consume method should funnel the test # message straight to the callback, the callback will apend it to the # log and we can test it. worker._amqp_client.broker.basic_publish('vumi', 'test.routing.key', message.content) self.assertEquals(log, [Message(key="value")])
def _check_msg(self, broker, metric, values): msgs = broker.get_dispatched("vumi.metrics", "vumi.metrics") if values is None: self.assertEqual(msgs, []) return content = msgs[-1] name = metric.name self.assertEqual(content.properties, {"delivery mode": 2}) msg = Message.from_json(content.body) [datapoint] = msg.payload["datapoints"] self.assertEqual(datapoint[0], name) self.assertEqual(datapoint[1], list(metric.aggs)) # check datapoints within 2s of now -- the truncating of # time.time() to an int for timestamps can cause a 1s # difference by itself now = time.time() self.assertTrue( all(abs(p[0] - now) < 2.0 for p in datapoint[2]), "Not all datapoints near now (%f): %r" % (now, datapoint)) self.assertEqual([p[1] for p in datapoint[2]], values)
def _check_msg(self, broker, metric, values): msgs = broker.get_dispatched("vumi.metrics", "vumi.metrics") if values is None: self.assertEqual(msgs, []) return content = msgs[-1] name = metric.name self.assertEqual(content.properties, {"delivery mode": 2}) msg = Message.from_json(content.body) [datapoint] = msg.payload["datapoints"] self.assertEqual(datapoint[0], name) self.assertEqual(datapoint[1], list(metric.aggs)) # check datapoints within 2s of now -- the truncating of # time.time() to an int for timestamps can cause a 1s # difference by itself now = time.time() self.assertTrue(all(abs(p[0] - now) < 2.0 for p in datapoint[2]), "Not all datapoints near now (%f): %r" % (now, datapoint)) self.assertEqual([p[1] for p in datapoint[2]], values)
def get_messages(self, exchange, rkey): contents = self.get_dispatched(exchange, rkey) messages = [VumiMessage.from_json(content.body) for content in contents] return messages
def recv_datapoints(self, exchange, queue): """Retrieve datapoints from a broker.""" contents = self._broker.get_dispatched(exchange, queue) vumi_msgs = [Message.from_json(content.body) for content in contents] msgs = [MetricMessage.from_dict(vm.payload) for vm in vumi_msgs] return [msg.datapoints() for msg in msgs]
def r_get_message(self, message_id): json_string = yield self.r_get_message_json(message_id) if json_string: returnValue(Message.from_json(json_string)) else: returnValue(None)
def get_messages(self, exchange, rkey): contents = self.get_dispatched(exchange, rkey) messages = [ VumiMessage.from_json(content.body) for content in contents ] return messages
def r_get_message(self, message_id): json_string = self.r_get_message_json(message_id) if json_string: return Message.from_json(json_string) else: return None