LCOV - code coverage report
Current view: top level - listrev/unittest - ListReverser_test.cxx (source / functions) Coverage Total Hit
Test: code.result Lines: 100.0 % 84 84
Test Date: 2026-10-11 15:05:20 Functions: 100.0 % 8 8

            Line data    Source code
       1              : /**
       2              :  * @file ListReverser_test.cxx ListReverser 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 "ListReverser.hpp"
      10              : 
      11              : #include "appfwk/ConfigurationManager.hpp"
      12              : #include "opmonlib/TestOpMonManager.hpp"
      13              : #include "serialization/Serialization.hpp"
      14              : 
      15              : #define BOOST_TEST_MODULE ListReverser_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(ListReverser_test)
      25              : 
      26              : struct ConfigurationTestFixture
      27              : {
      28            3 :   ConfigurationTestFixture()
      29            9 :   {
      30            3 :     std::string sessionName = "lr-session";
      31            3 :     std::string appName = "listrev";
      32            3 :     std::string TEST_OKS_DB = "oksconflibs:config/lrSession-singleapp.data.xml";
      33            3 :     cfgmgr = std::make_shared<dunedaq::appfwk::ConfigurationManager>(TEST_OKS_DB, appName, sessionName);
      34            3 :     dunedaq::get_iomanager()->configure(
      35              :       sessionName, cfgmgr->get_queues(), cfgmgr->get_networkconnections(), nullptr, opmgr);
      36            3 :   }
      37            3 :   ~ConfigurationTestFixture()
      38              :   {
      39            3 :     dunedaq::get_iomanager()->reset();
      40            3 :     cfgmgr = nullptr;
      41            3 :   }
      42              : 
      43              :   ConfigurationTestFixture(ConfigurationTestFixture const&) = default;
      44              :   ConfigurationTestFixture(ConfigurationTestFixture&&) = default;
      45              :   ConfigurationTestFixture& operator=(ConfigurationTestFixture const&) = default;
      46              :   ConfigurationTestFixture& operator=(ConfigurationTestFixture&&) = default;
      47              : 
      48              :   dunedaq::opmonlib::TestOpMonManager opmgr;
      49              :   std::shared_ptr<dunedaq::appfwk::ConfigurationManager> cfgmgr;
      50              : };
      51              : 
      52            2 : BOOST_FIXTURE_TEST_CASE(Commands, ConfigurationTestFixture)
      53              : {
      54            1 :   std::shared_ptr<dunedaq::appfwk::DAQModule> mod = dunedaq::appfwk::make_module("ListReverser", "lr0");
      55            1 :   opmgr.register_node("lr0", mod);
      56            1 :   BOOST_REQUIRE(mod->has_command("start"));
      57            1 :   BOOST_REQUIRE(mod->has_command("stop"));
      58              : 
      59            1 :   mod->init(cfgmgr);
      60            1 :   mod->execute_command("start");
      61            1 :   auto metrics = opmgr.collect();
      62            1 :   mod->execute_command("stop");
      63              : 
      64            1 :   auto facility = opmgr.get_backend_facility();
      65            1 :   auto entries = facility->get_entries(std::regex("dunedaq.listrev.opmon.ListReverserInfo"));
      66            1 :   BOOST_REQUIRE_EQUAL(entries.size(), 1);
      67              : 
      68            1 :   BOOST_REQUIRE_EQUAL(entries.front().data().at("requests_received").uint8_value(), 0);
      69            1 :   BOOST_REQUIRE_EQUAL(entries.front().data().at("requests_sent").uint8_value(), 0);
      70            1 :   BOOST_REQUIRE_EQUAL(entries.front().data().at("lists_received").uint8_value(), 0);
      71            1 :   BOOST_REQUIRE_EQUAL(entries.front().data().at("lists_sent").uint8_value(), 0);
      72            3 : }
      73              : 
      74            2 : BOOST_FIXTURE_TEST_CASE(Requests, ConfigurationTestFixture)
      75              : {
      76            1 :   std::shared_ptr<dunedaq::appfwk::DAQModule> mod = dunedaq::appfwk::make_module("ListReverser", "lr0");
      77            1 :   opmgr.register_node("lr0", mod);
      78              : 
      79            1 :   auto requestReceiver = dunedaq::get_iomanager()->get_receiver<RequestList>("rdlg0_request_queue");
      80            1 :   auto listReceiver = dunedaq::get_iomanager()->get_receiver<ReversedList>("validator_list_queue");
      81              : 
      82            1 :   mod->init(cfgmgr);
      83            1 :   mod->execute_command("start");
      84              : 
      85            1 :   auto requestSender = dunedaq::get_iomanager()->get_sender<RequestList>("lr0_request_queue");
      86              : 
      87              :   // ListReverser receives request and forwards to data list generator
      88            1 :   RequestList theRequest(1, "validator_list_queue");
      89            1 :   requestSender->send(std::move(theRequest), std::chrono::milliseconds(1000));
      90            1 :   auto received = requestReceiver->receive(std::chrono::milliseconds(1000));
      91            1 :   BOOST_REQUIRE_EQUAL(received.list_id, 1);
      92            1 :   BOOST_REQUIRE_EQUAL(received.destination, "lr0_list_queue");
      93              : 
      94            1 :   auto metrics = opmgr.collect();
      95            1 :   mod->execute_command("stop");
      96              : 
      97            1 :   auto facility = opmgr.get_backend_facility();
      98            1 :   auto entries = facility->get_entries(std::regex("dunedaq.listrev.opmon.ListReverserInfo"));
      99            1 :   BOOST_REQUIRE_EQUAL(entries.size(), 1);
     100              : 
     101            1 :   BOOST_REQUIRE_EQUAL(entries.front().data().at("requests_received").uint8_value(), 1);
     102            1 :   BOOST_REQUIRE_EQUAL(entries.front().data().at("requests_sent").uint8_value(), 1);
     103            1 :   BOOST_REQUIRE_EQUAL(entries.front().data().at("lists_received").uint8_value(), 0);
     104            1 :   BOOST_REQUIRE_EQUAL(entries.front().data().at("lists_sent").uint8_value(), 0);
     105            3 : }
     106              : 
     107            2 : BOOST_FIXTURE_TEST_CASE(Lists, ConfigurationTestFixture)
     108              : {
     109            1 :   std::shared_ptr<dunedaq::appfwk::DAQModule> mod = dunedaq::appfwk::make_module("ListReverser", "lr0");
     110            1 :   opmgr.register_node("lr0", mod);
     111              : 
     112            1 :   auto requestReceiver = dunedaq::get_iomanager()->get_receiver<RequestList>("rdlg0_request_queue");
     113            1 :   auto listReceiver = dunedaq::get_iomanager()->get_receiver<ReversedList>("validator_list_queue");
     114              : 
     115            1 :   mod->init(cfgmgr);
     116            1 :   mod->execute_command("start");
     117              : 
     118            1 :   auto requestSender = dunedaq::get_iomanager()->get_sender<RequestList>("lr0_request_queue");
     119            1 :   auto listSender = dunedaq::get_iomanager()->get_sender<IntList>("lr0_list_queue");
     120              : 
     121            1 :   RequestList theRequest(2, "validator_list_queue");
     122            1 :   IntList theList(2, 0, { 3, 4, 5, 6 });
     123              : 
     124            1 :   requestSender->send(std::move(theRequest), std::chrono::milliseconds(1000));
     125            1 :   auto receivedRequest = requestReceiver->receive(std::chrono::milliseconds(1000));
     126            1 :   BOOST_REQUIRE_EQUAL(receivedRequest.list_id, 2);
     127            1 :   BOOST_REQUIRE_EQUAL(receivedRequest.destination, "lr0_list_queue");
     128              : 
     129            1 :   listSender->send(std::move(theList), std::chrono::milliseconds(1000));
     130            1 :   auto receivedList = listReceiver->receive(std::chrono::milliseconds(1000));
     131              : 
     132            1 :   BOOST_REQUIRE_EQUAL(receivedList.list_id, 2);
     133            1 :   BOOST_REQUIRE_EQUAL(receivedList.reverser_id, 0);
     134            1 :   BOOST_REQUIRE_EQUAL(receivedList.lists.size(), 1);
     135            1 :   BOOST_REQUIRE_EQUAL(receivedList.lists[0].original.list[0], 3);
     136            1 :   BOOST_REQUIRE_EQUAL(receivedList.lists[0].reversed.list[0], 6);
     137              : 
     138            1 :   auto metrics = opmgr.collect();
     139            1 :   mod->execute_command("stop");
     140              : 
     141            1 :   auto facility = opmgr.get_backend_facility();
     142            1 :   auto entries = facility->get_entries(std::regex("dunedaq.listrev.opmon.ListReverserInfo"));
     143            1 :   BOOST_REQUIRE_EQUAL(entries.size(), 1);
     144              : 
     145            1 :   BOOST_REQUIRE_EQUAL(entries.front().data().at("requests_received").uint8_value(), 1);
     146            1 :   BOOST_REQUIRE_EQUAL(entries.front().data().at("requests_sent").uint8_value(), 1);
     147            1 :   BOOST_REQUIRE_EQUAL(entries.front().data().at("lists_received").uint8_value(), 1);
     148            1 :   BOOST_REQUIRE_EQUAL(entries.front().data().at("lists_sent").uint8_value(), 1);
     149            3 : }
     150              : 
     151              : BOOST_AUTO_TEST_SUITE_END()
        

Generated by: LCOV version 2.0-1