11 #include <gtest/gtest.h>
13 using namespace ::testing;
20 using namespace nlohmann;
24 "awaitCompletionInterval": 3.0,
26 "sourceName": "primary"
30 "type": "primarySource",
31 "sourceName": "primary",
32 "rrUri": "zpb.rr://prim",
36 "selectionPatterns": [
44 "type": "metadataSource",
45 "sourceName": "metadata",
46 "rrUri": "zpb.rr://meta",
47 "initialKeywords": "user",
51 "selectionPatterns": [
60 "type": "fitsKeywords",
61 "sourceName": "keywords",
64 "type": "valueKeyword",
72 "selectionPatterns": [
83 "location": "host:/path/to.fits.",
87 "selectionPatterns": [
96 "filePrefix": "prefix",
99 "type": "olasReceiver",
101 "path": "/absolute/path"
112 auto spec_1_json = nlohmann::json();
124 EXPECT_EQ(spec.await_completion_interval, std::chrono::milliseconds(3000));
129 EXPECT_EQ(spec.merge_target->source_name,
"primary");
131 auto const& prim = std::get<StartDaqV2Spec::PrimaryDataSource>(spec.sources[0]);
135 ASSERT_EQ(prim.keyword_rules.size(), 1u);
136 auto const& filter = std::get<KeywordFilter>(prim.keyword_rules.at(0));
137 ASSERT_EQ(filter.selection_patterns.size(), 2u);
138 EXPECT_EQ(filter.selection_patterns[0],
"+e *");
139 EXPECT_EQ(filter.selection_patterns[1],
"+v *");
142 auto const& meta = std::get<StartDaqV2Spec::MetadataSource>(spec.sources[1]);
148 auto const&
transform = std::get<KeywordTransform>(meta.keyword_rules.at(0));
155 auto const& kws = std::get<FitsKeywordsSource>(spec.sources[2]);
159 auto const& file = std::get<FitsFileSource>(spec.sources[3]);
165 ASSERT_TRUE(std::holds_alternative<OlasReceiver>(spec.receivers[0]));
172 TEST_F(TestParseStartDaqV2Spec, EmptyKeywordRulesModelledAsEmptyOptional) {
173 m_spec[
"sources"][0].erase(
"keywordRules");
174 m_spec[
"sources"][1].erase(
"keywordRules");
183 auto const& prim = std::get<StartDaqV2Spec::PrimaryDataSource>(spec.sources[0]);
190 auto const& meta = std::get<StartDaqV2Spec::MetadataSource>(spec.sources[1]);
198 TEST_F(TestParseStartDaqV2Spec, NoIdIsModelledAsEmptyString) {
204 TEST_F(TestParseStartDaqV2Spec, EmptydIsAllowed) {
210 TEST_F(TestParseStartDaqV2Spec, AwaitCompletionIntervalIsOptional) {
211 m_spec.erase(
"awaitCompletionInterval");
214 EXPECT_EQ(spec.await_completion_interval, std::nullopt);
217 TEST_F(TestParseStartDaqV2Spec, AwaitCompletionIntervalAcceptsIntegers) {
218 m_spec[
"awaitCompletionInterval"] = 2;
221 EXPECT_EQ(spec.await_completion_interval, std::chrono::milliseconds(2000));
224 TEST_F(TestParseStartDaqV2Spec, MergeTargetWithoutSourceIsInvalid) {
225 m_spec[
"mergeTarget"].erase(
"sourceName");
229 TEST_F(TestParseStartDaqV2Spec, MergeTargetMatchingMultipleSourcesIsInvalid) {
230 m_spec[
"sources"][1][
"sourceName"] =
"primary";
234 TEST_F(TestParseStartDaqV2Spec, MergeTargetWithoutCorrespondingSourceIsInvalid) {
235 m_spec[
"mergeTarget"][
"sourceName"] =
"foob";
239 TEST_F(TestParseStartDaqV2Spec, MergeTargetMetadataIsValid) {
240 m_spec[
"mergeTarget"][
"sourceName"] =
"metadata";
244 TEST_F(TestParseStartDaqV2Spec, MergeTargetFitsfileIsValid) {
245 m_spec[
"mergeTarget"][
"sourceName"] =
"file";
249 TEST_F(TestParseStartDaqV2Spec, MergeTargetIsOptional) {
250 m_spec.erase(
"mergeTarget");
252 EXPECT_FALSE(spec.merge_target);
255 TEST_F(TestParseStartDaqV2Spec, MergeTargetWithKeywordsSourceIsInvalid) {
256 m_spec[
"mergeTarget"][
"sourceName"] =
"keywords";
260 TEST_F(TestParseStartDaqV2Spec, AwaitCompletionIntervalMustBePositive) {
261 m_spec[
"awaitCompletionInterval"] = -1.0;
265 TEST_F(TestParseStartDaqV2Spec, EmptyReceiversIsAllowed) {
266 m_spec[
"receivers"] = nlohmann::json::array();
268 EXPECT_TRUE(spec.receivers.empty());
271 TEST_F(TestParseStartDaqV2Spec, UndefinedReceiversIsAllowed) {
272 m_spec.erase(
"receivers");
274 EXPECT_TRUE(spec.receivers.empty());
@ User
Keep only user-keywords.
TEST_F(TestParseLocation, ParseSucceeds)
StartDaqV2Spec ParseStartDaqV2Spec(nlohmann::json const &json)
Parse StartDaqSpec.
daq::json::TestParseStartDaqV2Spec _json
void to_json(nlohmann::json &out, KeywordFilter const &s)
EXPECT_EQ(meta.rr_uri, "zpb.rr://meta")
auto const & olas_receiver
ASSERT_EQ(meta.keyword_rules.size(), 1u)
ASSERT_TRUE(std::holds_alternative< OlasReceiver >(spec.receivers[0]))