Skip to content

Commit e3e7594

Browse files
FabianEckermanncodebot
authored andcommitted
cu_cp,e1ap: Add unittest for cu-cp e1ap ue context
1 parent 706595a commit e3e7594

File tree

2 files changed

+131
-0
lines changed

2 files changed

+131
-0
lines changed

tests/unittests/e1ap/cu_cp/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ target_include_directories(e1ap_cu_cp_test_helpers PRIVATE ${CMAKE_SOURCE_DIR})
1111
target_link_libraries(e1ap_cu_cp_test_helpers e1ap_test_helpers srsran_e1ap srsran_pcap srsran_support e1ap_asn1 srslog)
1212

1313
set(SOURCES
14+
e1ap_cu_cp_ue_context_test.cpp
1415
e1ap_cu_cp_setup_procedure_test.cpp
1516
e1ap_cu_cp_bearer_context_setup_procedure_test.cpp
1617
e1ap_cu_cp_bearer_context_modification_procedure_test.cpp
Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
/*
2+
*
3+
* Copyright 2021-2023 Software Radio Systems Limited
4+
*
5+
* By using this file, you agree to the terms and conditions set
6+
* forth in the LICENSE file which can be found at the top level of
7+
* the distribution.
8+
*
9+
*/
10+
11+
#include "../common/test_helpers.h"
12+
#include "lib/e1ap/cu_cp/ue_context/e1ap_cu_cp_ue_context.h"
13+
#include "srsran/support/executors/manual_task_worker.h"
14+
#include "srsran/support/test_utils.h"
15+
16+
#include <gtest/gtest.h>
17+
18+
using namespace srsran;
19+
using namespace srs_cu_cp;
20+
21+
/// Fixture class for E1AP UE context
22+
class e1ap_cu_cp_ue_context_test : public ::testing::Test
23+
{
24+
protected:
25+
e1ap_cu_cp_ue_context_test() { srslog::init(); };
26+
~e1ap_cu_cp_ue_context_test()
27+
{
28+
// flush logger after each test
29+
srslog::flush();
30+
};
31+
32+
ue_index_t generate_random_ue_index()
33+
{
34+
return uint_to_ue_index(
35+
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+
38+
timer_manager timer_mng;
39+
manual_task_worker ctrl_worker{128};
40+
timer_factory timers{timer_mng, ctrl_worker};
41+
e1ap_ue_context_list ue_ctxt_list{timers};
42+
};
43+
44+
TEST_F(e1ap_cu_cp_ue_context_test, when_ue_added_then_ue_exists)
45+
{
46+
ue_index_t ue_index = generate_random_ue_index();
47+
gnb_cu_cp_ue_e1ap_id_t cu_cp_ue_e1ap_id = generate_random_gnb_cu_cp_ue_e1ap_id();
48+
49+
ue_ctxt_list.add_ue(ue_index, cu_cp_ue_e1ap_id);
50+
51+
ASSERT_TRUE(ue_ctxt_list.contains(cu_cp_ue_e1ap_id));
52+
ASSERT_TRUE(ue_ctxt_list.contains(ue_index));
53+
54+
ASSERT_EQ(ue_ctxt_list[cu_cp_ue_e1ap_id].cu_cp_ue_e1ap_id, cu_cp_ue_e1ap_id);
55+
ASSERT_EQ(ue_ctxt_list[cu_cp_ue_e1ap_id].ue_index, ue_index);
56+
ASSERT_EQ(ue_ctxt_list[ue_index].cu_cp_ue_e1ap_id, cu_cp_ue_e1ap_id);
57+
ASSERT_EQ(ue_ctxt_list[ue_index].ue_index, ue_index);
58+
}
59+
60+
TEST_F(e1ap_cu_cp_ue_context_test, when_ue_not_added_then_ue_doesnt_exist)
61+
{
62+
ue_index_t ue_index = generate_random_ue_index();
63+
gnb_cu_cp_ue_e1ap_id_t cu_cp_ue_e1ap_id = generate_random_gnb_cu_cp_ue_e1ap_id();
64+
65+
ASSERT_FALSE(ue_ctxt_list.contains(cu_cp_ue_e1ap_id));
66+
ASSERT_FALSE(ue_ctxt_list.contains(ue_index));
67+
}
68+
69+
TEST_F(e1ap_cu_cp_ue_context_test, when_unsupported_number_of_ues_addeded_then_ue_not_added)
70+
{
71+
// Add maximum number of supported UEs
72+
for (unsigned it = 0; it < MAX_NOF_CU_UES; ++it) {
73+
gnb_cu_cp_ue_e1ap_id_t cu_cp_ue_e1ap_id = ue_ctxt_list.next_gnb_cu_cp_ue_e1ap_id();
74+
ASSERT_NE(cu_cp_ue_e1ap_id, gnb_cu_cp_ue_e1ap_id_t::invalid);
75+
ue_index_t ue_index = uint_to_ue_index(it);
76+
77+
ue_ctxt_list.add_ue(ue_index, cu_cp_ue_e1ap_id);
78+
79+
ASSERT_TRUE(ue_ctxt_list.contains(cu_cp_ue_e1ap_id));
80+
ASSERT_TRUE(ue_ctxt_list.contains(ue_index));
81+
}
82+
83+
// Try to get another cu_cp_ue_e1ap_id (should fail)
84+
ASSERT_EQ(ue_ctxt_list.next_gnb_cu_cp_ue_e1ap_id(), gnb_cu_cp_ue_e1ap_id_t::invalid);
85+
}
86+
87+
TEST_F(e1ap_cu_cp_ue_context_test, when_ue_exists_then_removal_succeeds)
88+
{
89+
ue_index_t ue_index = generate_random_ue_index();
90+
gnb_cu_cp_ue_e1ap_id_t cu_cp_ue_e1ap_id = generate_random_gnb_cu_cp_ue_e1ap_id();
91+
92+
ue_ctxt_list.add_ue(ue_index, cu_cp_ue_e1ap_id);
93+
94+
// test removal by gnb_cu_cp_ue_e1ap_id_t
95+
ue_ctxt_list.remove_ue(cu_cp_ue_e1ap_id);
96+
97+
ASSERT_FALSE(ue_ctxt_list.contains(cu_cp_ue_e1ap_id));
98+
ASSERT_FALSE(ue_ctxt_list.contains(ue_index));
99+
100+
ue_ctxt_list.add_ue(ue_index, cu_cp_ue_e1ap_id);
101+
102+
// test removal by ue_index
103+
ue_ctxt_list.remove_ue(ue_index);
104+
105+
ASSERT_FALSE(ue_ctxt_list.contains(cu_cp_ue_e1ap_id));
106+
ASSERT_FALSE(ue_ctxt_list.contains(ue_index));
107+
}
108+
109+
TEST_F(e1ap_cu_cp_ue_context_test, when_ue_exists_then_ue_index_update_succeeds)
110+
{
111+
ue_index_t old_ue_index = generate_random_ue_index();
112+
gnb_cu_cp_ue_e1ap_id_t cu_cp_ue_e1ap_id = generate_random_gnb_cu_cp_ue_e1ap_id();
113+
114+
ue_ctxt_list.add_ue(old_ue_index, cu_cp_ue_e1ap_id);
115+
116+
// new ue index to update
117+
ue_index_t ue_index = generate_random_ue_index();
118+
119+
// test ue index update
120+
ue_ctxt_list.update_ue_index(ue_index, old_ue_index);
121+
122+
ASSERT_TRUE(ue_ctxt_list.contains(ue_index));
123+
ASSERT_TRUE(ue_ctxt_list.contains(cu_cp_ue_e1ap_id));
124+
ASSERT_FALSE(ue_ctxt_list.contains(old_ue_index));
125+
126+
ASSERT_EQ(ue_ctxt_list[cu_cp_ue_e1ap_id].cu_cp_ue_e1ap_id, cu_cp_ue_e1ap_id);
127+
ASSERT_EQ(ue_ctxt_list[cu_cp_ue_e1ap_id].ue_index, ue_index);
128+
ASSERT_EQ(ue_ctxt_list[ue_index].cu_cp_ue_e1ap_id, cu_cp_ue_e1ap_id);
129+
ASSERT_EQ(ue_ctxt_list[ue_index].ue_index, ue_index);
130+
}

0 commit comments

Comments
 (0)