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
|