sgsn: Add series of tests on suspend/resume and paging behavior
Let's test whether paging is triggered after T3314 expiration, as well as suspend and explicit and implicit resume work as expected Change-Id: I83b7a453958e30dfc727ba3140168217c209833f Related: OS#4616
This commit is contained in:
parent
a5c71cdefe
commit
8e5932e563
|
@ -2907,6 +2907,164 @@ testcase TC_attach_req_id_req_ra_update() runs on test_CT {
|
|||
f_cleanup();
|
||||
}
|
||||
|
||||
private altstep as_nopaging_ps(integer ran_idx := 0) runs on BSSGP_ConnHdlr {
|
||||
var PDU_BSSGP rx;
|
||||
[] BSSGP_SIG[ran_idx].receive(tr_BSSGP_PS_PAGING(?)) -> value rx {
|
||||
setverdict(fail, "Received unexpected PS PAGING: ", rx);
|
||||
mtc.stop;
|
||||
}
|
||||
}
|
||||
|
||||
/* SUSPEND, then DL traffic: should not pass + no paging expected */
|
||||
private function f_TC_suspend_nopaging(charstring id) runs on BSSGP_ConnHdlr {
|
||||
var PdpActPars apars := valueof(t_PdpActPars(mp_ggsn_ip));
|
||||
var default d;
|
||||
|
||||
/* first perform regular attach */
|
||||
f_TC_attach(id);
|
||||
/* then activate PDP context */
|
||||
f_pdp_ctx_act(apars);
|
||||
/* then transceive a downlink PDU */
|
||||
f_gtpu_xceive_mt(apars, f_rnd_octstring(100));
|
||||
|
||||
/* now suspend GPRS */
|
||||
f_bssgp_suspend();
|
||||
|
||||
d := activate(as_nopaging_ps());
|
||||
|
||||
/* at this point we don't expect any downlink traffic at all, neither actual LLC/SNDCP data,
|
||||
* nor any related paging requests */
|
||||
f_gtpu_xceive_mt(apars, f_rnd_octstring(100), expect_fwd := false);
|
||||
|
||||
deactivate(d);
|
||||
}
|
||||
testcase TC_suspend_nopaging() runs on test_CT {
|
||||
var BSSGP_ConnHdlr vc_conn;
|
||||
f_init();
|
||||
f_sleep(1.0);
|
||||
vc_conn := f_start_handler(refers(f_TC_suspend_nopaging), testcasename(), g_gb, 48);
|
||||
vc_conn.done;
|
||||
f_cleanup();
|
||||
}
|
||||
|
||||
|
||||
/* SUSPEND, then RESUME: data expected to flow after explicit resume */
|
||||
private function f_TC_suspend_resume(charstring id) runs on BSSGP_ConnHdlr {
|
||||
var PdpActPars apars := valueof(t_PdpActPars(mp_ggsn_ip));
|
||||
var OCT1 susp_ref;
|
||||
var default d;
|
||||
|
||||
/* first perform regular attach */
|
||||
f_TC_attach(id);
|
||||
/* then activate PDP context */
|
||||
f_pdp_ctx_act(apars);
|
||||
/* then transceive a downlink PDU */
|
||||
f_gtpu_xceive_mt(apars, f_rnd_octstring(100));
|
||||
|
||||
/* now suspend GPRS */
|
||||
susp_ref := f_bssgp_suspend();
|
||||
|
||||
d := activate(as_nopaging_ps());
|
||||
|
||||
/* at this point we don't expect any downlink traffic at all, neither actual LLC/SNDCP data,
|
||||
* nor any related paging requests */
|
||||
f_gtpu_xceive_mt(apars, f_rnd_octstring(100), expect_fwd := false);
|
||||
|
||||
deactivate(d);
|
||||
|
||||
/* resume GPRS */
|
||||
f_bssgp_resume(susp_ref);
|
||||
|
||||
/* now data should be flowing again */
|
||||
f_gtpu_xceive_mt(apars, f_rnd_octstring(100));
|
||||
}
|
||||
testcase TC_suspend_resume() runs on test_CT {
|
||||
var BSSGP_ConnHdlr vc_conn;
|
||||
f_init();
|
||||
f_sleep(1.0);
|
||||
vc_conn := f_start_handler(refers(f_TC_suspend_resume), testcasename(), g_gb, 49);
|
||||
vc_conn.done;
|
||||
f_cleanup();
|
||||
}
|
||||
|
||||
/* SUSPEND, then RAU: data expected to flow after implicit resume */
|
||||
private function f_TC_suspend_rau(charstring id) runs on BSSGP_ConnHdlr {
|
||||
var PdpActPars apars := valueof(t_PdpActPars(mp_ggsn_ip));
|
||||
var default d;
|
||||
|
||||
/* first perform regular attach */
|
||||
f_TC_attach(id);
|
||||
/* then activate PDP context */
|
||||
f_pdp_ctx_act(apars);
|
||||
/* then transceive a downlink PDU */
|
||||
f_gtpu_xceive_mt(apars, f_rnd_octstring(100));
|
||||
|
||||
/* now suspend GPRS */
|
||||
f_bssgp_suspend();
|
||||
|
||||
d := activate(as_nopaging_ps());
|
||||
|
||||
/* at this point we don't expect any downlink traffic at all, neither actual LLC/SNDCP data,
|
||||
* nor any related paging requests */
|
||||
f_gtpu_xceive_mt(apars, f_rnd_octstring(100), expect_fwd := false);
|
||||
|
||||
deactivate(d);
|
||||
|
||||
/* perform RAU (implicit RESUME) */
|
||||
f_routing_area_update(g_pars.ra);
|
||||
|
||||
/* now data should be flowing again */
|
||||
f_gtpu_xceive_mt(apars, f_rnd_octstring(100));
|
||||
|
||||
}
|
||||
testcase TC_suspend_rau() runs on test_CT {
|
||||
var BSSGP_ConnHdlr vc_conn;
|
||||
f_init();
|
||||
f_sleep(1.0);
|
||||
vc_conn := f_start_handler(refers(f_TC_suspend_rau), testcasename(), g_gb, 50);
|
||||
vc_conn.done;
|
||||
f_cleanup();
|
||||
}
|
||||
|
||||
|
||||
/* wait for T3314 expiration and check that PS PAGING is created on DL PDU */
|
||||
private function f_TC_paging_ps(charstring id) runs on BSSGP_ConnHdlr {
|
||||
var PdpActPars apars := valueof(t_PdpActPars(mp_ggsn_ip));
|
||||
var default d;
|
||||
|
||||
/* first perform regular attach */
|
||||
f_TC_attach(id);
|
||||
/* then activate PDP context */
|
||||
f_pdp_ctx_act(apars);
|
||||
/* then transceive a downlink PDU */
|
||||
f_gtpu_xceive_mt(apars, f_rnd_octstring(100));
|
||||
|
||||
/* now wait for T3314 expiration (test_CT below has reduced it to 3s) */
|
||||
f_sleep(5.0);
|
||||
|
||||
/* now data should be flowing again, but with PS PAGING */
|
||||
f_gtpu_xceive_mt(apars, f_rnd_octstring(100));
|
||||
BSSGP_SIG[0].receive(tr_BSSGP_PS_PAGING(?));
|
||||
|
||||
/* FIXME: simulate paging response */
|
||||
/* FIXME: verify PDU actually arrives only after paging response was successful */
|
||||
|
||||
}
|
||||
testcase TC_paging_ps() runs on test_CT {
|
||||
var BSSGP_ConnHdlr vc_conn;
|
||||
f_init();
|
||||
f_vty_config(SGSNVTY, "sgsn", "timer 3314 3");
|
||||
f_sleep(1.0);
|
||||
vc_conn := f_start_handler(refers(f_TC_paging_ps), testcasename(), g_gb, 51);
|
||||
vc_conn.done;
|
||||
f_vty_config(SGSNVTY, "sgsn", "timer 3314 default");
|
||||
f_cleanup();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
control {
|
||||
execute( TC_attach() );
|
||||
execute( TC_attach_mnc3() );
|
||||
|
@ -2964,6 +3122,11 @@ control {
|
|||
execute( TC_llc_sabm_dm_llgmm() );
|
||||
execute( TC_llc_sabm_dm_ll5() );
|
||||
|
||||
execute( TC_suspend_nopaging() );
|
||||
execute( TC_suspend_resume() );
|
||||
execute( TC_suspend_rau() );
|
||||
execute( TC_paging_ps() );
|
||||
|
||||
/* At the end, may crash osmo-sgsn, see OS#3957, OS#4245 */
|
||||
execute( TC_attach_req_id_req_ra_update() );
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue