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 auto ps4 = artdaq::make_pset(
"receiver_ranks: [1,2,3,4]");
13 auto ps3 = artdaq::make_pset(
"receiver_ranks: [7,8,9]");
14 auto ps2 = artdaq::make_pset(
"receiver_ranks: [5,6]");
17 BOOST_REQUIRE_EQUAL(rrA->GetReceiverCount(), 4);
20 BOOST_REQUIRE_EQUAL(rrA->GetReceiverCount(), 4);
21 BOOST_REQUIRE_EQUAL(rrB->GetReceiverCount(), 4);
24 BOOST_REQUIRE_EQUAL(rrA->GetReceiverCount(), 3);
25 BOOST_REQUIRE_EQUAL(rrB->GetReceiverCount(), 4);
34 fhicl::ParameterSet ps = artdaq::make_pset(
"receiver_ranks: [1,2,3,4]");
38 BOOST_REQUIRE_EQUAL(rr->GetReceiverCount(), 4);
41 rr->AddReceiverToken(1, 1);
42 rr->AddReceiverToken(3, 1);
43 rr->AddReceiverToken(2, 1);
44 rr->AddReceiverToken(4, 1);
45 rr->AddReceiverToken(2, 1);
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);
78 fhicl::ParameterSet ps = artdaq::make_pset(
"receiver_ranks: [1,2,3,4] minimum_participants: 2");
82 BOOST_REQUIRE_EQUAL(rr->GetReceiverCount(), 4);
85 rr->AddReceiverToken(1, 1);
86 rr->AddReceiverToken(3, 1);
87 rr->AddReceiverToken(2, 1);
88 rr->AddReceiverToken(4, 1);
89 rr->AddReceiverToken(2, 1);
90 auto secondTable = rr->GetCurrentTable();
91 BOOST_REQUIRE_EQUAL(secondTable.size(), 4);
92 BOOST_REQUIRE_EQUAL(secondTable[0].destination_rank, 1);
93 BOOST_REQUIRE_EQUAL(secondTable[1].destination_rank, 2);
94 BOOST_REQUIRE_EQUAL(secondTable[2].destination_rank, 3);
95 BOOST_REQUIRE_EQUAL(secondTable[3].destination_rank, 4);
96 BOOST_REQUIRE_EQUAL(secondTable[0].sequence_id, 1);
97 BOOST_REQUIRE_EQUAL(secondTable[1].sequence_id, 2);
98 BOOST_REQUIRE_EQUAL(secondTable[2].sequence_id, 3);
99 BOOST_REQUIRE_EQUAL(secondTable[3].sequence_id, 4);
101 rr->AddReceiverToken(1, 0);
103 auto thirdTable = rr->GetCurrentTable();
104 BOOST_REQUIRE_EQUAL(thirdTable.size(), 0);
106 rr->AddReceiverToken(1, 1);
107 auto fourthTable = rr->GetCurrentTable();
108 BOOST_REQUIRE_EQUAL(fourthTable.size(), 2);
110 BOOST_REQUIRE_EQUAL(fourthTable[0].destination_rank, 1);
111 BOOST_REQUIRE_EQUAL(fourthTable[1].destination_rank, 2);
112 BOOST_REQUIRE_EQUAL(fourthTable[0].sequence_id, 5);
113 BOOST_REQUIRE_EQUAL(fourthTable[1].sequence_id, 6);
115 rr->AddReceiverToken(1, 2);
116 rr->AddReceiverToken(2, 2);
117 rr->AddReceiverToken(3, 1);
118 rr->AddReceiverToken(4, 2);
119 auto fifthTable = rr->GetCurrentTable();
120 BOOST_REQUIRE_EQUAL(fifthTable.size(), 7);
121 BOOST_REQUIRE_EQUAL(fifthTable[0].destination_rank, 1);
123 rr->AddReceiverToken(3, 1);
124 auto sixthTable = rr->GetCurrentTable();
125 BOOST_REQUIRE_EQUAL(sixthTable.size(), 0);
130 fhicl::ParameterSet ps = artdaq::make_pset(
"receiver_ranks: [1,2,3] minimum_participants: 5");
134 BOOST_REQUIRE_EQUAL(rr->GetReceiverCount(), 3);
137 rr->AddReceiverToken(1, 1);
138 rr->AddReceiverToken(3, 1);
139 rr->AddReceiverToken(2, 1);
140 rr->AddReceiverToken(3, 1);
141 rr->AddReceiverToken(2, 1);
142 auto secondTable = rr->GetCurrentTable();
143 BOOST_REQUIRE_EQUAL(secondTable.size(), 3);
144 BOOST_REQUIRE_EQUAL(secondTable[0].destination_rank, 1);
145 BOOST_REQUIRE_EQUAL(secondTable[1].destination_rank, 2);
146 BOOST_REQUIRE_EQUAL(secondTable[2].destination_rank, 3);
148 rr->AddReceiverToken(1, 1);
149 auto thirdTable = rr->GetCurrentTable();
150 BOOST_REQUIRE_EQUAL(thirdTable.size(), 3);
151 BOOST_REQUIRE_EQUAL(thirdTable[0].destination_rank, 1);
152 BOOST_REQUIRE_EQUAL(thirdTable[1].destination_rank, 2);
153 BOOST_REQUIRE_EQUAL(thirdTable[2].destination_rank, 3);
158 fhicl::ParameterSet ps = artdaq::make_pset(
"receiver_ranks: [1,2,3] minimum_participants: -5");
162 BOOST_REQUIRE_EQUAL(rr->GetReceiverCount(), 3);
165 rr->AddReceiverToken(1, 1);
166 rr->AddReceiverToken(3, 1);
167 rr->AddReceiverToken(2, 1);
168 rr->AddReceiverToken(3, 1);
169 rr->AddReceiverToken(2, 1);
170 auto secondTable = rr->GetCurrentTable();
171 BOOST_REQUIRE_EQUAL(secondTable.size(), 5);
172 BOOST_REQUIRE_EQUAL(secondTable[0].destination_rank, 1);
174 rr->AddReceiverToken(1, 1);
175 auto thirdTable = rr->GetCurrentTable();
176 BOOST_REQUIRE_EQUAL(thirdTable.size(), 1);
179 BOOST_AUTO_TEST_SUITE_END()
std::shared_ptr< RoutingManagerPolicy > makeRoutingManagerPolicy(std::string const &policy_plugin_spec, fhicl::ParameterSet const &ps)
Load a RoutingManagerPolicy plugin.