ifw-daq 3.1.0
IFW Data Acquisition modules
Loading...
Searching...
No Matches
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>
21#include <rad/ioExecutor.hpp>
22
23#include "mock/recifMock.hpp"
25#include "statusObserver.hpp"
26
27MATCHER_P(RecPropertyIdEq, id, "") {
28 *result_listener << "where the id is" << (arg->getId());
29 return arg && arg->getId() == id;
30}
31
32/**
33 * Base fixture for async operation tests.
34 *
35 * @ingroup daq_ocm_libdaq_test
36 */
37struct TestAsyncOpBase : ::testing::Test {
38 std::shared_ptr<daq::RecCmdsAsyncMock> m_prim_rr_client;
39 std::shared_ptr<daq::RecCmdsAsyncMock> m_prim_rr_client2;
40 std::shared_ptr<daq::MetaDaqAsyncMock> m_meta_rr_client;
41 std::shared_ptr<daq::MetaDaqAsyncMock> m_meta_rr_client2;
42
43
44 boost::asio::io_context m_io_ctx;
46 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 /**
80 * Make async params using m_std_formatter if no fmt is not provided.
81 */
82 daq::op::AsyncOpParams MakeParams(daq::fits::KeywordFormatter const* fmt = nullptr);
83};
84
85#endif // #ifndef OCM_DAQ_TEST_ASYNC_OP_BASE_HPP_
Formats keyword against e.g.
Definition: keyword.hpp:551
Formats according to built-in rules without any dictionaries.
Definition: keyword.hpp:567
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::fits::StandardKeywordFormatter m_std_formatter
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< 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
std::vector< daq::Source< SourceType > > MakeSources(std::vector< SourceType > sources)
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:30
Parameters required for each async operation.
MATCHER_P(RecPropertyIdEq, id, "")