Skip to content

Commit 0ec6b18

Browse files
FabianEckermannFabian Eckermann
authored andcommitted
du_manager: add unit test for f1u_ext_addr
1 parent 652c0f7 commit 0ec6b18

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed

tests/unittests/du_manager/procedures/ue_configuration_test.cpp

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,55 @@ TEST_F(ue_config_tester, when_du_manager_finishes_processing_ue_config_request_t
301301
ASSERT_EQ(test_payload, extracted_payload);
302302
}
303303

304+
TEST_F(ue_config_tester,
305+
when_du_manager_finishes_processing_ue_config_request_with_f1u_ext_addr_then_mac_rlc_f1u_bearers_are_connected)
306+
{
307+
// Add F1-U external address to the F1-U GW.
308+
std::string f1u_ext_addr = "5.6.7.8";
309+
f1u_gw.set_f1u_ext_addr(f1u_ext_addr);
310+
311+
const static std::array<uint8_t, 2> dummy_rlc_header = {0x80, 0x0};
312+
byte_buffer test_payload = test_helpers::create_pdcp_pdu(
313+
pdcp_sn_size::size12bits, /* is_srb = */ false, 0, test_rgen::uniform_int<unsigned>(3, 100), 0);
314+
315+
// Run UE Configuration Procedure to completion.
316+
f1ap_ue_context_update_response resp =
317+
configure_ue(create_f1ap_ue_context_update_request(test_ue->ue_index, {}, {drb_id_t::drb1}));
318+
319+
// Check that the DL UP TNL Info has the correct F1-U external address.
320+
ASSERT_EQ(resp.drbs_setup.size(), 1);
321+
ASSERT_EQ(resp.drbs_setup[0].dluptnl_info_list.size(), 1);
322+
ASSERT_EQ(resp.drbs_setup[0].dluptnl_info_list[0].tp_address,
323+
transport_layer_address::create_from_string(f1u_ext_addr));
324+
325+
srs_du::f1u_gw_bearer_dummy* bearer = f1u_gw.f1u_bearers.begin()->second.begin()->second;
326+
327+
// Forward MAC Rx SDU through DRB1 (UL).
328+
// > Add dummy RLC data header.
329+
byte_buffer mac_sdu = byte_buffer::create(dummy_rlc_header).value();
330+
// > Append data buffer.
331+
ASSERT_TRUE(mac_sdu.append(test_payload.copy()));
332+
// > Push MAC Rx SDU through MAC logical channel.
333+
mac.last_ue_reconf_msg->bearers_to_addmod[0].ul_bearer->on_new_sdu({mac_sdu.copy()});
334+
// > Check arrival of F1-U Tx SDU to F1-U bearer.
335+
auto last_sdu = bearer->last_sdu->t_pdu->deep_copy().value();
336+
ASSERT_EQ(test_payload, last_sdu);
337+
338+
// Forward F1-U Rx SDU through DRB1 (DL).
339+
// > Create data buffer.
340+
nru_dl_message rx_sdu;
341+
rx_sdu.t_pdu = test_payload.copy();
342+
// > Push F1-U Rx SDU through F1-U bearer Rx SDU notifier.
343+
bearer->du_rx.on_new_pdu(std::move(rx_sdu));
344+
345+
// > Check arrival of MAC Tx SDU to MAC logical channel.
346+
std::vector<uint8_t> mac_tx_sdu(test_payload.length() + dummy_rlc_header.size());
347+
unsigned nwritten = mac.last_ue_reconf_msg->bearers_to_addmod[0].dl_bearer->on_new_tx_sdu(mac_tx_sdu);
348+
byte_buffer extracted_payload =
349+
byte_buffer::create(mac_tx_sdu.begin() + dummy_rlc_header.size(), mac_tx_sdu.begin() + nwritten).value();
350+
ASSERT_EQ(test_payload, extracted_payload);
351+
}
352+
304353
TEST_F(ue_config_tester, when_f1u_gw_fails_to_create_bearer_then_drb_is_included_in_failed_list)
305354
{
306355
this->f1u_gw.next_bearer_is_created = false;

0 commit comments

Comments
 (0)