epdg: Several fixes to TC_hss_initiated_deregister_permanent_termination

I forgot to submit some fixes before merging.

Fixes: a7823b96cb566dd9ce6a9f640803833c9f6c6a9f
Change-Id: Ic4d0d649221d669dee32edeb94b89e95ec1b1c08
diff --git a/epdg/EPDG_Tests.ttcn b/epdg/EPDG_Tests.ttcn
index 71b65c0..bc4219b 100644
--- a/epdg/EPDG_Tests.ttcn
+++ b/epdg/EPDG_Tests.ttcn
@@ -473,7 +473,8 @@
 
 /* Send RTR as HSS to AAA server, expect back RTA */
 private function f_DIA_SWx_RT(template (value) CxDx_3GPP_Reason_Code reason_code,
-			      template (present) GenericAVP exp_result_tmpl := tr_AVP_ResultCode(DIAMETER_SUCCESS)) runs on EPDG_ConnHdlr {
+			      template (present) GenericAVP exp_result_tmpl := tr_AVP_ResultCode(DIAMETER_SUCCESS),
+			      boolean exp_aaa_proc := true) runs on EPDG_ConnHdlr {
 	var PDU_DIAMETER rx_dia;
 	var UINT32 hbh_id := f_rnd_octstring(4);
 	var UINT32 ete_id := f_rnd_octstring(4);
@@ -489,12 +490,14 @@
 				hbh_id := hbh_id,
 				ete_id := ete_id));
 
-	if (match(reason_code_permanent_termination, reason_code)) {
+	if (match(reason_code_permanent_termination, reason_code) and exp_aaa_proc) {
 		/* Expect Abort-Session procedure (ASR + ASA) in the S6b interface: */
 		as_DIA_S6b_AS_success();
 		/* Here AAA-Server starts an ASR + ASA procedure towards ePDG, which forwards it to strongswan: */
 		as_GSUP_rx_CL_REQ(OSMO_GSUP_CANCEL_TYPE_WITHDRAW);
 		f_GSUP_tx_CL_RES();
+		/* No need to so STR+STA, since the session was already aborted above during ASR+ASA: */
+		as_GTP2C_DeleteSession_success(do_s6b_st_proc := false);
 	}
 
 	alt {
@@ -566,7 +569,7 @@
 	[] S6b.receive(tr_DIA_S6b_ASR(f_nai())) -> value rx_dia {
 		avp := f_DIAMETER_get_avp(rx_dia, c_AVP_Code_BASE_NONE_Session_Id);
 		sess_id := valueof(avp.avp_data.avp_BASE_NONE_Session_Id);
-		SWx.send(ts_DIA_S6b_ASA(DIAMETER_SUCCESS,
+		S6b.send(ts_DIA_S6b_ASA(DIAMETER_SUCCESS,
 					sess_id := sess_id,
 					hbh_id := rx_dia.hop_by_hop_id,
 					ete_id := rx_dia.end_to_end_id));
@@ -702,7 +705,7 @@
 }
 
 /* ePDG Deletes session at the PGW. PGW sends Diameter s6b AAR + AAA. */
-private altstep as_GTP2C_DeleteSession_success() runs on EPDG_ConnHdlr {
+private altstep as_GTP2C_DeleteSession_success(boolean do_s6b_st_proc := true) runs on EPDG_ConnHdlr {
 	var PDU_GTPCv2 rx_msg;
 	var BearerContextIEs rx_bctx_ies;
 	var template (value) FullyQualifiedTEID fteid_c_ie, fteid_u_ie;
@@ -710,8 +713,10 @@
 	var template (value) BearerContextIEs bctx_ies;
 
 	[] GTP2.receive(tr_GTP2C_DeleteSessionReq(g_pars.teic_local)) -> value rx_msg {
-		/* Upon rx of DeleteSession, emulate PGW requesting the AAA server for Sesssion Termination. */
-		f_S6b_ST_success();
+		if (do_s6b_st_proc) {
+			/* Upon rx of DeleteSession, emulate PGW requesting the AAA server for Sesssion Termination. */
+			f_S6b_ST_success();
+		}
 
 		GTP2.send(ts_GTP2C_DeleteSessionResp(g_pars.teic_remote,
 						     rx_msg.sequenceNumber,
@@ -1121,7 +1126,8 @@
 	f_DIA_SWx_RT(PERMANENT_TERMINATION, tr_AVP_ResultCode(DIAMETER_SUCCESS));
 	/* Subscriber was already removed, it should fail if requested again: */
 	var DIAMETER_ts29_229_ExperimentalResultcode erc := DIAMETER_ERROR_USER_UNKNOWN;
-	f_DIA_SWx_RT(PERMANENT_TERMINATION, tr_AVP_ExperimentalResult(vendor_id_3GPP, int2oct(enum2int(erc), 4)));
+	f_DIA_SWx_RT(PERMANENT_TERMINATION, tr_AVP_ExperimentalResult(vendor_id_3GPP, int2oct(enum2int(erc), 4)),
+		     exp_aaa_proc := false);
 }
 testcase TC_hss_initiated_deregister_permanent_termination() runs on MTC_CT {
 	var EPDG_ConnHdlrPars pars := f_init_pars();