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()
|