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