def test_submit_and_deliver_ussd_continue(self): # Startup yield self.startTransport() yield self.transport._block_till_bind yield self.clear_link_pdus() # Next the Client submits a USSD message to the Server # and recieves an ack msg = yield self.tx_helper.make_dispatch_outbound( "hello world", transport_type="ussd") # First we make sure the Client binds to the Server # and enquire_link pdu's are exchanged as expected pdu_queue = self.service.factory.smsc.pdu_queue submit_sm_pdu = yield pdu_queue.get() self.assert_server_pdu( mk_expected_pdu('inbound', 3, 'submit_sm'), submit_sm_pdu) pdu_opts = unpacked_pdu_opts(submit_sm_pdu['pdu']) self.assertEqual('02', pdu_opts['ussd_service_op']) self.assertEqual('0000', pdu_opts['its_session_info']) # We need the user_message_id to check the ack user_message_id = msg.payload["message_id"] [ack, delv] = yield self.tx_helper.wait_for_dispatched_events(2) self.assertEqual(ack['message_type'], 'event') self.assertEqual(ack['event_type'], 'ack') self.assertEqual(ack['transport_name'], self.tx_helper.transport_name) self.assertEqual(ack['user_message_id'], user_message_id) self.assertEqual(delv['message_type'], 'event') self.assertEqual(delv['event_type'], 'delivery_report') self.assertEqual(delv['transport_name'], self.tx_helper.transport_name) self.assertEqual(delv['user_message_id'], user_message_id) self.assertEqual(delv['delivery_status'], self.expected_delivery_status) # Finally the Server delivers a USSD message to the Client pdu = DeliverSM(555, short_message="reply!", destination_addr="2772222222", source_addr="2772000000") pdu._PDU__add_optional_parameter('ussd_service_op', '02') pdu._PDU__add_optional_parameter('its_session_info', '0000') self.service.factory.smsc.send_pdu(pdu) [mess] = yield self.tx_helper.wait_for_dispatched_inbound(1) self.assertEqual(mess['message_type'], 'user_message') self.assertEqual(mess['transport_name'], self.tx_helper.transport_name) self.assertEqual(mess['content'], "reply!") self.assertEqual(mess['transport_type'], "ussd") self.assertEqual(mess['session_event'], TransportUserMessage.SESSION_RESUME) self.assertEqual([], self.tx_helper.get_dispatched_failures())
def test_submit_sm_sms_multipart_sar(self): """Submit a long SMS message using multipart sar fields.""" esme = yield self.get_esme(config={ 'send_multipart_sar': True, }) long_message = 'This is a long message.' * 20 seq_nums = yield esme.submit_sm(short_message=long_message) self.assertEqual([2, 3, 4, 5], seq_nums) self.assertEqual(4, len(esme.fake_sent_pdus)) msg_parts = [] msg_refs = [] for i, sm_pdu in enumerate(esme.fake_sent_pdus): sm = unpack_pdu(sm_pdu.get_bin()) pdu_opts = unpacked_pdu_opts(sm) mandatory_parameters = sm['body']['mandatory_parameters'] self.assertEqual('submit_sm', sm['header']['command_id']) msg_parts.append(mandatory_parameters['short_message']) self.assertTrue(len(mandatory_parameters['short_message']) <= 130) msg_refs.append(pdu_opts['sar_msg_ref_num']) self.assertEqual(i + 1, pdu_opts['sar_segment_seqnum']) self.assertEqual(4, pdu_opts['sar_total_segments']) self.assertEqual(long_message, ''.join(msg_parts)) self.assertEqual(1, len(set(msg_refs)))
def test_submit_and_deliver_ussd_continue(self): # Startup yield self.startTransport() yield self.transport._block_till_bind yield self.clear_link_pdus() # Next the Client submits a USSD message to the Server # and recieves an ack msg = yield self.tx_helper.make_dispatch_outbound( "hello world", transport_type="ussd") # First we make sure the Client binds to the Server # and enquire_link pdu's are exchanged as expected pdu_queue = self.service.factory.smsc.pdu_queue submit_sm_pdu = yield pdu_queue.get() self.assert_server_pdu(mk_expected_pdu('inbound', 3, 'submit_sm'), submit_sm_pdu) pdu_opts = unpacked_pdu_opts(submit_sm_pdu['pdu']) self.assertEqual('02', pdu_opts['ussd_service_op']) self.assertEqual('0000', pdu_opts['its_session_info']) # We need the user_message_id to check the ack user_message_id = msg.payload["message_id"] [ack, delv] = yield self.tx_helper.wait_for_dispatched_events(2) self.assertEqual(ack['message_type'], 'event') self.assertEqual(ack['event_type'], 'ack') self.assertEqual(ack['transport_name'], self.tx_helper.transport_name) self.assertEqual(ack['user_message_id'], user_message_id) self.assertEqual(delv['message_type'], 'event') self.assertEqual(delv['event_type'], 'delivery_report') self.assertEqual(delv['transport_name'], self.tx_helper.transport_name) self.assertEqual(delv['user_message_id'], user_message_id) self.assertEqual(delv['delivery_status'], self.expected_delivery_status) # Finally the Server delivers a USSD message to the Client pdu = DeliverSM(555, short_message="reply!", destination_addr="2772222222", source_addr="2772000000") pdu._PDU__add_optional_parameter('ussd_service_op', '02') pdu._PDU__add_optional_parameter('its_session_info', '0000') self.service.factory.smsc.send_pdu(pdu) [mess] = yield self.tx_helper.wait_for_dispatched_inbound(1) self.assertEqual(mess['message_type'], 'user_message') self.assertEqual(mess['transport_name'], self.tx_helper.transport_name) self.assertEqual(mess['content'], "reply!") self.assertEqual(mess['transport_type'], "ussd") self.assertEqual(mess['session_event'], TransportUserMessage.SESSION_RESUME) self.assertEqual([], self.tx_helper.get_dispatched_failures())
def test_submit_sm_sms_multipart_sar(self): """Submit a long SMS message using multipart sar fields.""" esme = yield self.get_esme(config={ 'send_multipart_sar': True, }) long_message = 'This is a long message.' * 20 seq_nums = yield esme.submit_sm(short_message=long_message) self.assertEqual([2, 3, 4, 5], seq_nums) self.assertEqual(4, len(esme.fake_sent_pdus)) msg_parts = [] msg_refs = [] for i, sm_pdu in enumerate(esme.fake_sent_pdus): sm = unpack_pdu(sm_pdu.get_bin()) pdu_opts = unpacked_pdu_opts(sm) mandatory_parameters = sm['body']['mandatory_parameters'] self.assertEqual('submit_sm', sm['header']['command_id']) msg_parts.append(mandatory_parameters['short_message']) self.assertTrue(len(mandatory_parameters['short_message']) <= 130) msg_refs.append(pdu_opts['sar_msg_ref_num']) self.assertEqual(i + 1, pdu_opts['sar_segment_seqnum']) self.assertEqual(4, pdu_opts['sar_total_segments']) self.assertEqual(long_message, ''.join(msg_parts)) self.assertEqual(1, len(set(msg_refs)))
def test_submit_sm_ussd_close(self): """Submit a USSD message with a session close flag.""" esme = yield self.get_esme() yield esme.submit_sm( short_message='hello', message_type='ussd', continue_session=False) [sm_pdu] = esme.fake_sent_pdus sm = unpack_pdu(sm_pdu.get_bin()) pdu_opts = unpacked_pdu_opts(sm) self.assertEqual('submit_sm', sm['header']['command_id']) self.assertEqual( 'hello', sm['body']['mandatory_parameters']['short_message']) self.assertEqual('02', pdu_opts['ussd_service_op']) self.assertEqual('0001', pdu_opts['its_session_info'])
def test_submit_sm_ussd_close(self): """Submit a USSD message with a session close flag.""" esme = yield self.get_esme() yield esme.submit_sm(short_message='hello', message_type='ussd', continue_session=False) [sm_pdu] = esme.fake_sent_pdus sm = unpack_pdu(sm_pdu.get_bin()) pdu_opts = unpacked_pdu_opts(sm) self.assertEqual('submit_sm', sm['header']['command_id']) self.assertEqual('hello', sm['body']['mandatory_parameters']['short_message']) self.assertEqual('02', pdu_opts['ussd_service_op']) self.assertEqual('0001', pdu_opts['its_session_info'])
def test_submit_sm_sms_long(self): """Submit a USSD message with a session continue flag.""" esme = yield self.get_esme(config={ 'send_long_messages': True, }) long_message = 'This is a long message.' * 20 yield esme.submit_sm(short_message=long_message) [sm_pdu] = esme.fake_sent_pdus sm = unpack_pdu(sm_pdu.get_bin()) pdu_opts = unpacked_pdu_opts(sm) self.assertEqual('submit_sm', sm['header']['command_id']) self.assertEqual(None, sm['body']['mandatory_parameters']['short_message']) self.assertEqual(''.join('%02x' % ord(c) for c in long_message), pdu_opts['message_payload'])
def test_submit_sm_sms_long(self): """Submit a USSD message with a session continue flag.""" esme = yield self.get_esme(config={ 'send_long_messages': True, }) long_message = 'This is a long message.' * 20 yield esme.submit_sm(short_message=long_message) [sm_pdu] = esme.fake_sent_pdus sm = unpack_pdu(sm_pdu.get_bin()) pdu_opts = unpacked_pdu_opts(sm) self.assertEqual('submit_sm', sm['header']['command_id']) self.assertEqual( None, sm['body']['mandatory_parameters']['short_message']) self.assertEqual(''.join('%02x' % ord(c) for c in long_message), pdu_opts['message_payload'])