Skip to content

Commit 609c5e0

Browse files
committed
du_high: decouple cu-cp headers from du_high_test
1 parent f3864ef commit 609c5e0

File tree

9 files changed

+149
-162
lines changed

9 files changed

+149
-162
lines changed

tests/integrationtests/du_cu_cp/cu_du_test.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@
88
*
99
*/
1010

11-
#include "../../../lib/du_high/du_high.h"
12-
#include "../../../lib/du_high/du_high_executor_strategies.h"
11+
#include "lib/du_high/du_high.h"
12+
#include "lib/du_high/du_high_executor_strategies.h"
1313
#include "tests/unittests/du_high/test_utils/du_high_worker_manager.h"
1414
#include "tests/unittests/f1ap/common/test_helpers.h"
15+
#include "tests/unittests/f1ap/cu_cp/f1ap_cu_test_helpers.h"
1516
#include "tests/unittests/ngap/test_helpers.h"
1617
#include "srsran/cu_cp/cu_cp.h"
1718
#include "srsran/cu_cp/cu_cp_factory.h"
@@ -48,9 +49,9 @@ class cu_du_test : public ::testing::Test
4849
srslog::init();
4950

5051
// create message handler for CU and DU to relay messages back and forth
51-
dummy_cu_cp_f1ap_pdu_notifier cu_msg_handler(nullptr, nullptr);
52-
dummy_f1ap_pdu_notifier du_msg_handler(nullptr);
53-
srs_cu_cp::dummy_ngap_amf_notifier ngap_amf_notifier;
52+
srs_cu_cp::dummy_cu_cp_f1ap_pdu_notifier cu_msg_handler(nullptr, nullptr);
53+
dummy_f1ap_pdu_notifier du_msg_handler(nullptr);
54+
srs_cu_cp::dummy_ngap_amf_notifier ngap_amf_notifier;
5455
// create CU-CP config
5556
srs_cu_cp::cu_cp_configuration cu_cfg;
5657
cu_cfg.cu_cp_executor = &workers.ctrl_exec;

tests/unittests/f1ap/common/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
# the distribution.
77
#
88

9-
add_library(f1ap_test_helpers f1ap_cu_test_messages.cpp f1ap_du_test_messages.cpp test_helpers.cpp)
9+
add_library(f1ap_test_helpers f1ap_cu_test_messages.cpp f1ap_du_test_messages.cpp)
1010
target_include_directories(f1ap_test_helpers PRIVATE ${CMAKE_SOURCE_DIR})
1111
target_link_libraries(f1ap_test_helpers srsran_support f1ap_asn1 srslog)
1212

tests/unittests/f1ap/common/test_helpers.cpp

Lines changed: 0 additions & 26 deletions
This file was deleted.

tests/unittests/f1ap/common/test_helpers.h

Lines changed: 0 additions & 128 deletions
Original file line numberDiff line numberDiff line change
@@ -10,113 +10,18 @@
1010

1111
#pragma once
1212

13-
#include "srsran/cu_cp/cu_cp.h"
14-
#include "srsran/cu_cp/cu_cp_types.h"
1513
#include "srsran/f1ap/common/f1ap_common.h"
16-
#include "srsran/f1ap/cu_cp/f1ap_cu.h"
1714
#include "srsran/gateways/network_gateway.h"
1815

1916
namespace srsran {
2017

21-
/// \brief Generate a random gnb_cu_ue_f1ap_id
22-
gnb_cu_ue_f1ap_id_t generate_random_gnb_cu_ue_f1ap_id();
23-
24-
/// \brief Generate a random gnb_du_ue_f1ap_id
25-
gnb_du_ue_f1ap_id_t generate_random_gnb_du_ue_f1ap_id();
26-
2718
inline bool is_f1ap_pdu_packable(const asn1::f1ap::f1ap_pdu_c& pdu)
2819
{
2920
byte_buffer buffer;
3021
asn1::bit_ref bref(buffer);
3122
return pdu.pack(bref) == asn1::SRSASN_SUCCESS;
3223
}
3324

34-
class dummy_f1ap_rrc_message_notifier : public srs_cu_cp::f1ap_rrc_message_notifier
35-
{
36-
public:
37-
dummy_f1ap_rrc_message_notifier() = default;
38-
void on_new_rrc_message(asn1::unbounded_octstring<true> rrc_container) override
39-
{
40-
logger.info("Received RRC message");
41-
last_rrc_container = rrc_container;
42-
};
43-
44-
asn1::unbounded_octstring<true> last_rrc_container;
45-
46-
private:
47-
srslog::basic_logger& logger = srslog::fetch_basic_logger("TEST");
48-
};
49-
50-
class dummy_f1ap_du_processor_notifier : public srs_cu_cp::f1ap_du_processor_notifier
51-
{
52-
public:
53-
dummy_f1ap_du_processor_notifier() : logger(srslog::fetch_basic_logger("TEST")) {}
54-
55-
srs_cu_cp::du_index_t get_du_index() override { return srs_cu_cp::du_index_t::min; }
56-
57-
void on_f1_setup_request_received(const srs_cu_cp::cu_cp_f1_setup_request& msg) override
58-
{
59-
logger.info("Received F1SetupRequest");
60-
last_f1_setup_request_msg.gnb_du_id = msg.gnb_du_id;
61-
last_f1_setup_request_msg.gnb_du_name = msg.gnb_du_name;
62-
last_f1_setup_request_msg.gnb_du_rrc_version = msg.gnb_du_rrc_version;
63-
for (const auto& served_cell : msg.gnb_du_served_cells_list) {
64-
srs_cu_cp::cu_cp_du_served_cells_item served_cell_item;
65-
served_cell_item.served_cell_info.nr_cgi = served_cell.served_cell_info.nr_cgi;
66-
served_cell_item.served_cell_info.nr_pci = served_cell.served_cell_info.nr_pci;
67-
served_cell_item.served_cell_info.five_gs_tac = served_cell.served_cell_info.five_gs_tac;
68-
served_cell_item.served_cell_info.cfg_eps_tac = served_cell.served_cell_info.cfg_eps_tac;
69-
served_cell_item.served_cell_info.served_plmns = served_cell.served_cell_info.served_plmns;
70-
served_cell_item.served_cell_info.nr_mode_info = served_cell.served_cell_info.nr_mode_info;
71-
served_cell_item.served_cell_info.meas_timing_cfg = served_cell.served_cell_info.meas_timing_cfg.copy();
72-
73-
if (served_cell.gnb_du_sys_info.has_value()) {
74-
srs_cu_cp::cu_cp_gnb_du_sys_info gnb_du_sys_info;
75-
gnb_du_sys_info.mib_msg = served_cell.gnb_du_sys_info.value().mib_msg.copy();
76-
gnb_du_sys_info.sib1_msg = served_cell.gnb_du_sys_info.value().sib1_msg.copy();
77-
78-
served_cell_item.gnb_du_sys_info = gnb_du_sys_info;
79-
}
80-
81-
last_f1_setup_request_msg.gnb_du_served_cells_list.push_back(served_cell_item);
82-
}
83-
}
84-
85-
srs_cu_cp::ue_creation_complete_message on_create_ue(const srs_cu_cp::f1ap_initial_ul_rrc_message& msg) override
86-
{
87-
logger.info("Received UeCreationRequest");
88-
last_ue_creation_request_msg = msg;
89-
srs_cu_cp::ue_creation_complete_message ret = {};
90-
ret.ue_index = srs_cu_cp::ue_index_t::invalid;
91-
if (ue_id < srs_cu_cp::MAX_NOF_UES_PER_DU) {
92-
ret.ue_index = srs_cu_cp::uint_to_ue_index(ue_id);
93-
last_created_ue_index = ret.ue_index;
94-
ue_id++;
95-
for (uint32_t i = 0; i < MAX_NOF_SRBS; i++) {
96-
ret.srbs[i] = rx_notifier.get();
97-
}
98-
}
99-
return ret;
100-
}
101-
102-
void on_du_initiated_ue_context_release_request(const srs_cu_cp::f1ap_ue_context_release_request& req) override
103-
{
104-
logger.info("Received UEContextReleaseRequest");
105-
// TODO
106-
}
107-
108-
void set_ue_id(uint16_t ue_id_) { ue_id = ue_id_; }
109-
110-
srs_cu_cp::cu_cp_f1_setup_request last_f1_setup_request_msg;
111-
srs_cu_cp::f1ap_initial_ul_rrc_message last_ue_creation_request_msg;
112-
optional<srs_cu_cp::ue_index_t> last_created_ue_index;
113-
std::unique_ptr<dummy_f1ap_rrc_message_notifier> rx_notifier = std::make_unique<dummy_f1ap_rrc_message_notifier>();
114-
115-
private:
116-
srslog::basic_logger& logger;
117-
uint16_t ue_id = ue_index_to_uint(srs_cu_cp::ue_index_t::min);
118-
};
119-
12025
/// Reusable notifier class that a) stores the received PDU for test inspection and b)
12126
/// calls the registered PDU handler (if any). The handler can be added upon construction
12227
/// or later via the attach_handler() method.
@@ -160,39 +65,6 @@ class f1ap_null_notifier : public f1ap_message_notifier
16065
}
16166
};
16267

163-
/// Reusable notifier class that a) stores the received PDU for test inspection and b)
164-
/// calls the registered PDU handler (if any). The handler can be added upon construction
165-
/// or later via the attach_handler() method.
166-
class dummy_cu_cp_f1ap_pdu_notifier : public f1ap_message_notifier
167-
{
168-
public:
169-
dummy_cu_cp_f1ap_pdu_notifier(srs_cu_cp::cu_cp_interface* cu_cp_, f1ap_message_handler* handler_) :
170-
logger(srslog::fetch_basic_logger("TEST")), cu_cp(cu_cp_), handler(handler_){};
171-
172-
void attach_handler(srs_cu_cp::cu_cp_interface* cu_cp_, f1ap_message_handler* handler_)
173-
{
174-
cu_cp = cu_cp_;
175-
handler = handler_;
176-
cu_cp->handle_new_du_connection();
177-
};
178-
void on_new_message(const f1ap_message& msg) override
179-
{
180-
logger.info("Received a PDU of type {}", msg.pdu.type().to_string());
181-
last_f1ap_msg = msg; // store msg
182-
183-
if (handler != nullptr) {
184-
logger.info("Forwarding PDU");
185-
handler->handle_message(msg);
186-
}
187-
}
188-
f1ap_message last_f1ap_msg;
189-
190-
private:
191-
srslog::basic_logger& logger;
192-
srs_cu_cp::cu_cp_interface* cu_cp = nullptr;
193-
f1ap_message_handler* handler = nullptr;
194-
};
195-
19668
/// Dummy handler just printing the received PDU.
19769
class dummy_f1ap_message_handler : public f1ap_message_handler
19870
{

tests/unittests/f1ap/cu_cp/f1ap_cu_test_helpers.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,17 @@
1010

1111
#include "f1ap_cu_test_helpers.h"
1212
#include "srsran/support/async/async_test_utils.h"
13+
#include "srsran/support/test_utils.h"
1314

1415
using namespace srsran;
1516
using namespace srs_cu_cp;
1617

18+
gnb_cu_ue_f1ap_id_t srsran::srs_cu_cp::generate_random_gnb_cu_ue_f1ap_id()
19+
{
20+
return int_to_gnb_cu_ue_f1ap_id(test_rgen::uniform_int<uint64_t>(
21+
gnb_cu_ue_f1ap_id_to_uint(gnb_cu_ue_f1ap_id_t::min), gnb_cu_ue_f1ap_id_to_uint(gnb_cu_ue_f1ap_id_t::max) - 1));
22+
}
23+
1724
f1ap_cu_test::f1ap_cu_test()
1825
{
1926
test_logger.set_level(srslog::basic_levels::debug);

tests/unittests/f1ap/cu_cp/f1ap_cu_test_helpers.h

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
#include "../common/f1ap_cu_test_messages.h"
1414
#include "../common/test_helpers.h"
15+
#include "srsran/cu_cp/cu_cp.h"
1516
#include "srsran/cu_cp/cu_cp_types.h"
1617
#include "srsran/f1ap/common/f1ap_common.h"
1718
#include "srsran/f1ap/cu_cp/f1ap_cu.h"
@@ -22,6 +23,128 @@
2223
namespace srsran {
2324
namespace srs_cu_cp {
2425

26+
/// \brief Generate a random gnb_cu_ue_f1ap_id
27+
gnb_cu_ue_f1ap_id_t generate_random_gnb_cu_ue_f1ap_id();
28+
29+
/// Reusable notifier class that a) stores the received PDU for test inspection and b)
30+
/// calls the registered PDU handler (if any). The handler can be added upon construction
31+
/// or later via the attach_handler() method.
32+
class dummy_cu_cp_f1ap_pdu_notifier : public f1ap_message_notifier
33+
{
34+
public:
35+
dummy_cu_cp_f1ap_pdu_notifier(srs_cu_cp::cu_cp_interface* cu_cp_, f1ap_message_handler* handler_) :
36+
logger(srslog::fetch_basic_logger("TEST")), cu_cp(cu_cp_), handler(handler_){};
37+
38+
void attach_handler(srs_cu_cp::cu_cp_interface* cu_cp_, f1ap_message_handler* handler_)
39+
{
40+
cu_cp = cu_cp_;
41+
handler = handler_;
42+
cu_cp->handle_new_du_connection();
43+
};
44+
void on_new_message(const f1ap_message& msg) override
45+
{
46+
logger.info("Received a PDU of type {}", msg.pdu.type().to_string());
47+
last_f1ap_msg = msg; // store msg
48+
49+
if (handler != nullptr) {
50+
logger.info("Forwarding PDU");
51+
handler->handle_message(msg);
52+
}
53+
}
54+
f1ap_message last_f1ap_msg;
55+
56+
private:
57+
srslog::basic_logger& logger;
58+
srs_cu_cp::cu_cp_interface* cu_cp = nullptr;
59+
f1ap_message_handler* handler = nullptr;
60+
};
61+
62+
class dummy_f1ap_rrc_message_notifier : public srs_cu_cp::f1ap_rrc_message_notifier
63+
{
64+
public:
65+
dummy_f1ap_rrc_message_notifier() = default;
66+
void on_new_rrc_message(asn1::unbounded_octstring<true> rrc_container) override
67+
{
68+
logger.info("Received RRC message");
69+
last_rrc_container = rrc_container;
70+
};
71+
72+
asn1::unbounded_octstring<true> last_rrc_container;
73+
74+
private:
75+
srslog::basic_logger& logger = srslog::fetch_basic_logger("TEST");
76+
};
77+
78+
class dummy_f1ap_du_processor_notifier : public srs_cu_cp::f1ap_du_processor_notifier
79+
{
80+
public:
81+
dummy_f1ap_du_processor_notifier() : logger(srslog::fetch_basic_logger("TEST")) {}
82+
83+
srs_cu_cp::du_index_t get_du_index() override { return srs_cu_cp::du_index_t::min; }
84+
85+
void on_f1_setup_request_received(const srs_cu_cp::cu_cp_f1_setup_request& msg) override
86+
{
87+
logger.info("Received F1SetupRequest");
88+
last_f1_setup_request_msg.gnb_du_id = msg.gnb_du_id;
89+
last_f1_setup_request_msg.gnb_du_name = msg.gnb_du_name;
90+
last_f1_setup_request_msg.gnb_du_rrc_version = msg.gnb_du_rrc_version;
91+
for (const auto& served_cell : msg.gnb_du_served_cells_list) {
92+
srs_cu_cp::cu_cp_du_served_cells_item served_cell_item;
93+
served_cell_item.served_cell_info.nr_cgi = served_cell.served_cell_info.nr_cgi;
94+
served_cell_item.served_cell_info.nr_pci = served_cell.served_cell_info.nr_pci;
95+
served_cell_item.served_cell_info.five_gs_tac = served_cell.served_cell_info.five_gs_tac;
96+
served_cell_item.served_cell_info.cfg_eps_tac = served_cell.served_cell_info.cfg_eps_tac;
97+
served_cell_item.served_cell_info.served_plmns = served_cell.served_cell_info.served_plmns;
98+
served_cell_item.served_cell_info.nr_mode_info = served_cell.served_cell_info.nr_mode_info;
99+
served_cell_item.served_cell_info.meas_timing_cfg = served_cell.served_cell_info.meas_timing_cfg.copy();
100+
101+
if (served_cell.gnb_du_sys_info.has_value()) {
102+
srs_cu_cp::cu_cp_gnb_du_sys_info gnb_du_sys_info;
103+
gnb_du_sys_info.mib_msg = served_cell.gnb_du_sys_info.value().mib_msg.copy();
104+
gnb_du_sys_info.sib1_msg = served_cell.gnb_du_sys_info.value().sib1_msg.copy();
105+
106+
served_cell_item.gnb_du_sys_info = gnb_du_sys_info;
107+
}
108+
109+
last_f1_setup_request_msg.gnb_du_served_cells_list.push_back(served_cell_item);
110+
}
111+
}
112+
113+
srs_cu_cp::ue_creation_complete_message on_create_ue(const srs_cu_cp::f1ap_initial_ul_rrc_message& msg) override
114+
{
115+
logger.info("Received UeCreationRequest");
116+
last_ue_creation_request_msg = msg;
117+
srs_cu_cp::ue_creation_complete_message ret = {};
118+
ret.ue_index = srs_cu_cp::ue_index_t::invalid;
119+
if (ue_id < srs_cu_cp::MAX_NOF_UES_PER_DU) {
120+
ret.ue_index = srs_cu_cp::uint_to_ue_index(ue_id);
121+
last_created_ue_index = ret.ue_index;
122+
ue_id++;
123+
for (uint32_t i = 0; i < MAX_NOF_SRBS; i++) {
124+
ret.srbs[i] = rx_notifier.get();
125+
}
126+
}
127+
return ret;
128+
}
129+
130+
void on_du_initiated_ue_context_release_request(const srs_cu_cp::f1ap_ue_context_release_request& req) override
131+
{
132+
logger.info("Received UEContextReleaseRequest");
133+
// TODO
134+
}
135+
136+
void set_ue_id(uint16_t ue_id_) { ue_id = ue_id_; }
137+
138+
srs_cu_cp::cu_cp_f1_setup_request last_f1_setup_request_msg;
139+
srs_cu_cp::f1ap_initial_ul_rrc_message last_ue_creation_request_msg;
140+
optional<srs_cu_cp::ue_index_t> last_created_ue_index;
141+
std::unique_ptr<dummy_f1ap_rrc_message_notifier> rx_notifier = std::make_unique<dummy_f1ap_rrc_message_notifier>();
142+
143+
private:
144+
srslog::basic_logger& logger;
145+
uint16_t ue_id = ue_index_to_uint(srs_cu_cp::ue_index_t::min);
146+
};
147+
25148
/// Reusable notifier class that a) stores the received du_index for test inspection and b)
26149
/// calls the registered DU handler (if any). The handler can be added upon construction
27150
/// or later via the attach_handler() method.

tests/unittests/f1ap/cu_cp/f1ap_cu_ue_context_test.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
*/
1010

1111
#include "../common/test_helpers.h"
12+
#include "f1ap_cu_test_helpers.h"
1213
#include "lib/f1ap/cu_cp/ue_context/f1ap_cu_ue_context.h"
1314
#include "srsran/support/executors/manual_task_worker.h"
1415
#include "srsran/support/test_utils.h"
@@ -27,13 +28,13 @@ class f1ap_cu_ue_context_test : public ::testing::Test
2728
{
2829
// flush logger after each test
2930
srslog::flush();
30-
};
31+
}
3132

3233
ue_index_t generate_random_ue_index()
3334
{
3435
return uint_to_ue_index(
3536
test_rgen::uniform_int<uint64_t>(ue_index_to_uint(ue_index_t::min), ue_index_to_uint(ue_index_t::max) - 1));
36-
};
37+
}
3738

3839
timer_manager timer_mng;
3940
manual_task_worker ctrl_worker{128};

0 commit comments

Comments
 (0)