pespin has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/36218?usp=email )
Change subject: epdg: Introduce test TC_authinfo_fail_resync ......................................................................
epdg: Introduce test TC_authinfo_fail_resync
Related: OS#6396 Change-Id: I2769d331740324200b4512a154e1321bd5825b04 --- M epdg/EPDG_Tests.ttcn M library/GSUP_Templates.ttcn 2 files changed, 69 insertions(+), 8 deletions(-)
Approvals: Jenkins Builder: Verified laforge: Looks good to me, but someone else must approve pespin: Looks good to me, approved
diff --git a/epdg/EPDG_Tests.ttcn b/epdg/EPDG_Tests.ttcn index 164f14b..d8112e8 100644 --- a/epdg/EPDG_Tests.ttcn +++ b/epdg/EPDG_Tests.ttcn @@ -422,9 +422,24 @@ }
/* Diameter SWx MAR + MAA. */ -private altstep as_DIA_SWx_MA_success() runs on EPDG_ConnHdlr { +private altstep as_DIA_SWx_MA_success(boolean exp_req_resync := false) runs on EPDG_ConnHdlr { var PDU_DIAMETER rx_dia; [] SWx.receive(tr_DIA_SWx_MAR(g_pars.imsi)) -> value rx_dia { + if (exp_req_resync) { + var octetstring rand_autn_concatenated := g_pars.vec.rand & g_pars.vec.auts; + var AVP avp_grp; + var GenericAVP sip_auth_avp; + + avp_grp := f_DIAMETER_get_avp_or_fail(rx_dia, c_AVP_Code_CxDx_3GPP_SIP_Auth_Data_Item); + sip_auth_avp.avp := f_AVP_Grouped_get_avp_or_fail(avp_grp.avp_data.avp_CxDx_3GPP_SIP_Auth_Data_Item, + c_AVP_Code_CxDx_3GPP_SIP_Authorization); + + if (not match(sip_auth_avp, tr_AVP_3GPP_SIPAuthorization(rand_autn_concatenated))) { + Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, + log2str("Unexpected Diameter AVP SIP-Authorization: ", sip_auth_avp, + " vs exp ", tr_AVP_3GPP_SIPAuthorization(rand_autn_concatenated))); + } + } f_DIA_SWx_tx_MAA_success(rx_dia); setverdict(pass); } @@ -754,13 +769,19 @@ } }
-private function f_GSUP_tx_SAI_REQ() runs on EPDG_ConnHdlr { +private function f_GSUP_tx_SAI_REQ(boolean req_resync := false) runs on EPDG_ConnHdlr { var GSUP_PDU rx_gsup; var template (value) GSUP_IEs pdp_info; pdp_info := { ts_GSUP_IE_PDP_CONTEXT_ID('00'O), ts_GSUP_IE_PDP_ADDRESS(ts_EuaIPv4Dyn), ts_GSUP_IE_APN(f_enc_dns_hostname(g_pars.apn)) }; - GSUP.send(ts_GSUP_SAI_REQ_PDP_INFO(g_pars.imsi, pdp_info)); + if (req_resync) { + GSUP.send(ts_GSUP_SAI_REQ_PDP_INFO_UMTS_AKA_RESYNC( + g_pars.imsi, pdp_info, + g_pars.vec.auts, g_pars.vec.rand)); + } else { + GSUP.send(ts_GSUP_SAI_REQ_PDP_INFO(g_pars.imsi, pdp_info)); + } }
@@ -791,9 +812,9 @@ }
/* GSUP AuthInfo Req + Resp, triggers SWx MAR + MAA. */ -private function f_GSUP_AI_success() runs on EPDG_ConnHdlr { - f_GSUP_tx_SAI_REQ(); - as_DIA_SWx_MA_success(); +private function f_GSUP_AI_success(boolean req_resync := false) runs on EPDG_ConnHdlr { + f_GSUP_tx_SAI_REQ(req_resync); + as_DIA_SWx_MA_success(req_resync); as_GSUP_rx_SAI_RES(); setverdict(pass); } @@ -942,6 +963,23 @@ setverdict(pass); }
+/* Emulate UE doing MAR+MAA, then UE requesting again due to resync needed */ +private function f_TC_authinfo_fail_resync(charstring id) runs on EPDG_ConnHdlr { + f_GSUP_AI_success(false); + f_GSUP_AI_success(true); + f_GSUP_LU_success(); + f_GSUP_EPDGTunnel_success(); + f_GSUP_PurgeMS_success(); +} +testcase TC_authinfo_fail_resync() runs on MTC_CT { + var EPDG_ConnHdlrPars pars := f_init_pars(); + var EPDG_ConnHdlr vc_conn; + f_init(); + vc_conn := f_start_handler(refers(f_TC_authinfo_fail_resync), pars); + vc_conn.done; + setverdict(pass); +} + private function f_TC_ho_lte_to_wifi(charstring id) runs on EPDG_ConnHdlr { f_initial_attach(); /* Whenever UE comes from 3GPP, PGW may activate a dedicated S2b bearer @@ -1079,6 +1117,7 @@ execute ( TC_authinfo_normal() ); execute ( TC_authinfo_MAA_unknown_user() ); execute ( TC_authinfo_twice() ); + execute ( TC_authinfo_fail_resync() ); execute ( TC_ho_lte_to_wifi() ); execute ( TC_ho_wifi_to_lte() ); execute ( TC_s2b_CreateSession_rejected() ); diff --git a/library/GSUP_Templates.ttcn b/library/GSUP_Templates.ttcn index dcf086d..403af74 100644 --- a/library/GSUP_Templates.ttcn +++ b/library/GSUP_Templates.ttcn @@ -356,6 +356,18 @@ valueof(ts_GSUP_IE_PdpInfo_ie(pdp_info)) });
+template GSUP_PDU ts_GSUP_SAI_REQ_PDP_INFO_UMTS_AKA_RESYNC( + template (value) hexstring imsi, + template (value) GSUP_IEs pdp_info, + template (value) octetstring auts, + template (value) octetstring rand) := + ts_GSUP(OSMO_GSUP_MSGT_SEND_AUTH_INFO_REQUEST, { + valueof(ts_GSUP_IE_IMSI(imsi)), + valueof(ts_GSUP_IE_PdpInfo_ie(pdp_info)), + valueof(ts_GSUP_IE_AUTS(auts)), + valueof(ts_GSUP_IE_RAND(rand)) + }); + template GSUP_PDU tr_GSUP_SAI_REQ(template hexstring imsi) := tr_GSUP_IMSI(OSMO_GSUP_MSGT_SEND_AUTH_INFO_REQUEST, imsi);
@@ -644,7 +656,7 @@ } }
-template (value) GSUP_IE ts_GSUP_IE_AUTS(octetstring auts) := { +template (value) GSUP_IE ts_GSUP_IE_AUTS(template (value) octetstring auts) := { tag := OSMO_GSUP_AUTS_IE, len := 0, /* overwritten */ val := { @@ -660,7 +672,7 @@ } }
-template (value) GSUP_IE ts_GSUP_IE_RAND(octetstring rand) := { +template (value) GSUP_IE ts_GSUP_IE_RAND(template (value) octetstring rand) := { tag := OSMO_GSUP_RAND_IE, len := 0, /* overwritten */ val := {