95 std::string
pathA = basePath +
"CachingA";
96 std::string
pathB = basePath +
"CachingB";
97 std::string pathC = basePath +
"CachingC";
98 std::string ccdbObjO =
"testObjectO";
99 std::string ccdbObjN =
"testObjectN";
100 std::string ccdbObjX =
"testObjectX";
101 std::map<std::string, std::string> md = {
106 long start = 1000, stop = 3000;
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);
111 ccdbManager.clearCache();
112 ccdbManager.setCaching(
true);
116 std::map<std::string, std::string> headers1, headers2, headers3;
118 auto* obj1 = ccdbManager.getForTimeStamp<std::string>(
pathA, (
start + stop) / 2, &headers1);
119 auto* obj2 = ccdbManager.getForTimeStamp<std::string>(
pathB, (
start + stop) / 2, &headers2);
120 auto* obj3 = ccdbManager.getForTimeStamp<std::string>(
pathA, (
start + stop) / 2, &headers3);
124 BOOST_REQUIRE(obj1 !=
nullptr);
125 BOOST_REQUIRE(obj2 !=
nullptr);
126 BOOST_REQUIRE(obj3 !=
nullptr);
140 (*obj1) =
"ModifiedObject";
145 BOOST_REQUIRE(headers1.size() != 0);
146 BOOST_REQUIRE(headers3.size() != 0);
148 LOG(
debug) <<
"Headers1 size: " << headers1.size();
149 for (
const auto&
h : headers1) {
150 LOG(
debug) <<
" " <<
h.first <<
" -> " <<
h.second;
152 LOG(
debug) <<
"Headers3 size: " << headers3.size();
153 for (
const auto&
h : headers3) {
154 LOG(
debug) <<
" " <<
h.first <<
" -> " <<
h.second;
157 for (
const auto& stableKey : sStableKeys) {
158 LOG(info) <<
"Checking key: " << stableKey;
160 BOOST_REQUIRE(headers1.count(stableKey) > 0);
161 BOOST_REQUIRE(headers3.count(stableKey) > 0);
162 BOOST_TEST(headers1.at(stableKey) == headers3.at(stableKey));
164 BOOST_TEST(headers1 != headers2,
"The headers for different objects should be different");
167 headers1[
"NewKey"] =
"NewValue";
168 headers3[
"NewKey"] =
"DifferentValue";
169 BOOST_TEST(headers1[
"NewKey"] != headers3[
"NewKey"]);
177 std::string
pathA = basePath +
"NonCachingA";
178 std::string
pathB = basePath +
"NonCachingB";
179 std::string ccdbObjO =
"testObjectO";
180 std::string ccdbObjN =
"testObjectN";
181 std::map<std::string, std::string> md = {
186 long start = 1000, stop = 2000;
187 ccdbManager.getCCDBAccessor().storeAsTFileAny(&ccdbObjO,
pathA, md,
start, stop);
188 ccdbManager.getCCDBAccessor().storeAsTFileAny(&ccdbObjN,
pathB, md,
start, stop);
190 ccdbManager.clearCache();
191 ccdbManager.setCaching(
false);
195 std::map<std::string, std::string> headers1, headers2, headers3;
197 auto* obj1 = ccdbManager.getForTimeStamp<std::string>(
pathA, (
start + stop) / 2, &headers1);
198 auto* obj2 = ccdbManager.getForTimeStamp<std::string>(
pathB, (
start + stop) / 2, &headers2);
199 auto* obj3 = ccdbManager.getForTimeStamp<std::string>(
pathA, (
start + stop) / 2, &headers3);
201 ccdbManager.setCaching(
true);
204 BOOST_REQUIRE(obj1 !=
nullptr);
205 BOOST_REQUIRE(obj2 !=
nullptr);
206 BOOST_REQUIRE(obj3 !=
nullptr);
218 (*obj1) =
"ModifiedObject";
222 BOOST_TEST(headers1.size() == headers3.size());
225 headers1.erase(
"Date");
226 headers3.erase(
"Date");
227 BOOST_TEST(headers1 == headers3,
"The headers for the same object should be the same even if not cached");
229 BOOST_TEST(headers1 != headers2,
"The headers for different objects should be different");
233 BOOST_TEST(headers1 != headers2,
"The headers for different objects should be different");
246 std::string
path = basePath +
"ObjA";
247 std::string objV1 =
"ObjectVersion1";
248 std::string objV2 =
"ObjectVersion2";
249 std::map<std::string, std::string> meta1{
250 {
"UserKey1",
"UValue1"},
251 {
"UserKey2",
"UValue2"}};
252 long v1start = 10'000;
253 long v1stop = 20'000;
254 long v2start = v1stop;
255 long v2stop = v2start + (v1stop - v1start);
256 long mid1 = (v1start + v1stop) / 2;
258 mgr.getCCDBAccessor().storeAsTFileAny(&objV1,
path, meta1, v1start, v1stop);
259 mgr.getCCDBAccessor().storeAsTFileAny(&objV2,
path, meta1, v2start, v2stop);
262 mgr.setCaching(
true);
263 mgr.setFatalWhenNull(
true);
264 mgr.setTimestamp(mid1);
267 std::map<std::string, std::string> headers1, headers2, headers4, headers5;
270 auto*
p1 = mgr.getForTimeStamp<std::string>(
path, mid1, &headers1);
271 size_t fetchedSizeAfterFirst = mgr.getFetchedSize();
273 auto*
p2 = mgr.getForTimeStamp<std::string>(
path, mid1, &headers2);
274 size_t fetchedSizeAfterSecond = mgr.getFetchedSize();
276 auto* p3 = mgr.getForTimeStamp<std::string>(
path, mid1);
278 auto* p4 = mgr.getForTimeStamp<std::string>(
path, mid1, &headers4);
280 auto* p5 = mgr.getForTimeStamp<std::string>(
path, mid1, &headers5);
282 mgr.setFatalWhenNull(
false);
291 BOOST_TEST(headers1[
"UserKey1"] ==
"UValue1");
292 BOOST_TEST(headers1[
"UserKey2"] ==
"UValue2");
293 BOOST_TEST(headers1.count(
"Valid-From") == 1);
294 BOOST_TEST(headers1.count(
"Valid-Until") == 1);
306 headers1.erase(
"Date");
307 headers2.erase(
"Date");
308 headers4.erase(
"Date");
309 headers5.erase(
"Date");
313 BOOST_TEST(fetchedSizeAfterSecond == fetchedSizeAfterFirst);
321 headers4[
"UserKey1"] =
"Tampered";
323 BOOST_TEST(headers5[
"UserKey1"] ==
"UValue1");
331 std::string
path = basePath +
"FailThenRecover";
332 std::string content =
"ContentX";
333 std::map<std::string, std::string> meta{{
"Alpha",
"Beta"}};
334 long s = 300'000, e = 310'000;
335 mgr.getCCDBAccessor().storeAsTFileAny(&content,
path, meta, s, e);
337 mgr.setCaching(
true);
338 mgr.setFatalWhenNull(
false);
342 long badTS = s - 1000;
343 long goodTS = (s + e) / 2;
344 std::map<std::string, std::string> hFail, hGood;
345 auto* badObj = mgr.getForTimeStamp<std::string>(
path, badTS, &hFail);
346 auto* goodObj = mgr.getForTimeStamp<std::string>(
path, goodTS, &hGood);
354 mgr.setFatalWhenNull(
true);
361 std::string
path = basePath +
"LateHeaders";
362 std::string body =
"Late";
363 std::map<std::string, std::string> meta{{
"LateKey",
"LateVal"}};
364 long s = 400'000, e = 410'000;
365 mgr.getCCDBAccessor().storeAsTFileAny(&body,
path, meta, s, e);
368 mgr.setCaching(
true);
369 long ts = (s + e) / 2;
372 auto*
first = mgr.getForTimeStamp<std::string>(
path, ts);
377 std::map<std::string, std::string> h2;
378 auto* second = mgr.getForTimeStamp<std::string>(
path, ts, &h2);
390 std::string
path = basePath +
"StableHeaders";
391 std::string body =
"Stable";
392 std::map<std::string, std::string> meta{{
"HK",
"HV"}};
393 long s = 500'000, e = 510'000;
394 mgr.getCCDBAccessor().storeAsTFileAny(&body,
path, meta, s, e);
397 mgr.setCaching(
true);
398 long ts = (s + e) / 2;
400 std::map<std::string, std::string> h1;
401 auto* o1 = mgr.getForTimeStamp<std::string>(
path, ts, &h1);
405 std::string
etag = h1[
"ETag"];
406 for (
int i = 0;
i < 15; ++
i) {
407 std::map<std::string, std::string> hi;
408 auto* oi = mgr.getForTimeStamp<std::string>(
path, ts, &hi);