From 6abb9fe76fc18fec3b35c5b63daee21774d9ed19 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Sat, 17 Feb 2018 15:24:48 +0100 Subject: sgsn: Add TC_detach_* for various GPRS DETACH use cases Change-Id: I2243b850400482b911d687585929a2eef3490954 --- sgsn/SGSN_Tests.ttcn | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) (limited to 'sgsn') diff --git a/sgsn/SGSN_Tests.ttcn b/sgsn/SGSN_Tests.ttcn index 9e00a13d..3cf16573 100644 --- a/sgsn/SGSN_Tests.ttcn +++ b/sgsn/SGSN_Tests.ttcn @@ -635,6 +635,92 @@ testcase TC_attach_rau() runs on test_CT { vc_conn.done; } +/* general GPRS DETACH helper */ +function f_detach_mo(BIT3 detach_type, boolean power_off, boolean expect_purge) runs on BSSGP_ConnHdlr { + var BssgpDecoded bd; + timer T := 5.0; + BSSGP.send(ts_GMM_DET_REQ_MO(detach_type, power_off)); + if (expect_purge) { + GSUP.receive(tr_GSUP_PURGE_MS_REQ(g_pars.imsi, OSMO_GSUP_CN_DOMAIN_PS)); + GSUP.send(ts_GSUP_PURGE_MS_RES(g_pars.imsi)); + } + T.start; + alt { + [not expect_purge] GSUP.receive(tr_GSUP_PURGE_MS_REQ(?)) { + setverdict(fail, "Unexpected GSUP PURGE MS for unregistered TLLI"); + } + [power_off] BSSGP.receive(tr_BD_L3_MT(tr_GMM_DET_ACCEPT_MT)) -> value bd { + g_pars.ra := omit; + setverdict(fail, "Unexpected ATTACH ACCEPT in no-power-off DETACH"); + /* TODO: check if any PDP contexts are deactivated on network side? */ + } + [power_off] T.timeout { + setverdict(pass); + } + [not power_off] BSSGP.receive(tr_BD_L3_MT(tr_GMM_DET_ACCEPT_MT)) -> value bd { + g_pars.ra := omit; + setverdict(pass); + /* TODO: check if any PDP contexts are deactivated on network side? */ + } + [] BSSGP.receive { repeat; } + } +} + +/* IMSI DETACH (non-power-off) for unknown TLLI */ +private function f_TC_detach_unknown_nopoweroff(charstring id) runs on BSSGP_ConnHdlr { + f_detach_mo(c_GMM_DTT_MO_GPRS, false, false); +} +testcase TC_detach_unknown_nopoweroff() runs on test_CT { + var BSSGP_ConnHdlr vc_conn; + f_init(); + f_sleep(1.0); + vc_conn := f_start_handler(refers(f_TC_detach_unknown_nopoweroff), testcasename(), g_gb[0], 13); + vc_conn.done; +} + +/* IMSI DETACH (power-off) for unknown TLLI */ +private function f_TC_detach_unknown_poweroff(charstring id) runs on BSSGP_ConnHdlr { + f_detach_mo(c_GMM_DTT_MO_GPRS, true, false); +} +testcase TC_detach_unknown_poweroff() runs on test_CT { + var BSSGP_ConnHdlr vc_conn; + f_init(); + f_sleep(1.0); + vc_conn := f_start_handler(refers(f_TC_detach_unknown_poweroff), testcasename(), g_gb[0], 14); + vc_conn.done; +} + +/* IMSI DETACH (non-power-off) for known TLLI */ +private function f_TC_detach_nopoweroff(charstring id) runs on BSSGP_ConnHdlr { + /* first perform regular attach */ + f_TC_attach(id); + + f_detach_mo(c_GMM_DTT_MO_GPRS, false, true); +} +testcase TC_detach_nopoweroff() runs on test_CT { + var BSSGP_ConnHdlr vc_conn; + f_init(); + f_sleep(1.0); + vc_conn := f_start_handler(refers(f_TC_detach_nopoweroff), testcasename(), g_gb[0], 15); + vc_conn.done; +} + +/* IMSI DETACH (power-off) for known TLLI */ +private function f_TC_detach_poweroff(charstring id) runs on BSSGP_ConnHdlr { + /* first perform regular attach */ + f_TC_attach(id); + + f_detach_mo(c_GMM_DTT_MO_GPRS, true, true); +} +testcase TC_detach_poweroff() runs on test_CT { + var BSSGP_ConnHdlr vc_conn; + f_init(); + f_sleep(1.0); + vc_conn := f_start_handler(refers(f_TC_detach_poweroff), testcasename(), g_gb[0], 16); + vc_conn.done; +} + + control { @@ -649,6 +735,10 @@ control { execute( TC_attach_closed() ); execute( TC_rau_unknown() ); execute( TC_attach_rau() ); + execute( TC_detach_unknown_nopoweroff() ); + execute( TC_detach_unknown_poweroff() ); + execute( TC_detach_nopoweroff() ); + execute( TC_detach_poweroff() ); } -- cgit v1.2.3