artdaq  v3_01_00
DataReceiverManager_t.cc
1 #include "artdaq/DAQrate/DataReceiverManager.hh"
2 
3 #define BOOST_TEST_MODULE DataReceiverManager_t
4 #include "cetlib/quiet_unit_test.hpp"
5 #include "cetlib_except/exception.h"
6 #include "artdaq/TransferPlugins/ShmemTransfer.hh"
7 
8 
9 BOOST_AUTO_TEST_SUITE(DataReceiverManager_test)
10 
11 BOOST_AUTO_TEST_CASE(Construct) {
12  fhicl::ParameterSet pset;
13  pset.put("use_art", false);
14  pset.put("buffer_count", 2);
15  pset.put("max_event_size_bytes", 1000);
16  pset.put("expected_fragments_per_event", 2);
17 
18  fhicl::ParameterSet source_fhicl;
19  source_fhicl.put("transferPluginType", "Shmem");
20  source_fhicl.put("destination_rank", 1);
21  source_fhicl.put("source_rank", 0);
22 
23  fhicl::ParameterSet sources_fhicl;
24  sources_fhicl.put("shmem", source_fhicl);
25  pset.put("sources", sources_fhicl);
26  auto shm = std::make_shared<artdaq::SharedMemoryEventManager>(pset, pset);
27  artdaq::DataReceiverManager t(pset, shm);
28 }
29 
30 BOOST_AUTO_TEST_CASE(ReceiveData)
31 {
32  artdaq::configureMessageFacility("DataReceiverManager_t");
33  fhicl::ParameterSet pset;
34  pset.put("use_art", false);
35  pset.put("buffer_count", 2);
36  pset.put("max_event_size_bytes", 1000);
37  pset.put("expected_fragments_per_event", 2);
38 
39  fhicl::ParameterSet source_fhicl;
40  source_fhicl.put("transferPluginType", "Shmem");
41  source_fhicl.put("destination_rank", 1);
42  source_fhicl.put("source_rank", 0);
43  source_fhicl.put("shm_key", 0xFEEE0000 + getpid());
44 
45  fhicl::ParameterSet sources_fhicl;
46  sources_fhicl.put("shmem", source_fhicl);
47  pset.put("sources", sources_fhicl);
48  auto shm = std::make_shared<artdaq::SharedMemoryEventManager>(pset, pset);
49  artdaq::DataReceiverManager t(pset, shm);
51  BOOST_REQUIRE_EQUAL(t.getSharedMemoryEventManager().get(), shm.get());
52  BOOST_REQUIRE_EQUAL(t.enabled_sources().size(), 1);
53  BOOST_REQUIRE_EQUAL(t.running_sources().size(), 0);
54  t.start_threads();
55  BOOST_REQUIRE_EQUAL(t.enabled_sources().size(), 1);
56  BOOST_REQUIRE_EQUAL(t.running_sources().size(), 1);
57 
58  artdaq::Fragment testFrag(10);
59  testFrag.setSequenceID(1);
60  testFrag.setFragmentID(0);
61  testFrag.setTimestamp(0x100);
62  testFrag.setSystemType(artdaq::Fragment::DataFragmentType);
63 
64  transfer.moveFragment(std::move(testFrag));
65 
66  sleep(1);
67  BOOST_REQUIRE_EQUAL(t.count(), 1);
68  BOOST_REQUIRE_EQUAL(t.slotCount(0), 1);
69  BOOST_REQUIRE_EQUAL(t.byteCount(), (10 + artdaq::detail::RawFragmentHeader::num_words()) * sizeof(artdaq::RawDataType));
70 
71  artdaq::FragmentPtr eodFrag = artdaq::Fragment::eodFrag(1);
72 
73  transfer.moveFragment(std::move(*(eodFrag.get())));
74 
75  sleep(2);
76  BOOST_REQUIRE_EQUAL(t.count(), 1);
77  BOOST_REQUIRE_EQUAL(t.slotCount(0), 1);
78  BOOST_REQUIRE_EQUAL(t.enabled_sources().size(), 1);
79  BOOST_REQUIRE_EQUAL(t.running_sources().size(), 0);
80 
81 }
82 
83 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.