LCOV - code coverage report
Current view: top level - test/DAQrate - DataReceiverManager_t.cc (source / functions) Coverage Total Hit
Test: artdaq.info.cleaned Lines: 100.0 % 65 65
Test Date: 2025-09-04 00:45:34 Functions: 62.5 % 32 20

            Line data    Source code
       1              : #include "artdaq/DAQrate/DataReceiverManager.hh"
       2              : 
       3              : #define BOOST_TEST_MODULE DataReceiverManager_t
       4              : #include "artdaq/TransferPlugins/TCPSocketTransfer.hh"
       5              : #include "cetlib/quiet_unit_test.hpp"
       6              : #include "cetlib_except/exception.h"
       7              : 
       8              : #define TRACE_REQUIRE_EQUAL(l, r)                                                                                                \
       9              :         do                                                                                                                           \
      10              :         {                                                                                                                            \
      11              :                 if (l == r)                                                                                                              \
      12              :                 {                                                                                                                        \
      13              :                         TLOG(TLVL_DEBUG) << __LINE__ << ": Checking if " << #l << " (" << l << ") equals " << #r << " (" << r << ")...YES!"; \
      14              :                 }                                                                                                                        \
      15              :                 else                                                                                                                     \
      16              :                 {                                                                                                                        \
      17              :                         TLOG(TLVL_ERROR) << __LINE__ << ": Checking if " << #l << " (" << l << ") equals " << #r << " (" << r << ")...NO!";  \
      18              :                 }                                                                                                                        \
      19              :                 BOOST_REQUIRE_EQUAL(l, r);                                                                                               \
      20              :         } while (0)
      21              : 
      22              : BOOST_AUTO_TEST_SUITE(DataReceiverManager_test)
      23              : 
      24            2 : BOOST_AUTO_TEST_CASE(Construct)
      25              : {
      26            1 :         artdaq::configureMessageFacility("DataReceiverManager_t", true, true);
      27              : 
      28            3 :         TLOG(TLVL_DEBUG) << "Test Case Construct BEGIN";
      29            1 :         fhicl::ParameterSet pset;
      30            2 :         pset.put("use_art", false);
      31            2 :         pset.put("buffer_count", 2);
      32            2 :         pset.put("max_event_size_bytes", 1000);
      33            2 :         pset.put("expected_fragments_per_event", 2);
      34              : 
      35            1 :         fhicl::ParameterSet source_fhicl;
      36            1 :         source_fhicl.put("transferPluginType", "TCPSocket");
      37            2 :         source_fhicl.put("destination_rank", 1);
      38            2 :         source_fhicl.put("source_rank", 0);
      39              : 
      40            1 :         fhicl::ParameterSet sources_fhicl;
      41            2 :         sources_fhicl.put("tcp", source_fhicl);
      42            1 :         pset.put("sources", sources_fhicl);
      43            1 :         auto shm = std::make_shared<artdaq::SharedMemoryEventManager>(pset, pset);
      44            1 :         artdaq::DataReceiverManager t(pset, shm);
      45            3 :         TLOG(TLVL_DEBUG) << "Test Case Construct END";
      46            1 : }
      47              : 
      48            2 : BOOST_AUTO_TEST_CASE(ReceiveData)
      49              : {
      50            1 :         artdaq::configureMessageFacility("DataReceiverManager_t", true, true);
      51            3 :         TLOG(TLVL_DEBUG) << "Test Case ReceiveData BEGIN";
      52            1 :         fhicl::ParameterSet pset;
      53            2 :         pset.put("use_art", false);
      54            2 :         pset.put("buffer_count", 2);
      55            2 :         pset.put("max_event_size_bytes", 1000);
      56            2 :         pset.put("expected_fragments_per_event", 2);
      57              : 
      58            1 :         fhicl::ParameterSet source_fhicl;
      59            1 :         source_fhicl.put("transferPluginType", "TCPSocket");
      60            2 :         source_fhicl.put("destination_rank", 1);
      61            2 :         source_fhicl.put("source_rank", 0);
      62            2 :         source_fhicl.put("shm_key", 0xFEEE0000 + getpid());
      63              : 
      64            1 :         fhicl::ParameterSet sources_fhicl;
      65            2 :         sources_fhicl.put("tcp", source_fhicl);
      66            1 :         pset.put("sources", sources_fhicl);
      67            1 :         auto shm = std::make_shared<artdaq::SharedMemoryEventManager>(pset, pset);
      68            1 :         shm->startRun(1);
      69            1 :         artdaq::DataReceiverManager t(pset, shm);
      70              :         {
      71            1 :                 artdaq::TCPSocketTransfer transfer(source_fhicl, artdaq::TransferInterface::Role::kSend);
      72            4 :                 TRACE_REQUIRE_EQUAL(t.getSharedMemoryEventManager().get(), shm.get());
      73            4 :                 TRACE_REQUIRE_EQUAL(t.enabled_sources().size(), 1);
      74            4 :                 TRACE_REQUIRE_EQUAL(t.running_sources().size(), 0);
      75            1 :                 t.start_threads();
      76            4 :                 TRACE_REQUIRE_EQUAL(t.enabled_sources().size(), 1);
      77            4 :                 TRACE_REQUIRE_EQUAL(t.running_sources().size(), 1);
      78              : 
      79            1 :                 artdaq::Fragment testFrag(10);
      80            1 :                 testFrag.setSequenceID(1);
      81            1 :                 testFrag.setFragmentID(0);
      82            1 :                 testFrag.setTimestamp(0x100);
      83            1 :                 testFrag.setSystemType(artdaq::Fragment::DataFragmentType);
      84              : 
      85            1 :                 transfer.transfer_fragment_reliable_mode(std::move(testFrag));
      86              : 
      87            1 :                 sleep(1);
      88            4 :                 TRACE_REQUIRE_EQUAL(t.count(), 1);
      89            4 :                 TRACE_REQUIRE_EQUAL(t.slotCount(0), 1);
      90            4 :                 TRACE_REQUIRE_EQUAL(t.byteCount(), (10 + artdaq::detail::RawFragmentHeader::num_words()) * sizeof(artdaq::RawDataType));
      91              : 
      92            1 :                 artdaq::FragmentPtr eodFrag = artdaq::Fragment::eodFrag(1);
      93              : 
      94            1 :                 transfer.transfer_fragment_reliable_mode(std::move(*(eodFrag.get())));
      95            1 :         }
      96            1 :         sleep(2);
      97            4 :         TRACE_REQUIRE_EQUAL(t.count(), 1);
      98            4 :         TRACE_REQUIRE_EQUAL(t.slotCount(0), 1);
      99            4 :         TRACE_REQUIRE_EQUAL(t.enabled_sources().size(), 1);
     100            4 :         TRACE_REQUIRE_EQUAL(t.running_sources().size(), 0);
     101            3 :         TLOG(TLVL_DEBUG) << "Test Case ReceiveData END";
     102            1 : }
     103              : 
     104              : BOOST_AUTO_TEST_SUITE_END()
        

Generated by: LCOV version 2.0-1