예제 #1
0
    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())
예제 #2
0
    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())
예제 #3
0
 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,
     })
예제 #4
0
 def test_from_json(self):
     data = {
         'foo': 1,
         'baz': {
             'a': 'b',
         }
     }
     self.assertEqual(from_json(json.dumps(data)), data)
예제 #5
0
 def test_from_json(self):
     data = {
         'foo': 1,
         'baz': {
             'a': 'b',
         }
     }
     self.assertEqual(from_json(json.dumps(data)), data)
예제 #6
0
 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,
     })
예제 #7
0
    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'])
예제 #8
0
    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"))
예제 #9
0
    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'])
예제 #10
0
    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))
예제 #11
0
    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())
예제 #12
0
    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))
예제 #13
0
    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')
예제 #14
0
    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())
예제 #15
0
파일: test_xmpp.py 프로젝트: rcrichton/vumi
    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')
예제 #16
0
    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)
예제 #17
0
 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
예제 #18
0
 def get_response_msgs(self, response):
     payloads = from_json(response.delivered_body)
     return [
         TransportUserMessage(_process_fields=False, **to_kwargs(payload))
         for payload in payloads
     ]
예제 #19
0
 def get_response_msgs(self, response):
     payloads = from_json(response.delivered_body)
     return [TransportUserMessage(
             _process_fields=False, **to_kwargs(payload))
             for payload in payloads]
예제 #20
0
 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