LCOV - code coverage report
Current view: top level - /opt/artdaq/srcs/artdaq-utilities/test/Plugins - MetricPlugin_t.cc (source / functions) Coverage Total Hit
Test: artdaq.info.cleaned Lines: 100.0 % 180 180
Test Date: 2025-09-04 00:45:34 Functions: 100.0 % 39 39

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

Generated by: LCOV version 2.0-1