aboutsummaryrefslogtreecommitdiff
path: root/zenserver-test/zenserver-test.cpp
diff options
context:
space:
mode:
authorPer Larsson <[email protected]>2021-11-12 14:49:35 +0100
committerPer Larsson <[email protected]>2021-11-12 14:49:35 +0100
commit59235d89b643757dcd3e13d84a16ffe8f8f2970c (patch)
tree9ea6033174051b44f336c95eb8699b479626dded /zenserver-test/zenserver-test.cpp
parentFixed bug when cloning CbObject. (diff)
downloadzen-59235d89b643757dcd3e13d84a16ffe8f8f2970c.tar.xz
zen-59235d89b643757dcd3e13d84a16ffe8f8f2970c.zip
Added test for cache policy SkipAttachments.
Diffstat (limited to 'zenserver-test/zenserver-test.cpp')
-rw-r--r--zenserver-test/zenserver-test.cpp122
1 files changed, 49 insertions, 73 deletions
diff --git a/zenserver-test/zenserver-test.cpp b/zenserver-test/zenserver-test.cpp
index e3f859d31..7dea80a36 100644
--- a/zenserver-test/zenserver-test.cpp
+++ b/zenserver-test/zenserver-test.cpp
@@ -2010,7 +2010,7 @@ TEST_CASE("zcache.batch")
for (CbFieldView RecordView : ResponseObject["Result"])
{
ExtendableStringBuilder<256> Tmp;
- auto JSON = RecordView.AsObjectView().ToJson(Tmp).ToView();
+ auto JSON = RecordView.AsObjectView().ToJson(Tmp).ToView();
OutResult.Records.push_back(RecordView);
}
@@ -2040,81 +2040,24 @@ TEST_CASE("zcache.batch")
Inst.SpawnServer(PortNumber);
Inst.WaitUntilReady();
- std::vector<zen::CacheKey> CacheKeys;
-
- // Create some cache records
- {
- for (uint32_t Key = 1; Key <= 128; ++Key)
- {
- const CacheKey CacheKey = zen::CacheKey::Create("mastodon"sv, zen::IoHash::HashBuffer(&Key, sizeof uint32_t));
- CbPackage CacheRecord = CreateCacheRecord(CacheKey, 1024);
-
- CacheKeys.push_back(CacheKey);
-
- IoBuffer Payload = ToIoBuffer(CacheRecord);
-
- cpr::Response Result = cpr::Put(cpr::Url{"{}/{}/{}"_format(BaseUri, CacheKey.Bucket, CacheKey.Hash)},
- cpr::Body{(const char*)Payload.Data(), Payload.Size()},
- cpr::Header{{"Content-Type", "application/x-ue-cbpkg"}});
+ CacheRecordPolicy Policy;
+ std::vector<zen::CacheKey> Keys = PutCacheRecords(BaseUri, ""sv, "mastodon"sv, 128);
+ GetCacheRecordResult Result = GetCacheRecords(BaseUri, Keys, Policy);
- CHECK(Result.status_code == 201);
- }
- }
+ CHECK(Result.Records.size() == Keys.size());
- // Get all as a batch
+ for (size_t Index = 0; CbFieldView RecordView : Result.Records)
{
- CbObjectWriter BatchRequest;
-
- BatchRequest << "Method"sv
- << "GetCacheRecords"sv;
-
- BatchRequest.BeginObject("Params"sv);
-
- BatchRequest.BeginArray("CacheKeys"sv);
- for (const CacheKey& Key : CacheKeys)
- {
- BatchRequest.BeginObject();
- BatchRequest << "Bucket"sv << Key.Bucket << "Hash"sv << Key.Hash;
- BatchRequest.EndObject();
- }
- BatchRequest.EndArray();
-
- BatchRequest.EndObject();
-
- zen::BinaryWriter Payload;
- BatchRequest.Save(Payload);
-
- cpr::Response Result = cpr::Post(cpr::Url{"{}/$rpc"_format(BaseUri)},
- cpr::Header{{"Content-Type", "application/x-ue-cb"}, {"Accept", "application/x-ue-cbpkg"}},
- cpr::Body{(const char*)Payload.GetData(), Payload.GetSize()});
-
- CHECK(Result.status_code == 200);
-
- zen::IoBuffer Response(zen::IoBuffer::Wrap, Result.text.data(), Result.text.size());
- zen::CbPackage Package;
- const bool Ok = Package.TryLoad(Response);
- CHECK(Ok);
+ const CacheKey& ExpectedKey = Keys[Index++];
- size_t ReturnCount = 0;
- CbObjectView BatchResponse = Package.GetObject();
-
- for (size_t Index = 0; CbFieldView RecordView : BatchResponse["Result"])
- {
- const CacheKey& ExpectedKey = CacheKeys[Index++];
-
- CbObjectView RecordObj = RecordView.AsObjectView();
- CbObjectView KeyObj = RecordObj["CacheKey"sv].AsObjectView();
- const CacheKey Key = CacheKey::Create(KeyObj["Bucket"sv].AsString(), KeyObj["Hash"].AsHash());
- const IoHash AttachmentHash = RecordObj["Data"sv].AsHash();
- const CbAttachment* Attachment = Package.FindAttachment(AttachmentHash);
+ CbObjectView RecordObj = RecordView.AsObjectView();
+ CbObjectView KeyObj = RecordObj["CacheKey"sv].AsObjectView();
+ const CacheKey Key = CacheKey::Create(KeyObj["Bucket"sv].AsString(), KeyObj["Hash"].AsHash());
+ const IoHash AttachmentHash = RecordObj["Data"sv].AsHash();
+ const CbAttachment* Attachment = Result.Response.FindAttachment(AttachmentHash);
- CHECK(Key == ExpectedKey);
- CHECK(Attachment != nullptr);
-
- ReturnCount++;
- }
-
- CHECK(ReturnCount == CacheKeys.size());
+ CHECK(Key == ExpectedKey);
+ CHECK(Attachment != nullptr);
}
}
@@ -2223,6 +2166,39 @@ TEST_CASE("zcache.batch")
}
}
+ SUBCASE("policy - 'SkipAttachments' does not return any record attachments")
+ {
+ std::filesystem::path TestDir = TestEnv.CreateNewTestDir();
+ const uint16_t PortNumber = 13337;
+ const auto BaseUri = "http://localhost:{}/z$"_format(PortNumber);
+
+ ZenServerInstance Inst(TestEnv);
+ Inst.SetTestDir(TestDir);
+ Inst.SpawnServer(PortNumber);
+ Inst.WaitUntilReady();
+
+ CacheRecordPolicy Policy(CachePolicy::QueryLocal | CachePolicy::SkipAttachments);
+ std::vector<zen::CacheKey> Keys = PutCacheRecords(BaseUri, ""sv, "mastodon"sv, 4);
+ GetCacheRecordResult Result = GetCacheRecords(BaseUri, Keys, Policy);
+
+ CHECK(Result.Records.size() == Keys.size());
+
+ std::span<const zen::CbAttachment> Attachments = Result.Response.GetAttachments();
+ CHECK(Attachments.empty());
+
+ for (size_t Index = 0; CbFieldView RecordView : Result.Records)
+ {
+ const CacheKey& ExpectedKey = Keys[Index++];
+
+ CbObjectView RecordObj = RecordView.AsObjectView();
+ CbObjectView KeyObj = RecordObj["CacheKey"sv].AsObjectView();
+ const CacheKey Key = CacheKey::Create(KeyObj["Bucket"sv].AsString(), KeyObj["Hash"].AsHash());
+ const IoHash AttachmentHash = RecordObj["Data"sv].AsHash();
+
+ CHECK(Key == ExpectedKey);
+ }
+ }
+
SUBCASE("policy - 'QueryLocal' does not query upstream")
{
using namespace utils;
@@ -2269,9 +2245,9 @@ TEST_CASE("zcache.batch")
for (size_t Index = 0; CbFieldView RecordView : Result.Response.GetObject()["Result"sv])
{
- CbObjectView RecordObj = RecordView.AsObjectView();
+ CbObjectView RecordObj = RecordView.AsObjectView();
const zen::CacheKey& ExpectedKey = Keys[Index++];
- zen::CacheKey Key = LoadKey(RecordObj["CacheKey"sv]);
+ zen::CacheKey Key = LoadKey(RecordObj["CacheKey"sv]);
CHECK(Key == ExpectedKey);
}
}