@@ -263,8 +263,7 @@ TEST_F(cu_cp_test, when_unsupported_inactivity_message_received_then_ue_context_
263263/* AMF initiated PDU Session Release */
264264// ////////////////////////////////////////////////////////////////////////////////////
265265
266- // Bearer Context Release is not sent even if last PDU session is removed. Only NGAP UE context release triggers Bearer
267- // Context Release.
266+ // When multiple PDU sessions exist and not all of them are released, a BearerContextModification is sent to the CU-UP
268267TEST_F (cu_cp_test, when_pdu_session_resource_release_command_received_then_modification_request_is_sent)
269268{
270269 // Test preamble
@@ -275,15 +274,16 @@ TEST_F(cu_cp_test, when_pdu_session_resource_release_command_received_then_modif
275274 pci_t pci = 1 ;
276275 amf_ue_id_t amf_ue_id = uint_to_amf_ue_id (
277276 test_rgen::uniform_int<uint64_t >(amf_ue_id_to_uint (amf_ue_id_t ::min), amf_ue_id_to_uint (amf_ue_id_t ::max)));
278- ran_ue_id_t ran_ue_id = uint_to_ran_ue_id (0 );
279- gnb_cu_cp_ue_e1ap_id_t cu_cp_ue_e1ap_id = int_to_gnb_cu_cp_ue_e1ap_id (0 );
280- gnb_cu_up_ue_e1ap_id_t cu_up_ue_e1ap_id = int_to_gnb_cu_up_ue_e1ap_id (0 );
277+ ran_ue_id_t ran_ue_id = uint_to_ran_ue_id (0 );
278+ std::vector<pdu_session_id_t > psis = {uint_to_pdu_session_id (1 ), uint_to_pdu_session_id (2 )};
279+ gnb_cu_cp_ue_e1ap_id_t cu_cp_ue_e1ap_id = int_to_gnb_cu_cp_ue_e1ap_id (0 );
280+ gnb_cu_up_ue_e1ap_id_t cu_up_ue_e1ap_id = int_to_gnb_cu_up_ue_e1ap_id (0 );
281281
282282 // Connect AMF, DU, CU-UP
283283 test_preamble_all_connected (du_index, pci);
284284 // Attach UE
285285 test_preamble_ue_full_attach (
286- du_index, du_ue_id, cu_ue_id, crnti, amf_ue_id, ran_ue_id, cu_cp_ue_e1ap_id, cu_up_ue_e1ap_id);
286+ du_index, du_ue_id, cu_ue_id, crnti, amf_ue_id, ran_ue_id, psis, cu_cp_ue_e1ap_id, cu_up_ue_e1ap_id);
287287
288288 // Inject PduSessionResourceReleaseCommand
289289 cu_cp_obj->get_ngap_message_handler ().handle_message (
@@ -295,6 +295,41 @@ TEST_F(cu_cp_test, when_pdu_session_resource_release_command_received_then_modif
295295 asn1::e1ap::e1ap_elem_procs_o::init_msg_c::types_opts::bearer_context_mod_request);
296296}
297297
298+ // When all active PDU sessions are released a BearerContextReleaseCommand is sent to the CU-UP
299+ TEST_F (cu_cp_test, when_all_pdu_sessions_get_released_then_bearer_context_release_command_is_sent)
300+ {
301+ // Test preamble
302+ du_index_t du_index = uint_to_du_index (0 );
303+ gnb_cu_ue_f1ap_id_t cu_ue_id = int_to_gnb_cu_ue_f1ap_id (0 );
304+ gnb_du_ue_f1ap_id_t du_ue_id = int_to_gnb_du_ue_f1ap_id (0 );
305+ rnti_t crnti = to_rnti (0x4601 );
306+ pci_t pci = 1 ;
307+ amf_ue_id_t amf_ue_id = uint_to_amf_ue_id (
308+ test_rgen::uniform_int<uint64_t >(amf_ue_id_to_uint (amf_ue_id_t ::min), amf_ue_id_to_uint (amf_ue_id_t ::max)));
309+ ran_ue_id_t ran_ue_id = uint_to_ran_ue_id (0 );
310+ std::vector<pdu_session_id_t > psis = {uint_to_pdu_session_id (1 )};
311+ gnb_cu_cp_ue_e1ap_id_t cu_cp_ue_e1ap_id = int_to_gnb_cu_cp_ue_e1ap_id (0 );
312+ gnb_cu_up_ue_e1ap_id_t cu_up_ue_e1ap_id = int_to_gnb_cu_up_ue_e1ap_id (0 );
313+
314+ // Connect AMF, DU, CU-UP
315+ test_preamble_all_connected (du_index, pci);
316+ // Attach UE
317+ test_preamble_ue_full_attach (
318+ du_index, du_ue_id, cu_ue_id, crnti, amf_ue_id, ran_ue_id, psis, cu_cp_ue_e1ap_id, cu_up_ue_e1ap_id);
319+
320+ // Inject PduSessionResourceReleaseCommand
321+ cu_cp_obj->get_ngap_message_handler ().handle_message (
322+ generate_valid_pdu_session_resource_release_command (amf_ue_id, ran_ue_id, uint_to_pdu_session_id (1 )));
323+
324+ // Check that the Bearer Context Release was sent to the CU-UP
325+ ASSERT_EQ (e1ap_gw.last_tx_pdus (0 ).back ().pdu .type (), asn1::e1ap::e1ap_pdu_c::types_opts::options::init_msg);
326+ ASSERT_EQ (e1ap_gw.last_tx_pdus (0 ).back ().pdu .init_msg ().value .type ().value ,
327+ asn1::e1ap::e1ap_elem_procs_o::init_msg_c::types_opts::bearer_context_release_cmd);
328+
329+ // Check that no UE Context Release Request was sent to the AMF
330+ ASSERT_NE (n2_gw.last_ngap_msgs .back ().pdu .type (), asn1::ngap::ngap_pdu_c::types_opts::options::init_msg);
331+ }
332+
298333// ////////////////////////////////////////////////////////////////////////////////////
299334/* AMF initiated UE Context Release */
300335// ////////////////////////////////////////////////////////////////////////////////////
0 commit comments