ggsn: Introduce test TC_pdp_act2_recovery
Some code is moved out of f_pdp_ctx_act() into f_handle_create_req() in order to re-use it in the test. Related: OS#4165 Change-Id: I48c1bc9287ce8b820e5ea672dffbc5a8503f16d7
This commit is contained in:
parent
6916ec4648
commit
fa1ca02d34
|
@ -267,19 +267,7 @@ module GGSN_Tests {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* send a PDP context activation */
|
function f_handle_create_req(inout PdpContext ctx, in Gtp1cUnitdata ud, in OCT1 exp_cause := '80'O) runs on GT_CT {
|
||||||
function f_pdp_ctx_act(inout PdpContext ctx, OCT1 exp_cause := '80'O) runs on GT_CT {
|
|
||||||
var Gtp1cUnitdata ud;
|
|
||||||
var default d;
|
|
||||||
|
|
||||||
log("sending CreatePDP");
|
|
||||||
f_send_gtpc(ts_GTPC_CreatePDP(g_peer_c, g_c_seq_nr, ctx.imsi, g_restart_ctr,
|
|
||||||
ctx.teid, ctx.teic, ctx.nsapi, ctx.eua, ctx.apn,
|
|
||||||
g_sgsn_ip_c, g_sgsn_ip_u, ctx.msisdn, ctx.pco_req));
|
|
||||||
T_default.start;
|
|
||||||
d := activate(pingpong());
|
|
||||||
alt {
|
|
||||||
[] GTPC.receive(tr_GTPC_MsgType(g_peer_c, createPDPContextResponse, ctx.teic)) -> value ud {
|
|
||||||
var CreatePDPContextResponse cpr := ud.gtpc.gtpc_pdu.createPDPContextResponse;
|
var CreatePDPContextResponse cpr := ud.gtpc.gtpc_pdu.createPDPContextResponse;
|
||||||
if (exp_cause == '80'O and exp_cause == cpr.cause.causevalue) {
|
if (exp_cause == '80'O and exp_cause == cpr.cause.causevalue) {
|
||||||
/* Check if EUA type corresponds to requested type */
|
/* Check if EUA type corresponds to requested type */
|
||||||
|
@ -323,6 +311,22 @@ module GGSN_Tests {
|
||||||
setverdict(fail);
|
setverdict(fail);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* send a PDP context activation */
|
||||||
|
function f_pdp_ctx_act(inout PdpContext ctx, OCT1 exp_cause := '80'O) runs on GT_CT {
|
||||||
|
var Gtp1cUnitdata ud;
|
||||||
|
var default d;
|
||||||
|
|
||||||
|
log("sending CreatePDP");
|
||||||
|
f_send_gtpc(ts_GTPC_CreatePDP(g_peer_c, g_c_seq_nr, ctx.imsi, g_restart_ctr,
|
||||||
|
ctx.teid, ctx.teic, ctx.nsapi, ctx.eua, ctx.apn,
|
||||||
|
g_sgsn_ip_c, g_sgsn_ip_u, ctx.msisdn, ctx.pco_req));
|
||||||
|
T_default.start;
|
||||||
|
d := activate(pingpong());
|
||||||
|
alt {
|
||||||
|
[] GTPC.receive(tr_GTPC_MsgType(g_peer_c, createPDPContextResponse, ctx.teic)) -> value ud {
|
||||||
|
f_handle_create_req(ctx, ud, exp_cause);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
deactivate(d);
|
deactivate(d);
|
||||||
T_default.stop;
|
T_default.stop;
|
||||||
|
@ -1359,6 +1363,69 @@ module GGSN_Tests {
|
||||||
f_pdp_ctx_del(ctx4, '1'B);
|
f_pdp_ctx_del(ctx4, '1'B);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Validate if 2nd CtxCreateReq with increased Recovery IE causes ggsn to drop 1st one (while keeping 2nd one). */
|
||||||
|
testcase TC_pdp_act2_recovery() runs on GT_CT {
|
||||||
|
var Gtp1cUnitdata ud;
|
||||||
|
var default d;
|
||||||
|
var boolean ctxA_deleted := false;
|
||||||
|
var boolean ctxB_created := false;
|
||||||
|
|
||||||
|
f_init();
|
||||||
|
var PdpContext ctxA := valueof(t_DefinePDP(f_rnd_imsi('26242'H), '1234'O, c_ApnInternet, valueof(t_EuaIPv4Dyn)));
|
||||||
|
var PdpContext ctxB := valueof(t_DefinePDP(f_rnd_imsi('26242'H), '1234'O, c_ApnInternet, valueof(t_EuaIPv4Dyn)));
|
||||||
|
f_pdp_ctx_act(ctxA);
|
||||||
|
|
||||||
|
g_restart_ctr := int2oct(oct2int(g_restart_ctr) + 1, 1);
|
||||||
|
|
||||||
|
log("sending 2nd CreatePDP (recovery increased)");
|
||||||
|
f_send_gtpc(ts_GTPC_CreatePDP(g_peer_c, g_c_seq_nr, ctxB.imsi, g_restart_ctr,
|
||||||
|
ctxB.teid, ctxB.teic, ctxB.nsapi, ctxB.eua, ctxB.apn,
|
||||||
|
g_sgsn_ip_c, g_sgsn_ip_u, ctxB.msisdn, ctxB.pco_req));
|
||||||
|
T_default.start;
|
||||||
|
d := activate(pingpong());
|
||||||
|
alt {
|
||||||
|
[] GTPC.receive(tr_GTPC_MsgType(g_peer_c, createPDPContextResponse, ctxB.teic)) -> value ud {
|
||||||
|
f_handle_create_req(ctxB, ud);
|
||||||
|
if (not ctxB_created) {
|
||||||
|
ctxB_created := true;
|
||||||
|
setverdict(pass);
|
||||||
|
} else {
|
||||||
|
setverdict(fail, "Repeated createPDPContextResponse(ctxB)");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (not ctxA_deleted) {
|
||||||
|
repeat;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
[] GTPC.receive(tr_GTPC_MsgType(g_peer_c, deletePDPContextRequest, ctxA.teic)) -> value ud {
|
||||||
|
if (ispresent(ud.gtpc.gtpc_pdu.deletePDPContextRequest.tearDownIndicator)) {
|
||||||
|
setverdict(pass);
|
||||||
|
} else {
|
||||||
|
setverdict(fail);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (not ctxA_deleted) {
|
||||||
|
ctxA_deleted := true;
|
||||||
|
setverdict(pass);
|
||||||
|
} else {
|
||||||
|
setverdict(fail, "Repeated deletePDPContextRequest(ctxA)");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (not ctxB_created) {
|
||||||
|
repeat;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
[] GTPC.receive(tr_GTPC_MsgType(g_peer_c, deletePDPContextRequest, ctxB.teic)) -> value ud {
|
||||||
|
setverdict(fail, "GGSN dropping still valid pdp ctx");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
deactivate(d);
|
||||||
|
T_default.stop;
|
||||||
|
|
||||||
|
f_pdp_ctx_del(ctxB, '1'B);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Send a duplicate echo req. osmo-ggsn maintains a queue for sent
|
/* Send a duplicate echo req. osmo-ggsn maintains a queue for sent
|
||||||
responses (60 seconds): If same delete req is sent and duplicate is
|
responses (60 seconds): If same delete req is sent and duplicate is
|
||||||
detected, saved duplicate response should be sent back. */
|
detected, saved duplicate response should be sent back. */
|
||||||
|
@ -1433,6 +1500,7 @@ module GGSN_Tests {
|
||||||
execute(TC_pdp46_act_deact_apn4());
|
execute(TC_pdp46_act_deact_apn4());
|
||||||
|
|
||||||
execute(TC_echo_req_resp());
|
execute(TC_echo_req_resp());
|
||||||
|
execute(TC_pdp_act2_recovery());
|
||||||
execute(TC_act_deact_retrans_duplicate());
|
execute(TC_act_deact_retrans_duplicate());
|
||||||
|
|
||||||
if (m_ggsn_supports_echo_interval) {
|
if (m_ggsn_supports_echo_interval) {
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
<testcase classname='GGSN_Tests' name='TC_pdp46_clients_interact' time='MASKED'/>
|
<testcase classname='GGSN_Tests' name='TC_pdp46_clients_interact' time='MASKED'/>
|
||||||
<testcase classname='GGSN_Tests' name='TC_pdp46_act_deact_apn4' time='MASKED'/>
|
<testcase classname='GGSN_Tests' name='TC_pdp46_act_deact_apn4' time='MASKED'/>
|
||||||
<testcase classname='GGSN_Tests' name='TC_echo_req_resp' time='MASKED'/>
|
<testcase classname='GGSN_Tests' name='TC_echo_req_resp' time='MASKED'/>
|
||||||
|
<testcase classname='GGSN_Tests' name='TC_pdp_act2_recovery' time='MASKED'/>
|
||||||
<testcase classname='GGSN_Tests' name='TC_act_deact_retrans_duplicate' time='MASKED'/>
|
<testcase classname='GGSN_Tests' name='TC_act_deact_retrans_duplicate' time='MASKED'/>
|
||||||
<testcase classname='GGSN_Tests' name='TC_pdp_act_restart_ctr_echo' time='MASKED'/>
|
<testcase classname='GGSN_Tests' name='TC_pdp_act_restart_ctr_echo' time='MASKED'/>
|
||||||
</testsuite>
|
</testsuite>
|
||||||
|
|
Loading…
Reference in New Issue