ifw-daq  3.0.0-pre2
IFW Data Acquisition modules
testAsyncOpBase.hpp
Go to the documentation of this file.
1 /**
2  * @file
3  * @ingroup daq_ocm_libdaq_test
4  * @copyright 2022 ESO - European Southern Observatory
5  *
6  * @brief Contains declaration for async operations shared base class
7  */
8 #ifndef OCM_DAQ_TEST_ASYNC_OP_BASE_HPP_
9 #define OCM_DAQ_TEST_ASYNC_OP_BASE_HPP_
10 #include <daq/config.hpp>
11 
12 #include <gmock/gmock.h>
13 #include <gtest/gtest.h>
14 #include <log4cplus/logger.h>
15 #include <boost/asio/io_context.hpp>
16 
17 #include <daq/status.hpp>
18 #include <daq/source.hpp>
19 #include <daq/pendingReplies.hpp>
20 #include <daq/op/asyncOpParams.hpp>
21 #include <rad/ioExecutor.hpp>
22 
23 #include "mock/recifMock.hpp"
24 #include "mock/metadaqifMock.hpp"
25 #include "statusObserver.hpp"
26 #include "utils.hpp"
27 
28 MATCHER_P(RecPropertyIdEq, id, "") {
29  *result_listener << "where the id is" << (arg->getId());
30  return arg && arg->getId() == id;
31 }
32 
33 /**
34  * Base fixture for async operation tests.
35  *
36  * @ingroup daq_ocm_libdaq_test
37  */
38 struct TestAsyncOpBase : ::testing::Test {
39  std::shared_ptr<daq::RecCmdsAsyncMock> m_prim_rr_client;
40  std::shared_ptr<daq::RecCmdsAsyncMock> m_prim_rr_client2;
41  std::shared_ptr<daq::MetaDaqAsyncMock> m_meta_rr_client;
42  std::shared_ptr<daq::MetaDaqAsyncMock> m_meta_rr_client2;
43 
44 
45  boost::asio::io_context m_io_ctx;
47  log4cplus::Logger m_logger;
48  std::string m_id;
50  std::shared_ptr<daq::ObservableStatus> m_status;
51  std::shared_ptr<daq::ObservableEventLog> m_event_log;
53  std::shared_ptr<daq::PendingReplies> m_pending_replies;
54  std::vector<daq::Source<daq::PrimSource>> m_prim_sources;
55  std::vector<daq::Source<daq::MetaSource>> m_meta_sources;
56 
57  // Used in tests
58  boost::promise<std::shared_ptr<recif::RecStatus>> m_recstatus_promise1;
59  boost::promise<std::shared_ptr<recif::RecStatus>> m_recstatus_promise2;
60  boost::promise<std::string> m_string_promise1;
61  boost::promise<std::string> m_string_promise2;
62 
64  void SetUp() override;
65  void TearDown() override;
66 
67  template<class SourceType>
68  std::vector<daq::Source<SourceType>>
69  MakeSources(std::vector<SourceType> sources) {
70  std::vector<daq::Source<SourceType>> dest;
71  dest.reserve(sources.size());
72  std::transform(std::make_move_iterator(sources.begin()), std::make_move_iterator(sources.end()),
73  std::back_inserter(dest), [](SourceType&& s) -> daq::Source<SourceType> {
74  return daq::Source<SourceType>{std::move(s)};
75  });
76  return dest;
77  }
78 
79  daq::op::AsyncOpParams MakeParams();
80 };
81 
82 #endif // #ifndef OCM_DAQ_TEST_ASYNC_OP_BASE_HPP_
Adapts boost::asio::io_context into a compatible boost::thread Executor type.
Definition: ioExecutor.hpp:12
boost::asio::io_context m_io_ctx
boost::promise< std::shared_ptr< recif::RecStatus > > m_recstatus_promise2
log4cplus::Logger m_logger
daq::op::AlertState m_alerts
boost::promise< std::string > m_string_promise1
rad::IoExecutor m_executor
std::shared_ptr< daq::RecCmdsAsyncMock > m_prim_rr_client
StatusObserverMock m_observer
std::shared_ptr< daq::ObservableEventLog > m_event_log
std::shared_ptr< daq::ObservableStatus > m_status
std::shared_ptr< daq::PendingReplies > m_pending_replies
std::vector< daq::Source< SourceType > > MakeSources(std::vector< SourceType > sources)
std::vector< daq::Source< daq::MetaSource > > m_meta_sources
std::shared_ptr< daq::RecCmdsAsyncMock > m_prim_rr_client2
boost::promise< std::shared_ptr< recif::RecStatus > > m_recstatus_promise1
boost::promise< std::string > m_string_promise2
void SetUp() override
std::vector< daq::Source< daq::PrimSource > > m_prim_sources
std::shared_ptr< daq::MetaDaqAsyncMock > m_meta_rr_client2
void TearDown() override
std::shared_ptr< daq::MetaDaqAsyncMock > m_meta_rr_client
Simple observer used for testing.
Base fixture for async operation tests.
Mockup of metadaqif classes.
Contains declaration for classes related to pending replies.
Mockup of metadaqif classes.
Declarations for daq::Source and related classes.
Contains declaration for Status and ObservableStatus.
Simple class that holds the source and associated state.
Definition: source.hpp:29
Parameters required for each async operation.
MATCHER_P(RecPropertyIdEq, id, "")
auto const & transform
Defines shared test utilities.