Skip to content

Commit 7708c37

Browse files
authored
[QC-430] Avoid clashes when running CCDB tests multiple times in parallel (#501)
* [QC-430] Avoid clashes between concurrent execution of the test suite.
1 parent c387e05 commit 7708c37

1 file changed

Lines changed: 57 additions & 32 deletions

File tree

Framework/test/testCcdbDatabase.cxx

Lines changed: 57 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -52,21 +52,47 @@ struct test_fixture {
5252
{
5353
backend = std::make_unique<CcdbDatabase>();
5454
backend->connect(CCDB_ENDPOINT, "", "", "");
55-
ILOG(Info, Support) << "*** " << boost::unit_test::framework::current_test_case().p_name << " ***" << ENDM;
55+
pid = std::to_string(getpid());
56+
taskName = "Test/pid" + pid;
57+
ILOG(Info, Support) << "*** " << boost::unit_test::framework::current_test_case().p_name << " (" << pid
58+
<< ") ***" << ENDM;
5659
}
5760

5861
~test_fixture() = default;
5962

63+
// shorthands to get the paths to the objects and their containing folder
64+
std::string getQoPath(const string& checkName) const
65+
{
66+
return RepoPathUtils::getQoPath(detector, taskName + "/" + checkName);
67+
}
68+
std::string getMoPath(const string& objectName) const
69+
{
70+
return RepoPathUtils::getMoPath(detector, taskName, objectName);
71+
}
72+
std::string getMoFolder(const string& objectName) const
73+
{
74+
string fullMoPath = getMoPath(objectName);
75+
return fullMoPath.substr(0, fullMoPath.find_last_of('/'));
76+
}
77+
6078
std::unique_ptr<CcdbDatabase> backend;
6179
map<string, string> metadata;
80+
std::string pid;
81+
const std::string detector = "TST";
82+
std::string taskName;
6283
};
6384

64-
BOOST_AUTO_TEST_CASE(ccdb_create)
65-
{
66-
test_fixture f;
67-
68-
f.backend->truncate("my/task", "*");
69-
}
85+
struct MyGlobalFixture {
86+
void teardown()
87+
{
88+
std::unique_ptr<CcdbDatabase> backend = std::make_unique<CcdbDatabase>();
89+
backend->connect(CCDB_ENDPOINT, "", "", "");
90+
// cannot use the test_fixture because we are tearing down
91+
backend->truncate("qc/TST/MO/Test/pid" + std::to_string(getpid()), "*");
92+
backend->truncate("qc/TST/QO/Test/pid" + std::to_string(getpid()), "*");
93+
}
94+
};
95+
BOOST_TEST_GLOBAL_FIXTURE(MyGlobalFixture);
7096

7197
long oldTimestamp;
7298

@@ -76,19 +102,19 @@ BOOST_AUTO_TEST_CASE(ccdb_store)
76102

77103
TH1F* h1 = new TH1F("quarantine", "asdf", 100, 0, 99);
78104
h1->FillRandom("gaus", 10000);
79-
shared_ptr<MonitorObject> mo1 = make_shared<MonitorObject>(h1, "my/task", "TST");
105+
shared_ptr<MonitorObject> mo1 = make_shared<MonitorObject>(h1, f.taskName, "TST");
80106

81107
TH1F* h2 = new TH1F("metadata", "asdf", 100, 0, 99);
82-
shared_ptr<MonitorObject> mo2 = make_shared<MonitorObject>(h2, "my/task", "TST");
108+
shared_ptr<MonitorObject> mo2 = make_shared<MonitorObject>(h2, f.taskName, "TST");
83109
mo2->addMetadata("my_meta", "is_good");
84110

85111
TH1F* h3 = new TH1F("short", "asdf", 100, 0, 99);
86-
shared_ptr<MonitorObject> mo3 = make_shared<MonitorObject>(h3, "my/task", "TST");
112+
shared_ptr<MonitorObject> mo3 = make_shared<MonitorObject>(h3, f.taskName, "TST");
87113

88-
shared_ptr<QualityObject> qo1 = make_shared<QualityObject>(Quality::Bad, "test-ccdb-check", "TST", "OnAll", vector{ string("input1"), string("input2") });
89-
shared_ptr<QualityObject> qo2 = make_shared<QualityObject>(Quality::Null, "metadata", "TST", "OnAll", vector{ string("input1") });
114+
shared_ptr<QualityObject> qo1 = make_shared<QualityObject>(Quality::Bad, f.taskName + "/test-ccdb-check", "TST", "OnAll", vector{ string("input1"), string("input2") });
115+
shared_ptr<QualityObject> qo2 = make_shared<QualityObject>(Quality::Null, f.taskName + "/metadata", "TST", "OnAll", vector{ string("input1") });
90116
qo2->addMetadata("my_meta", "is_good");
91-
shared_ptr<QualityObject> qo3 = make_shared<QualityObject>(Quality::Good, "short", "TST", "OnAll", vector{ string("input1") });
117+
shared_ptr<QualityObject> qo3 = make_shared<QualityObject>(Quality::Good, f.taskName + "/short", "TST", "OnAll", vector{ string("input1") });
92118

93119
oldTimestamp = CcdbDatabase::getCurrentTimestamp();
94120
f.backend->storeMO(mo1);
@@ -121,7 +147,7 @@ BOOST_AUTO_TEST_CASE(ccdb_store_for_future_tests)
121147
BOOST_AUTO_TEST_CASE(ccdb_retrieve_mo, *utf::depends_on("ccdb_store"))
122148
{
123149
test_fixture f;
124-
std::shared_ptr<MonitorObject> mo = f.backend->retrieveMO("qc/TST/my/task", "quarantine");
150+
std::shared_ptr<MonitorObject> mo = f.backend->retrieveMO(f.getMoFolder("quarantine"), "quarantine");
125151
BOOST_REQUIRE_NE(mo, nullptr);
126152
BOOST_CHECK_EQUAL(mo->getName(), "quarantine");
127153
}
@@ -130,13 +156,13 @@ BOOST_AUTO_TEST_CASE(ccdb_retrieve_timestamps, *utf::depends_on("ccdb_store"))
130156
{
131157
test_fixture f;
132158

133-
std::shared_ptr<MonitorObject> mo = f.backend->retrieveMO("qc/TST/MO/my/task", "short", 15000);
159+
std::shared_ptr<MonitorObject> mo = f.backend->retrieveMO(f.getMoFolder("short"), "short", 15000);
134160
BOOST_REQUIRE_NE(mo, nullptr);
135161
BOOST_CHECK_EQUAL(mo->getName(), "short");
136162

137-
std::shared_ptr<QualityObject> qo = f.backend->retrieveQO(RepoPathUtils::getQoPath("TST", "short"), 15000);
163+
std::shared_ptr<QualityObject> qo = f.backend->retrieveQO(f.getQoPath("short"), 15000);
138164
BOOST_REQUIRE_NE(qo, nullptr);
139-
BOOST_CHECK_EQUAL(qo->getName(), "short");
165+
BOOST_CHECK_EQUAL(qo->getName(), f.taskName + "/short");
140166
}
141167

142168
BOOST_AUTO_TEST_CASE(ccdb_retrieve_inexisting_mo)
@@ -206,7 +232,7 @@ BOOST_AUTO_TEST_CASE(ccdb_retrieve_data_026)
206232
BOOST_AUTO_TEST_CASE(ccdb_retrieve_qo, *utf::depends_on("ccdb_store"))
207233
{
208234
test_fixture f;
209-
std::shared_ptr<QualityObject> qo = f.backend->retrieveQO(RepoPathUtils::getQoPath("TST", "test-ccdb-check"));
235+
std::shared_ptr<QualityObject> qo = f.backend->retrieveQO(RepoPathUtils::getQoPath("TST", f.taskName + "/test-ccdb-check"));
210236
BOOST_CHECK_NE(qo, nullptr);
211237
Quality q = qo->getQuality();
212238
BOOST_CHECK_EQUAL(q.getLevel(), 3);
@@ -216,20 +242,20 @@ BOOST_AUTO_TEST_CASE(ccdb_retrieve_json, *utf::depends_on("ccdb_store"))
216242
{
217243
test_fixture f;
218244

219-
std::string task = "my/task";
220245
std::string object = "quarantine";
221-
std::string detector = "TST";
222-
223-
std::string path = RepoPathUtils::getMoPath(detector, task, object);
246+
std::string path = f.getMoPath(object);
224247
std::cout << "[json retrieve]: " << path << std::endl;
225248
auto json = f.backend->retrieveJson(path, -1, f.metadata);
226-
auto json2 = f.backend->retrieveMOJson("qc/TST/MO/" + task, object);
249+
auto json2 = f.backend->retrieveMOJson(f.getMoFolder(object), object);
250+
cout << "asdf" << endl;
251+
cout << json << endl;
252+
cout << json2 << endl;
227253

228254
BOOST_CHECK(!json.empty());
229255
BOOST_CHECK_EQUAL(json, json2);
230256

231257
std::string checkName = "test-ccdb-check";
232-
string qualityPath = RepoPathUtils::getQoPath(detector, checkName);
258+
string qualityPath = f.getQoPath(checkName);
233259
std::cout << "[json retrieve]: " << qualityPath << std::endl;
234260
auto json3 = f.backend->retrieveJson(qualityPath, -1, f.metadata);
235261
auto json4 = f.backend->retrieveQOJson(qualityPath);
@@ -250,12 +276,10 @@ BOOST_AUTO_TEST_CASE(ccdb_metadata, *utf::depends_on("ccdb_store"))
250276
{
251277
test_fixture f;
252278

253-
std::string task = "my/task";
254-
std::string detector = "TST";
255-
std::string pathQuarantine = RepoPathUtils::getMoPath(detector, task, "quarantine");
256-
std::string pathMetadata = RepoPathUtils::getMoPath(detector, task, "metadata");
257-
std::string pathQuality = RepoPathUtils::getQoPath(detector, "test-ccdb-check");
258-
std::string pathQualityMetadata = RepoPathUtils::getQoPath(detector, "metadata");
279+
std::string pathQuarantine = f.getMoPath("quarantine");
280+
std::string pathMetadata = f.getMoPath("metadata");
281+
std::string pathQuality = f.getQoPath("test-ccdb-check");
282+
std::string pathQualityMetadata = f.getQoPath("metadata");
259283

260284
std::map<std::string, std::string> headers1;
261285
std::map<std::string, std::string> headers2;
@@ -269,8 +293,9 @@ BOOST_AUTO_TEST_CASE(ccdb_metadata, *utf::depends_on("ccdb_store"))
269293
BOOST_CHECK_EQUAL(headers2.count("my_meta"), 1);
270294
BOOST_CHECK_EQUAL(headers2.at("my_meta"), "is_good");
271295

272-
auto obj1a = f.backend->retrieveMO("qc/TST/my/task", "quarantine");
273-
auto obj2a = f.backend->retrieveMO("qc/TST/my/task", "metadata");
296+
// get the path without the objectName because of the interface retrieveMO
297+
auto obj1a = f.backend->retrieveMO(f.getMoFolder("quarantine"), "quarantine");
298+
auto obj2a = f.backend->retrieveMO(f.getQoPath(""), "metadata");
274299
BOOST_CHECK_NE(obj1a, nullptr);
275300
BOOST_CHECK_NE(obj2a, nullptr);
276301
BOOST_CHECK(obj1a->getMetadataMap().size() > 0);

0 commit comments

Comments
 (0)