dia2gsup: Introduce new error scenario tests
Related: OS#5757 Change-Id: Ic870a2c1de74bee3f7d8e26874635d58469ccbea
This commit is contained in:
parent
25d284995d
commit
7aa4ad8b67
|
@ -214,8 +214,145 @@ testcase TC_authinfo_normal() runs on MTC_CT {
|
|||
setverdict(pass);
|
||||
}
|
||||
|
||||
private function f_DIA_AI_gsup_error(integer gsup_cause, template (present) GenericAVP err_avp) runs on D2G_ConnHdlr {
|
||||
var PDU_DIAMETER rx_dia;
|
||||
var UINT32 hbh_id := f_rnd_octstring(4);
|
||||
var UINT32 ete_id := f_rnd_octstring(4);
|
||||
var octetstring sess_id := char2oct("foobar");
|
||||
var OCT3 vplmn := '00F110'O;
|
||||
|
||||
/* Unlike AIR, AIA contains no IMSI. Register ete_id in DIAMETER_Emulation,
|
||||
* so AIA is forwarded back to us in DIAMETER port instead of MTC_CT.DIAMETER_UNIT.
|
||||
*/
|
||||
f_diameter_expect_eteid(ete_id);
|
||||
|
||||
/* Send AIR to translator; expect it to show up on GSUP side */
|
||||
DIAMETER.send(ts_DIA_AIR(g_pars.imsi, vplmn, sess_id, hbh_id := hbh_id, ete_id := ete_id));
|
||||
GSUP.receive(tr_GSUP_SAI_REQ(g_pars.imsi));
|
||||
|
||||
/* Send an error response back to the translator; expect AIA */
|
||||
GSUP.send(ts_GSUP_SAI_ERR(g_pars.imsi, gsup_cause));
|
||||
|
||||
alt {
|
||||
/* Unlike AIR, AIA contains no IMSI, hence it is received in DIAMETER_UNIT: */
|
||||
[] DIAMETER.receive(tr_DIA_AIA_ERR(err_avp)) {
|
||||
setverdict(pass);
|
||||
}
|
||||
[] DIAMETER.receive(PDU_DIAMETER:?) -> value rx_dia {
|
||||
Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, log2str("Unexpected Diameter msg rx: ", rx_dia));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private function f_TC_authinfo_gsup_err_imsi_unknown(charstring id) runs on D2G_ConnHdlr {
|
||||
var DIAMETER_ExperimentalResultcode res_code := DIAMETER_ERROR_USER_UNKNOWN;
|
||||
f_DIA_AI_gsup_error(2, tr_AVP_ExperimentalResult(vendor_id_3GPP, int2oct(enum2int(res_code), 4)));
|
||||
}
|
||||
testcase TC_authinfo_gsup_err_imsi_unknown() runs on MTC_CT {
|
||||
var D2G_ConnHdlrPars pars := f_init_pars();
|
||||
var D2G_ConnHdlr vc_conn;
|
||||
f_init();
|
||||
vc_conn := f_start_handler(refers(f_TC_authinfo_gsup_err_imsi_unknown), pars);
|
||||
vc_conn.done;
|
||||
setverdict(pass);
|
||||
}
|
||||
|
||||
private function f_TC_authinfo_gsup_err_illegal_ms(charstring id) runs on D2G_ConnHdlr {
|
||||
var DIAMETER_ExperimentalResultcode res_code := DIAMETER_ERROR_USER_UNKNOWN;
|
||||
f_DIA_AI_gsup_error(3, tr_AVP_ExperimentalResult(vendor_id_3GPP, int2oct(enum2int(res_code), 4)));
|
||||
}
|
||||
testcase TC_authinfo_gsup_err_illegal_ms() runs on MTC_CT {
|
||||
var D2G_ConnHdlrPars pars := f_init_pars();
|
||||
var D2G_ConnHdlr vc_conn;
|
||||
f_init();
|
||||
vc_conn := f_start_handler(refers(f_TC_authinfo_gsup_err_illegal_ms), pars);
|
||||
vc_conn.done;
|
||||
setverdict(pass);
|
||||
}
|
||||
|
||||
private function f_TC_authinfo_gsup_err_plmn_not_allowed(charstring id) runs on D2G_ConnHdlr {
|
||||
f_DIA_AI_gsup_error(11, tr_AVP_ResultCode(DIAMETER_UNABLE_TO_COMPLY));
|
||||
}
|
||||
testcase TC_authinfo_gsup_err_plmn_not_allowed() runs on MTC_CT {
|
||||
var D2G_ConnHdlrPars pars := f_init_pars();
|
||||
var D2G_ConnHdlr vc_conn;
|
||||
f_init();
|
||||
vc_conn := f_start_handler(refers(f_TC_authinfo_gsup_err_plmn_not_allowed), pars);
|
||||
vc_conn.done;
|
||||
setverdict(pass);
|
||||
}
|
||||
|
||||
private function f_TC_authinfo_gsup_err_romaning_not_allowed(charstring id) runs on D2G_ConnHdlr {
|
||||
var DIAMETER_ExperimentalResultcode res_code := DIAMETER_ERROR_ROAMING_NOT_ALLOWED;
|
||||
f_DIA_AI_gsup_error(12, tr_AVP_ExperimentalResult(vendor_id_3GPP, int2oct(enum2int(res_code), 4)));
|
||||
}
|
||||
testcase TC_authinfo_gsup_err_romaning_not_allowed() runs on MTC_CT {
|
||||
var D2G_ConnHdlrPars pars := f_init_pars();
|
||||
var D2G_ConnHdlr vc_conn;
|
||||
f_init();
|
||||
vc_conn := f_start_handler(refers(f_TC_authinfo_gsup_err_romaning_not_allowed), pars);
|
||||
vc_conn.done;
|
||||
setverdict(pass);
|
||||
}
|
||||
|
||||
private function f_TC_authinfo_gsup_err_net_fail(charstring id) runs on D2G_ConnHdlr {
|
||||
f_DIA_AI_gsup_error(17, tr_AVP_ResultCode(DIAMETER_UNABLE_TO_COMPLY));
|
||||
}
|
||||
testcase TC_authinfo_gsup_err_net_fail() runs on MTC_CT {
|
||||
var D2G_ConnHdlrPars pars := f_init_pars();
|
||||
var D2G_ConnHdlr vc_conn;
|
||||
f_init();
|
||||
vc_conn := f_start_handler(refers(f_TC_authinfo_gsup_err_net_fail), pars);
|
||||
vc_conn.done;
|
||||
setverdict(pass);
|
||||
}
|
||||
|
||||
private function f_TC_authinfo_gsup_err_congestion(charstring id) runs on D2G_ConnHdlr {
|
||||
f_DIA_AI_gsup_error(22, tr_AVP_ResultCode(DIAMETER_UNABLE_TO_COMPLY));
|
||||
}
|
||||
testcase TC_authinfo_gsup_err_congestion() runs on MTC_CT {
|
||||
var D2G_ConnHdlrPars pars := f_init_pars();
|
||||
var D2G_ConnHdlr vc_conn;
|
||||
f_init();
|
||||
vc_conn := f_start_handler(refers(f_TC_authinfo_gsup_err_congestion), pars);
|
||||
vc_conn.done;
|
||||
setverdict(pass);
|
||||
}
|
||||
|
||||
private function f_TC_authinfo_gsup_err_auth_unacceptable(charstring id) runs on D2G_ConnHdlr {
|
||||
f_DIA_AI_gsup_error(23, tr_AVP_ResultCode(DIAMETER_UNABLE_TO_COMPLY));
|
||||
}
|
||||
testcase TC_authinfo_gsup_err_auth_unacceptable() runs on MTC_CT {
|
||||
var D2G_ConnHdlrPars pars := f_init_pars();
|
||||
var D2G_ConnHdlr vc_conn;
|
||||
f_init();
|
||||
vc_conn := f_start_handler(refers(f_TC_authinfo_gsup_err_auth_unacceptable), pars);
|
||||
vc_conn.done;
|
||||
setverdict(pass);
|
||||
}
|
||||
|
||||
private function f_TC_authinfo_gsup_err_proto_unspec(charstring id) runs on D2G_ConnHdlr {
|
||||
f_DIA_AI_gsup_error(23, tr_AVP_ResultCode(DIAMETER_UNABLE_TO_COMPLY));
|
||||
}
|
||||
testcase TC_authinfo_gsup_err_proto_unspec() runs on MTC_CT {
|
||||
var D2G_ConnHdlrPars pars := f_init_pars();
|
||||
var D2G_ConnHdlr vc_conn;
|
||||
f_init();
|
||||
vc_conn := f_start_handler(refers(f_TC_authinfo_gsup_err_proto_unspec), pars);
|
||||
vc_conn.done;
|
||||
setverdict(pass);
|
||||
}
|
||||
|
||||
control {
|
||||
execute ( TC_authinfo_normal() );
|
||||
execute ( TC_authinfo_gsup_err_imsi_unknown() );
|
||||
execute ( TC_authinfo_gsup_err_illegal_ms() );
|
||||
execute ( TC_authinfo_gsup_err_plmn_not_allowed() );
|
||||
execute ( TC_authinfo_gsup_err_romaning_not_allowed() );
|
||||
execute ( TC_authinfo_gsup_err_net_fail() );
|
||||
execute ( TC_authinfo_gsup_err_congestion() );
|
||||
execute ( TC_authinfo_gsup_err_auth_unacceptable() );
|
||||
execute ( TC_authinfo_gsup_err_proto_unspec() );
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -101,6 +101,22 @@ type enumerated DIAMETER_Resultcode {
|
|||
DIAMETER_ERROR_EAP_CODE_UNKNOWN (5048)
|
||||
};
|
||||
|
||||
/* 3GPP TS 29.272 section 7.4. Errors in Experimental-Result-Code */
|
||||
type enumerated DIAMETER_ExperimentalResultcode {
|
||||
/* transient */
|
||||
DIAMETER_AUTHENTICATION_DATA_UNAVAILABLE (4181),
|
||||
DIAMETER_ERROR_CAMEL_SUBSCRIPTION_PRESENT (4182),
|
||||
/* permanent */
|
||||
DIAMETER_ERROR_USER_UNKNOWN (5001),
|
||||
DIAMETER_AUTHORIZATION_REJECTED (5003),
|
||||
DIAMETER_ERROR_ROAMING_NOT_ALLOWED (5004),
|
||||
DIAMETER_MISSING_AVP (5005),
|
||||
DIAMETER_ERROR_UNKNOWN_EPS_SUBSCRIPTION (5420),
|
||||
DIAMETER_ERROR_RAT_NOT_ALLOWED (5421),
|
||||
DIAMETER_ERROR_EQUIPMENT_UNKNOWN (5422),
|
||||
DIAMETER_ERROR_UNKOWN_SERVING_NODE (5423)
|
||||
}
|
||||
|
||||
/* Gy : 3GPP TS 32.299 7.1.6, RFC4006 3.1 */
|
||||
const uint32_t c_DIAMETER_CREDIT_CONTROL_AID := 4;
|
||||
/* 3GPP TS 29.272 Section 7.1.8 */
|
||||
|
@ -338,6 +354,24 @@ template (value) GenericAVP ts_AVP_VendorId(Vendor_Id vendor_id) := {
|
|||
}
|
||||
}
|
||||
}
|
||||
private function f_tr_AVP_VendorId(template (present) Vendor_Id vendor_id)
|
||||
return template (present) BASE_NONE_Vendor_Id {
|
||||
if (istemplatekind(vendor_id, "?")) {
|
||||
return ?;
|
||||
} else {
|
||||
var template (present) BASE_NONE_Vendor_Id c;
|
||||
c := int2oct(enum2int(valueof(vendor_id)), 4);
|
||||
return c;
|
||||
}
|
||||
}
|
||||
template (present) GenericAVP tr_AVP_VendorId(template (present) Vendor_Id vendor_id) := {
|
||||
avp := {
|
||||
avp_header := tr_DIA_Hdr(c_AVP_Code_BASE_NONE_Vendor_Id),
|
||||
avp_data := {
|
||||
avp_BASE_NONE_Vendor_Id := f_tr_AVP_VendorId(vendor_id)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
template (value) GenericAVP ts_AVP_ProductName(charstring name) := {
|
||||
avp := {
|
||||
|
@ -451,6 +485,28 @@ template (present) GenericAVP tr_AVP_EventTimestamp(template (present) AVP_Unsig
|
|||
}
|
||||
}
|
||||
|
||||
template (present) GenericAVP tr_AVP_ExperimentalResultCode(template (present) AVP_Unsigned32 n := ?) := {
|
||||
avp := {
|
||||
avp_header := tr_DIA_Hdr(c_AVP_Code_BASE_NONE_Experimental_Result_Code),
|
||||
avp_data := {
|
||||
avp_BASE_NONE_Experimental_Result_Code := n
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
template (present) GenericAVP tr_AVP_ExperimentalResult(template (present) Vendor_Id vendor_id := ?,
|
||||
template (present) AVP_Unsigned32 err_code := ?
|
||||
) := {
|
||||
avp := {
|
||||
avp_header := tr_DIA_Hdr(c_AVP_Code_BASE_NONE_Experimental_Result),
|
||||
avp_data := {
|
||||
avp_BASE_NONE_Experimental_Result := {
|
||||
tr_AVP_VendorId(vendor_id),
|
||||
tr_AVP_ExperimentalResultCode(err_code)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
template (value) GenericAVP ts_AVP_SuppVendorIdRaw(uint32_t vendor_id) := {
|
||||
avp := {
|
||||
|
@ -471,11 +527,21 @@ template (value) GenericAVP ts_AVP_ResultCode(DIAMETER_Resultcode res_code) := {
|
|||
}
|
||||
}
|
||||
}
|
||||
template (present) GenericAVP tr_AVP_ResultCode(DIAMETER_Resultcode res_code) := {
|
||||
private function f_tr_DIAMETER_Resultcode(template (present) DIAMETER_Resultcode res_code)
|
||||
return template (present) BASE_NONE_Result_Code {
|
||||
if (istemplatekind(res_code, "?")) {
|
||||
return ?;
|
||||
} else {
|
||||
var template (present) BASE_NONE_Result_Code c;
|
||||
c := int2oct(enum2int(valueof(res_code)), 4);
|
||||
return c;
|
||||
}
|
||||
}
|
||||
template (present) GenericAVP tr_AVP_ResultCode(template (present) DIAMETER_Resultcode res_code) := {
|
||||
avp := {
|
||||
avp_header := tr_DIA_Hdr(c_AVP_Code_BASE_NONE_Result_Code),
|
||||
avp_data := {
|
||||
avp_BASE_NONE_Result_Code := int2oct(enum2int(res_code), 4)
|
||||
avp_BASE_NONE_Result_Code := f_tr_DIAMETER_Resultcode(res_code)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1414,6 +1480,25 @@ tr_DIA_AIA(template (present) AVP_list auth_info_contents := ?,
|
|||
tr_AVP_ResultCode(DIAMETER_SUCCESS),
|
||||
tr_AVP_3GPP_AuthInfo(auth_info_contents)
|
||||
));
|
||||
template (present) PDU_DIAMETER
|
||||
tr_DIA_AIA_ERR(template (present) GenericAVP err_avp := ?,
|
||||
template (present) octetstring sess_id := ?,
|
||||
template (present) charstring orig_host := ?,
|
||||
template (present) charstring orig_realm := ?,
|
||||
template (present) UINT32 hbh_id := ?,
|
||||
template (present) UINT32 ete_id := ?) :=
|
||||
tr_DIAMETER(flags := '0???????'B,
|
||||
cmd_code := Authentication_Information,
|
||||
app_id := int2oct(c_DIAMETER_3GPP_S6_AID, 4),
|
||||
hbh_id := hbh_id,
|
||||
ete_id := ete_id,
|
||||
avps := superset(
|
||||
tr_AVP_SessionId(sess_id),
|
||||
tr_AVP_AuthSessionState(NO_STATE_MAINTAINED),
|
||||
tr_AVP_OriginHost(orig_host),
|
||||
tr_AVP_OriginRealm(orig_realm),
|
||||
err_avp
|
||||
));
|
||||
|
||||
|
||||
/* TS 29.272 7.2.3 Update Location Request */
|
||||
|
|
Loading…
Reference in New Issue