11 #include <framework/database/MetadataProvider.h>
12 #include <framework/logging/Logger.h>
13 #include <framework/utilities/testhelpers/Fixtures.h>
14 #include <gtest/gtest.h>
17 using namespace Conditions;
24 std::vector<PayloadMetadata> m_testpayloads;
27 explicit TestMetadataProvider(
const std::vector<PayloadMetadata>& payloads): m_testpayloads(payloads) {}
31 std::string getGlobaltagStatus(
const std::string& name)
override
34 B2ERROR(
"This globaltag is missing" <<
LogVar(
"globaltag",
"") <<
LogVar(
"error",
"missing"));
37 if (name.substr(0, 3) ==
"tag") {
46 bool updatePayloads(
const std::string& globaltag,
int exp,
int run)
override
50 for (
auto p : m_testpayloads) {
51 if (p.globaltag == globaltag and p.iov.contains(iov)) {
52 addPayload(std::move(p),
"testprovider");
64 TEST_F(MetadataProviderTest, tagstates)
66 TestMetadataProvider provider({});
67 EXPECT_TRUE(provider.setTags({
"TESTING",
"VALIDATED",
"RUNNING",
"PUBLISHED"}));
68 EXPECT_FALSE(provider.setTags({
"OPEN"}));
70 expectErrorWithVariables({{
"globaltag",
"OPEN"}, {
"status",
"OPEN"}});
71 EXPECT_FALSE(provider.setTags({
"INVALID"}));
72 expectErrorWithVariables({{
"globaltag",
"INVALID"}, {
"status",
"INVALID"}});
74 EXPECT_FALSE(provider.setTags({
"TESTING",
"VALIDATED",
"OPEN",
"RUNNING",
"PUBLISHED"}));
75 expectErrorWithVariables({{
"globaltag",
"OPEN"}, {
"status",
"OPEN"}});
76 provider.setUsableTagStates({
"OPEN",
"INVALID"});
77 EXPECT_TRUE(provider.setTags({
"OPEN"}));
78 EXPECT_FALSE(provider.setTags({
"INVALID"}));
79 expectErrorWithVariables({{
"globaltag",
"INVALID"}, {
"status",
"INVALID"}});
80 EXPECT_FALSE(provider.setTags({
""}));
81 expectErrorWithVariables({{
"globaltag",
""}, {
"error",
"missing"}});
85 TEST_F(MetadataProviderTest, exception)
87 TestMetadataProvider provider({});
89 ASSERT_TRUE(provider.setTags({
"tag1"}));
90 ASSERT_THROW(provider.getPayloads(0, 0, query), std::runtime_error);
95 TEST_F(MetadataProviderTest, onlyfillneeded)
97 TestMetadataProvider provider({
99 PayloadMetadata{
"A",
"tag1",
"",
"",
"", 0, 0, -1, -1, 2},
103 query[0].revision = 1;
104 query[1].revision = 1;
105 ASSERT_TRUE(provider.setTags({
"tag1"}));
106 ASSERT_TRUE(provider.getPayloads(0, 0, query));
110 EXPECT_EQ(query[0].name,
"A");
111 EXPECT_EQ(query[0].revision, 1);
112 EXPECT_EQ(query[1].name,
"B");
113 EXPECT_EQ(query[1].revision, 1);
117 TEST_F(MetadataProviderTest, payloads)
119 TestMetadataProvider provider({
121 PayloadMetadata{
"A",
"tag1",
"",
"",
"", 0, 0, -1, -1, 1},
122 PayloadMetadata{
"A",
"tag1",
"",
"",
"", 1, 0, 1, 10, 3},
123 PayloadMetadata{
"A",
"tag1",
"",
"",
"", 1, 0, 1, 10, 2},
124 PayloadMetadata{
"B",
"tag1",
"",
"",
"", 1, 0, 1, 10, 1},
127 ASSERT_TRUE(provider.setTags({
"tag1"}));
128 ASSERT_FALSE(provider.getPayloads(0, 0, query));
129 expectErrorWithVariables({{
"globaltags",
"tag1"}, {
"name",
"B"}, {
"experiment",
"0"}, {
"run",
"0"}});
130 EXPECT_EQ(query[0].revision, 1);
131 EXPECT_EQ(query[1].revision, 0);
135 EXPECT_TRUE(provider.getPayloads(1, 0, query));
136 EXPECT_EQ(query[0].revision, 3);
137 EXPECT_EQ(query[1].revision, 1);
140 EXPECT_FALSE(provider.getPayloads(0, 0, query));
141 expectErrorWithVariables({{
"globaltags",
"tag1"}, {
"name",
"B"}, {
"experiment",
"0"}, {
"run",
"0"}});
142 EXPECT_EQ(query[0].revision, 1);
143 EXPECT_EQ(query[1].revision, 0);
146 EXPECT_TRUE(provider.getPayloads(0, 0, query));
147 EXPECT_EQ(query[0].revision, 1);
148 EXPECT_EQ(query[1].revision, 0);
149 EXPECT_EQ(query[1].required,
false);
152 TEST_F(MetadataProviderTest, payloads_multiple_gt)
154 TestMetadataProvider provider({
156 PayloadMetadata{
"A",
"tag1",
"",
"",
"", 0, 0, -1, -1, 1},
157 PayloadMetadata{
"A",
"tag2",
"",
"",
"", 0, 0, -1, -1, 2},
158 PayloadMetadata{
"B",
"tag2",
"",
"",
"", 0, 0, -1, -1, 2},
162 ASSERT_TRUE(provider.setTags({
"tag1",
"tag2"}));
164 EXPECT_TRUE(provider.getPayloads(1, 0, query));
165 EXPECT_EQ(query[0].revision, 1);
166 EXPECT_EQ(query[1].revision, 2);
167 EXPECT_EQ(query[0].globaltag,
"tag1");
168 EXPECT_EQ(query[1].globaltag,
"tag2");