Add dynts suite to test switch between PDCH and TCH

It seems for not yet clear reasons the MS require some time after the
PDCH channels have been activated again to use them reliably. If no
sleep is used between call hangup and gprs activate pdp ctx, the MS
fails to activate the pdp ctx due to QMI error respone to the "Start
network" requested.

Related: OS#2582
Change-Id: I73b51c31309ac4c28c64ed7eb7c8c649e535aa22
This commit is contained in:
Pau Espin 2018-09-21 12:25:54 +02:00
parent cbbe5d8c1a
commit 7fa19ac077
5 changed files with 142 additions and 0 deletions

View File

@ -12,6 +12,8 @@
- gprs:sysmo
- gprs:sysmo+mod-bts0-dynts-ipa
- gprs:sysmo+mod-bts0-dynts-osmo
- dynts:sysmo+mod-bts0-dynts67-ipa.conf+cfg-codec-fr1
- dynts:sysmo+mod-bts0-dynts67-osmo.conf+cfg-codec-fr1
- nitb_sms:trx-b200
- sms:trx-b200
- nitb_ussd:trx-b200
@ -26,6 +28,8 @@
- gprs:trx-b200
- gprs:trx-b200+mod-bts0-dynts-ipa
- gprs:trx-b200+mod-bts0-dynts-osmo
- dynts:trx-b200+mod-bts0-dynts67-ipa.conf+cfg-codec-fr1
- dynts:trx-b200+mod-bts0-dynts67-osmo.conf+cfg-codec-fr1
- nitb_sms:trx-sysmocell5000
- sms:trx-sysmocell5000
- nitb_ussd:trx-sysmocell5000
@ -40,6 +44,8 @@
- gprs:trx-sysmocell5000
- gprs:trx-sysmocell5000+mod-bts0-dynts-ipa
- gprs:trx-sysmocell5000+mod-bts0-dynts-osmo
- dynts:trx-sysmocell5000+mod-bts0-dynts67-ipa.conf+cfg-codec-fr1
- dynts:trx-sysmocell5000+mod-bts0-dynts67-osmo.conf+cfg-codec-fr1
- nitb_sms:nanobts
- sms:nanobts+band-1900
- nitb_ussd:nanobts+band-1900
@ -51,6 +57,7 @@
- voice:nanobts+band-1900+mod-bts0-dynts-ipa
- gprs:nanobts+band-1900
- gprs:nanobts+band-1900+mod-bts0-dynts-ipa
- dynts:nanobts+band-1900+mod-bts0-dynts67-ipa.conf+cfg-codec-fr1
- sms:nanobts+band-900
- nitb_ussd:nanobts+band-900
- ussd:nanobts+band-900
@ -63,6 +70,7 @@
- gprs:nanobts+band-900
- gprs:nanobts+band-900+mod-bts0-dynts-ipa
- gprs:nanobts+band-900+mod-bts0-numtrx2+mod-bts0-chanallocdescend
- dynts:nanobts+band-900+mod-bts0-dynts67-ipa.conf+cfg-codec-fr1
- nitb_smpp
- smpp
- encryption

View File

@ -0,0 +1,13 @@
modifiers:
bts:
- num_trx: 1
trx_list:
- timeslot_list:
- phys_chan_config: 'CCCH+SDCCH4'
- phys_chan_config: 'SDCCH8'
- phys_chan_config: 'SDCCH8'
- phys_chan_config: 'SDCCH8'
- phys_chan_config: 'SDCCH8'
- phys_chan_config: 'SDCCH8'
- phys_chan_config: 'TCH/F_PDCH'
- phys_chan_config: 'TCH/F_PDCH'

View File

@ -0,0 +1,13 @@
modifiers:
bts:
- num_trx: 1
trx_list:
- timeslot_list:
- phys_chan_config: 'CCCH+SDCCH4'
- phys_chan_config: 'SDCCH8'
- phys_chan_config: 'SDCCH8'
- phys_chan_config: 'SDCCH8'
- phys_chan_config: 'SDCCH8'
- phys_chan_config: 'SDCCH8'
- phys_chan_config: 'TCH/F_TCH/H_PDCH'
- phys_chan_config: 'TCH/F_TCH/H_PDCH'

10
suites/dynts/suite.conf Normal file
View File

@ -0,0 +1,10 @@
resources:
ip_address:
- times: 8 # msc, bsc, hlr, stp, mgw*2, sgsn, ggsn
bts:
- times: 1
modem:
- times: 2
features:
- gprs
- voice

98
suites/dynts/switch_tch_pdch.py Executable file
View File

@ -0,0 +1,98 @@
#!/usr/bin/env python3
from osmo_gsm_tester.testenv import *
def activate_pdp(ms_mo, ms_mt):
# We need to use inet46 since ofono qmi only uses ipv4v6 eua (OS#2713)
ctx_id_v4_mo = ms_mo.activate_context(apn='inet46', protocol=ms_mo.CTX_PROT_IPv4)
print('ms_mo pdp ctx %r activated' % repr(ctx_id_v4_mo))
ctx_id_v4_mt = ms_mt.activate_context(apn='inet46', protocol=ms_mt.CTX_PROT_IPv4)
print('ms_mt pdp ctx %r activated' % repr(ctx_id_v4_mt))
sleep(5)
ms_mo.deactivate_context(ctx_id_v4_mo)
ms_mt.deactivate_context(ctx_id_v4_mt)
def make_call(ms_mo, ms_mt):
assert len(ms_mo.call_id_list()) == 0 and len(ms_mt.call_id_list()) == 0
mo_cid = ms_mo.call_dial(ms_mt)
mt_cid = ms_mt.call_wait_incoming(ms_mo)
print('dial success')
assert not ms_mo.call_is_active(mo_cid) and not ms_mt.call_is_active(mt_cid)
ms_mt.call_answer(mt_cid)
wait(ms_mo.call_is_active, mo_cid)
wait(ms_mt.call_is_active, mt_cid)
print('answer success, call established and ongoing')
sleep(5) # maintain the call active for 5 seconds
assert ms_mo.call_is_active(mo_cid) and ms_mt.call_is_active(mt_cid)
ms_mo.call_hangup(mo_cid)
ms_mt.call_hangup(mt_cid)
wait(lambda: len(ms_mo.call_id_list()) == 0 and len(ms_mt.call_id_list()) == 0)
print('hangup success')
hlr = suite.hlr()
bts = suite.bts()
pcu = bts.pcu()
mgw_msc = suite.mgw()
mgw_bsc = suite.mgw()
stp = suite.stp()
ggsn = suite.ggsn()
sgsn = suite.sgsn(hlr, ggsn)
msc = suite.msc(hlr, mgw_msc, stp)
bsc = suite.bsc(msc, mgw_bsc, stp)
ms_mo = suite.modem()
ms_mt = suite.modem()
bsc.bts_add(bts)
sgsn.bts_add(bts)
print('start network...')
hlr.start()
stp.start()
ggsn.start()
sgsn.start()
msc.start()
mgw_msc.start()
mgw_bsc.start()
bsc.start()
bts.start()
wait(bsc.bts_is_connected, bts)
print('Waiting for bts to be ready...')
wait(bts.ready_for_pcu)
pcu.start()
hlr.subscriber_add(ms_mo)
hlr.subscriber_add(ms_mt)
ms_mo.connect(msc.mcc_mnc())
ms_mt.connect(msc.mcc_mnc())
ms_mo.attach()
ms_mt.attach()
ms_mo.log_info()
ms_mt.log_info()
print('waiting for modems to attach...')
wait(ms_mo.is_connected, msc.mcc_mnc())
wait(ms_mt.is_connected, msc.mcc_mnc())
wait(msc.subscriber_attached, ms_mo)
wait(msc.subscriber_attached, ms_mt)
print('waiting for modems to attach to data services...')
wait(ms_mo.is_attached)
wait(ms_mt.is_attached)
print('1: activate_pdp')
activate_pdp(ms_mo, ms_mt)
print('2: make_call')
make_call(ms_mo, ms_mt)
print('3: Wait 30 seconds to let PCU handle the PDCH channels again')
sleep(30)
print('3: activate_pdp')
activate_pdp(ms_mo, ms_mt)
print('4: make_call')
make_call(ms_mo, ms_mt)
print('Done!')