osmo-gsm-tester/sysmocom/suites/smpp/esme_ms_sms_storeforward.py

70 lines
2.5 KiB
Python
Executable File

#!/usr/bin/env python3
# This test checks following use-cases:
# * SMPP interface of SMSC accepts SMPP clients (ESMEs) with password previously
# defined in its configuration file.
# * When SMS is sent in 'store & forward' mode, ESME fails to send an SMS to non registered MS.
# * When SMS is sent in 'store & forward' mode, ESME can send an SMS to a not yet registered MS.
# * When SMS is sent in 'store & forward' mode, ESME can send an SMS to an already registered MS.
# * When SMS is sent in 'store & forward' mode, ESME receives a SMS receipt if it asked for it.
from osmo_gsm_tester.testenv import *
SMPP_ESME_RINVDSTADR = 0x0000000B
hlr = tenv.hlr()
bts = tenv.bts()
mgw_msc = tenv.mgw()
mgw_bsc = tenv.mgw()
stp = tenv.stp()
msc = tenv.msc(hlr, mgw_msc, stp)
bsc = tenv.bsc(msc, mgw_bsc, stp)
bsc.bts_add(bts)
ms = tenv.modem()
esme = tenv.esme()
msc.smsc.esme_add(esme)
hlr.start()
stp.start()
msc.start()
mgw_msc.start()
mgw_bsc.start()
bsc.start()
bts.start()
wait(bsc.bts_is_connected, bts)
esme.connect()
hlr.subscriber_add(ms)
wrong_msisdn = ms.msisdn() + esme.msisdn
print('sending sms with wrong msisdn %s, it will be stored but not delivered' % wrong_msisdn)
msg = Sms(esme.msisdn, wrong_msisdn, 'smpp message with wrong dest')
# Since osmo-msc 1e67fea7ba5c6336, we accept all sms in store&forward mode without looking at HLR
# esme.run_method_expect_failure(SMPP_ESME_RINVDSTADR, esme.sms_send_wait_resp, msg, esme.MSGMODE_STOREFORWARD)
umref_wrong = esme.sms_send_wait_resp(msg, esme.MSGMODE_STOREFORWARD, receipt=True)
print('sending sms, it will be stored...')
msg = Sms(esme.msisdn, ms.msisdn(), 'smpp send not-yet-registered message')
umref = esme.sms_send_wait_resp(msg, esme.MSGMODE_STOREFORWARD, receipt=True)
print('MS registers and will receive the SMS...')
ms.connect(msc.mcc_mnc())
wait(ms.is_registered, msc.mcc_mnc())
wait(msc.subscriber_attached, ms)
wait(ms.sms_was_received, msg)
print('Waiting to receive and consume sms receipt with reference', umref)
wait(esme.receipt_was_received, umref)
print('checking MS can receive SMS while registered...')
msg = Sms(esme.msisdn, ms.msisdn(), 'smpp send already-registered message')
umref = esme.sms_send_wait_resp(msg, esme.MSGMODE_STOREFORWARD, receipt=True)
wait(ms.sms_was_received, msg)
print('Waiting to receive and consume sms receipt with reference', umref)
wait(esme.receipt_was_received, umref)
print('Asserting the sms with wrong msisdn was not delivered', umref_wrong)
assert not esme.receipt_was_received(umref_wrong)
esme.disconnect()