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: 2025-12-21 13:07:08 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            3 :   {
      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(sessionName, cfgmgr->get_queues(), cfgmgr->get_networkconnections(), nullptr, opmgr);
      35            3 :   }
      36            3 :   ~ConfigurationTestFixture()
      37              :   {
      38            3 :     dunedaq::get_iomanager()->reset();
      39            3 :     cfgmgr = nullptr;
      40            3 :   }
      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("ListReverser", "lr0");
      54            1 :   opmgr.register_node("lr0", 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            1 :   auto metrics = opmgr.collect();
      61            1 :   mod->execute_command("stop");
      62              : 
      63            1 :   auto facility = opmgr.get_backend_facility();
      64            1 :   auto entries = facility->get_entries(std::regex("dunedaq.listrev.opmon.ListReverserInfo"));
      65            1 :   BOOST_REQUIRE_EQUAL(entries.size(), 1);
      66              : 
      67            1 :   BOOST_REQUIRE_EQUAL(entries.front().data().at("requests_received").uint8_value(), 0);
      68            1 :   BOOST_REQUIRE_EQUAL(entries.front().data().at("requests_sent").uint8_value(), 0);
      69            1 :   BOOST_REQUIRE_EQUAL(entries.front().data().at("lists_received").uint8_value(), 0);
      70            1 :   BOOST_REQUIRE_EQUAL(entries.front().data().at("lists_sent").uint8_value(), 0);
      71            3 : }
      72              : 
      73            2 : BOOST_FIXTURE_TEST_CASE(Requests, ConfigurationTestFixture)
      74              : {
      75            1 :   std::shared_ptr<dunedaq::appfwk::DAQModule> mod = dunedaq::appfwk::make_module("ListReverser", "lr0");
      76            1 :   opmgr.register_node("lr0", mod);
      77              : 
      78            1 :   auto requestReceiver = dunedaq::get_iomanager()->get_receiver<RequestList>("rdlg0_request_queue");
      79            1 :   auto listReceiver = dunedaq::get_iomanager()->get_receiver<ReversedList>("validator_list_queue");
      80              : 
      81            1 :   mod->init(cfgmgr);
      82            1 :   mod->execute_command("start");
      83              : 
      84            1 :   auto requestSender = dunedaq::get_iomanager()->get_sender<RequestList>("lr0_request_queue");
      85              : 
      86              :   // ListReverser receives request and forwards to data list generator
      87            1 :   RequestList theRequest(1, "validator_list_queue");
      88            1 :   requestSender->send(std::move(theRequest), std::chrono::milliseconds(1000));
      89            1 :   auto received = requestReceiver->receive(std::chrono::milliseconds(1000));
      90            1 :   BOOST_REQUIRE_EQUAL(received.list_id, 1);
      91            1 :   BOOST_REQUIRE_EQUAL(received.destination, "lr0_list_queue");
      92              : 
      93            1 :   auto metrics = opmgr.collect();
      94            1 :   mod->execute_command("stop");
      95              : 
      96            1 :   auto facility = opmgr.get_backend_facility();
      97            1 :   auto entries = facility->get_entries(std::regex("dunedaq.listrev.opmon.ListReverserInfo"));
      98            1 :   BOOST_REQUIRE_EQUAL(entries.size(), 1);
      99              : 
     100            1 :   BOOST_REQUIRE_EQUAL(entries.front().data().at("requests_received").uint8_value(), 1);
     101            1 :   BOOST_REQUIRE_EQUAL(entries.front().data().at("requests_sent").uint8_value(), 1);
     102            1 :   BOOST_REQUIRE_EQUAL(entries.front().data().at("lists_received").uint8_value(), 0);
     103            1 :   BOOST_REQUIRE_EQUAL(entries.front().data().at("lists_sent").uint8_value(), 0);
     104            3 : }
     105              : 
     106            2 : BOOST_FIXTURE_TEST_CASE(Lists, ConfigurationTestFixture)
     107              : {
     108            1 :   std::shared_ptr<dunedaq::appfwk::DAQModule> mod = dunedaq::appfwk::make_module("ListReverser", "lr0");
     109            1 :   opmgr.register_node("lr0", mod);
     110              : 
     111            1 :   auto requestReceiver = dunedaq::get_iomanager()->get_receiver<RequestList>("rdlg0_request_queue");
     112            1 :   auto listReceiver = dunedaq::get_iomanager()->get_receiver<ReversedList>("validator_list_queue");
     113              : 
     114            1 :   mod->init(cfgmgr);
     115            1 :   mod->execute_command("start");
     116              : 
     117            1 :   auto requestSender = dunedaq::get_iomanager()->get_sender<RequestList>("lr0_request_queue");
     118            1 :   auto listSender = dunedaq::get_iomanager()->get_sender<IntList>("lr0_list_queue");
     119              : 
     120            1 :   RequestList theRequest(2, "validator_list_queue");
     121            1 :   IntList theList(2, 0, { 3, 4, 5, 6 });
     122              : 
     123            1 :   requestSender->send(std::move(theRequest), std::chrono::milliseconds(1000));
     124            1 :   auto receivedRequest = requestReceiver->receive(std::chrono::milliseconds(1000));
     125            1 :   BOOST_REQUIRE_EQUAL(receivedRequest.list_id, 2);
     126            1 :   BOOST_REQUIRE_EQUAL(receivedRequest.destination, "lr0_list_queue");
     127              : 
     128            1 :   listSender->send(std::move(theList), std::chrono::milliseconds(1000));
     129            1 :   auto receivedList = listReceiver->receive(std::chrono::milliseconds(1000));
     130              : 
     131            1 :   BOOST_REQUIRE_EQUAL(receivedList.list_id, 2);
     132            1 :   BOOST_REQUIRE_EQUAL(receivedList.reverser_id, 0);
     133            1 :   BOOST_REQUIRE_EQUAL(receivedList.lists.size(), 1);
     134            1 :   BOOST_REQUIRE_EQUAL(receivedList.lists[0].original.list[0], 3);
     135            1 :   BOOST_REQUIRE_EQUAL(receivedList.lists[0].reversed.list[0], 6);
     136              : 
     137            1 :   auto metrics = opmgr.collect();
     138            1 :   mod->execute_command("stop");
     139              : 
     140            1 :   auto facility = opmgr.get_backend_facility();
     141            1 :   auto entries = facility->get_entries(std::regex("dunedaq.listrev.opmon.ListReverserInfo"));
     142            1 :   BOOST_REQUIRE_EQUAL(entries.size(), 1);
     143              : 
     144            1 :   BOOST_REQUIRE_EQUAL(entries.front().data().at("requests_received").uint8_value(), 1);
     145            1 :   BOOST_REQUIRE_EQUAL(entries.front().data().at("requests_sent").uint8_value(), 1);
     146            1 :   BOOST_REQUIRE_EQUAL(entries.front().data().at("lists_received").uint8_value(), 1);
     147            1 :   BOOST_REQUIRE_EQUAL(entries.front().data().at("lists_sent").uint8_value(), 1);
     148            3 : }
     149              : 
     150              : BOOST_AUTO_TEST_SUITE_END()
        

Generated by: LCOV version 2.0-1