LCOV - code coverage report
Current view: top level - iomanager/unittest - NetworkManager_test.cxx (source / functions) Coverage Total Hit
Test: code.result Lines: 100.0 % 75 75
Test Date: 2025-12-21 13:07:08 Functions: 92.9 % 14 13

            Line data    Source code
       1              : /**
       2              :  * @file NetworkManager_test.cxx NetworkManager class 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 "iomanager/network/NetworkManager.hpp"
      10              : #include "opmonlib/TestOpMonManager.hpp"
      11              : 
      12              : #include "logging/Logging.hpp"
      13              : 
      14              : #define BOOST_TEST_MODULE NetworkManager_test // NOLINT
      15              : 
      16              : #include "boost/test/unit_test.hpp"
      17              : 
      18              : #include <memory>
      19              : #include <string>
      20              : #include <vector>
      21              : 
      22              : #pragma GCC diagnostic push
      23              : #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
      24              : 
      25              : using namespace dunedaq::iomanager;
      26              : 
      27              : BOOST_AUTO_TEST_SUITE(NetworkManager_test)
      28              : 
      29              : struct NetworkManagerTestFixture
      30              : {
      31            2 :   NetworkManagerTestFixture()
      32            2 :   {
      33              : 
      34            2 :     confdb = std::make_shared<dunedaq::conffwk::Configuration>("oksconflibs:test/config/networkmanager_test.data.xml");
      35            2 :     confdb->get<dunedaq::confmodel::NetworkConnection>(connections);
      36              : 
      37            2 :     sendRecvConnId.uid = "sendRecv";
      38            2 :     sendRecvConnId.data_type = "data";
      39            2 :     pubSubConnId1.uid = "pubsub1";
      40            2 :     pubSubConnId1.data_type = "String";
      41            2 :     pubSubConnId2.uid = "pubsub2";
      42            2 :     pubSubConnId2.data_type = "String";
      43            2 :     pubSubConnId3.uid = "pubsub3";
      44            2 :     pubSubConnId3.data_type = "String";
      45              : 
      46            2 :     dunedaq::opmonlib::TestOpMonManager opmgr;
      47            2 :     NetworkManager::get().configure("NetworkManager_t", connections, nullptr, opmgr); // Not using ConfigClient
      48            2 :   }
      49            2 :   ~NetworkManagerTestFixture() { NetworkManager::get().reset(); }
      50              : 
      51              :   NetworkManagerTestFixture(NetworkManagerTestFixture const&) = default;
      52              :   NetworkManagerTestFixture(NetworkManagerTestFixture&&) = default;
      53              :   NetworkManagerTestFixture& operator=(NetworkManagerTestFixture const&) = default;
      54              :   NetworkManagerTestFixture& operator=(NetworkManagerTestFixture&&) = default;
      55              : 
      56              :   ConnectionId sendRecvConnId, pubSubConnId1, pubSubConnId2, pubSubConnId3;
      57              :   std::shared_ptr<dunedaq::conffwk::Configuration> confdb;
      58              :   std::vector<const dunedaq::confmodel::NetworkConnection*> connections;
      59              : };
      60              : 
      61            2 : BOOST_AUTO_TEST_CASE(CopyAndMoveSemantics)
      62              : {
      63            1 :   BOOST_REQUIRE(!std::is_copy_constructible_v<NetworkManager>);
      64            1 :   BOOST_REQUIRE(!std::is_copy_assignable_v<NetworkManager>);
      65            1 :   BOOST_REQUIRE(!std::is_move_constructible_v<NetworkManager>);
      66            1 :   BOOST_REQUIRE(!std::is_move_assignable_v<NetworkManager>);
      67            1 : }
      68              : 
      69            2 : BOOST_AUTO_TEST_CASE(Singleton)
      70              : {
      71            1 :   auto& nm = NetworkManager::get();
      72            1 :   auto& another_nm = NetworkManager::get();
      73              : 
      74            1 :   BOOST_REQUIRE_EQUAL(&nm, &another_nm);
      75            1 : }
      76              : 
      77            2 : BOOST_FIXTURE_TEST_CASE(FakeConfigure, NetworkManagerTestFixture)
      78              : {
      79            1 :   auto conn_res = NetworkManager::get().get_preconfigured_connections(sendRecvConnId);
      80            1 :   BOOST_REQUIRE_EQUAL(conn_res.connections.size(), 1);
      81            1 :   BOOST_REQUIRE_EQUAL(conn_res.connections[0].uri, "inproc://foo");
      82              : 
      83            1 :   conn_res = NetworkManager::get().get_preconfigured_connections(pubSubConnId1);
      84            1 :   BOOST_REQUIRE_EQUAL(conn_res.connections.size(), 1);
      85            1 :   BOOST_REQUIRE_EQUAL(conn_res.connections[0].uri, "inproc://bar");
      86              : 
      87            1 :   ConnectionId topicConnId;
      88            1 :   topicConnId.uid = ".*";
      89            1 :   topicConnId.data_type = "String";
      90            1 :   conn_res = NetworkManager::get().get_preconfigured_connections(topicConnId);
      91            1 :   BOOST_REQUIRE_EQUAL(conn_res.connections.size(), 3);
      92            1 :   BOOST_REQUIRE(conn_res.connections[0].uri == "inproc://bar" || conn_res.connections[1].uri == "inproc://bar" ||
      93              :                 conn_res.connections[2].uri == "inproc://bar");
      94            1 :   BOOST_REQUIRE(conn_res.connections[0].uri == "inproc://rab" || conn_res.connections[1].uri == "inproc://rab" ||
      95              :                 conn_res.connections[2].uri == "inproc://rab");
      96            1 :   BOOST_REQUIRE(conn_res.connections[0].uri == "inproc://abr" || conn_res.connections[1].uri == "inproc://abr" ||
      97              :                 conn_res.connections[2].uri == "inproc://abr");
      98              : 
      99            1 :   ConnectionId id_notfound;
     100            1 :   id_notfound.uid = "blah";
     101            1 :   id_notfound.data_type = "blahblah";
     102              : 
     103            1 :   conn_res = NetworkManager::get().get_preconfigured_connections(id_notfound);
     104            1 :   BOOST_REQUIRE_EQUAL(conn_res.connections.size(), 0);
     105              : 
     106            1 :   id_notfound.uid = "sendRecv";
     107            1 :   id_notfound.data_type = "blahblah";
     108            1 :   conn_res = NetworkManager::get().get_preconfigured_connections(id_notfound);
     109            1 :   BOOST_REQUIRE_EQUAL(conn_res.connections.size(), 0);
     110              : 
     111            1 :   id_notfound.uid = "blah";
     112            1 :   id_notfound.data_type = "String";
     113            1 :   conn_res = NetworkManager::get().get_preconfigured_connections(id_notfound);
     114            1 :   BOOST_REQUIRE_EQUAL(conn_res.connections.size(), 0);
     115              : 
     116            1 :   BOOST_REQUIRE(!NetworkManager::get().is_pubsub_connection(sendRecvConnId));
     117            1 :   BOOST_REQUIRE(NetworkManager::get().is_pubsub_connection(pubSubConnId1));
     118            1 :   BOOST_REQUIRE(NetworkManager::get().is_pubsub_connection(topicConnId));
     119            3 :   BOOST_REQUIRE_EXCEPTION(NetworkManager::get().is_pubsub_connection(id_notfound),
     120              :                           ConnectionNotFound,
     121              :                           [](ConnectionNotFound const&) { return true; });
     122              : 
     123            1 :   dunedaq::opmonlib::TestOpMonManager opmgr;
     124            4 :   BOOST_REQUIRE_EXCEPTION(NetworkManager::get().configure("NetworkManager_t", connections, nullptr, opmgr),
     125              :                           AlreadyConfigured,
     126              :                           [&](AlreadyConfigured const&) { return true; });
     127              : 
     128            1 :   NetworkManager::get().reset();
     129              : 
     130            1 :   NetworkManager::get().configure("NetworkManager_t", connections, nullptr, opmgr);
     131            1 : }
     132              : 
     133            2 : BOOST_FIXTURE_TEST_CASE(GetDatatypes, NetworkManagerTestFixture)
     134              : {
     135            1 :   auto sendRecvDataType = NetworkManager::get().get_datatypes("sendRecv");
     136            1 :   BOOST_REQUIRE_EQUAL(sendRecvDataType.size(), 1);
     137            1 :   BOOST_REQUIRE_EQUAL(*sendRecvDataType.begin(), "data");
     138              : 
     139            1 :   auto pubsub3DataType = NetworkManager::get().get_datatypes("pubsub3");
     140            1 :   BOOST_REQUIRE_EQUAL(pubsub3DataType.size(), 1);
     141            1 :   BOOST_REQUIRE_EQUAL(*pubsub3DataType.begin(), "String");
     142              : 
     143            1 :   auto invalidDataType = NetworkManager::get().get_datatypes("NonExistentUID");
     144            1 :   BOOST_REQUIRE_EQUAL(invalidDataType.size(), 0);
     145            1 : }
     146              : 
     147            1 : BOOST_AUTO_TEST_CASE(MakeIPMPlugins) {}
     148              : 
     149              : BOOST_AUTO_TEST_SUITE_END()
     150              : 
     151              : #pragma GCC diagnostic pop
        

Generated by: LCOV version 2.0-1