ifw-daq  1.0.0
IFW Data Acquisition modules
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
testStatus.cpp
Go to the documentation of this file.
1 /**
2  * @file
3  * @ingroup daq_ocm_libdaq_test
4  * @copyright 2021 ESO - European Southern Observatory
5  *
6  * @brief Test daq::Status and daq::ObservableStatus
7  */
8 #include <gtest/gtest.h>
9 #include <gmock/gmock.h>
10 #include <daq/status.hpp>
11 
12 #include "statusObserver.hpp"
13 
14 using namespace ::testing;
15 using namespace daq;
16 
17 /**
18  * ObservableStatus test fixture.
19  *
20  * @ingroup daq_ocm_libdaq_test
21  */
22 class TestObservableStatus : public ::testing::Test {
23 public:
24 };
25 
27  ObservableStatus s("id");
28 }
29 
31  ObservableStatus s1("id");
32  ObservableStatus s2("id");
33  ObservableStatus s3("id");
34  s3.SetError(true);
35  EXPECT_EQ(s1, s2);
36  EXPECT_NE(s1, s3);
37 }
38 
40  ObservableStatus s("id");
41 
42  EXPECT_EQ(State::NotStarted, s.GetState()) << "Default state should be State::NotStarted";
43  EXPECT_FALSE(s.GetError()) << "By default error flag should be false";
44 
45  s.SetState(State::Starting);
46  EXPECT_EQ(State::Starting, s.GetState());
47 }
48 
50  ObservableStatus s("id");
51 
52  EXPECT_TRUE(s.GetFiles().empty());
53 
54  std::vector<DpPart> files1{{"origin1", "path1"}, {"origin2", "path2"} };
55  std::vector<DpPart> files2{{"origin3", "path3"}};
56 
57  s.AddFiles(files1);
58  EXPECT_FALSE(s.GetFiles().empty());
59  EXPECT_EQ(files1, s.GetFiles());
60  EXPECT_NE(files2, s.GetFiles());
61 
62  s.AddFiles(files2);
63  EXPECT_NE(files1, s.GetFiles());
64 
65  auto files3 = files1;
66  files3.insert(files3.end(), files2.begin(), files2.end());
67  EXPECT_EQ(files3, s.GetFiles());
68 }
69 
71  ObservableStatus s("id");
72 
73  EXPECT_TRUE(s.GetKeywords().empty());
74 
76  s.UpdateKeywords(v);
77  EXPECT_TRUE(s.GetKeywords().empty());
78 
79  v.push_back(fits::EsoKeyword("FOO", "EsoKeyword"));
80  s.UpdateKeywords(v);
81  EXPECT_EQ(v, s.GetKeywords());
82 
83  v.push_back(fits::ValueKeyword("FOO", "ValueKeyword"));
84  s.UpdateKeywords(v);
85  EXPECT_EQ(v, s.GetKeywords()) << "Expected both keywords to be there";
86 
87  fits::EsoKeyword new_foo = fits::EsoKeyword("FOO", true);
88  s.UpdateKeywords({ new_foo });
89  v[0] = new_foo;
90  EXPECT_EQ(v, s.GetKeywords());
91 }
92 
93 TEST_F(TestObservableStatus, OstreamOperator) {
94  ObservableStatus s("id");
95  std::stringstream ss;
96  ss << s;
97  EXPECT_THAT(ss.str(), MatchesRegex("ObservableStatus\\(id='id', state=.*, error=false\\)"));
98 }
99 
100 TEST_F(TestObservableStatus, Observability) {
101  // Setup
102  InSequence seq; // Mock expectations must occur in sequence
103 
105  ObservableStatus s("id");
106 
107  std::vector<DpPart> files = {{"origin1", "path1"}, {"origin2", "path2"}};
108 
109  s.ConnectObserver(std::reference_wrapper(o));
110  EXPECT_CALL(o, CallOperator(AllOf(Property(&ObservableStatus::GetState, State::Starting),
111  Property(&ObservableStatus::GetFiles, std::vector<DpPart>()))));
112  EXPECT_CALL(o, CallOperator(Property(&ObservableStatus::GetFiles, files)));
113  EXPECT_CALL(o,
114  CallOperator(AllOf(Property(&ObservableStatus::GetState, State::Acquiring),
115  Property(&ObservableStatus::GetFiles, files))));
116 
117  // Test
118  s.SetState(State::Starting);
119  s.AddFiles(files);
120  s.SetState(State::Acquiring);
121 }
122 
123 TEST(TestStatus, OstreamOperator) {
124  Status s("id");
125  std::stringstream ss;
126  ss << s;
127  EXPECT_THAT(ss.str(), MatchesRegex("Status\\(id='id', state=.*, error=false\\)"));
128 }
129 
130 TEST(TestStatus, Comparison) {
131  Status s1("id");
132  Status s2("id");
133  Status s3("id");
134  s3.error = true;
135  EXPECT_EQ(s1, s2);
136  EXPECT_NE(s1, s3);
137 }
daq::State
State
Observable states of the data acquisition process.
Definition: state.hpp:41
TestObservableStatus
ObservableStatus test fixture.
Definition: testStatus.cpp:22
daq::ObservableStatus::GetState
State GetState() const noexcept
Definition: status.cpp:67
daq::ObservableStatus::ConnectObserver
boost::signals2::connection ConnectObserver(Observer o)
Connect observer that is invoked when state is modified.
Definition: status.hpp:164
daq::TEST_F
TEST_F(TestSource, Constructors)
Definition: testSource.cpp:34
daq::ObservableStatus
Stores data acquisition status and allows subscription to status changes.
Definition: status.hpp:68
daq::fits::EsoKeyword
BasicKeyword< EsoKeywordTraits > EsoKeyword
ESO hiearchical keyword.
Definition: keyword.hpp:99
daq
Definition: daqController.cpp:18
TEST
TEST(TestStatus, OstreamOperator)
Definition: testStatus.cpp:123
daq::ObservableStatus::GetKeywords
fits::KeywordVector const & GetKeywords() const noexcept
Definition: status.cpp:79
daq::fits::BasicKeyword
A type safe version of FormattedKeyword that consist of the three basic components of a FITS keyword ...
Definition: keyword.hpp:51
daq::Status::error
bool error
Definition: status.hpp:53
statusObserver.hpp
status.hpp
Contains declaration for Status and ObservableStatus.
StatusObserverMock
Simple observer used for testing.
Definition: statusObserver.hpp:22
daq::ObservableStatus::SetError
void SetError(bool error) noexcept
Set error flag for data acquisition.
Definition: status.cpp:105
daq::ObservableStatus::AddFiles
void AddFiles(std::vector< DpPart > const &files)
Records that a file has been produced for this data acquisition.
Definition: status.cpp:83
daq::ObservableStatus::UpdateKeywords
void UpdateKeywords(fits::KeywordVector const &) noexcept
Updates (adds or replaces) Primary HDU keywords.
Definition: status.cpp:89
daq::Status
Non observable status object that keeps stores status of data acquisition.
Definition: status.hpp:32
daq::ObservableStatus::SetState
void SetState(State s) noexcept
Set state of data acquisition.
Definition: status.cpp:97
daq::fits::KeywordVector
std::vector< KeywordVariant > KeywordVector
Vector of keywords.
Definition: keyword.hpp:138
daq::ObservableStatus::GetFiles
std::vector< DpPart > const & GetFiles() const noexcept
Definition: status.cpp:75
daq::ObservableStatus::GetError
bool GetError() const noexcept
Definition: status.cpp:71