fixeria has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/43440?usp=email )
Change subject: sgsn: add TC_attach_reattach_drops_stale_pdp ......................................................................
sgsn: add TC_attach_reattach_drops_stale_pdp
Verify that on a re-Attach with a known IMSI/P-TMSI, the SGSN drops stale PDP contexts left over from before the MS restarted, but only once the re-Attach has actually been authenticated.
Change-Id: I4a0b6cfbb46f673e3037c0fbf3e8c03a8b6316ad Related: osmo-sgsn.git I20c1f5f741275115635188b2f4b1c5fe7c6e40f1 Related: OS#6922 --- M sgsn/SGSN_Tests.ttcn M sgsn/expected-results.xml 2 files changed, 38 insertions(+), 0 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/40/43440/1
diff --git a/sgsn/SGSN_Tests.ttcn b/sgsn/SGSN_Tests.ttcn index 1d58b46..78d2103 100644 --- a/sgsn/SGSN_Tests.ttcn +++ b/sgsn/SGSN_Tests.ttcn @@ -1267,6 +1267,42 @@ f_cleanup(); }
+/* ATTACH + PDP CTX ACT + re-ATTACH (with the P-TMSI allocated by the first + * Attach): the SGSN must recognize the known identity and release the stale + * PDP context left over from before towards the GGSN, but only once the + * re-Attach has actually been authenticated. */ +private function f_TC_attach_reattach_drops_stale_pdp(charstring id) runs on BSSGP_ConnHdlr { + var PdpActPars apars := valueof(t_PdpActPars(mp_ggsn_ip)); + timer T := 5.0; + + /* first perform regular attach + activate a PDP context */ + f_TC_attach(id); + f_pdp_ctx_act(apars); + + /* MS "restarts" and sends a re-Attach Request using the P-TMSI it was + * assigned before. + * XXX: the test is getting stuck here :/ */ + f_gmm_attach(false, false, 0, omit, true); + + /* the stale PDP context must have been released towards the GGSN */ + T.start; + alt { + [] as_ggsn_gtp_ctx_del_req(apars) { + setverdict(pass); + } + [] T.timeout { + setverdict(fail, "SGSN did not release stale PDP context towards GGSN after re-Attach"); + } + } +} +testcase TC_attach_reattach_drops_stale_pdp() runs on test_CT { + var BSSGP_ConnHdlr vc_conn; + f_init(); + vc_conn := f_start_handler(refers(f_TC_attach_reattach_drops_stale_pdp), testcasename(), g_gb, 74); + vc_conn.done; + f_cleanup(); +} + private function f_TC_attach_echo_timeout(charstring id) runs on BSSGP_ConnHdlr { var Gtp1cUnitdata g_ud; var PdpActPars apars := valueof(t_PdpActPars(mp_ggsn_ip)); @@ -3423,6 +3459,7 @@ execute( TC_attach_pdp_act_user_deact_mt() ); execute( TC_attach_pdp_act_deact_dup() ); execute( TC_attach_second_attempt() ); + execute( TC_attach_reattach_drops_stale_pdp() ); execute( TC_attach_echo_timeout() ); execute( TC_attach_restart_ctr_echo() ); execute( TC_attach_restart_ctr_create() ); diff --git a/sgsn/expected-results.xml b/sgsn/expected-results.xml index e2e099b..06352cd 100644 --- a/sgsn/expected-results.xml +++ b/sgsn/expected-results.xml @@ -61,6 +61,7 @@ SGSN_Tests.ttcn:MASKED TC_attach_second_attempt testcase </failure> </testcase> + <testcase classname='SGSN_Tests' name='TC_attach_reattach_drops_stale_pdp' time='MASKED'/> <testcase classname='SGSN_Tests' name='TC_attach_echo_timeout' time='MASKED'/> <testcase classname='SGSN_Tests' name='TC_attach_restart_ctr_echo' time='MASKED'/> <testcase classname='SGSN_Tests' name='TC_attach_restart_ctr_create' time='MASKED'/>