00001 #include "artdaq/DAQrate/DataReceiverManager.hh" 00002 00003 #define BOOST_TEST_MODULE DataReceiverManager_t 00004 #include "cetlib/quiet_unit_test.hpp" 00005 #include "cetlib_except/exception.h" 00006 #include "artdaq/TransferPlugins/ShmemTransfer.hh" 00007 00008 00009 BOOST_AUTO_TEST_SUITE(DataReceiverManager_test) 00010 00011 BOOST_AUTO_TEST_CASE(Construct) { 00012 fhicl::ParameterSet pset; 00013 pset.put("use_art", false); 00014 pset.put("buffer_count", 2); 00015 pset.put("max_event_size_bytes", 1000); 00016 pset.put("expected_fragments_per_event", 2); 00017 00018 fhicl::ParameterSet source_fhicl; 00019 source_fhicl.put("transferPluginType", "Shmem"); 00020 source_fhicl.put("destination_rank", 0); 00021 source_fhicl.put("source_rank", 0); 00022 00023 fhicl::ParameterSet sources_fhicl; 00024 sources_fhicl.put("shmem", source_fhicl); 00025 pset.put("sources", sources_fhicl); 00026 auto shm = std::make_shared<artdaq::SharedMemoryEventManager>(pset, pset); 00027 artdaq::DataReceiverManager t(pset, shm); 00028 } 00029 00030 BOOST_AUTO_TEST_CASE(ReceiveData) 00031 { 00032 artdaq::configureMessageFacility("DataReceiverManager_t"); 00033 fhicl::ParameterSet pset; 00034 pset.put("use_art", false); 00035 pset.put("buffer_count", 2); 00036 pset.put("max_event_size_bytes", 1000); 00037 pset.put("expected_fragments_per_event", 2); 00038 00039 fhicl::ParameterSet source_fhicl; 00040 source_fhicl.put("transferPluginType", "Shmem"); 00041 source_fhicl.put("destination_rank", 0); 00042 source_fhicl.put("source_rank", 0); 00043 source_fhicl.put("shm_key", 0xFEEE0000 + getpid()); 00044 00045 fhicl::ParameterSet sources_fhicl; 00046 sources_fhicl.put("shmem", source_fhicl); 00047 pset.put("sources", sources_fhicl); 00048 auto shm = std::make_shared<artdaq::SharedMemoryEventManager>(pset, pset); 00049 artdaq::DataReceiverManager t(pset, shm); 00050 artdaq::ShmemTransfer transfer(source_fhicl, artdaq::TransferInterface::Role::kSend); 00051 BOOST_REQUIRE_EQUAL(t.getSharedMemoryEventManager().get(), shm.get()); 00052 BOOST_REQUIRE_EQUAL(t.enabled_sources().size(), 1); 00053 BOOST_REQUIRE_EQUAL(t.running_sources().size(), 0); 00054 t.start_threads(); 00055 BOOST_REQUIRE_EQUAL(t.enabled_sources().size(), 1); 00056 BOOST_REQUIRE_EQUAL(t.running_sources().size(), 1); 00057 00058 artdaq::Fragment testFrag(10); 00059 testFrag.setSequenceID(1); 00060 testFrag.setFragmentID(0); 00061 testFrag.setTimestamp(0x100); 00062 testFrag.setSystemType(artdaq::Fragment::DataFragmentType); 00063 00064 transfer.moveFragment(std::move(testFrag)); 00065 00066 sleep(1); 00067 BOOST_REQUIRE_EQUAL(t.count(), 1); 00068 BOOST_REQUIRE_EQUAL(t.slotCount(0), 1); 00069 BOOST_REQUIRE_EQUAL(t.byteCount(), (10 + artdaq::detail::RawFragmentHeader::num_words()) * sizeof(artdaq::RawDataType)); 00070 00071 artdaq::FragmentPtr eodFrag = artdaq::Fragment::eodFrag(1); 00072 00073 transfer.moveFragment(std::move(*(eodFrag.get()))); 00074 00075 sleep(1); 00076 BOOST_REQUIRE_EQUAL(t.count(), 1); 00077 BOOST_REQUIRE_EQUAL(t.slotCount(0), 1); 00078 BOOST_REQUIRE_EQUAL(t.enabled_sources().size(), 1); 00079 BOOST_REQUIRE_EQUAL(t.running_sources().size(), 0); 00080 00081 } 00082 00083 BOOST_AUTO_TEST_SUITE_END()