15#include <gmock/gmock.h>
16#include <gtest/gtest.h>
23#include "mock/mockWorkspace.hpp"
53using namespace ::testing;
57 std::filesystem::space_info status = {};
58 status.available = 123;
60 status.capacity = 789;
62 EXPECT_CALL(m_ws_mock, QueryStorageStatus()).WillOnce(Return(status));
65 EXPECT_CALL(m_mal_mock, getDataEntityUnsafe(_,
"daqif_StorageStatus"))
66 .WillOnce(Return(fake_reply))
67 .RetiresOnSaturation();
70 auto fut = m_service->QueryStorageStatus();
74 auto daqif_status = fut.get();
75 EXPECT_EQ(daqif_status->getCapacity(), status.capacity);
76 EXPECT_EQ(daqif_status->getFree(), status.free);
77 EXPECT_EQ(daqif_status->getAvailable(), status.available);
82 EXPECT_CALL(m_ws_mock, QueryStorageStatus()).WillOnce(Throw(std::runtime_error(
"ERROR")));
85 auto fut = m_service->QueryStorageStatus();
89 EXPECT_THROW(fut.get(), daqif::RuntimeError);
95 EXPECT_CALL(m_mal_mock, getDataEntityUnsafe(_,
"daqif_DaqReply"))
96 .WillOnce(Return(fake_reply))
97 .RetiresOnSaturation();
98 EXPECT_CALL(m_scheduler_mock, QueueDaq(
"STATUS",
"SPEC")).WillOnce(Return(
"ID"));
101 auto fut = m_service->QueueDaq(
"STATUS",
"SPEC");
105 auto reply = fut.get();
111 EXPECT_CALL(m_scheduler_mock, QueueDaq(
"STATUS",
"SPEC"))
112 .WillOnce(Throw(std::runtime_error(
"ID")));
115 auto fut = m_service->QueueDaq(
"STATUS",
"SPEC");
119 EXPECT_THROW(fut.get(), daqif::DaqException);
125 EXPECT_CALL(m_mal_mock, getDataEntityUnsafe(_,
"daqif_DaqReply"))
126 .WillOnce(Return(fake_reply))
127 .RetiresOnSaturation();
128 EXPECT_CALL(m_scheduler_mock, AbortDaq(
"TEST.ID")).Times(1);
131 auto fut = m_service->AbortDaq(
"TEST.ID");
135 auto reply = fut.get();
137 EXPECT_FALSE(reply->getError());
142 EXPECT_CALL(m_scheduler_mock, AbortDaq(
"ID")).WillOnce(Throw(std::runtime_error(
"ID")));
145 auto fut = m_service->AbortDaq(
"ID");
149 EXPECT_THROW(fut.get(), daqif::DaqException);
155 EXPECT_CALL(m_mal_mock, getDataEntityUnsafe(_,
"daqif_DaqStatus"))
156 .WillOnce(Return(fake_reply))
157 .RetiresOnSaturation();
160 status.
id =
"TEST.ID";
162 EXPECT_CALL(m_scheduler_mock, GetDaqStatus(
"TEST.ID")).WillOnce(Return(status));
165 auto fut = m_service->GetDaqStatus(
"TEST.ID");
169 auto reply = fut.get();
171 EXPECT_EQ(reply->getState(), daqif::StateMerging);
172 EXPECT_EQ(reply->getSubState(), daqif::Merging);
173 EXPECT_FALSE(reply->getError());
178 EXPECT_CALL(m_scheduler_mock, GetDaqStatus(
"TEST.ID"))
179 .WillOnce(Throw(std::runtime_error(
"oops")));
182 auto fut = m_service->GetDaqStatus(
"TEST.ID");
186 EXPECT_THROW(fut.get(), daqif::DaqException);
193 EXPECT_CALL(m_mal_mock, getDataEntityUnsafe(_,
"daqif_DaqStatus"))
194 .WillOnce(Return(fake_reply1))
195 .WillOnce(Return(fake_reply2))
196 .RetiresOnSaturation();
199 status1.
id =
"TEST.ID";
203 status2.
id =
"TEST.ID2";
206 std::vector<std::string> ids = {
"TEST.ID",
"TEST.ID2"};
207 EXPECT_CALL(m_scheduler_mock, GetQueue()).WillOnce(Return(ids));
208 EXPECT_CALL(m_scheduler_mock, GetDaqStatus(
"TEST.ID")).WillOnce(Return(status1));
209 EXPECT_CALL(m_scheduler_mock, GetDaqStatus(
"TEST.ID2")).WillOnce(Return(status2));
212 auto fut = m_service->GetActiveDaqs();
216 std::vector<std::shared_ptr<::daqif::DaqStatus>> reply = fut.get();
220 EXPECT_EQ(reply[0]->getState(), daqif::StateMerging);
221 EXPECT_EQ(reply[0]->getSubState(), daqif::Collecting);
222 EXPECT_FALSE(reply[0]->getError());
224 EXPECT_EQ(reply[1]->getId(),
"TEST.ID2");
225 EXPECT_EQ(reply[1]->getState(), daqif::StateMerging);
226 EXPECT_EQ(reply[1]->getSubState(), daqif::Aborting);
227 EXPECT_FALSE(reply[1]->getError());
232 std::vector<std::string> ids = {
"TEST.ID",
"TEST.ID2"};
233 EXPECT_CALL(m_scheduler_mock, GetQueue()).WillOnce(Return(ids));
234 EXPECT_CALL(m_scheduler_mock, GetDaqStatus(
"TEST.ID"))
235 .WillOnce(Throw(std::runtime_error(
"oops")));
238 auto fut = m_service->GetActiveDaqs();
242 EXPECT_THROW(fut.get(), daqif::DaqException);
rad::IoExecutor m_executor
std::unique_ptr< DpmService > m_service
daq::dpm::MockWorkspace m_ws_mock
boost::asio::io_context m_io_ctx
daq::dpm::MockScheduler m_scheduler_mock
Adapts boost::asio::io_context into a compatible boost::thread Executor type.
daq::dpm::DpmService implements MAL services daqif::DpmControl and daqif::DpmDaqControl.
Mocks for daq::dpm::Workspace and daq::dpm::DaqWorkspace.
Mocks for daq::dpm::Scheduler and daq::dpm::DaqScheduler.
TEST_F(TestDaqController, ScheduledTransitionsToCollecting)
@ Collecting
Input files are being collected.
@ Merging
DAQ is being merged.
@ AbortingMerging
Transitional state for aborting during merging.
Defines shared test progress utilities.
daq::dpm::Scheduler and related class declarations.
Non observable status object that keeps stores status of data acquisition.
EXPECT_EQ(meta.rr_uri, "zpb.rr://meta")
ASSERT_EQ(meta.keyword_rules.size(), 1u)
ASSERT_TRUE(std::holds_alternative< OlasReceiver >(spec.receivers[0]))