neels has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/37809?usp=email )
Change subject: hnbgw: test for RUA Disconnect when there is no CN ......................................................................
hnbgw: test for RUA Disconnect when there is no CN
Related: OS#6283 Related: osmo-hnbgw Iafb30c31a4c5db53ecdda99a0e0b5937b71e362c Change-Id: I2b5c024a395e736538c0c37db40d34f3b8d99991 --- M hnbgw/HNBGW_Tests.ttcn 1 file changed, 49 insertions(+), 11 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/09/37809/1
diff --git a/hnbgw/HNBGW_Tests.ttcn b/hnbgw/HNBGW_Tests.ttcn index 3765411..bfbab7d 100644 --- a/hnbgw/HNBGW_Tests.ttcn +++ b/hnbgw/HNBGW_Tests.ttcn @@ -290,6 +290,7 @@ HnbConfig hnb optional, boolean expect_separate_sccp_cr, integer tx_sccp_cr_data_len, + boolean expect_compl_l3_success, charstring pfcp_local_addr, octetstring nas_pdu optional, /* local and remote SCCP addresses, used in TC_mscpool_paging_* */ @@ -1197,6 +1198,7 @@ hnb := omit, /* filled in later */ expect_separate_sccp_cr := expect_separate_sccp_cr, tx_sccp_cr_data_len := tx_sccp_cr_data_len, + expect_compl_l3_success := true, pfcp_local_addr := mp_pfcp_ip_local, nas_pdu := omit, sccp_addr_msc := omit, @@ -2155,37 +2157,43 @@ f_counter_name_vals_list_add(g_ctr_cn, cn_nr, countername, val); }
-private function f_perform_compl_l3(octetstring nas, boolean do_clear := true, boolean expect_iu_l3 := true) +private function f_perform_compl_l3(octetstring nas, boolean do_clear := true, boolean expect_success := true) runs on ConnHdlr { timer T := 10.0;
- /* create an expect on the Iu side for the random NAS portion */ - if (g_pars.expect_separate_sccp_cr) { - f_ran_register_sccp_cr_without_payload(); - } else { - f_ran_register_exp(nas); + if (expect_success) { + /* create an expect on the Iu side for the random NAS portion */ + if (g_pars.expect_separate_sccp_cr) { + f_ran_register_sccp_cr_without_payload(); + } else { + f_ran_register_exp(nas); + } }
/* send Connect via Iuh (creating a RUA connection) */ var RANAP_PDU tx := f_build_initial_ue_with_nas(g_pars, nas); RUA.send(RUA_Conn_Req:{g_pars.ps_domain, tx});
- if (expect_iu_l3) { + if (expect_success) { /* Expect same message to arrive at CN */ f_bssap_expect(tx); + } else { + RUA.receive(RUA_Disc_Ind:?); } }
private function f_tc_cnpool_compl_l3(charstring id, TestHdlrParams pars) runs on ConnHdlr { f_init_handler(pars); - f_perform_compl_l3(g_pars.nas_pdu); + f_perform_compl_l3(g_pars.nas_pdu, expect_success := g_pars.expect_compl_l3_success); }
private function f_TC_cnpool_compl_l3(boolean ps_domain, octetstring nas_pdu, integer cn_nr, - template (omit) charstring inc_countername := omit) runs on test_CT { + template (omit) charstring inc_countername := omit, + boolean expect_compl_l3_success := true) runs on test_CT { var ConnHdlr vc_conn; var template (value) TestHdlrParams pars := t_pars(0, ps_domain := ps_domain, cn_nr := cn_nr); pars.nas_pdu := nas_pdu; + pars.expect_compl_l3_success := expect_compl_l3_success; log("XXX ", pars); vc_conn := f_start_handler_with_pars(refers(f_tc_cnpool_compl_l3), pars); vc_conn.done; @@ -2196,14 +2204,16 @@ }
function f_TC_cnpool_compl_l3_list(boolean ps_domain, ro_octetstring compl3, Osmocom_Types.ro_integer cn_nrs, - charstring inc_countername) runs on test_CT { + template (omit) charstring inc_countername, + boolean expect_compl_l3_success := true) runs on test_CT { var integer n := lengthof(compl3); if (n < lengthof(cn_nrs)) { n := lengthof(cn_nrs); } for (var integer i := 0; i < n; i := i + 1) { var integer cn_nr := cn_nrs[i mod lengthof(cn_nrs)]; - f_TC_cnpool_compl_l3(ps_domain, compl3[i mod lengthof(compl3)], cn_nr, inc_countername); + f_TC_cnpool_compl_l3(ps_domain, compl3[i mod lengthof(compl3)], cn_nr, inc_countername, + expect_compl_l3_success); } }
@@ -2984,6 +2994,34 @@ f_shutdown_helper(); }
+/* When no CN was found for a UE / domain, make sure osmo-hnbgw returns a Disconnect (OS#6283) */ +testcase TC_mscpool_L3Compl_no_cn() runs on test_CT { + f_TC_cnpool_L3Compl_no_cn(ps_domain := false); +} +testcase TC_sgsnpool_L3Compl_no_cn() runs on test_CT { + f_TC_cnpool_L3Compl_no_cn(ps_domain := true); +} +function f_TC_cnpool_L3Compl_no_cn(boolean ps_domain) runs on test_CT { + + /* Have one MSC and one SGSN but do not allow attaching. + * I would use no MSCs and no SGSNs, but then we need many tweaks to allow test startup without any "BSSAP" + * port. */ + f_init(); + f_vty_cnlink_allow_attach(HNBGWVTY, ps_domain, {false}); + + f_ctrs_cn_init(ps_domain := ps_domain); + + var ro_octetstring compl3 := f_gen_compl3_by_domain(ps_domain, 4); + f_TC_cnpool_compl_l3_list(ps_domain, compl3, {0, 0, 0, 0}, omit, // FIXME failure counter? + expect_compl_l3_success := false); + + f_shutdown_helper(); +} + + + + + control { execute(TC_hnb_register()); execute(TC_hnb_register_duplicate());