Skip to content

Commit 2246830

Browse files
committed
Change unit test with to have correct includes
This fixes some tests that are fine on my desktop but the subprocess aborts even when all tests are green in the CI. The error is this: malloc_consolidate(): invalid chunk size Was told this was a heap corruption. And changing the includes fixes the error, not sure why. Changed also to only use one instance of CCDB api so we do not call CURL global cleanup out of order with the BasicCCDBManger singelton. Just in case that matters when running the test(s).
1 parent 2028c5b commit 2246830

File tree

1 file changed

+45
-61
lines changed

1 file changed

+45
-61
lines changed

CCDB/test/testCcdbApiHeaders.cxx

Lines changed: 45 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,11 @@
1818
#define BOOST_TEST_MAIN
1919
#define BOOST_TEST_DYN_LINK
2020

21-
#include <boost/test/tools/interface.hpp>
22-
#include <boost/test/included/unit_test.hpp>
23-
#include <boost/test/unit_test_suite.hpp>
24-
#include <boost/test/tools/interface.hpp>
25-
21+
#include <set>
2622
#include "CCDB/BasicCCDBManager.h"
2723
#include "CCDB/CCDBTimeStampUtils.h"
2824
#include "CCDB/CcdbApi.h"
25+
#include <boost/test/unit_test.hpp>
2926

3027
static std::string basePath;
3128
// std::string ccdbUrl = "http://localhost:8080";
@@ -39,15 +36,15 @@ bool hostReachable = false;
3936
struct Fixture {
4037
Fixture()
4138
{
42-
o2::ccdb::CcdbApi api;
39+
auto& ccdbManager = o2::ccdb::BasicCCDBManager::instance();
4340
if (std::getenv("ALICEO2_CCDB_HOST")) {
4441
ccdbUrl = std::string(std::getenv("ALICEO2_CCDB_HOST"));
4542
}
46-
api.init(ccdbUrl);
47-
hostReachable = api.isHostReachable();
43+
ccdbManager.setURL(ccdbUrl);
44+
hostReachable = ccdbManager.getCCDBAccessor().isHostReachable();
4845
char hostname[_POSIX_HOST_NAME_MAX];
4946
gethostname(hostname, _POSIX_HOST_NAME_MAX);
50-
basePath = std::string("Users/m/meide/BasicCCDBManager/");
47+
basePath = std::string("Users/m/meide/Tests/") + hostname + "/pid-" + getpid() + "/BasicCCDBManager/";
5148

5249
LOG(info) << "Path we will use in this test suite : " + basePath << std::endl;
5350
LOG(info) << "ccdb url: " << ccdbUrl << std::endl;
@@ -56,9 +53,7 @@ struct Fixture {
5653
~Fixture()
5754
{
5855
if (hostReachable) {
59-
o2::ccdb::CcdbApi api;
60-
api.init(ccdbUrl);
61-
api.truncate(basePath + "*"); // This deletes the data after test is run, disable if you want to inspect the data
56+
o2::ccdb::BasicCCDBManager::instance().getCCDBAccessor().truncate(basePath + "*"); // This deletes the data after test is run, disable if you want to inspect the data
6257
LOG(info) << "Test data truncated/deleted (" << basePath << ")" << std::endl;
6358
}
6459
}
@@ -74,22 +69,6 @@ struct if_reachable {
7469
return hostReachable;
7570
}
7671
};
77-
/**
78-
* Fixture for the tests, i.e. code is ran in every test that uses it, i.e. it is like a setup and teardown for tests.
79-
* Copied from testCcdbApi.cxx
80-
*/
81-
struct test_fixture {
82-
test_fixture()
83-
{
84-
api.init(ccdbUrl);
85-
metadata["Hello"] = "World";
86-
LOG(info) << "*** " << boost::unit_test::framework::current_test_case().p_name << " ***" << std::endl;
87-
}
88-
~test_fixture() = default;
89-
90-
o2::ccdb::CcdbApi api;
91-
std::map<std::string, std::string> metadata;
92-
};
9372

9473
// Only compare known and stable keys (avoid volatile ones like Date)
9574
static const std::set<std::string> sStableKeys = {
@@ -112,23 +91,24 @@ BOOST_AUTO_TEST_CASE(testCachedHeaders, *boost::unit_test::precondition(if_reach
11291
{
11392
/// ━━━━━━━ ARRANGE ━━━━━━━━━
11493
// First store objects to test with
115-
test_fixture f;
116-
94+
auto& ccdbManager = o2::ccdb::BasicCCDBManager::instance();
11795
std::string pathA = basePath + "CachingA";
11896
std::string pathB = basePath + "CachingB";
11997
std::string pathC = basePath + "CachingC";
12098
std::string ccdbObjO = "testObjectO";
12199
std::string ccdbObjN = "testObjectN";
122100
std::string ccdbObjX = "testObjectX";
123-
std::map<std::string, std::string> md = f.metadata;
101+
std::map<std::string, std::string> md = {
102+
{"Hello", "World"},
103+
{"Key1", "Value1"},
104+
{"Key2", "Value2"},
105+
};
124106
long start = 1000, stop = 3000;
125-
f.api.storeAsTFileAny<std::string>(&ccdbObjO, pathA, md, start, stop);
126-
f.api.storeAsTFileAny<std::string>(&ccdbObjN, pathB, md, start, stop);
127-
f.api.storeAsTFileAny<std::string>(&ccdbObjX, pathC, md, start, stop);
107+
ccdbManager.getCCDBAccessor().storeAsTFileAny<std::string>(&ccdbObjO, pathA, md, start, stop);
108+
ccdbManager.getCCDBAccessor().storeAsTFileAny<std::string>(&ccdbObjN, pathB, md, start, stop);
109+
ccdbManager.getCCDBAccessor().storeAsTFileAny<std::string>(&ccdbObjX, pathC, md, start, stop);
128110
// initilize the BasicCCDBManager
129-
o2::ccdb::BasicCCDBManager& ccdbManager = o2::ccdb::BasicCCDBManager::instance();
130111
ccdbManager.clearCache();
131-
ccdbManager.setURL(ccdbUrl);
132112
ccdbManager.setCaching(true); // This is what we want to test.
133113

134114
/// ━━━━━━━━━━━ ACT ━━━━━━━━━━━━
@@ -193,20 +173,21 @@ BOOST_AUTO_TEST_CASE(testNonCachedHeaders, *boost::unit_test::precondition(if_re
193173
{
194174
/// ━━━━━━━ ARRANGE ━━━━━━━━━
195175
// First store objects to test with
196-
test_fixture f;
197-
176+
auto& ccdbManager = o2::ccdb::BasicCCDBManager::instance();
198177
std::string pathA = basePath + "NonCachingA";
199178
std::string pathB = basePath + "NonCachingB";
200179
std::string ccdbObjO = "testObjectO";
201180
std::string ccdbObjN = "testObjectN";
202-
std::map<std::string, std::string> md = f.metadata;
181+
std::map<std::string, std::string> md = {
182+
{"Hello", "World"},
183+
{"Key1", "Value1"},
184+
{"Key2", "Value2"},
185+
};
203186
long start = 1000, stop = 2000;
204-
f.api.storeAsTFileAny(&ccdbObjO, pathA, md, start, stop);
205-
f.api.storeAsTFileAny(&ccdbObjN, pathB, md, start, stop);
187+
ccdbManager.getCCDBAccessor().storeAsTFileAny(&ccdbObjO, pathA, md, start, stop);
188+
ccdbManager.getCCDBAccessor().storeAsTFileAny(&ccdbObjN, pathB, md, start, stop);
206189
// initilize the BasicCCDBManager
207-
o2::ccdb::BasicCCDBManager& ccdbManager = o2::ccdb::BasicCCDBManager::instance();
208190
ccdbManager.clearCache();
209-
ccdbManager.setURL(ccdbUrl);
210191
ccdbManager.setCaching(false); // This is what we want to test, no caching
211192

212193
/// ━━━━━━━━━━━ ACT ━━━━━━━━━━━━
@@ -217,6 +198,7 @@ BOOST_AUTO_TEST_CASE(testNonCachedHeaders, *boost::unit_test::precondition(if_re
217198
auto* obj2 = ccdbManager.getForTimeStamp<std::string>(pathB, (start + stop) / 2, &headers2);
218199
auto* obj3 = ccdbManager.getForTimeStamp<std::string>(pathA, (start + stop) / 2, &headers3); // Should not be cached since explicitly disabled
219200

201+
ccdbManager.setCaching(true); // Restore default state
220202
/// ━━━━━━━━━━━ ASSERT ━━━━━━━━━━━
221203
/// Check that we got something
222204
BOOST_REQUIRE(obj1 != nullptr);
@@ -249,12 +231,17 @@ BOOST_AUTO_TEST_CASE(testNonCachedHeaders, *boost::unit_test::precondition(if_re
249231
BOOST_TEST(headers3.size() != 0);
250232
BOOST_TEST(headers2.size() != 0);
251233
BOOST_TEST(headers1 != headers2, "The headers for different objects should be different");
234+
235+
// cleanup
236+
delete obj1;
237+
delete obj2;
238+
delete obj3;
252239
}
253240

254-
BOOST_AUTO_TEST_CASE(CacheFirstRetrievalAndHeadersPersistence)
241+
BOOST_AUTO_TEST_CASE(CacheFirstRetrievalAndHeadersPersistence, *boost::unit_test::precondition(if_reachable()))
255242
{
256-
test_fixture f;
257243
/// ━━━━━━━ ARRANGE ━━━━━━━━━
244+
auto& mgr = o2::ccdb::BasicCCDBManager::instance();
258245
// Prepare two validity slots for same path to test ETag change later
259246
std::string path = basePath + "ObjA";
260247
std::string objV1 = "ObjectVersion1";
@@ -268,11 +255,9 @@ BOOST_AUTO_TEST_CASE(CacheFirstRetrievalAndHeadersPersistence)
268255
long v2stop = v2start + (v1stop - v1start);
269256
long mid1 = (v1start + v1stop) / 2;
270257
// Store 2 versions
271-
f.api.storeAsTFileAny(&objV1, path, meta1, v1start, v1stop);
272-
f.api.storeAsTFileAny(&objV2, path, meta1, v2start, v2stop);
258+
mgr.getCCDBAccessor().storeAsTFileAny(&objV1, path, meta1, v1start, v1stop);
259+
mgr.getCCDBAccessor().storeAsTFileAny(&objV2, path, meta1, v2start, v2stop);
273260

274-
auto& mgr = o2::ccdb::BasicCCDBManager::instance();
275-
mgr.setURL(ccdbUrl);
276261
mgr.clearCache();
277262
mgr.setCaching(true);
278263
mgr.setFatalWhenNull(true);
@@ -294,6 +279,8 @@ BOOST_AUTO_TEST_CASE(CacheFirstRetrievalAndHeadersPersistence)
294279
// 5) Fifth retrieval with headers again to check persistence
295280
auto* p5 = mgr.getForTimeStamp<std::string>(path, mid1, &headers5);
296281

282+
mgr.setFatalWhenNull(false); // restore default
283+
297284
/// ━━━━━━━ASSERT━━━━━━━━━
298285

299286
BOOST_TEST(p1 != nullptr);
@@ -336,17 +323,16 @@ BOOST_AUTO_TEST_CASE(CacheFirstRetrievalAndHeadersPersistence)
336323
BOOST_TEST(headers5["UserKey1"] == "UValue1"); // internal unchanged
337324
}
338325

339-
BOOST_AUTO_TEST_CASE(FailedFetchDoesNotGiveMetadata)
326+
BOOST_AUTO_TEST_CASE(FailedFetchDoesNotGiveMetadata, *boost::unit_test::precondition(if_reachable()))
340327
{
341-
test_fixture f;
342328

343329
/// ━━━━━━━ ARRANGE ━━━━━━━━━
330+
auto& mgr = o2::ccdb::BasicCCDBManager::instance();
344331
std::string path = basePath + "FailThenRecover";
345332
std::string content = "ContentX";
346333
std::map<std::string, std::string> meta{{"Alpha", "Beta"}};
347334
long s = 300'000, e = 310'000;
348-
f.api.storeAsTFileAny(&content, path, meta, s, e);
349-
auto& mgr = o2::ccdb::BasicCCDBManager::instance();
335+
mgr.getCCDBAccessor().storeAsTFileAny(&content, path, meta, s, e);
350336
mgr.clearCache();
351337
mgr.setCaching(true);
352338
mgr.setFatalWhenNull(false);
@@ -368,17 +354,16 @@ BOOST_AUTO_TEST_CASE(FailedFetchDoesNotGiveMetadata)
368354
mgr.setFatalWhenNull(true);
369355
}
370356

371-
BOOST_AUTO_TEST_CASE(FirstCallWithoutHeadersThenWithHeaders)
357+
BOOST_AUTO_TEST_CASE(FirstCallWithoutHeadersThenWithHeaders, *boost::unit_test::precondition(if_reachable()))
372358
{
373-
test_fixture f;
374359

360+
auto& mgr = o2::ccdb::BasicCCDBManager::instance();
375361
std::string path = basePath + "LateHeaders";
376362
std::string body = "Late";
377363
std::map<std::string, std::string> meta{{"LateKey", "LateVal"}};
378364
long s = 400'000, e = 410'000;
379-
f.api.storeAsTFileAny(&body, path, meta, s, e);
365+
mgr.getCCDBAccessor().storeAsTFileAny(&body, path, meta, s, e);
380366

381-
auto& mgr = o2::ccdb::BasicCCDBManager::instance();
382367
mgr.clearCache();
383368
mgr.setCaching(true);
384369
long ts = (s + e) / 2;
@@ -398,17 +383,16 @@ BOOST_AUTO_TEST_CASE(FirstCallWithoutHeadersThenWithHeaders)
398383
BOOST_TEST(h2.count("Valid-Until") == 1);
399384
}
400385

401-
BOOST_AUTO_TEST_CASE(HeadersAreStableAcrossMultipleHits)
386+
BOOST_AUTO_TEST_CASE(HeadersAreStableAcrossMultipleHits, *boost::unit_test::precondition(if_reachable()))
402387
{
403-
test_fixture f;
404388

389+
auto& mgr = o2::ccdb::BasicCCDBManager::instance();
405390
std::string path = basePath + "StableHeaders";
406391
std::string body = "Stable";
407392
std::map<std::string, std::string> meta{{"HK", "HV"}};
408393
long s = 500'000, e = 510'000;
409-
f.api.storeAsTFileAny(&body, path, meta, s, e);
394+
mgr.getCCDBAccessor().storeAsTFileAny(&body, path, meta, s, e);
410395

411-
auto& mgr = o2::ccdb::BasicCCDBManager::instance();
412396
mgr.clearCache();
413397
mgr.setCaching(true);
414398
long ts = (s + e) / 2;

0 commit comments

Comments
 (0)