aboutsummaryrefslogtreecommitdiff
path: root/zenserver-test/zenserver-test.cpp
diff options
context:
space:
mode:
authorzousar <[email protected]>2022-02-01 21:33:57 -0700
committerzousar <[email protected]>2022-02-01 21:33:57 -0700
commit7f12ac47b01639e8e67d04388a6f971271d25c52 (patch)
tree53ac2f2a844785bf5543cd62a692985f0b0ff385 /zenserver-test/zenserver-test.cpp
parentMerge branch 'main' into non-elevated-asio (diff)
parentCacheRecordPolicy: Fix inverted PolicyMask expression that caused parsing Val... (diff)
downloadzen-7f12ac47b01639e8e67d04388a6f971271d25c52.tar.xz
zen-7f12ac47b01639e8e67d04388a6f971271d25c52.zip
Merge branch 'main' into non-elevated-asio
Diffstat (limited to 'zenserver-test/zenserver-test.cpp')
-rw-r--r--zenserver-test/zenserver-test.cpp172
1 files changed, 115 insertions, 57 deletions
diff --git a/zenserver-test/zenserver-test.cpp b/zenserver-test/zenserver-test.cpp
index f51fd1504..425f43946 100644
--- a/zenserver-test/zenserver-test.cpp
+++ b/zenserver-test/zenserver-test.cpp
@@ -1814,7 +1814,12 @@ TEST_CASE("zcache.rpc")
{
using namespace std::literals;
- auto CreateCacheRecord = [](const zen::CacheKey& CacheKey, size_t PayloadSize) -> zen::CbPackage {
+ auto AppendCacheRecord = [](CbPackage& Package,
+ CbWriter& Writer,
+ const zen::CacheKey& CacheKey,
+ size_t PayloadSize,
+ CachePolicy /* BatchDefaultPolicy */,
+ CachePolicy RecordPolicy) {
std::vector<uint8_t> Data;
Data.resize(PayloadSize);
for (size_t Idx = 0; Idx < PayloadSize; ++Idx)
@@ -1822,19 +1827,37 @@ TEST_CASE("zcache.rpc")
Data[Idx] = Idx % 255;
}
- zen::CbAttachment Attachment(zen::CompressedBuffer::Compress(SharedBuffer::MakeView(Data.data(), Data.size())));
+ CompressedBuffer Value = zen::CompressedBuffer::Compress(SharedBuffer::MakeView(Data.data(), Data.size()));
+ zen::CbAttachment Attachment(Value);
- zen::CbObjectWriter CacheRecord;
- CacheRecord.BeginObject("CacheKey"sv);
- CacheRecord << "Bucket"sv << CacheKey.Bucket << "Hash"sv << CacheKey.Hash;
- CacheRecord.EndObject();
- CacheRecord << "Data"sv << Attachment;
+ Writer.BeginObject();
+ {
+ Writer.BeginObject("Record"sv);
+ {
+ Writer.BeginObject("Key"sv);
+ {
+ Writer << "Bucket"sv << CacheKey.Bucket << "Hash"sv << CacheKey.Hash;
+ }
+ Writer.EndObject();
+ Writer.BeginArray("Values"sv);
+ {
+ Writer.BeginObject();
+ {
+ Writer.AddObjectId("Id"sv, Oid::NewOid());
+ Writer.AddBinaryAttachment("RawHash"sv, IoHash::FromBLAKE3(Value.GetRawHash()));
+ Writer.AddInteger("RawSize"sv, Value.GetRawSize());
+ }
+ Writer.EndObject();
+ }
+ Writer.EndArray();
+ }
+ Writer.EndObject();
+ Writer.SetName("Policy"sv);
+ CacheRecordPolicy(RecordPolicy).Save(Writer);
+ }
+ Writer.EndObject();
- zen::CbPackage Package;
- Package.SetObject(CacheRecord.Save());
Package.AddAttachment(Attachment);
-
- return Package;
};
auto ToIoBuffer = [](zen::CbPackage Package) -> zen::IoBuffer {
@@ -1843,27 +1866,46 @@ TEST_CASE("zcache.rpc")
return zen::IoBuffer(zen::IoBuffer::Clone, MemStream.Data(), MemStream.Size());
};
- auto PutCacheRecords = [&CreateCacheRecord, &ToIoBuffer](std::string_view BaseUri,
- std::string_view Query,
- std::string_view Bucket,
- size_t Num,
- size_t PayloadSize = 1024) -> std::vector<CacheKey> {
+ auto PutCacheRecords =
+ [&AppendCacheRecord,
+ &ToIoBuffer](std::string_view BaseUri, std::string_view Bucket, size_t Num, size_t PayloadSize = 1024) -> std::vector<CacheKey> {
std::vector<zen::CacheKey> OutKeys;
for (uint32_t Key = 1; Key <= Num; ++Key)
{
- const zen::CacheKey CacheKey = zen::CacheKey::Create(Bucket, zen::IoHash::HashBuffer(&Key, sizeof(uint32_t)));
- CbPackage CacheRecord = CreateCacheRecord(CacheKey, PayloadSize);
+ zen::IoHash KeyHash;
+ ((uint32_t*)(KeyHash.Hash))[0] = Key;
+ const zen::CacheKey CacheKey = zen::CacheKey::Create(Bucket, KeyHash);
+ CbPackage Package;
+ CbWriter Writer;
- OutKeys.push_back(CacheKey);
+ Writer.BeginObject();
+ {
+ Writer << "Method"sv
+ << "PutCacheRecords"sv;
+ Writer.BeginObject("Params"sv);
+ {
+ CachePolicy BatchDefaultPolicy = CachePolicy::Default;
+ Writer << "DefaultPolicy"sv << WriteToString<128>(BatchDefaultPolicy);
+ Writer.BeginArray("Requests"sv);
+ {
+ AppendCacheRecord(Package, Writer, CacheKey, PayloadSize, BatchDefaultPolicy, CachePolicy::Default);
+ }
+ Writer.EndArray();
+ }
+ Writer.EndObject();
+ }
+ Writer.EndObject();
+ Package.SetObject(Writer.Save().AsObject());
- IoBuffer Payload = ToIoBuffer(CacheRecord);
+ OutKeys.push_back(CacheKey);
- cpr::Response Result = cpr::Put(cpr::Url{fmt::format("{}/{}/{}{}", BaseUri, CacheKey.Bucket, CacheKey.Hash, Query)},
- cpr::Body{(const char*)Payload.Data(), Payload.Size()},
- cpr::Header{{"Content-Type", "application/x-ue-cbpkg"}});
+ IoBuffer Body = FormatPackageMessageBuffer(Package).Flatten().AsIoBuffer();
+ cpr::Response Result = cpr::Post(cpr::Url{fmt::format("{}/$rpc", BaseUri)},
+ cpr::Header{{"Content-Type", "application/x-ue-cbpkg"}, {"Accept", "application/x-ue-cbpkg"}},
+ cpr::Body{(const char*)Body.GetData(), Body.GetSize()});
- CHECK(Result.status_code == 201);
+ CHECK(Result.status_code == 200);
}
return OutKeys;
@@ -1876,27 +1918,30 @@ TEST_CASE("zcache.rpc")
bool Success;
};
- auto GetCacheRecords =
- [](std::string_view BaseUri, std::span<zen::CacheKey> Keys, const zen::CacheRecordPolicy& Policy) -> GetCacheRecordResult {
+ auto GetCacheRecords = [](std::string_view BaseUri, std::span<zen::CacheKey> Keys, zen::CachePolicy Policy) -> GetCacheRecordResult {
using namespace zen;
CbObjectWriter Request;
Request << "Method"sv
<< "GetCacheRecords"sv;
Request.BeginObject("Params"sv);
-
- Request.BeginArray("CacheKeys"sv);
- for (const CacheKey& Key : Keys)
{
- Request.BeginObject();
- Request << "Bucket"sv << Key.Bucket << "Hash"sv << Key.Hash;
- Request.EndObject();
+ Request << "DefaultPolicy"sv << WriteToString<128>(Policy);
+ Request.BeginArray("Requests"sv);
+ for (const CacheKey& Key : Keys)
+ {
+ Request.BeginObject();
+ {
+ Request.BeginObject("Key"sv);
+ {
+ Request << "Bucket"sv << Key.Bucket << "Hash"sv << Key.Hash;
+ }
+ Request.EndObject();
+ }
+ Request.EndObject();
+ }
+ Request.EndArray();
}
- Request.EndArray();
-
- Request.SetName("Policy"sv);
- Policy.Save(Request);
-
Request.EndObject();
BinaryWriter Body;
@@ -1947,8 +1992,8 @@ TEST_CASE("zcache.rpc")
Inst.SpawnServer(PortNumber);
Inst.WaitUntilReady();
- CacheRecordPolicy Policy;
- std::vector<zen::CacheKey> Keys = PutCacheRecords(BaseUri, ""sv, "mastodon"sv, 128);
+ CachePolicy Policy = CachePolicy::Default;
+ std::vector<zen::CacheKey> Keys = PutCacheRecords(BaseUri, "mastodon"sv, 128);
GetCacheRecordResult Result = GetCacheRecords(BaseUri, Keys, Policy);
CHECK(Result.Records.size() == Keys.size());
@@ -1957,11 +2002,18 @@ TEST_CASE("zcache.rpc")
{
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();
- const CbAttachment* Attachment = Result.Response.FindAttachment(AttachmentHash);
+ CbObjectView RecordObj = RecordView.AsObjectView();
+ CbObjectView KeyObj = RecordObj["Key"sv].AsObjectView();
+ const CacheKey Key = CacheKey::Create(KeyObj["Bucket"sv].AsString(), KeyObj["Hash"].AsHash());
+ IoHash AttachmentHash;
+ size_t NumValues = 0;
+ for (CbFieldView Value : RecordObj["Values"sv])
+ {
+ AttachmentHash = Value.AsObjectView()["RawHash"sv].AsHash();
+ ++NumValues;
+ }
+ CHECK(NumValues == 1);
+ const CbAttachment* Attachment = Result.Response.FindAttachment(AttachmentHash);
CHECK(Key == ExpectedKey);
CHECK(Attachment != nullptr);
@@ -1979,8 +2031,8 @@ TEST_CASE("zcache.rpc")
Inst.SpawnServer(PortNumber);
Inst.WaitUntilReady();
- CacheRecordPolicy Policy;
- std::vector<zen::CacheKey> ExistingKeys = PutCacheRecords(BaseUri, ""sv, "mastodon"sv, 128);
+ CachePolicy Policy = CachePolicy::Default;
+ std::vector<zen::CacheKey> ExistingKeys = PutCacheRecords(BaseUri, "mastodon"sv, 128);
std::vector<zen::CacheKey> Keys;
for (const zen::CacheKey& Key : ExistingKeys)
@@ -2004,12 +2056,18 @@ TEST_CASE("zcache.rpc")
}
else
{
- const CacheKey& ExpectedKey = ExistingKeys[KeyIndex++];
- CbObjectView RecordObj = RecordView.AsObjectView();
- zen::CacheKey Key = LoadKey(RecordObj["CacheKey"sv]);
- const IoHash AttachmentHash = RecordObj["Data"sv].AsHash();
- const CbAttachment* Attachment = Result.Response.FindAttachment(AttachmentHash);
-
+ const CacheKey& ExpectedKey = ExistingKeys[KeyIndex++];
+ CbObjectView RecordObj = RecordView.AsObjectView();
+ zen::CacheKey Key = LoadKey(RecordObj["Key"sv]);
+ IoHash AttachmentHash;
+ size_t NumValues = 0;
+ for (CbFieldView Value : RecordObj["Values"sv])
+ {
+ AttachmentHash = Value.AsObjectView()["RawHash"sv].AsHash();
+ ++NumValues;
+ }
+ CHECK(NumValues == 1);
+ const CbAttachment* Attachment = Result.Response.FindAttachment(AttachmentHash);
CHECK(Key == ExpectedKey);
CHECK(Attachment != nullptr);
}
@@ -2028,9 +2086,9 @@ TEST_CASE("zcache.rpc")
SpawnServer(UpstreamServer, UpstreamCfg);
SpawnServer(LocalServer, LocalCfg);
- std::vector<zen::CacheKey> Keys = PutCacheRecords(UpstreamCfg.BaseUri, ""sv, "mastodon"sv, 4);
+ std::vector<zen::CacheKey> Keys = PutCacheRecords(UpstreamCfg.BaseUri, "mastodon"sv, 4);
- CacheRecordPolicy Policy(CachePolicy::QueryLocal);
+ CachePolicy Policy = CachePolicy::QueryLocal;
GetCacheRecordResult Result = GetCacheRecords(LocalCfg.BaseUri, Keys, Policy);
CHECK(Result.Records.size() == Keys.size());
@@ -2053,9 +2111,9 @@ TEST_CASE("zcache.rpc")
SpawnServer(UpstreamServer, UpstreamCfg);
SpawnServer(LocalServer, LocalCfg);
- std::vector<zen::CacheKey> Keys = PutCacheRecords(UpstreamCfg.BaseUri, ""sv, "mastodon"sv, 4);
+ std::vector<zen::CacheKey> Keys = PutCacheRecords(UpstreamCfg.BaseUri, "mastodon"sv, 4);
- CacheRecordPolicy Policy(CachePolicy::QueryLocal | CachePolicy::QueryRemote);
+ CachePolicy Policy = (CachePolicy::QueryLocal | CachePolicy::QueryRemote);
GetCacheRecordResult Result = GetCacheRecords(LocalCfg.BaseUri, Keys, Policy);
CHECK(Result.Records.size() == Keys.size());
@@ -2064,7 +2122,7 @@ TEST_CASE("zcache.rpc")
{
const zen::CacheKey& ExpectedKey = Keys[Index++];
CbObjectView RecordObj = RecordView.AsObjectView();
- zen::CacheKey Key = LoadKey(RecordObj["CacheKey"sv]);
+ zen::CacheKey Key = LoadKey(RecordObj["Key"sv]);
CHECK(Key == ExpectedKey);
}
}