def test_send_sms_noconn(self): """ A 'connection refused' error should be retried. """ self.worker.failure_published = FailureCounter(1) msg = self.mkmsg_out() yield self.worker._process_message(msg) yield self.worker.failure_published.deferred self.assert_dispatched_count(0, 'vas2nets.event') self.assert_dispatched_count(1, 'vas2nets.failures') [twisted_failure] = self.flushLoggedErrors(TemporaryFailure) failure = twisted_failure.value self.assertTrue("connection refused" in str(failure)) [fmsg] = self.get_dispatched('vas2nets.failures') fmsg = from_json(fmsg.body) self.assertEqual(msg.payload, fmsg['message']) self.assertEqual(FailureMessage.FC_TEMPORARY, fmsg['failure_code']) self.assertTrue(fmsg['reason'].strip().endswith("connection refused")) yield self.broker.kick_delivery() [key] = self.fail_worker.get_failure_keys() self.assertEqual(set([key]), self.get_retry_keys())
def test_send_sms_fail(self): """ A 'No SmsId Header' error should not be retried. """ self.worker.failure_published = FailureCounter(1) yield self.mk_resource_worker("Result_code: 04, Internal system error " "occurred while processing message", {}) yield self.worker._process_message(self.mkmsg_out()) yield self.worker.failure_published.deferred yield self.broker.kick_delivery() self.assert_dispatched_count(0, 'vas2nets.event') self.assert_dispatched_count(1, 'vas2nets.failures') [twisted_failure] = self.flushLoggedErrors(Vas2NetsTransportError) failure = twisted_failure.value self.assertTrue("No SmsId Header" in str(failure)) [fmsg] = self.get_dispatched('vas2nets.failures') fmsg = from_json(fmsg.body) self.assertTrue( "Vas2NetsTransportError: No SmsId Header" in fmsg['reason']) yield self.broker.kick_delivery() [key] = self.fail_worker.get_failure_keys() self.assertEqual(set(), self.get_retry_keys())
def test_from_json_supports_vumi_dates(self): timestamp = datetime(2015, 1, 2, 12, 01, 02, microsecond=134002) data = { 'foo': '2015-01-02 12:01:02.134002', } self.assertEqual(from_json(json.dumps(data)), { 'foo': timestamp, })
def test_from_json(self): data = { 'foo': 1, 'baz': { 'a': 'b', } } self.assertEqual(from_json(json.dumps(data)), data)
def test_from_json(self): data = { 'foo': 1, 'baz': { 'a': 'b', } } self.assertEqual(from_json(json.dumps(data)), data)
def test_from_json_supports_vumi_dates(self): timestamp = datetime( 2015, 1, 2, 12, 01, 02, microsecond=134002) data = { 'foo': '2015-01-02 12:01:02.134002', } self.assertEqual(from_json(json.dumps(data)), { 'foo': timestamp, })
def test_send_sms_noconn(self): yield self.worker.startWorker() msg = self.mkmsg_out() deferred = self.worker.handle_outbound_message(msg) yield deferred [fmsg] = self.get_dispatched('sms.outbound.vas2nets.failures') fmsg = from_json(fmsg.body) self.assertEqual(msg, fmsg['message']) self.assertEqual("connection refused", fmsg['reason'])
def test_send_sms_not_OK(self): mocked_message = "Page not found." yield self.make_resource_worker(None, mocked_message, http.NOT_FOUND) yield self.worker.startWorker() msg = self.mkmsg_out() deferred = self.worker.handle_outbound_message(msg) yield deferred [fmsg] = self.get_dispatched('sms.outbound.vas2nets.failures') fmsg = from_json(fmsg.body) self.assertEqual(msg, fmsg['message']) self.assertTrue(fmsg['reason'].startswith("server error"))
def test_send_sms_fail(self): mocked_message_id = False mocked_message = "Result_code: 04, Internal system error occurred " \ "while processing message" yield self.make_resource_worker(mocked_message_id, mocked_message) yield self.worker.startWorker() msg = self.mkmsg_out() deferred = self.worker.handle_outbound_message(msg) yield deferred [fmsg] = self.get_dispatched('sms.outbound.vas2nets.failures') fmsg = from_json(fmsg.body) self.assertEqual(msg.payload, fmsg['message']) self.assertTrue( "Vas2NetsTransportError: No SmsId Header" in fmsg['reason'])
def test_send_sms_success(self): mocked_message_id = str(uuid4()) mocked_message = "Result_code: 00, Message OK" # open an HTTP resource that mocks the Vas2Nets response for the # duration of this test yield self.make_resource_worker(mocked_message_id, mocked_message) yield self.worker.startWorker() yield self.worker.handle_outbound_message(self.mkmsg_out()) [smsg] = self.get_dispatched('sms.ack.vas2nets') self.assertEqual(TransportSMSAck( message_id='1', transport_message_id=mocked_message_id, timestamp=UTCNearNow(), transport='vas2nets', ), from_json(smsg.body))
def test_send_sms_fail(self): """ A 'No SmsId Header' error should not be retried. """ self.worker.failure_published = FailureCounter(1) self.worker.SUPPRESS_EXCEPTIONS = True yield self.mk_resource_worker("Result_code: 04, Internal system error " "occurred while processing message", {}) yield self.worker.handle_outbound_message(self.mkmsg_out()) yield self.worker.failure_published.deferred self.assert_dispatched_count(0, "sms.ack.vas2nets") self.assert_dispatched_count(1, "sms.outbound.vas2nets.failures") [fmsg] = self.get_dispatched("sms.outbound.vas2nets.failures") fmsg = from_json(fmsg.body) self.assertTrue("Vas2NetsTransportError: No SmsId Header" in fmsg["reason"]) yield self.broker.kick_delivery() [key] = self.fail_worker.get_failure_keys() self.assertEqual(set(), self.get_retry_keys())
def test_receive_sms(self): resource = ReceiveSMSResource(self.config, self.publisher) request = self.create_request({ 'messageid': ['1'], 'text': ['hello world'], }) d = request.notifyFinish() response = resource.render(request) self.assertEquals(response, NOT_DONE_YET) yield d self.assertEquals('', ''.join(request.written)) self.assertEquals(request.outgoingHeaders['content-type'], 'text/plain') self.assertEquals(request.responseCode, http.OK) msg = self.mkmsg_in() [smsg] = self.get_dispatched('sms.inbound.vas2nets.9292') self.assertEquals(msg.payload, from_json(smsg.body))
def test_inbound_message(self): transport = yield self.mk_transport() message = domish.Element((None, "message")) message['to'] = self.jid.userhost() message['from'] = '*****@*****.**' message.addUniqueId() message.addElement((None, 'body'), content='hello world') protocol = transport.xmpp_protocol protocol.onMessage(message) dispatched_messages = self._amqp.get_dispatched('vumi', 'test_xmpp.inbound') self.assertEqual(1, len(dispatched_messages)) msg = from_json(dispatched_messages[0].body) self.assertEqual(msg['to_addr'], self.jid.userhost()) self.assertEqual(msg['from_addr'], '*****@*****.**') self.assertEqual(msg['transport_name'], 'test_xmpp') self.assertEqual(msg['message_id'], message['id']) self.assertEqual(msg['content'], 'hello world')
def test_send_sms_noconn(self): """ A 'connection refused' error should be retried. """ self.worker.failure_published = FailureCounter(1) self.worker.SUPPRESS_EXCEPTIONS = True msg = self.mkmsg_out() yield self.worker.handle_outbound_message(msg) yield self.worker.failure_published.deferred self.assert_dispatched_count(0, "sms.ack.vas2nets") self.assert_dispatched_count(1, "sms.outbound.vas2nets.failures") [fmsg] = self.get_dispatched("sms.outbound.vas2nets.failures") fmsg = from_json(fmsg.body) self.assertEqual(msg, fmsg["message"]) self.assertEqual("connection refused", fmsg["reason"]) yield self.broker.kick_delivery() [key] = self.fail_worker.get_failure_keys() self.assertEqual(set([key]), self.get_retry_keys())
def test_inbound_message(self): transport = yield self.mk_transport() message = domish.Element((None, "message")) message['to'] = self.jid.userhost() message['from'] = '*****@*****.**' message.addUniqueId() message.addElement((None, 'body'), content='hello world') protocol = transport.xmpp_protocol protocol.onMessage(message) dispatched_messages = self._amqp.get_dispatched( 'vumi', 'test_xmpp.inbound') self.assertEqual(1, len(dispatched_messages)) msg = from_json(dispatched_messages[0].body) self.assertEqual(msg['to_addr'], self.jid.userhost()) self.assertEqual(msg['from_addr'], '*****@*****.**') self.assertEqual(msg['transport_name'], 'test_xmpp') self.assertNotEqual(msg['message_id'], message['id']) self.assertEqual(msg['transport_metadata']['xmpp_id'], message['id']) self.assertEqual(msg['content'], 'hello world')
def test_delivery_receipt_delivered(self): resource = DeliveryReceiptResource(self.config, self.publisher) request = self.create_request({ 'smsid': ['1'], 'messageid': ['internal id'], 'sender': ['+41791234567'], 'status': ['2'], 'text': ['Message delivered to MSISDN.'], }) d = request.notifyFinish() response = resource.render(request) self.assertEquals(response, NOT_DONE_YET) yield d self.assertEquals('', ''.join(request.written)) self.assertEquals(request.outgoingHeaders['content-type'], 'text/plain') self.assertEquals(request.responseCode, http.OK) msg = self.make_delivery_message( 'delivered', '2', 'Message delivered to MSISDN.') [smsg] = self.get_dispatched('sms.receipt.vas2nets') self.assertEquals(from_json(smsg.body), msg)
def _get_common(self, table, row_id, family): """Retrieve and decode a set of JSON-encoded values.""" data = self._get_row(table, row_id, family) pydata = dict( (k.decode('utf-8'), from_json(v)) for k, v in data.items()) return pydata
def get_response_msgs(self, response): payloads = from_json(response.delivered_body) return [ TransportUserMessage(_process_fields=False, **to_kwargs(payload)) for payload in payloads ]
def get_response_msgs(self, response): payloads = from_json(response.delivered_body) return [TransportUserMessage( _process_fields=False, **to_kwargs(payload)) for payload in payloads]
def _get_common(self, table, row_id, family): """Retrieve and decode a set of JSON-encoded values.""" data = self._get_row(table, row_id, family) pydata = dict((k.decode('utf-8'), from_json(v)) for k, v in data.items()) return pydata