1 #define BOOST_TEST_MODULE RoundRobin_policy_t
2 #include <boost/test/unit_test.hpp>
4 #include "artdaq-utilities/Plugins/MakeParameterSet.hh"
5 #include "artdaq/RoutingPolicies/makeRoutingManagerPolicy.hh"
6 #include "fhiclcpp/ParameterSet.h"
8 BOOST_AUTO_TEST_SUITE(RoundRobin_policy_t)
12 TLOG(TLVL_INFO) <<
"RoundRobin_policy_t Test Case VerifyRMPSharedPtr BEGIN";
13 auto ps4 = artdaq::make_pset(
"");
14 auto ps3 = artdaq::make_pset(
"");
15 auto ps2 = artdaq::make_pset(
"");
20 BOOST_REQUIRE_EQUAL(rrA, rrB);
23 BOOST_REQUIRE(rrA != rrB);
28 TLOG(TLVL_INFO) <<
"RoundRobin_policy_t Test Case VerifyRMPSharedPtr END";
33 TLOG(TLVL_INFO) <<
"RoundRobin_policy_t Test Case Simple BEGIN";
34 fhicl::ParameterSet ps = artdaq::make_pset(
"");
40 rr->AddReceiverToken(1, 1);
41 rr->AddReceiverToken(3, 1);
42 rr->AddReceiverToken(2, 1);
43 rr->AddReceiverToken(4, 1);
44 rr->AddReceiverToken(2, 1);
45 BOOST_REQUIRE_EQUAL(rr->GetReceiverCount(), 4);
46 auto secondTable = rr->GetCurrentTable();
47 BOOST_REQUIRE_EQUAL(secondTable.size(), 4);
48 BOOST_REQUIRE_EQUAL(secondTable[0].destination_rank, 1);
49 BOOST_REQUIRE_EQUAL(secondTable[1].destination_rank, 2);
50 BOOST_REQUIRE_EQUAL(secondTable[2].destination_rank, 3);
51 BOOST_REQUIRE_EQUAL(secondTable[3].destination_rank, 4);
52 BOOST_REQUIRE_EQUAL(secondTable[0].sequence_id, 1);
53 BOOST_REQUIRE_EQUAL(secondTable[1].sequence_id, 2);
54 BOOST_REQUIRE_EQUAL(secondTable[2].sequence_id, 3);
55 BOOST_REQUIRE_EQUAL(secondTable[3].sequence_id, 4);
57 rr->AddReceiverToken(1, 0);
59 auto thirdTable = rr->GetCurrentTable();
60 BOOST_REQUIRE_EQUAL(thirdTable.size(), 0);
62 rr->AddReceiverToken(1, 2);
63 rr->AddReceiverToken(2, 1);
64 rr->AddReceiverToken(3, 1);
65 rr->AddReceiverToken(4, 2);
66 auto fourthTable = rr->GetCurrentTable();
67 BOOST_REQUIRE_EQUAL(fourthTable.size(), 4);
68 BOOST_REQUIRE_EQUAL(fourthTable[0].destination_rank, 1);
70 rr->AddReceiverToken(3, 1);
71 auto fifthTable = rr->GetCurrentTable();
72 BOOST_REQUIRE_EQUAL(fifthTable.size(), 4);
73 BOOST_REQUIRE_EQUAL(fifthTable[0].destination_rank, 1);
75 TLOG(TLVL_INFO) <<
"RoundRobin_policy_t Test Case Simple END";
80 TLOG(TLVL_INFO) <<
"RoundRobin_policy_t Test Case MinimumParticipants BEGIN";
81 fhicl::ParameterSet ps = artdaq::make_pset(
"minimum_participants: 2");
87 rr->AddReceiverToken(1, 1);
88 rr->AddReceiverToken(3, 1);
89 rr->AddReceiverToken(2, 1);
90 rr->AddReceiverToken(4, 1);
91 rr->AddReceiverToken(2, 1);
92 BOOST_REQUIRE_EQUAL(rr->GetReceiverCount(), 4);
93 auto secondTable = rr->GetCurrentTable();
94 BOOST_REQUIRE_EQUAL(secondTable.size(), 4);
95 BOOST_REQUIRE_EQUAL(secondTable[0].destination_rank, 1);
96 BOOST_REQUIRE_EQUAL(secondTable[1].destination_rank, 2);
97 BOOST_REQUIRE_EQUAL(secondTable[2].destination_rank, 3);
98 BOOST_REQUIRE_EQUAL(secondTable[3].destination_rank, 4);
99 BOOST_REQUIRE_EQUAL(secondTable[0].sequence_id, 1);
100 BOOST_REQUIRE_EQUAL(secondTable[1].sequence_id, 2);
101 BOOST_REQUIRE_EQUAL(secondTable[2].sequence_id, 3);
102 BOOST_REQUIRE_EQUAL(secondTable[3].sequence_id, 4);
104 rr->AddReceiverToken(1, 0);
106 auto thirdTable = rr->GetCurrentTable();
107 BOOST_REQUIRE_EQUAL(thirdTable.size(), 0);
109 rr->AddReceiverToken(1, 1);
110 auto fourthTable = rr->GetCurrentTable();
111 BOOST_REQUIRE_EQUAL(fourthTable.size(), 2);
113 BOOST_REQUIRE_EQUAL(fourthTable[0].destination_rank, 1);
114 BOOST_REQUIRE_EQUAL(fourthTable[1].destination_rank, 2);
115 BOOST_REQUIRE_EQUAL(fourthTable[0].sequence_id, 5);
116 BOOST_REQUIRE_EQUAL(fourthTable[1].sequence_id, 6);
118 rr->AddReceiverToken(1, 2);
119 rr->AddReceiverToken(2, 2);
120 rr->AddReceiverToken(3, 1);
121 rr->AddReceiverToken(4, 2);
122 auto fifthTable = rr->GetCurrentTable();
123 BOOST_REQUIRE_EQUAL(fifthTable.size(), 7);
124 BOOST_REQUIRE_EQUAL(fifthTable[0].destination_rank, 1);
126 rr->AddReceiverToken(3, 1);
127 auto sixthTable = rr->GetCurrentTable();
128 BOOST_REQUIRE_EQUAL(sixthTable.size(), 0);
130 TLOG(TLVL_INFO) <<
"RoundRobin_policy_t Test Case MinimumParticipants END";
136 TLOG(TLVL_INFO) <<
"RoundRobin_policy_t Test Case LargeMinimumParticipants BEGIN";
137 fhicl::ParameterSet ps = artdaq::make_pset(
"minimum_participants: 5");
143 rr->AddReceiverToken(1, 1);
144 rr->AddReceiverToken(3, 1);
145 rr->AddReceiverToken(2, 1);
146 rr->AddReceiverToken(3, 1);
147 rr->AddReceiverToken(2, 1);
148 BOOST_REQUIRE_EQUAL(rr->GetReceiverCount(), 3);
149 auto firstTable = rr->GetCurrentTable();
150 BOOST_REQUIRE_EQUAL(firstTable.size(), 0);
152 rr->AddReceiverToken(5, 1);
153 rr->AddReceiverToken(6, 1);
155 auto secondTable = rr->GetCurrentTable();
156 BOOST_REQUIRE_EQUAL(secondTable.size(), 5);
157 BOOST_REQUIRE_EQUAL(secondTable[0].destination_rank, 1);
158 BOOST_REQUIRE_EQUAL(secondTable[1].destination_rank, 2);
159 BOOST_REQUIRE_EQUAL(secondTable[2].destination_rank, 3);
160 BOOST_REQUIRE_EQUAL(secondTable[3].destination_rank, 5);
161 BOOST_REQUIRE_EQUAL(secondTable[4].destination_rank, 6);
163 rr->AddReceiverToken(1, 1);
164 auto thirdTable = rr->GetCurrentTable();
165 BOOST_REQUIRE_EQUAL(thirdTable.size(), 0);
167 TLOG(TLVL_INFO) <<
"RoundRobin_policy_t Test Case LargeMinimumParticipants END";
172 TLOG(TLVL_INFO) <<
"RoundRobin_policy_t Test Case ManyMissingParticipants BEGIN";
173 fhicl::ParameterSet ps = artdaq::make_pset(
"minimum_participants: -5");
179 rr->AddReceiverToken(1, 1);
180 rr->AddReceiverToken(3, 1);
181 rr->AddReceiverToken(2, 1);
182 rr->AddReceiverToken(3, 1);
183 rr->AddReceiverToken(2, 1);
184 BOOST_REQUIRE_EQUAL(rr->GetReceiverCount(), 3);
185 auto secondTable = rr->GetCurrentTable();
186 BOOST_REQUIRE_EQUAL(secondTable.size(), 5);
187 BOOST_REQUIRE_EQUAL(secondTable[0].destination_rank, 1);
189 rr->AddReceiverToken(1, 1);
190 auto thirdTable = rr->GetCurrentTable();
191 BOOST_REQUIRE_EQUAL(thirdTable.size(), 1);
193 TLOG(TLVL_INFO) <<
"RoundRobin_policy_t Test Case ManyMissingParticipants END";
198 TLOG(TLVL_INFO) <<
"RoundRobin_policy_t Test Case DataFlowMode BEGIN";
199 fhicl::ParameterSet ps = artdaq::make_pset(
"routing_manager_mode: DataFlow");
205 rr->AddReceiverToken(1, 1);
206 rr->AddReceiverToken(3, 1);
207 rr->AddReceiverToken(2, 1);
208 rr->AddReceiverToken(3, 1);
209 rr->AddReceiverToken(2, 1);
210 BOOST_REQUIRE_EQUAL(rr->GetReceiverCount(), 3);
211 auto route = rr->GetRouteForSequenceID(1, 4);
212 BOOST_REQUIRE_EQUAL(route.destination_rank, 1);
213 BOOST_REQUIRE_EQUAL(route.sequence_id, 1);
216 route = rr->GetRouteForSequenceID(1, 5);
217 BOOST_REQUIRE_EQUAL(route.destination_rank, 2);
218 BOOST_REQUIRE_EQUAL(route.sequence_id, 1);
221 route = rr->GetRouteForSequenceID(1, 5);
222 BOOST_REQUIRE_EQUAL(route.destination_rank, 2);
223 BOOST_REQUIRE_EQUAL(route.sequence_id, 1);
225 route = rr->GetRouteForSequenceID(2, 4);
226 BOOST_REQUIRE_EQUAL(route.destination_rank, 3);
227 BOOST_REQUIRE_EQUAL(route.sequence_id, 2);
229 route = rr->GetRouteForSequenceID(2, 5);
230 BOOST_REQUIRE_EQUAL(route.destination_rank, -1);
232 rr->AddReceiverToken(1, 1);
233 route = rr->GetRouteForSequenceID(2, 5);
234 BOOST_REQUIRE_EQUAL(route.destination_rank, 1);
235 BOOST_REQUIRE_EQUAL(route.sequence_id, 2);
238 route = rr->GetRouteForSequenceID(1, 6);
239 BOOST_REQUIRE_EQUAL(route.destination_rank, 2);
240 BOOST_REQUIRE_EQUAL(route.sequence_id, 1);
243 route = rr->GetRouteForSequenceID(10343, 4);
244 BOOST_REQUIRE_EQUAL(route.destination_rank, 3);
245 BOOST_REQUIRE_EQUAL(route.sequence_id, 10343);
247 TLOG(TLVL_INFO) <<
"RoundRobin_policy_t Test Case DataFlowMode END";
252 TLOG(TLVL_INFO) <<
"RoundRobin_policy_t Test Case RequestBasedEventBuilding BEGIN";
253 fhicl::ParameterSet ps = artdaq::make_pset(
"routing_manager_mode: RequestBasedEventBuilding routing_cache_size: 2");
259 rr->AddReceiverToken(1, 1);
260 rr->AddReceiverToken(3, 1);
261 rr->AddReceiverToken(2, 1);
262 rr->AddReceiverToken(3, 1);
263 rr->AddReceiverToken(2, 1);
264 BOOST_REQUIRE_EQUAL(rr->GetReceiverCount(), 3);
266 auto route = rr->GetRouteForSequenceID(1, 4);
267 BOOST_REQUIRE_EQUAL(route.destination_rank, 1);
268 BOOST_REQUIRE_EQUAL(route.sequence_id, 1);
271 route = rr->GetRouteForSequenceID(1, 5);
272 BOOST_REQUIRE_EQUAL(route.destination_rank, 1);
273 BOOST_REQUIRE_EQUAL(route.sequence_id, 1);
276 auto firstTable = rr->GetCurrentTable();
277 BOOST_REQUIRE_EQUAL(firstTable.size(), 1);
278 BOOST_REQUIRE_EQUAL(firstTable[0].destination_rank, 1);
281 route = rr->GetRouteForSequenceID(12343, 4);
282 BOOST_REQUIRE_EQUAL(route.destination_rank, 2);
283 BOOST_REQUIRE_EQUAL(route.sequence_id, 12343);
286 route = rr->GetRouteForSequenceID(4, 5);
287 BOOST_REQUIRE_EQUAL(route.destination_rank, 3);
288 BOOST_REQUIRE_EQUAL(route.sequence_id, 4);
291 route = rr->GetRouteForSequenceID(1, 6);
292 BOOST_REQUIRE_EQUAL(route.destination_rank, 1);
293 BOOST_REQUIRE_EQUAL(route.sequence_id, 1);
296 route = rr->GetRouteForSequenceID(50, 4);
297 BOOST_REQUIRE_EQUAL(route.destination_rank, -1);
299 rr->AddReceiverToken(1, 1);
300 route = rr->GetRouteForSequenceID(50, 4);
301 BOOST_REQUIRE_EQUAL(route.destination_rank, 1);
302 BOOST_REQUIRE_EQUAL(route.sequence_id, 50);
304 route = rr->GetRouteForSequenceID(50, 5);
305 BOOST_REQUIRE_EQUAL(route.destination_rank, 1);
306 BOOST_REQUIRE_EQUAL(route.sequence_id, 50);
309 auto secondTable = rr->GetCurrentTable();
310 BOOST_REQUIRE_EQUAL(secondTable.size(), 3);
311 BOOST_REQUIRE_EQUAL(secondTable[0].destination_rank, 3);
312 BOOST_REQUIRE_EQUAL(secondTable[0].sequence_id, 4);
313 BOOST_REQUIRE_EQUAL(secondTable[1].destination_rank, 1);
314 BOOST_REQUIRE_EQUAL(secondTable[1].sequence_id, 50);
315 BOOST_REQUIRE_EQUAL(secondTable[2].destination_rank, 2);
316 BOOST_REQUIRE_EQUAL(secondTable[2].sequence_id, 12343);
319 BOOST_REQUIRE_EQUAL(rr->GetCacheSize(), 2);
320 auto thirdTable = rr->GetCurrentTable();
321 BOOST_REQUIRE_EQUAL(thirdTable.size(), 0);
323 BOOST_REQUIRE(rr->CacheHasRoute(50));
324 BOOST_REQUIRE(!rr->CacheHasRoute(4));
325 route = rr->GetRouteForSequenceID(50, 6);
326 BOOST_REQUIRE_EQUAL(route.destination_rank, 1);
327 BOOST_REQUIRE_EQUAL(route.sequence_id, 50);
329 TLOG(TLVL_INFO) <<
"RoundRobin_policy_t Test Case RequestBasedEventBuilding END";
332 BOOST_AUTO_TEST_SUITE_END()
std::shared_ptr< RoutingManagerPolicy > makeRoutingManagerPolicy(std::string const &policy_plugin_spec, fhicl::ParameterSet const &ps)
Load a RoutingManagerPolicy plugin.