1 #include "artdaq/DAQdata/Globals.hh"
2 #include "artdaq/RoutingPolicies/PolicyMacros.hh"
3 #include "artdaq/RoutingPolicies/RoutingManagerPolicy.hh"
4 #include "fhiclcpp/ParameterSet.h"
5 #include "messagefacility/MessageLogger/MessageLogger.h"
47 artdaq::Fragment::sequence_id_t misbehave_after_;
48 size_t misbehave_pause_ms_;
49 bool misbehave_conflicting_table_data_;
50 bool misbehave_corrupt_table_data_;
51 bool misbehave_overload_event_builder_;
55 : RoutingManagerPolicy(ps)
56 , misbehave_after_(ps.get<size_t>(
"misbehave_after_n_events", 1000))
57 , misbehave_pause_ms_(ps.get<size_t>(
"misbehave_pause_time_ms", 0))
58 , misbehave_conflicting_table_data_(ps.get<bool>(
"misbehave_send_conflicting_table_data", false))
59 , misbehave_corrupt_table_data_(ps.get<bool>(
"misbehave_send_corrupt_table_data", false))
60 , misbehave_overload_event_builder_(ps.get<bool>(
"misbehave_overload_event_builder", false))
63 auto count = (misbehave_conflicting_table_data_ ? 1 : 0) + (misbehave_corrupt_table_data_ ? 1 : 0) +
64 (misbehave_overload_event_builder_ ? 1 : 0) + (misbehave_pause_ms_ > 0 ? 1 : 0);
67 mf::LogWarning(
"MisbehaviorTest") <<
"Only one misbehavior is allowed at a time!";
74 auto tokens = getTokensSnapshot();
75 artdaq::detail::RoutingPacket output;
77 auto half = tokens->size() / 2;
79 for (; counter < half; ++counter)
81 output.emplace_back(artdaq::detail::RoutingPacketEntry(next_sequence_id_, tokens->at(counter)));
85 if (next_sequence_id_ > misbehave_after_)
89 if (misbehave_pause_ms_ > 0)
91 mf::LogError(
"MisbehaviorTest")
92 <<
"Pausing for " << misbehave_pause_ms_ <<
" milliseconds before sending table update";
93 usleep(misbehave_pause_ms_ * 1000);
95 if (misbehave_conflicting_table_data_)
97 mf::LogError(
"MisbehaviorTest") <<
"Adding conflicting data point to output";
98 output.emplace_back(next_sequence_id_, tokens->at(counter) + 1);
100 if (misbehave_corrupt_table_data_)
102 mf::LogError(
"MisbehaviorTest") <<
"Adding random data point";
103 output.emplace_back(seedAndRandom(), rand());
105 if (misbehave_overload_event_builder_)
107 mf::LogError(
"MisbehaviorTest") <<
"Sending 100 events in a row to Rank " << tokens->at(0);
108 for (
auto ii = 0; ii < 100; ++ii)
110 output.emplace_back(next_sequence_id_, tokens->at(0));
114 misbehave_after_ += misbehave_after_;
118 for (; counter < tokens->size(); ++counter)
120 output.emplace_back(artdaq::detail::RoutingPacketEntry(next_sequence_id_, tokens->at(counter)));
artdaq::detail::RoutingPacket GetCurrentTable() override
Generate and return a Routing Table.
A test RoutingManagerPolicy which does various "bad" things, determined by configuration.
MisbehaviorTest(const fhicl::ParameterSet &ps)
MisbehaviorTest Constructor.
~MisbehaviorTest() override=default
MisbehaviorTest default Destructor.