9 #include <gtest/gtest.h>
10 #include <gmock/gmock.h>
13 using namespace ::testing;
14 using namespace std::chrono;
22 fitsfile* newptr =
nullptr;
26 fits_reopen_file(ptr, &newptr, &status);
27 fits_close_file(ptr, &status);
28 s_reclaimed.reset(newptr);
47 m_properties.dp_name_prefix =
"";
48 m_properties.ocm_dppart_root =
"/tmp";
49 m_properties.id =
"test";
52 m_event_log = std::make_shared<ObservableEventLog>();
56 std::make_unique<FitsControllerImpl>(m_properties, m_event_log, [&](
char const* path) {
57 fitsfile* ptr =
nullptr;
62 fits_create_memfile(&ptr, &m_fitsbuf, &m_fitsbufsize, 0, realloc, &status);
64 std::cerr<<
"Failed to create fits_memfile";
69 ASSERT_EQ(State::NotStarted, m_ctl->GetState());
76 fits_free_memory(m_fitsbuf, &status);
85 std::unique_ptr<FitsControllerImpl>
m_ctl;
91 m_ctl->Abort(ErrorPolicy::Strict);
93 ASSERT_FALSE(s_reclaimed) <<
"There should have been no FITS file to reclaim since not started";
98 m_ctl->Abort(ErrorPolicy::Strict);
101 EXPECT_THROW(m_ctl->UpdateKeywords({}),
107 m_ctl->Abort(ErrorPolicy::Strict);
110 EXPECT_THROW(m_ctl->AddComment({}),
117 m_ctl->Stop(ErrorPolicy::Strict);
118 ASSERT_EQ(State::Stopped, m_ctl->GetState());
120 EXPECT_THROW(m_ctl->UpdateKeywords({}),
127 m_ctl->Stop(ErrorPolicy::Strict);
128 ASSERT_EQ(State::Stopped, m_ctl->GetState());
130 EXPECT_THROW(m_ctl->AddComment({}),
138 EXPECT_THROW(m_ctl->Start(),
145 m_ctl->Stop(ErrorPolicy::Strict);
148 EXPECT_THROW(m_ctl->Stop(ErrorPolicy::Strict),
155 m_ctl->Stop(ErrorPolicy::Strict);
158 EXPECT_THROW(m_ctl->Abort(ErrorPolicy::Strict),
168 m_ctl->Abort(ErrorPolicy::Strict);
171 auto res = m_ctl->GetResult();
173 ASSERT_TRUE(s_reclaimed) <<
"Abort() should have closed FITS file";
178 EXPECT_FALSE(m_ctl->GetFitsfile());
181 EXPECT_EQ(State::Acquiring, m_ctl->GetState());
183 EXPECT_TRUE(m_ctl->GetFitsfile());
185 auto res = m_ctl->GetResult();
192 ASSERT_EQ(State::Acquiring, m_ctl->GetState());
195 m_ctl->Stop(ErrorPolicy::Strict);
196 EXPECT_EQ(State::Stopped, m_ctl->GetState());
199 auto res = m_ctl->GetResult();
201 EXPECT_NE(res->origin,
"");
202 ASSERT_TRUE(std::holds_alternative<std::string>(res->info));
203 EXPECT_THAT(std::get<std::string>(res->info), EndsWith(
":/tmp/test_ocm.fits"));
204 ASSERT_TRUE(s_reclaimed.get());
211 EXPECT_EQ(0, fits_get_num_hdus(s_reclaimed.get(), &hdu_num, &status));
212 EXPECT_EQ(1, hdu_num);
216 EXPECT_EQ(0, fits_get_hdu_type(s_reclaimed.get(), &hdu_type, &status));
217 EXPECT_EQ(IMAGE_HDU, hdu_type);