From 49ad1a4312643e386a4ac1923c77add3013b5c1a Mon Sep 17 00:00:00 2001 From: Francisco Paisana Date: Fri, 2 Oct 2020 15:37:21 +0100 Subject: [PATCH] added unit test for meas cells --- srsue/test/upper/CMakeLists.txt | 4 ++ srsue/test/upper/rrc_cell_test.cc | 93 +++++++++++++++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 srsue/test/upper/rrc_cell_test.cc diff --git a/srsue/test/upper/CMakeLists.txt b/srsue/test/upper/CMakeLists.txt index 7c8e29c7a..b6d002f81 100644 --- a/srsue/test/upper/CMakeLists.txt +++ b/srsue/test/upper/CMakeLists.txt @@ -47,6 +47,10 @@ add_executable(rrc_phy_ctrl_test rrc_phy_ctrl_test.cc) target_link_libraries(rrc_phy_ctrl_test srslte_common srsue_rrc) add_test(rrc_phy_ctrl_test rrc_phy_ctrl_test) +add_executable(rrc_cell_test rrc_cell_test.cc) +target_link_libraries(rrc_cell_test srsue_rrc srsue_upper srslte_upper srslte_phy rrc_asn1) +add_test(rrc_cell_test rrc_cell_test) + ######################################################################## # Option to run command after build (useful for remote builds) ######################################################################## diff --git a/srsue/test/upper/rrc_cell_test.cc b/srsue/test/upper/rrc_cell_test.cc new file mode 100644 index 000000000..b317d11fe --- /dev/null +++ b/srsue/test/upper/rrc_cell_test.cc @@ -0,0 +1,93 @@ +/* + * Copyright 2013-2020 Software Radio Systems Limited + * + * This file is part of srsLTE. + * + * srsLTE is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * srsLTE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * A copy of the GNU Affero General Public License can be found in + * the LICENSE file in the top-level directory of this distribution + * and at http://www.gnu.org/licenses/. + * + */ + +#include "srslte/common/test_common.h" +#include "srsue/hdr/stack/rrc/rrc_cell.h" + +using namespace srsue; + +int test_meas_cell() +{ + meas_cell invalid_cell{}, cell{phy_cell_t{1, 3400}}; + + TESTASSERT(not invalid_cell.is_valid()); + TESTASSERT(cell.is_valid()); + TESTASSERT(std::isnan(cell.get_rsrp())); + TESTASSERT(std::isnan(cell.get_rsrq())); + TESTASSERT(not cell.has_sib(0) and not cell.has_sib(1)); + + // NAN does not invalidate measurements + cell.set_rsrp(-50); + TESTASSERT(cell.get_rsrp() == -50); + cell.set_rsrp(NAN); + TESTASSERT(cell.get_rsrp() == -50); + + return SRSLTE_SUCCESS; +} + +int test_add_neighbours() +{ + meas_cell_list list; + TESTASSERT(list.nof_neighbours() == 0); + TESTASSERT(not list.serving_cell().is_valid()); + TESTASSERT(list.get_neighbour_cell_handle(0, 0) == nullptr); + + rrc_interface_phy_lte::phy_meas_t pmeas; + pmeas.cfo_hz = 4; + pmeas.rsrp = -20; + pmeas.pci = 1; + pmeas.earfcn = 3400; + pmeas.rsrq = -10; + TESTASSERT(list.add_meas_cell(pmeas)); + TESTASSERT(not list.serving_cell().is_valid()); + TESTASSERT(list.nof_neighbours() == 1); + meas_cell* c = list.get_neighbour_cell_handle(3400, 1); + TESTASSERT(c != nullptr and c->is_valid() and c->equals(3400, 1)); + TESTASSERT(c->get_rsrp() == pmeas.rsrp and c->get_rsrq() == pmeas.rsrq); + + auto pmeas2 = pmeas; + pmeas2.pci = 2; + list.add_meas_cell(pmeas2); + TESTASSERT(list.nof_neighbours() == 2); + TESTASSERT(list.set_serving_cell(phy_cell_t{2, 3400}, false) == SRSLTE_SUCCESS); + TESTASSERT(list.nof_neighbours() == 1); + TESTASSERT(list.serving_cell().equals(3400, 2)); + TESTASSERT(list.serving_cell().is_valid()); + + TESTASSERT(list.remove_neighbour_cell(3400, 3) == nullptr); // fail - does not exit + TESTASSERT(list.remove_neighbour_cell(3400, 2) == nullptr); // fail - it is serving cell + TESTASSERT(list.nof_neighbours() == 1); + TESTASSERT(list.serving_cell().is_valid()); + auto c2 = list.remove_neighbour_cell(3400, 1); + TESTASSERT(c2 != nullptr and c2->is_valid() and c2->equals(3400, 1)); + TESTASSERT(list.nof_neighbours() == 0); + + return SRSLTE_SUCCESS; +} + +int main() +{ + TESTASSERT(test_meas_cell() == SRSLTE_SUCCESS); + TESTASSERT(test_add_neighbours() == SRSLTE_SUCCESS); + printf("Success\n"); + + return SRSLTE_SUCCESS; +}