Skip to content

Commit d97fa5d

Browse files
Piotr Gawlowiczcodebot
authored andcommitted
e2sm_kpm, test: replace PCAP_OUTPUT with a commandline arg
1 parent 34b6173 commit d97fa5d

File tree

1 file changed

+126
-61
lines changed

1 file changed

+126
-61
lines changed

tests/unittests/e2/e2sm_kpm_meas_provider_test.cpp

Lines changed: 126 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -11,25 +11,15 @@
1111
#include "lib/e2/common/e2ap_asn1_packer.h"
1212
#include "lib/e2/e2sm/e2sm_kpm/e2sm_kpm_du_meas_provider_impl.h"
1313
#include "tests/unittests/e2/common/e2_test_helpers.h"
14+
#include "srsran/support/executors/task_worker.h"
1415
#include "srsran/support/srsran_test.h"
1516
#include <gtest/gtest.h>
1617

1718
using namespace srsran;
1819

19-
#define PCAP_OUTPUT 0
20-
21-
#if PCAP_OUTPUT
22-
std::unique_ptr<dlt_pcap> g_pcap = std::make_unique<dlt_pcap_impl>(PCAP_E2AP_DLT, "E2AP");
23-
24-
inline void save_msg_pcap(const byte_buffer& last_pdu)
25-
{
26-
if (not g_pcap->is_write_enabled()) {
27-
g_pcap->open("e2sm_kpm_meas_provider.pcap");
28-
}
29-
g_pcap->push_pdu(last_pdu.copy());
30-
usleep(200);
31-
}
32-
#endif
20+
// Helper global variables to pass pcap_writer to all tests.
21+
bool g_enable_pcap = false;
22+
dlt_pcap* g_pcap = nullptr;
3323

3424
class e2_rlc_metrics_notifier : public e2_du_metrics_notifier, public e2_du_metrics_interface
3525
{
@@ -56,10 +46,59 @@ class e2_rlc_metrics_notifier : public e2_du_metrics_notifier, public e2_du_metr
5646
e2_du_metrics_notifier* e2_meas_provider;
5747
};
5848

59-
class e2sm_kpm_meas_provider_test : public ::testing::Test
49+
class e2_entity_test_with_pcap : public e2_test_base_with_pcap
6050
{
51+
protected:
52+
dlt_pcap* external_pcap_writer;
53+
6154
void SetUp() override
6255
{
56+
external_pcap_writer = GetParam();
57+
58+
srslog::fetch_basic_logger("TEST").set_level(srslog::basic_levels::debug);
59+
srslog::init();
60+
61+
cfg = config_helpers::make_default_e2ap_config();
62+
cfg.e2sm_kpm_enabled = true;
63+
64+
gw = std::make_unique<dummy_network_gateway_data_handler>();
65+
pcap = std::make_unique<dummy_e2ap_pcap>();
66+
if (external_pcap_writer) {
67+
packer = std::make_unique<srsran::e2ap_asn1_packer>(*gw, *e2, *external_pcap_writer);
68+
} else {
69+
packer = std::make_unique<srsran::e2ap_asn1_packer>(*gw, *e2, *pcap);
70+
}
71+
e2_client = std::make_unique<dummy_e2_connection_client>();
72+
du_metrics = std::make_unique<dummy_e2_du_metrics>();
73+
f1ap_ue_id_mapper = std::make_unique<dummy_f1ap_ue_id_translator>();
74+
factory = timer_factory{timers, task_worker};
75+
rc_param_configurator = std::make_unique<dummy_du_configurator>();
76+
e2 = create_e2_du_entity(cfg,
77+
e2_client.get(),
78+
du_metrics.get(),
79+
f1ap_ue_id_mapper.get(),
80+
rc_param_configurator.get(),
81+
factory,
82+
task_worker);
83+
}
84+
85+
void TearDown() override
86+
{
87+
// flush logger after each test
88+
srslog::flush();
89+
pcap->close();
90+
}
91+
};
92+
93+
class e2sm_kpm_meas_provider_test : public testing::TestWithParam<dlt_pcap*>
94+
{
95+
protected:
96+
dlt_pcap* external_pcap_writer;
97+
98+
void SetUp() override
99+
{
100+
external_pcap_writer = GetParam();
101+
63102
srslog::fetch_basic_logger("TEST").set_level(srslog::basic_levels::debug);
64103
srslog::init();
65104

@@ -73,8 +112,11 @@ class e2sm_kpm_meas_provider_test : public ::testing::Test
73112
e2sm_iface = std::make_unique<e2sm_kpm_impl>(test_logger, *e2sm_packer, *du_meas_provider);
74113
gw = std::make_unique<dummy_network_gateway_data_handler>();
75114
pcap = std::make_unique<dummy_e2ap_pcap>();
76-
packer = std::make_unique<srsran::e2ap_asn1_packer>(*gw, *e2, *pcap);
77-
115+
if (external_pcap_writer) {
116+
packer = std::make_unique<srsran::e2ap_asn1_packer>(*gw, *e2, *external_pcap_writer);
117+
} else {
118+
packer = std::make_unique<srsran::e2ap_asn1_packer>(*gw, *e2, *pcap);
119+
}
78120
du_metrics->connect_e2_du_meas_provider(du_meas_provider.get());
79121
}
80122

@@ -174,30 +216,27 @@ scheduler_cell_metrics generate_sched_metrics(uint32_t
174216
return sched_metric;
175217
}
176218

177-
#if PCAP_OUTPUT
178-
TEST_F(e2_entity_test, e2sm_kpm_generates_ran_func_desc)
219+
// E2 Setup Request is needed for Wireshark to correctly decode the subsequent Subscription Requests
220+
TEST_P(e2_entity_test_with_pcap, e2sm_kpm_generates_ran_func_desc)
179221
{
180-
dummy_e2_pdu_notifier* dummy_msg_notifier = e2_client->get_e2_msg_notifier();
181222
// We need this test to generate E2 Setup Request, so Wireshark can decode the following RIC indication messages.
182223
test_logger.info("Launch e2 setup request procedure with task worker...");
183224
e2->start();
184225

185-
save_msg_pcap(gw->last_pdu);
186-
187226
// Need to send setup response, so the transaction can be completed.
188-
unsigned transaction_id = get_transaction_id(dummy_msg_notifier->last_e2_msg.pdu).value();
227+
unsigned transaction_id = get_transaction_id(e2_client->last_tx_e2_pdu.pdu).value();
189228
e2_message e2_setup_response = generate_e2_setup_response(transaction_id);
190229
e2_setup_response.pdu.successful_outcome()
191230
.value.e2setup_resp()
192-
->ran_functions_accepted.value[0]
231+
->ran_functions_accepted[0]
193232
->ran_function_id_item()
194233
.ran_function_id = e2sm_kpm_asn1_packer::ran_func_id;
195234
test_logger.info("Injecting E2SetupResponse");
196235
e2->handle_message(e2_setup_response);
236+
e2->stop();
197237
}
198-
#endif
199238

200-
TEST_F(e2sm_kpm_meas_provider_test, e2sm_kpm_ind_three_drb_rlc_metrics)
239+
TEST_P(e2sm_kpm_meas_provider_test, e2sm_kpm_ind_three_drb_rlc_metrics)
201240
{
202241
std::vector<uint32_t> ue_ids = {31, 23, 152};
203242
std::vector<uint32_t> nof_drbs = {3, 1, 2};
@@ -255,12 +294,11 @@ TEST_F(e2sm_kpm_meas_provider_test, e2sm_kpm_ind_three_drb_rlc_metrics)
255294

256295
asn1::e2ap::ric_action_to_be_setup_item_s ric_action = generate_e2sm_kpm_ric_action(action_def);
257296

258-
#if PCAP_OUTPUT
259-
// Save E2 Subscription Request.
260-
e2_message e2_subscript_req = generate_e2sm_kpm_subscription_request(ric_action);
261-
packer->handle_message(e2_subscript_req);
262-
save_msg_pcap(gw->last_pdu);
263-
#endif
297+
if (g_enable_pcap) {
298+
// Save E2 Subscription Request.
299+
e2_message e2_subscript_req = generate_e2sm_kpm_subscription_request(ric_action);
300+
packer->handle_message(e2_subscript_req);
301+
}
264302

265303
ASSERT_TRUE(e2sm_iface->action_supported(ric_action));
266304
auto report_service = e2sm_iface->get_e2sm_report_service(ric_action.ric_action_definition);
@@ -321,14 +359,14 @@ TEST_F(e2sm_kpm_meas_provider_test, e2sm_kpm_ind_three_drb_rlc_metrics)
321359
}
322360
}
323361
}
324-
#if PCAP_OUTPUT
325-
e2_message e2_msg = generate_e2_ind_msg(ind_hdr_bytes, ind_msg_bytes);
326-
packer->handle_message(e2_msg);
327-
save_msg_pcap(gw->last_pdu);
328-
#endif
362+
363+
if (g_enable_pcap) {
364+
e2_message e2_msg = generate_e2_ind_msg(ind_hdr_bytes, ind_msg_bytes);
365+
packer->handle_message(e2_msg);
366+
}
329367
}
330368

331-
TEST_F(e2sm_kpm_meas_provider_test, e2sm_kpm_ind_e2_level_rlc_metrics)
369+
TEST_P(e2sm_kpm_meas_provider_test, e2sm_kpm_ind_e2_level_rlc_metrics)
332370
{
333371
std::vector<uint32_t> ue_ids = {31, 23, 152};
334372
std::vector<uint32_t> nof_drbs = {3, 1, 2};
@@ -367,12 +405,11 @@ TEST_F(e2sm_kpm_meas_provider_test, e2sm_kpm_ind_e2_level_rlc_metrics)
367405

368406
asn1::e2ap::ric_action_to_be_setup_item_s ric_action = generate_e2sm_kpm_ric_action(action_def);
369407

370-
#if PCAP_OUTPUT
371-
// Save E2 Subscription Request.
372-
e2_message e2_subscript_req = generate_e2sm_kpm_subscription_request(ric_action);
373-
packer->handle_message(e2_subscript_req);
374-
save_msg_pcap(gw->last_pdu);
375-
#endif
408+
if (g_enable_pcap) {
409+
// Save E2 Subscription Request.
410+
e2_message e2_subscript_req = generate_e2sm_kpm_subscription_request(ric_action);
411+
packer->handle_message(e2_subscript_req);
412+
}
376413

377414
ASSERT_TRUE(e2sm_iface->action_supported(ric_action));
378415
auto report_service = e2sm_iface->get_e2sm_report_service(ric_action.ric_action_definition);
@@ -413,14 +450,13 @@ TEST_F(e2sm_kpm_meas_provider_test, e2sm_kpm_ind_e2_level_rlc_metrics)
413450
TESTASSERT_EQ((i + 1) * expected_ul_vol, meas_record[2].integer());
414451
}
415452

416-
#if PCAP_OUTPUT
417-
e2_message e2_msg = generate_e2_ind_msg(ind_hdr_bytes, ind_msg_bytes);
418-
packer->handle_message(e2_msg);
419-
save_msg_pcap(gw->last_pdu);
420-
#endif
453+
if (g_enable_pcap) {
454+
e2_message e2_msg = generate_e2_ind_msg(ind_hdr_bytes, ind_msg_bytes);
455+
packer->handle_message(e2_msg);
456+
}
421457
}
422458

423-
TEST_F(e2sm_kpm_meas_provider_test, e2sm_kpm_ind_e2_level_prb_metrics)
459+
TEST_P(e2sm_kpm_meas_provider_test, e2sm_kpm_ind_e2_level_prb_metrics)
424460
{
425461
std::vector<uint32_t> grants_ue0 = {1, 0, 3, 4, 5, 6, 7, 8, 9, 0};
426462
std::vector<uint32_t> grants_ue1 = {0, 0, 8, 7, 6, 5, 4, 3, 2, 1};
@@ -479,12 +515,11 @@ TEST_F(e2sm_kpm_meas_provider_test, e2sm_kpm_ind_e2_level_prb_metrics)
479515

480516
asn1::e2ap::ric_action_to_be_setup_item_s ric_action = generate_e2sm_kpm_ric_action(action_def);
481517

482-
#if PCAP_OUTPUT
483-
// Save E2 Subscription Request.
484-
e2_message e2_subscript_req = generate_e2sm_kpm_subscription_request(ric_action);
485-
packer->handle_message(e2_subscript_req);
486-
save_msg_pcap(gw->last_pdu);
487-
#endif
518+
if (g_enable_pcap) {
519+
// Save E2 Subscription Request.
520+
e2_message e2_subscript_req = generate_e2sm_kpm_subscription_request(ric_action);
521+
packer->handle_message(e2_subscript_req);
522+
}
488523

489524
ASSERT_TRUE(e2sm_iface->action_supported(ric_action));
490525
auto report_service = e2sm_iface->get_e2sm_report_service(ric_action.ric_action_definition);
@@ -520,9 +555,39 @@ TEST_F(e2sm_kpm_meas_provider_test, e2sm_kpm_ind_e2_level_prb_metrics)
520555
TESTASSERT_EQ(expected_dl_tot_prbs, meas_record[4].integer());
521556
TESTASSERT_EQ(expected_ul_tot_prbs, meas_record[5].integer());
522557

523-
#if PCAP_OUTPUT
524-
e2_message e2_msg = generate_e2_ind_msg(ind_hdr_bytes, ind_msg_bytes);
525-
packer->handle_message(e2_msg);
526-
save_msg_pcap(gw->last_pdu);
527-
#endif
558+
if (g_enable_pcap) {
559+
e2_message e2_msg = generate_e2_ind_msg(ind_hdr_bytes, ind_msg_bytes);
560+
packer->handle_message(e2_msg);
561+
}
562+
}
563+
564+
INSTANTIATE_TEST_SUITE_P(e2sm_kpm_tests, e2_entity_test_with_pcap, testing::Values(g_pcap));
565+
INSTANTIATE_TEST_SUITE_P(e2sm_kpm_meas_provider_test, e2sm_kpm_meas_provider_test, testing::Values(g_pcap));
566+
567+
int main(int argc, char** argv)
568+
{
569+
// Check for '--enable_pcap' cmd line argument, do not use getopt as it interferes with gtest.
570+
for (int i = 1; i < argc; ++i) {
571+
std::string arg = argv[i];
572+
if (arg == "--enable_pcap") {
573+
g_enable_pcap = true;
574+
}
575+
}
576+
577+
srslog::init();
578+
579+
std::unique_ptr<task_worker_executor> pcap_exec;
580+
std::unique_ptr<task_worker> pcap_worker;
581+
std::unique_ptr<dlt_pcap> common_pcap_writer;
582+
583+
if (g_enable_pcap) {
584+
pcap_worker = std::make_unique<task_worker>("pcap_worker", 128);
585+
pcap_exec = std::make_unique<task_worker_executor>(*pcap_worker);
586+
common_pcap_writer = create_e2ap_pcap("/tmp/e2sm_kpm_meas_provider_test.pcap", *pcap_exec);
587+
g_pcap = common_pcap_writer.get();
588+
}
589+
590+
::testing::InitGoogleTest(&argc, argv);
591+
int ret = RUN_ALL_TESTS();
592+
return ret;
528593
}

0 commit comments

Comments
 (0)