def test_deliver_sm_message_payload(self): """A message in the `message_payload` field should be delivered.""" esme = yield self.get_esme( deliver_sm=self.assertion_cb(u'hello', 'short_message')) sm = DeliverSM(1, short_message='') sm.add_message_payload(''.join('%02x' % ord(c) for c in 'hello')) yield esme.handle_deliver_sm(unpack_pdu(sm.get_bin()))
def test_deliver_sm_message_payload(self): """A message in the `message_payload` field should be delivered.""" esme = yield self.get_esme( deliver_sm=self.assertion_cb(u'hello', 'short_message')) sm = DeliverSM(1, short_message='') sm.add_message_payload(''.join('%02x' % ord(c) for c in 'hello')) yield esme.handle_deliver_sm(unpack_pdu(sm.get_bin()))
def test_send_pdu(self): """ A PDU can be sent to the client over the wire. """ fake_smsc = FakeSMSC() client = self.successResultOf(self.connect(fake_smsc)) self.assertEqual(client.received, b"") self.assertEqual(client.pdus_handled, []) pdu = DeliverSM(0) send_d = fake_smsc.send_pdu(pdu) # PDU sent, not yet received. self.assertNoResult(send_d) self.assertNotEqual(client.received, pdu.get_bin()) yield send_d # PDU received. self.assertEqual(client.received, pdu.get_bin()) self.assertEqual(client.pdus_handled, [])
def test_send_pdu(self): """ A PDU can be sent to the client over the wire. """ fake_smsc = FakeSMSC() client = self.successResultOf(self.connect(fake_smsc)) self.assertEqual(client.received, b"") self.assertEqual(client.pdus_handled, []) pdu = DeliverSM(0) send_d = fake_smsc.send_pdu(pdu) # PDU sent, not yet received. self.assertNoResult(send_d) self.assertNotEqual(client.received, pdu.get_bin()) yield send_d # PDU received. self.assertEqual(client.received, pdu.get_bin()) self.assertEqual(client.pdus_handled, [])
def test_deliver_sm_fail(self): transport, protocol = yield self.setup_bind() pdu = DeliverSM( sequence_number=0, message_id='foo', data_coding=4, short_message='string with unknown data coding') protocol.dataReceived(pdu.get_bin()) [deliver_sm_resp] = yield wait_for_pdus(transport, 1) self.assertCommand( deliver_sm_resp, 'deliver_sm_resp', sequence_number=0, status='ESME_RDELIVERYFAILURE')
def test_deliver_sm(self): calls = [] self.patch(EsmeTransceiver, 'handle_deliver_sm', lambda p, pdu: succeed(calls.append(pdu))) transport, protocol = yield self.setup_bind() pdu = DeliverSM( sequence_number=0, message_id='foo', short_message='bar') protocol.dataReceived(pdu.get_bin()) [deliver_sm] = calls self.assertCommand(deliver_sm, 'deliver_sm', sequence_number=0)
def test_delivery_report_for_unknown_message(self): dr = ("id:123 sub:... dlvrd:... submit date:200101010030" " done date:200101020030 stat:DELIVRD err:... text:Meep") deliver = DeliverSM(1, short_message=dr) with LogCatcher(message="Failed to retrieve message id") as lc: yield self.esme.handle_data(deliver.get_bin()) [warning] = lc.logs self.assertEqual(warning['message'], ("Failed to retrieve message id for delivery " "report. Delivery report from %s " "discarded." % self.tx_helper.transport_name, ))
def test_deliver_sm_fail(self): self.patch(DeliverShortMessageProcessor, 'decode_pdus', lambda *a: [str('not a unicode string')]) transport, protocol = yield self.setup_bind() pdu = DeliverSM( sequence_number=0, message_id='foo', short_message='bar') protocol.dataReceived(pdu.get_bin()) [deliver_sm_resp] = yield wait_for_pdus(transport, 1) self.assertCommand( deliver_sm_resp, 'deliver_sm_resp', sequence_number=0, status='ESME_RDELIVERYFAILURE')
def test_delivery_report_for_unknown_message(self): dr = ("id:123 sub:... dlvrd:... submit date:200101010030" " done date:200101020030 stat:DELIVRD err:... text:Meep") deliver = DeliverSM(1, short_message=dr) with LogCatcher(message="Failed to retrieve message id") as lc: yield self.esme.handle_data(deliver.get_bin()) [warning] = lc.logs self.assertEqual(warning['message'], ("Failed to retrieve message id for delivery " "report. Delivery report from %s " "discarded." % self.tx_helper.transport_name,))
def test_deliver_sm_fail_with_custom_error(self): transport, protocol = yield self.setup_bind(config={ "deliver_sm_decoding_error": "ESME_RSYSERR" }) pdu = DeliverSM( sequence_number=0, message_id='foo', data_coding=4, short_message='string with unknown data coding') protocol.dataReceived(pdu.get_bin()) [deliver_sm_resp] = yield wait_for_pdus(transport, 1) self.assertCommand( deliver_sm_resp, 'deliver_sm_resp', sequence_number=0, status='ESME_RSYSERR')
def test_deliver_sm_ussd_start(self): def assert_ussd(value): self.assertEqual('ussd', value['message_type']) self.assertEqual('new', value['session_event']) self.assertEqual(None, value['short_message']) esme = yield self.get_esme(deliver_sm=self.make_cb(assert_ussd)) sm = DeliverSM(1) sm._PDU__add_optional_parameter('ussd_service_op', '01') sm._PDU__add_optional_parameter('its_session_info', '0000') yield esme.handle_deliver_sm(unpack_pdu(sm.get_bin()))
def test_deliver_sm_delivery_report_rejected(self): esme = yield self.get_esme(delivery_report=self.assertion_cb({ 'message_id': '1b1720be-5f48-41c4-b3f8-6e59dbf45366', 'message_state': 'REJECTED', })) sm = DeliverSM(1, short_message='delivery report') sm._PDU__add_optional_parameter( 'receipted_message_id', '1b1720be-5f48-41c4-b3f8-6e59dbf45366') sm._PDU__add_optional_parameter('message_state', 8) yield esme.handle_deliver_sm(unpack_pdu(sm.get_bin()))
def test_deliver_sm_fail_with_custom_error(self): self.patch(DeliverShortMessageProcessor, 'decode_pdus', lambda *a: [str('not a unicode string')]) transport, protocol = yield self.setup_bind(config={ "deliver_sm_decoding_error": "ESME_RSYSERR" }) pdu = DeliverSM( sequence_number=0, message_id='foo', short_message='bar') protocol.dataReceived(pdu.get_bin()) [deliver_sm_resp] = yield wait_for_pdus(transport, 1) self.assertCommand( deliver_sm_resp, 'deliver_sm_resp', sequence_number=0, status='ESME_RSYSERR')
def test_deliver_sm_delivery_report_regex_fallback_ucs2_long(self): esme = yield self.get_esme(delivery_report=self.assertion_cb({ 'message_id': '1b1720be-5f48-41c4-b3f8-6e59dbf45366', 'message_state': 'DELIVRD', })) dr_text = ( u'id:1b1720be-5f48-41c4-b3f8-6e59dbf45366 sub:001 dlvrd:001 ' u'submit date:120726132548 done date:120726132548 stat:DELIVRD ' u'err:000 text:').encode('utf-16be') sm = DeliverSM(1, short_message='', data_coding=8) sm.add_message_payload(dr_text.encode('hex')) yield esme.handle_deliver_sm(unpack_pdu(sm.get_bin()))
def test_deliver_sm_ussd_start(self): def assert_ussd(value): self.assertEqual('ussd', value['message_type']) self.assertEqual('new', value['session_event']) self.assertEqual(None, value['short_message']) esme = yield self.get_esme(deliver_sm=self.make_cb(assert_ussd)) sm = DeliverSM(1) sm._PDU__add_optional_parameter('ussd_service_op', '01') sm._PDU__add_optional_parameter('its_session_info', '0000') yield esme.handle_deliver_sm(unpack_pdu(sm.get_bin()))
def test_deliver_sm_delivery_report_rejected(self): esme = yield self.get_esme( delivery_report=self.assertion_cb({ 'message_id': '1b1720be-5f48-41c4-b3f8-6e59dbf45366', 'message_state': 'REJECTED', })) sm = DeliverSM(1, short_message='delivery report') sm._PDU__add_optional_parameter( 'receipted_message_id', '1b1720be-5f48-41c4-b3f8-6e59dbf45366') sm._PDU__add_optional_parameter('message_state', 8) yield esme.handle_deliver_sm(unpack_pdu(sm.get_bin()))
def test_deliver_sm_delivery_report_regex_fallback_ucs2_long(self): esme = yield self.get_esme( delivery_report=self.assertion_cb({ 'message_id': '1b1720be-5f48-41c4-b3f8-6e59dbf45366', 'message_state': 'DELIVRD', })) dr_text = ( u'id:1b1720be-5f48-41c4-b3f8-6e59dbf45366 sub:001 dlvrd:001 ' u'submit date:120726132548 done date:120726132548 stat:DELIVRD ' u'err:000 text:').encode('utf-16be') sm = DeliverSM(1, short_message='', data_coding=8) sm.add_message_payload(dr_text.encode('hex')) yield esme.handle_deliver_sm(unpack_pdu(sm.get_bin()))
def test_partial_pdu_data_received(self): calls = [] self.patch(EsmeTransceiver, 'handle_deliver_sm', lambda p, pdu: calls.append(pdu)) transport, protocol = yield self.setup_bind() deliver_sm = DeliverSM(sequence_number=1, short_message='foo') pdu = deliver_sm.get_bin() half = len(pdu) / 2 pdu_part1, pdu_part2 = pdu[:half], pdu[half:] protocol.dataReceived(pdu_part1) self.assertEqual([], calls) protocol.dataReceived(pdu_part2) [handled_pdu] = calls self.assertEqual(command_id(handled_pdu), 'deliver_sm') self.assertEqual(seq_no(handled_pdu), 1) self.assertEqual(short_message(handled_pdu), 'foo')
def test_partial_pdu_data_received(self): protocol = yield self.get_protocol() calls = [] protocol.handle_deliver_sm = calls.append yield self.fake_smsc.bind() deliver_sm = DeliverSM(1, short_message='foo') pdu = deliver_sm.get_bin() half = len(pdu) / 2 pdu_part1, pdu_part2 = pdu[:half], pdu[half:] yield self.fake_smsc.send_bytes(pdu_part1) self.assertEqual([], calls) yield self.fake_smsc.send_bytes(pdu_part2) [handled_pdu] = calls self.assertEqual(command_id(handled_pdu), 'deliver_sm') self.assertEqual(seq_no(handled_pdu), 1) self.assertEqual(short_message(handled_pdu), 'foo')
def get_sm(self, msg, data_coding=3): sm = DeliverSM(1, short_message=msg, data_coding=data_coding) return unpack_pdu(sm.get_bin())
def get_sm(self, msg, data_coding=3): sm = DeliverSM(1, short_message=msg, data_coding=data_coding) return unpack_pdu(sm.get_bin())