1 #include "artdaq/DAQrate/DataReceiverManager.hh"
3 #define BOOST_TEST_MODULE DataReceiverManager_t
4 #include "artdaq/TransferPlugins/ShmemTransfer.hh"
5 #include "cetlib/quiet_unit_test.hpp"
6 #include "cetlib_except/exception.h"
8 #define TRACE_REQUIRE_EQUAL(l, r) \
13 TLOG(TLVL_DEBUG) << __LINE__ << ": Checking if " << #l << " (" << l << ") equals " << #r << " (" << r << ")...YES!"; \
17 TLOG(TLVL_ERROR) << __LINE__ << ": Checking if " << #l << " (" << l << ") equals " << #r << " (" << r << ")...NO!"; \
19 BOOST_REQUIRE_EQUAL(l, r); \
22 BOOST_AUTO_TEST_SUITE(DataReceiverManager_test)
24 BOOST_AUTO_TEST_CASE(Construct)
26 artdaq::configureMessageFacility(
"DataReceiverManager_t",
true,
true);
28 TLOG(TLVL_DEBUG) <<
"Test Case Construct BEGIN";
29 fhicl::ParameterSet pset;
30 pset.put(
"use_art",
false);
31 pset.put(
"buffer_count", 2);
32 pset.put(
"max_event_size_bytes", 1000);
33 pset.put(
"expected_fragments_per_event", 2);
35 fhicl::ParameterSet source_fhicl;
36 source_fhicl.put(
"transferPluginType",
"Shmem");
37 source_fhicl.put(
"destination_rank", 1);
38 source_fhicl.put(
"source_rank", 0);
40 fhicl::ParameterSet sources_fhicl;
41 sources_fhicl.put(
"shmem", source_fhicl);
42 pset.put(
"sources", sources_fhicl);
43 auto shm = std::make_shared<artdaq::SharedMemoryEventManager>(pset, pset);
45 TLOG(TLVL_DEBUG) <<
"Test Case Construct END";
48 BOOST_AUTO_TEST_CASE(ReceiveData)
50 artdaq::configureMessageFacility(
"DataReceiverManager_t",
true,
true);
51 TLOG(TLVL_DEBUG) <<
"Test Case ReceiveData BEGIN";
52 fhicl::ParameterSet pset;
53 pset.put(
"use_art",
false);
54 pset.put(
"buffer_count", 2);
55 pset.put(
"max_event_size_bytes", 1000);
56 pset.put(
"expected_fragments_per_event", 2);
58 fhicl::ParameterSet source_fhicl;
59 source_fhicl.put(
"transferPluginType",
"Shmem");
60 source_fhicl.put(
"destination_rank", 1);
61 source_fhicl.put(
"source_rank", 0);
62 source_fhicl.put(
"shm_key", 0xFEEE0000 + getpid());
64 fhicl::ParameterSet sources_fhicl;
65 sources_fhicl.put(
"shmem", source_fhicl);
66 pset.put(
"sources", sources_fhicl);
67 auto shm = std::make_shared<artdaq::SharedMemoryEventManager>(pset, pset);
72 TRACE_REQUIRE_EQUAL(t.getSharedMemoryEventManager().get(), shm.get());
73 TRACE_REQUIRE_EQUAL(t.enabled_sources().size(), 1);
74 TRACE_REQUIRE_EQUAL(t.running_sources().size(), 0);
76 TRACE_REQUIRE_EQUAL(t.enabled_sources().size(), 1);
77 TRACE_REQUIRE_EQUAL(t.running_sources().size(), 1);
79 artdaq::Fragment testFrag(10);
80 testFrag.setSequenceID(1);
81 testFrag.setFragmentID(0);
82 testFrag.setTimestamp(0x100);
83 testFrag.setSystemType(artdaq::Fragment::DataFragmentType);
85 transfer.transfer_fragment_reliable_mode(std::move(testFrag));
88 TRACE_REQUIRE_EQUAL(t.count(), 1);
89 TRACE_REQUIRE_EQUAL(t.slotCount(0), 1);
90 TRACE_REQUIRE_EQUAL(t.byteCount(), (10 + artdaq::detail::RawFragmentHeader::num_words()) *
sizeof(artdaq::RawDataType));
92 artdaq::FragmentPtr eodFrag = artdaq::Fragment::eodFrag(1);
94 transfer.transfer_fragment_reliable_mode(std::move(*(eodFrag.get())));
97 TRACE_REQUIRE_EQUAL(t.count(), 1);
98 TRACE_REQUIRE_EQUAL(t.slotCount(0), 1);
99 TRACE_REQUIRE_EQUAL(t.enabled_sources().size(), 1);
100 TRACE_REQUIRE_EQUAL(t.running_sources().size(), 0);
101 TLOG(TLVL_DEBUG) <<
"Test Case ReceiveData END";
104 BOOST_AUTO_TEST_SUITE_END()
This TransferInterface is a Sender.
Receives Fragment objects from one or more DataSenderManager instances using TransferInterface plugin...
A TransferInterface implementation plugin that transfers data using Shared Memory.