Line data Source code
1 : #include "artdaq-utilities/Plugins/MetricPlugin.hh"
2 : #include "artdaq-utilities/Plugins/TestMetric.hh"
3 :
4 : #define BOOST_TEST_MODULE MetricPlugin_t
5 : #include "cetlib/quiet_unit_test.hpp"
6 : #include "cetlib_except/exception.h"
7 :
8 : #include "TRACE/trace.h"
9 :
10 : namespace artdaqtest {
11 : /// <summary>
12 : /// Metric plugin which stores metric call counts for testing
13 : /// </summary>
14 : class MetricPluginTestAdapter : public artdaq::MetricPlugin
15 : {
16 : public:
17 : /// <summary>
18 : /// Constructor
19 : /// </summary>
20 : /// <param name="ps">fhicl::ParameterSet used to configure MetricPLugin</param>
21 7 : explicit MetricPluginTestAdapter(fhicl::ParameterSet ps)
22 7 : : artdaq::MetricPlugin(ps, "MetricPlugin_t", "plugin_t")
23 7 : , sendMetric_string_calls(0)
24 7 : , sendMetric_int_calls(0)
25 7 : , sendMetric_double_calls(0)
26 7 : , sendMetric_float_calls(0)
27 7 : , sendMetric_unsigned_calls(0)
28 7 : , startMetrics_calls(0)
29 28 : , stopMetrics_calls(0)
30 7 : {}
31 :
32 : /**
33 : * \brief Send a String metric, record the call and discard the metric's data
34 : */
35 4 : virtual void sendMetric_(const std::string&, const std::string&, const std::string&, const std::chrono::system_clock ::time_point&) override { sendMetric_string_calls++; }
36 : /**
37 : * \brief Send an int metric, record the call and discard the metric's data
38 : */
39 4 : virtual void sendMetric_(const std::string&, const int&, const std::string&, const std::chrono::system_clock ::time_point&) override { sendMetric_int_calls++; }
40 : /**
41 : * \brief Send a double metric, record the call and discard the metric's data
42 : */
43 4 : virtual void sendMetric_(const std::string&, const double&, const std::string&, const std::chrono::system_clock ::time_point&) override { sendMetric_double_calls++; }
44 : /**
45 : * \brief Send a float metric, record the call and discard the metric's data
46 : */
47 4 : virtual void sendMetric_(const std::string&, const float&, const std::string&, const std::chrono::system_clock ::time_point&) override { sendMetric_float_calls++; }
48 : /**
49 : * \brief Send an unsigned metric, record the call and discard the metric's data
50 : */
51 4 : virtual void sendMetric_(const std::string&, const uint64_t&, const std::string&, const std::chrono::system_clock ::time_point&) override { sendMetric_unsigned_calls++; }
52 :
53 : /**
54 : * \brief Record that a startMetrics call was received
55 : */
56 1 : void startMetrics_() override { startMetrics_calls++; }
57 : /**
58 : * \brief Record that a stopMetrics call was received
59 : */
60 1 : void stopMetrics_() override { stopMetrics_calls++; }
61 :
62 : size_t sendMetric_string_calls; ///< The number of string metric calls received
63 : size_t sendMetric_int_calls; ///< The number of int metric calls received
64 : size_t sendMetric_double_calls; ///< The number of double metric calls received
65 : size_t sendMetric_float_calls; ///< The number of float metric calls received
66 : size_t sendMetric_unsigned_calls; ///< The numberof unsigned metric calls received
67 : size_t startMetrics_calls; ///< The number of startMetrics_ calls received
68 : size_t stopMetrics_calls; ///< The number of stopMetrics_ calls received
69 :
70 : // Getters for protected members
71 : /// <summary>
72 : /// Get the ParameterSet used to configure the plugin
73 : /// </summary>
74 : /// <returns>The ParameterSet used to configure the plugin</returns>
75 1 : fhicl::ParameterSet get_pset() { return pset; }
76 : /// <summary>
77 : /// Get the MetricPlugin's accumulationTime variable
78 : /// </summary>
79 : /// <returns>The accumulationTime variable from the MetricPlugin</returns>
80 1 : double get_accumulationTime_() { return accumulationTime_; }
81 : /// <summary>
82 : /// Get the MetricPlugin's app_name_ variable
83 : /// </summary>
84 : /// <returns>The app_name_ variable from the MetricPlugin</returns>
85 : std::string get_app_name_() { return app_name_; }
86 : /// <summary>
87 : /// Get the MetricPlugin's inhibit_ variable
88 : /// </summary>
89 : /// <returns>The inhibit_ variable from the MetricPlugin</returns>
90 : bool get_inhibit_() { return inhibit_; }
91 : /// <summary>
92 : /// Get the MetricPlugin's level_mask_ variable
93 : /// </summary>
94 : /// <returns>The level_mask_ variable from the MetricPlugin</returns>
95 1 : std::bitset<64> get_level_mask_() { return level_mask_; }
96 : };
97 : } // namespace artdaqtest
98 :
99 : BOOST_AUTO_TEST_SUITE(MetricPlugin_test)
100 :
101 2 : BOOST_AUTO_TEST_CASE(Constructor)
102 : {
103 3 : TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case Constructor BEGIN";
104 1 : std::string testConfig = "reporting_interval: 0 level: 4 metric_levels: [7,9,11] level_string: \"13-15,17,19-21,7-9\"";
105 1 : fhicl::ParameterSet pset = fhicl::ParameterSet::make(testConfig);
106 1 : artdaqtest::MetricPluginTestAdapter mpta(pset);
107 1 : BOOST_REQUIRE_EQUAL(mpta.get_pset().to_string(), pset.to_string());
108 1 : BOOST_REQUIRE_EQUAL(mpta.get_accumulationTime_(), 0.0);
109 1 : BOOST_REQUIRE_EQUAL(mpta.get_level_mask_()[8], true);
110 1 : BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(8), true);
111 3 : TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case Constructor END";
112 1 : }
113 :
114 2 : BOOST_AUTO_TEST_CASE(IsLevelEnabled)
115 : {
116 3 : TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case IsLevelEnabled BEGIN";
117 1 : std::string testConfig = "reporting_interval: 0 level: 4 metric_levels: [7,9,11] level_string: \"13-15,17,19-21,7-9\"";
118 1 : fhicl::ParameterSet pset = fhicl::ParameterSet::make(testConfig);
119 1 : artdaqtest::MetricPluginTestAdapter mpta(pset);
120 :
121 1 : BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(0), true);
122 1 : BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(1), true);
123 1 : BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(2), true);
124 1 : BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(3), true);
125 1 : BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(4), true);
126 1 : BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(5), false);
127 1 : BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(6), false);
128 1 : BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(7), true);
129 1 : BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(8), true);
130 1 : BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(9), true);
131 1 : BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(10), false);
132 1 : BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(11), true);
133 1 : BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(12), false);
134 1 : BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(13), true);
135 1 : BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(14), true);
136 1 : BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(15), true);
137 1 : BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(16), false);
138 1 : BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(17), true);
139 1 : BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(18), false);
140 1 : BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(19), true);
141 1 : BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(20), true);
142 1 : BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(21), true);
143 1 : BOOST_REQUIRE_EQUAL(mpta.IsLevelEnabled(22), false);
144 :
145 3 : TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case IsLevelEnabled END";
146 1 : }
147 :
148 2 : BOOST_AUTO_TEST_CASE(LibraryName)
149 : {
150 3 : TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case LibraryName BEGIN";
151 1 : std::string testConfig = "reporting_interval: 0 level: 4 metric_levels: [7,9,11] level_string: \"13-15,17,19-21,7-9\"";
152 1 : fhicl::ParameterSet pset = fhicl::ParameterSet::make(testConfig);
153 1 : artdaqtest::MetricPluginTestAdapter mpta(pset);
154 :
155 1 : BOOST_REQUIRE_EQUAL(mpta.getLibName(), "ERROR");
156 3 : TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case LibraryName END";
157 1 : }
158 :
159 2 : BOOST_AUTO_TEST_CASE(AddMetricData)
160 : {
161 3 : TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case AddMetricData BEGIN";
162 1 : std::string testConfig = "reporting_interval: 1.0 level: 4 metric_levels: [7,9,11] level_string: \"13-15,17,19-21,7-9\"";
163 1 : fhicl::ParameterSet pset = fhicl::ParameterSet::make(testConfig);
164 1 : artdaqtest::MetricPluginTestAdapter mpta(pset);
165 :
166 1 : auto smd = std::make_unique<artdaq::MetricData>("String Metric", "Test Value", "Units", 1, artdaq::MetricMode::LastPoint, "", false);
167 1 : auto imd = std::make_unique<artdaq::MetricData>("Int Metric", 2, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
168 1 : auto fmd = std::make_unique<artdaq::MetricData>("Float Metric", 3.5f, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
169 1 : auto dmd = std::make_unique<artdaq::MetricData>("Double Metric", 4.5, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
170 1 : auto umd = std::make_unique<artdaq::MetricData>("Unsigned Metric", 5UL, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
171 :
172 1 : mpta.addMetricData(smd);
173 1 : mpta.addMetricData(imd);
174 1 : mpta.addMetricData(fmd);
175 1 : mpta.addMetricData(dmd);
176 1 : mpta.addMetricData(umd);
177 :
178 1 : BOOST_REQUIRE_EQUAL(mpta.sendMetric_string_calls, 1);
179 1 : BOOST_REQUIRE_EQUAL(mpta.sendMetric_int_calls, 0);
180 1 : BOOST_REQUIRE_EQUAL(mpta.sendMetric_float_calls, 0);
181 1 : BOOST_REQUIRE_EQUAL(mpta.sendMetric_double_calls, 0);
182 1 : BOOST_REQUIRE_EQUAL(mpta.sendMetric_unsigned_calls, 0);
183 :
184 3 : TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case AddMetricData END";
185 1 : }
186 :
187 2 : BOOST_AUTO_TEST_CASE(SendMetrics)
188 : {
189 3 : TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case SendMetrics BEGIN";
190 1 : std::string testConfig = "reporting_interval: 0.01 level: 4 metric_levels: [7,9,11] level_string: \"13-15,17,19-21,7-9\"";
191 1 : fhicl::ParameterSet pset = fhicl::ParameterSet::make(testConfig);
192 1 : artdaqtest::MetricPluginTestAdapter mpta(pset);
193 :
194 1 : auto smd = std::make_unique<artdaq::MetricData>("String Metric", "Test Value", "Units", 1, artdaq::MetricMode::LastPoint, "", false);
195 1 : auto imd = std::make_unique<artdaq::MetricData>("Int Metric", 2, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
196 1 : auto fmd = std::make_unique<artdaq::MetricData>("Float Metric", 3.5f, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
197 1 : auto dmd = std::make_unique<artdaq::MetricData>("Double Metric", 4.5, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
198 1 : auto umd = std::make_unique<artdaq::MetricData>("Unsigned Metric", 5UL, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
199 :
200 1 : mpta.addMetricData(smd);
201 1 : mpta.addMetricData(imd);
202 1 : mpta.addMetricData(fmd);
203 1 : mpta.addMetricData(dmd);
204 1 : mpta.addMetricData(umd);
205 :
206 1 : BOOST_REQUIRE_EQUAL(mpta.sendMetric_string_calls, 1);
207 1 : BOOST_REQUIRE_EQUAL(mpta.sendMetric_int_calls, 0);
208 1 : BOOST_REQUIRE_EQUAL(mpta.sendMetric_float_calls, 0);
209 1 : BOOST_REQUIRE_EQUAL(mpta.sendMetric_double_calls, 0);
210 1 : BOOST_REQUIRE_EQUAL(mpta.sendMetric_unsigned_calls, 0);
211 :
212 1 : mpta.sendMetrics();
213 :
214 1 : BOOST_REQUIRE_EQUAL(mpta.sendMetric_string_calls, 1);
215 1 : BOOST_REQUIRE_EQUAL(mpta.sendMetric_int_calls, 1);
216 1 : BOOST_REQUIRE_EQUAL(mpta.sendMetric_float_calls, 1);
217 1 : BOOST_REQUIRE_EQUAL(mpta.sendMetric_double_calls, 1);
218 1 : BOOST_REQUIRE_EQUAL(mpta.sendMetric_unsigned_calls, 1);
219 :
220 1 : mpta.addMetricData(smd);
221 1 : mpta.addMetricData(imd);
222 1 : mpta.addMetricData(fmd);
223 1 : mpta.addMetricData(dmd);
224 1 : mpta.addMetricData(umd);
225 :
226 1 : BOOST_REQUIRE_EQUAL(mpta.sendMetric_string_calls, 2);
227 1 : BOOST_REQUIRE_EQUAL(mpta.sendMetric_int_calls, 1);
228 1 : BOOST_REQUIRE_EQUAL(mpta.sendMetric_float_calls, 1);
229 1 : BOOST_REQUIRE_EQUAL(mpta.sendMetric_double_calls, 1);
230 1 : BOOST_REQUIRE_EQUAL(mpta.sendMetric_unsigned_calls, 1);
231 :
232 1 : mpta.sendMetrics();
233 :
234 1 : BOOST_REQUIRE_EQUAL(mpta.sendMetric_string_calls, 2);
235 1 : BOOST_REQUIRE_EQUAL(mpta.sendMetric_int_calls, 1);
236 1 : BOOST_REQUIRE_EQUAL(mpta.sendMetric_float_calls, 1);
237 1 : BOOST_REQUIRE_EQUAL(mpta.sendMetric_double_calls, 1);
238 1 : BOOST_REQUIRE_EQUAL(mpta.sendMetric_unsigned_calls, 1);
239 :
240 1 : usleep(200000);
241 :
242 1 : mpta.sendMetrics();
243 :
244 1 : BOOST_REQUIRE_EQUAL(mpta.sendMetric_string_calls, 2);
245 1 : BOOST_REQUIRE_EQUAL(mpta.sendMetric_int_calls, 2);
246 1 : BOOST_REQUIRE_EQUAL(mpta.sendMetric_float_calls, 2);
247 1 : BOOST_REQUIRE_EQUAL(mpta.sendMetric_double_calls, 2);
248 1 : BOOST_REQUIRE_EQUAL(mpta.sendMetric_unsigned_calls, 2);
249 :
250 3 : TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case SendMetrics END";
251 1 : }
252 :
253 2 : BOOST_AUTO_TEST_CASE(StartMetrics)
254 : {
255 3 : TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case StartMetrics BEGIN";
256 1 : std::string testConfig = "reporting_interval: 0 level: 4 metric_levels: [7,9,11] level_string: \"13-15,17,19-21,7-9\"";
257 1 : fhicl::ParameterSet pset = fhicl::ParameterSet::make(testConfig);
258 1 : artdaqtest::MetricPluginTestAdapter mpta(pset);
259 :
260 1 : mpta.startMetrics();
261 1 : BOOST_REQUIRE_EQUAL(mpta.startMetrics_calls, 1);
262 3 : TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case StartMetrics END";
263 1 : }
264 :
265 2 : BOOST_AUTO_TEST_CASE(StopMetrics)
266 : {
267 3 : TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case StopMetrics BEGIN";
268 1 : std::string testConfig = "reporting_interval: 1.0 level: 4 metric_levels: [7,9,11] level_string: \"13-15,17,19-21,7-9\"";
269 1 : fhicl::ParameterSet pset = fhicl::ParameterSet::make(testConfig);
270 1 : artdaqtest::MetricPluginTestAdapter mpta(pset);
271 :
272 1 : auto smd = std::make_unique<artdaq::MetricData>("String Metric", "Test Value", "Units", 1, artdaq::MetricMode::LastPoint, "", false);
273 1 : auto imd = std::make_unique<artdaq::MetricData>("Int Metric", 2, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
274 1 : auto fmd = std::make_unique<artdaq::MetricData>("Float Metric", 3.5f, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
275 1 : auto dmd = std::make_unique<artdaq::MetricData>("Double Metric", 4.5, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
276 1 : auto umd = std::make_unique<artdaq::MetricData>("Unsigned Metric", 5UL, "Units", 1, artdaq::MetricMode::LastPoint, "", false);
277 :
278 1 : mpta.addMetricData(smd);
279 1 : mpta.addMetricData(imd);
280 1 : mpta.addMetricData(fmd);
281 1 : mpta.addMetricData(dmd);
282 1 : mpta.addMetricData(umd);
283 :
284 1 : BOOST_REQUIRE_EQUAL(mpta.sendMetric_string_calls, 1);
285 1 : BOOST_REQUIRE_EQUAL(mpta.sendMetric_int_calls, 0);
286 1 : BOOST_REQUIRE_EQUAL(mpta.sendMetric_float_calls, 0);
287 1 : BOOST_REQUIRE_EQUAL(mpta.sendMetric_double_calls, 0);
288 1 : BOOST_REQUIRE_EQUAL(mpta.sendMetric_unsigned_calls, 0);
289 :
290 1 : mpta.stopMetrics();
291 :
292 1 : BOOST_REQUIRE_EQUAL(mpta.stopMetrics_calls, 1);
293 1 : BOOST_REQUIRE_EQUAL(mpta.sendMetric_string_calls, 1);
294 1 : BOOST_REQUIRE_EQUAL(mpta.sendMetric_int_calls, 2);
295 1 : BOOST_REQUIRE_EQUAL(mpta.sendMetric_float_calls, 2);
296 1 : BOOST_REQUIRE_EQUAL(mpta.sendMetric_double_calls, 2);
297 1 : BOOST_REQUIRE_EQUAL(mpta.sendMetric_unsigned_calls, 2);
298 :
299 3 : TLOG(TLVL_INFO, "MetricPlugin_t") << "Test Case StopMetrics END";
300 1 : }
301 :
302 : BOOST_AUTO_TEST_SUITE_END()
|