LCOV - code coverage report
Current view: top level - listrev/unittest - ReversedListValidator_test.cxx (source / functions) Coverage Total Hit
Test: code.result Lines: 100.0 % 155 155
Test Date: 2025-12-21 13:07:08 Functions: 100.0 % 22 22

            Line data    Source code
       1              : /**
       2              :  * @file ReversedListValidator_test.cxx ReversedListValidator plugin Unit Tests
       3              :  *
       4              :  * This is part of the DUNE DAQ Application Framework, copyright 2020.
       5              :  * Licensing/copyright details are in the COPYING file that you should have
       6              :  * received with this code.
       7              :  */
       8              : 
       9              : #include "ReversedListValidator.hpp"
      10              : 
      11              : #include "appfwk/ConfigurationManager.hpp"
      12              : #include "opmonlib/TestOpMonManager.hpp"
      13              : #include "serialization/Serialization.hpp"
      14              : 
      15              : #define BOOST_TEST_MODULE ReversedListValidator_test // NOLINT
      16              : 
      17              : #include "boost/test/unit_test.hpp"
      18              : 
      19              : #include <string>
      20              : #include <vector>
      21              : 
      22              : using namespace dunedaq::listrev;
      23              : 
      24              : BOOST_AUTO_TEST_SUITE(ReversedListValidator_test)
      25              : 
      26              : struct ConfigurationTestFixture
      27              : {
      28            4 :   ConfigurationTestFixture()
      29            4 :   {
      30            4 :     std::string sessionName = "lr-session";
      31            4 :     std::string appName = "listrev";
      32            4 :     std::string TEST_OKS_DB = "oksconflibs:config/lrSession-singleapp.data.xml";
      33            4 :     cfgmgr = std::make_shared<dunedaq::appfwk::ConfigurationManager>(TEST_OKS_DB, appName, sessionName);
      34            4 :     dunedaq::get_iomanager()->configure(sessionName, cfgmgr->get_queues(), cfgmgr->get_networkconnections(), nullptr, opmgr);
      35            4 :   }
      36            4 :   ~ConfigurationTestFixture()
      37              :   {
      38            4 :     dunedaq::get_iomanager()->reset();
      39            4 :     cfgmgr = nullptr;
      40            4 :   }
      41              : 
      42              :   ConfigurationTestFixture(ConfigurationTestFixture const&) = default;
      43              :   ConfigurationTestFixture(ConfigurationTestFixture&&) = default;
      44              :   ConfigurationTestFixture& operator=(ConfigurationTestFixture const&) = default;
      45              :   ConfigurationTestFixture& operator=(ConfigurationTestFixture&&) = default;
      46              : 
      47              :   dunedaq::opmonlib::TestOpMonManager opmgr;
      48              :   std::shared_ptr<dunedaq::appfwk::ConfigurationManager> cfgmgr;
      49              : };
      50              : 
      51            2 : BOOST_FIXTURE_TEST_CASE(Commands, ConfigurationTestFixture)
      52              : {
      53            1 :   std::shared_ptr<dunedaq::appfwk::DAQModule> mod = dunedaq::appfwk::make_module("ReversedListValidator", "lrv");
      54            1 :   opmgr.register_node("lrv", mod);
      55            1 :   BOOST_REQUIRE(mod->has_command("start"));
      56            1 :   BOOST_REQUIRE(mod->has_command("stop"));
      57              : 
      58            1 :   mod->init(cfgmgr);
      59            1 :   mod->execute_command("start");
      60              : 
      61            1 :   auto metrics = opmgr.collect();
      62              : 
      63            1 :   mod->execute_command("stop");
      64              : 
      65            1 :   auto facility = opmgr.get_backend_facility();
      66            1 :   auto entries = facility->get_entries(std::regex("dunedaq.listrev.opmon.ReversedListValidatorInfo"));
      67            1 :   BOOST_REQUIRE_EQUAL(entries.size(), 1);
      68            1 :   BOOST_CHECK_EQUAL(entries.front().data().at("valid_list_pairs").uint8_value(), 0);
      69            1 :   BOOST_CHECK_EQUAL(entries.front().data().at("invalid_list_pairs").uint8_value(), 0);
      70            1 :   BOOST_CHECK_EQUAL(entries.front().data().at("total_lists").uint8_value(), 0);
      71            3 : }
      72              : 
      73            2 : BOOST_FIXTURE_TEST_CASE(ProcessList, ConfigurationTestFixture)
      74              : {
      75            1 :   std::shared_ptr<dunedaq::appfwk::DAQModule> mod = dunedaq::appfwk::make_module("ReversedListValidator", "lrv");
      76            1 :   opmgr.register_node("lrv", mod);
      77              : 
      78            1 :   std::vector<CreateList> creates_received;
      79           13 :   auto create_callback = [&](CreateList c) { creates_received.push_back(c); };
      80            1 :   dunedaq::get_iomanager()->get_receiver<CreateList>("creates_queue")->add_callback(create_callback);
      81              : 
      82            1 :   std::vector<RequestList> requests_received;
      83           13 :   auto request_callback = [&](RequestList r) { requests_received.push_back(r); };
      84            1 :   dunedaq::get_iomanager()->get_receiver<RequestList>("lr0_request_queue")->add_callback(request_callback);
      85              : 
      86            1 :   auto list_sender = dunedaq::get_iomanager()->get_sender<ReversedList>("validator_list_queue");
      87              : 
      88            1 :   mod->init(cfgmgr);
      89            1 :   mod->execute_command("start");
      90              : 
      91            1 :   usleep(100000);
      92              : 
      93            1 :   BOOST_REQUIRE(creates_received.size() > 0);
      94            1 :   BOOST_REQUIRE(requests_received.size() > 0);
      95            1 :   BOOST_REQUIRE_EQUAL(creates_received[0].list_id, 1);
      96            1 :   BOOST_REQUIRE_EQUAL(requests_received[0].list_id, 1);
      97              : 
      98            1 :   size_t ii = 0;
      99           21 :   auto g = [&]() { return ++ii; };
     100           21 :   auto r = [&]() { return ii--; };
     101              : 
     102            1 :   ReversedList testList(1, 0, {});
     103            1 :   IntList original(1, 0, {});
     104            1 :   IntList reversed(1, 0, {});
     105            1 :   std::generate_n(std::back_inserter(original.list), creates_received[0].list_size, g);
     106            1 :   std::generate_n(std::back_inserter(reversed.list), creates_received[0].list_size, r);
     107            1 :   ReversedList::Data data;
     108            1 :   data.original = original;
     109            1 :   data.reversed = reversed;
     110            1 :   testList.lists.push_back(data);
     111            1 :   list_sender->send(std::move(testList), std::chrono::milliseconds(1000));
     112              : 
     113            1 :   usleep(10000);
     114              : 
     115            1 :   auto metrics = opmgr.collect();
     116            1 :   mod->execute_command("stop");
     117            1 :   dunedaq::get_iomanager()->get_receiver<CreateList>("creates_queue")->remove_callback();
     118            1 :   dunedaq::get_iomanager()->get_receiver<RequestList>("lr0_request_queue")->remove_callback();
     119              : 
     120            1 :   auto facility = opmgr.get_backend_facility();
     121            1 :   auto entries = facility->get_entries(std::regex("dunedaq.listrev.opmon.ReversedListValidatorInfo"));
     122            1 :   BOOST_REQUIRE_EQUAL(entries.size(), 1);
     123            1 :   BOOST_CHECK_EQUAL(entries.front().data().at("valid_list_pairs").uint8_value(), 1);
     124            1 :   BOOST_CHECK_EQUAL(entries.front().data().at("invalid_list_pairs").uint8_value(), 0);
     125            1 :   BOOST_CHECK_EQUAL(entries.front().data().at("total_lists").uint8_value(), 1);
     126            3 : }
     127              : 
     128            2 : BOOST_FIXTURE_TEST_CASE(InvalidList, ConfigurationTestFixture)
     129              : {
     130            1 :   std::shared_ptr<dunedaq::appfwk::DAQModule> mod = dunedaq::appfwk::make_module("ReversedListValidator", "lrv");
     131            1 :   opmgr.register_node("lrv", mod);
     132              : 
     133            1 :   std::vector<CreateList> creates_received;
     134           13 :   auto create_callback = [&](CreateList c) { creates_received.push_back(c); };
     135            1 :   dunedaq::get_iomanager()->get_receiver<CreateList>("creates_queue")->add_callback(create_callback);
     136              : 
     137            1 :   std::vector<RequestList> requests_received;
     138           13 :   auto request_callback = [&](RequestList r) { requests_received.push_back(r); };
     139            1 :   dunedaq::get_iomanager()->get_receiver<RequestList>("lr0_request_queue")->add_callback(request_callback);
     140              : 
     141            1 :   auto list_sender = dunedaq::get_iomanager()->get_sender<ReversedList>("validator_list_queue");
     142              : 
     143            1 :   mod->init(cfgmgr);
     144            1 :   mod->execute_command("start");
     145              : 
     146            1 :   usleep(100000);
     147              : 
     148            1 :   BOOST_REQUIRE(creates_received.size() > 0);
     149            1 :   BOOST_REQUIRE(requests_received.size() > 0);
     150            1 :   BOOST_REQUIRE_EQUAL(creates_received[0].list_id, 1);
     151            1 :   BOOST_REQUIRE_EQUAL(requests_received[0].list_id, 1);
     152              : 
     153            1 :   size_t ii = 0;
     154            6 :   auto g = [&]() { return ++ii; };
     155            6 :   auto r = [&]() { return ii--; };
     156              : 
     157            1 :   ReversedList testList(1, 0, {});
     158            1 :   IntList original(1, 0, {});
     159            1 :   IntList reversed(1, 0, {});
     160            1 :   std::generate_n(std::back_inserter(original.list), creates_received[0].list_size, g);
     161            1 :   std::generate_n(std::back_inserter(reversed.list), creates_received[0].list_size, r);
     162            1 :   reversed.list[0]++; // Invalidate the list
     163            1 :   ReversedList::Data data;
     164            1 :   data.original = original;
     165            1 :   data.reversed = reversed;
     166            1 :   testList.lists.push_back(data);
     167            1 :   list_sender->send(std::move(testList), std::chrono::milliseconds(1000));
     168              : 
     169            1 :   usleep(10000);
     170              : 
     171            1 :   auto metrics = opmgr.collect();
     172            1 :   mod->execute_command("stop");
     173            1 :   dunedaq::get_iomanager()->get_receiver<CreateList>("creates_queue")->remove_callback();
     174            1 :   dunedaq::get_iomanager()->get_receiver<RequestList>("lr0_request_queue")->remove_callback();
     175              : 
     176            1 :   auto facility = opmgr.get_backend_facility();
     177            1 :   auto entries = facility->get_entries(std::regex("dunedaq.listrev.opmon.ReversedListValidatorInfo"));
     178              : 
     179            1 :   BOOST_REQUIRE_EQUAL(entries.size(), 1);
     180            1 :   BOOST_CHECK_EQUAL(entries.front().data().at("valid_list_pairs").uint8_value(), 0);
     181            1 :   BOOST_CHECK_EQUAL(entries.front().data().at("invalid_list_pairs").uint8_value(), 1);
     182            1 :   BOOST_CHECK_EQUAL(entries.front().data().at("total_lists").uint8_value(), 1);
     183            3 : }
     184              : 
     185            2 : BOOST_FIXTURE_TEST_CASE(WrongSizeList, ConfigurationTestFixture)
     186              : {
     187            1 :   std::shared_ptr<dunedaq::appfwk::DAQModule> mod = dunedaq::appfwk::make_module("ReversedListValidator", "lrv");
     188            1 :   opmgr.register_node("lrv", mod);
     189              : 
     190            1 :   std::vector<CreateList> creates_received;
     191           13 :   auto create_callback = [&](CreateList c) { creates_received.push_back(c); };
     192            1 :   dunedaq::get_iomanager()->get_receiver<CreateList>("creates_queue")->add_callback(create_callback);
     193              : 
     194            1 :   std::vector<RequestList> requests_received;
     195           13 :   auto request_callback = [&](RequestList r) { requests_received.push_back(r); };
     196            1 :   dunedaq::get_iomanager()->get_receiver<RequestList>("lr0_request_queue")->add_callback(request_callback);
     197              : 
     198            1 :   auto list_sender = dunedaq::get_iomanager()->get_sender<ReversedList>("validator_list_queue");
     199              : 
     200            1 :   mod->init(cfgmgr);
     201            1 :   mod->execute_command("start");
     202              : 
     203            1 :   usleep(100000);
     204              : 
     205            1 :   BOOST_REQUIRE(creates_received.size() > 0);
     206            1 :   BOOST_REQUIRE(requests_received.size() > 0);
     207            1 :   BOOST_REQUIRE_EQUAL(creates_received[0].list_id, 1);
     208            1 :   BOOST_REQUIRE_EQUAL(requests_received[0].list_id, 1);
     209              : 
     210            1 :   size_t ii = 0;
     211           12 :   auto g = [&]() { return ++ii; };
     212           12 :   auto r = [&]() { return ii--; };
     213              : 
     214            1 :   ReversedList testList(1, 0, {});
     215            1 :   IntList original(1, 0, {});
     216            1 :   IntList reversed(1, 0, {});
     217            1 :   std::generate_n(std::back_inserter(original.list), creates_received[0].list_size + 1, g);
     218            1 :   std::generate_n(std::back_inserter(reversed.list), creates_received[0].list_size + 1, r);
     219            1 :   ReversedList::Data data;
     220            1 :   data.original = original;
     221            1 :   data.reversed = reversed;
     222            1 :   testList.lists.push_back(data);
     223            1 :   list_sender->send(std::move(testList), std::chrono::milliseconds(1000));
     224              : 
     225            1 :   usleep(10000);
     226              : 
     227            1 :   auto metrics = opmgr.collect();
     228            1 :   mod->execute_command("stop");
     229            1 :   dunedaq::get_iomanager()->get_receiver<CreateList>("creates_queue")->remove_callback();
     230            1 :   dunedaq::get_iomanager()->get_receiver<RequestList>("lr0_request_queue")->remove_callback();
     231              : 
     232            1 :   auto facility = opmgr.get_backend_facility();
     233            1 :   auto entries = facility->get_entries(std::regex("dunedaq.listrev.opmon.ReversedListValidatorInfo"));
     234              : 
     235            1 :   BOOST_REQUIRE_EQUAL(entries.size(), 1);
     236            1 :   BOOST_CHECK_EQUAL(entries.front().data().at("valid_list_pairs").uint8_value(), 0);
     237            1 :   BOOST_CHECK_EQUAL(entries.front().data().at("invalid_list_pairs").uint8_value(), 1);
     238            1 :   BOOST_CHECK_EQUAL(entries.front().data().at("total_lists").uint8_value(), 1);
     239            3 : }
     240              : BOOST_AUTO_TEST_SUITE_END()
        

Generated by: LCOV version 2.0-1