pespin has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/34255 )


Change subject: dia2gsup: Introduce new error scenario tests
......................................................................

dia2gsup: Introduce new error scenario tests

The tests expect so far that osmo_dia2gsup returns
DIAMETER_AVP_UNSUPPORTED for all of them, which is the current behavior,
but osmo_dia2gsup probably has to be improved to return matching errors.

Related: OS#5757
Change-Id: Ic870a2c1de74bee3f7d8e26874635d58469ccbea
---
M dia2gsup/DIA2GSUP_Tests.ttcn
M library/DIAMETER_Templates.ttcn
2 files changed, 179 insertions(+), 2 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks 
refs/changes/55/34255/1

diff --git a/dia2gsup/DIA2GSUP_Tests.ttcn b/dia2gsup/DIA2GSUP_Tests.ttcn
index 6a3f85c..fecec12 100644
--- a/dia2gsup/DIA2GSUP_Tests.ttcn
+++ b/dia2gsup/DIA2GSUP_Tests.ttcn
@@ -214,8 +214,142 @@
        setverdict(pass);
 }

+private function f_DIA_AI_gsup_error(integer gsup_cause, DIAMETER_Resultcode 
res_code) 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(res_code)) {
+               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 {
+       f_DIA_AI_gsup_error(2, DIAMETER_AVP_UNSUPPORTED);
+}
+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 {
+       f_DIA_AI_gsup_error(3, DIAMETER_AVP_UNSUPPORTED);
+}
+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, DIAMETER_AVP_UNSUPPORTED);
+}
+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 {
+       f_DIA_AI_gsup_error(11, DIAMETER_AVP_UNSUPPORTED);
+}
+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, DIAMETER_AVP_UNSUPPORTED);
+}
+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, DIAMETER_AVP_UNSUPPORTED);
+}
+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, DIAMETER_AVP_UNSUPPORTED);
+}
+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, DIAMETER_AVP_UNSUPPORTED);
+}
+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() );
 }

 }
diff --git a/library/DIAMETER_Templates.ttcn b/library/DIAMETER_Templates.ttcn
index 63db7fc..cb664a5 100644
--- a/library/DIAMETER_Templates.ttcn
+++ b/library/DIAMETER_Templates.ttcn
@@ -471,11 +471,21 @@
                }
        }
 }
-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 +1424,25 @@
                        tr_AVP_ResultCode(DIAMETER_SUCCESS),
                        tr_AVP_3GPP_AuthInfo(auth_info_contents)
        ));
+template (present) PDU_DIAMETER
+tr_DIA_AIA_ERR(template (present) DIAMETER_Resultcode res_code := ?,
+          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),
+                       tr_AVP_ResultCode(res_code)
+       ));


 /* TS 29.272 7.2.3 Update Location Request */

--
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/34255
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: Ic870a2c1de74bee3f7d8e26874635d58469ccbea
Gerrit-Change-Number: 34255
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <[email protected]>
Gerrit-MessageType: newchange

Reply via email to