aboutsummaryrefslogtreecommitdiff
path: root/zenserver-test/zenserver-test.cpp
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2022-04-14 16:54:51 +0200
committerDan Engelbrecht <[email protected]>2022-06-13 12:04:20 +0200
commite1cc2824a9f151284097f312c6a7041597e97b82 (patch)
treefcd0f87116d098cfec8dbc54cc1e75f29e544dce /zenserver-test/zenserver-test.cpp
parentMerge branch 'main' of https://github.com/EpicGames/zen (diff)
downloadzen-e1cc2824a9f151284097f312c6a7041597e97b82.tar.xz
zen-e1cc2824a9f151284097f312c6a7041597e97b82.zip
WIP
Diffstat (limited to 'zenserver-test/zenserver-test.cpp')
-rw-r--r--zenserver-test/zenserver-test.cpp76
1 files changed, 76 insertions, 0 deletions
diff --git a/zenserver-test/zenserver-test.cpp b/zenserver-test/zenserver-test.cpp
index caa13f067..239a1f768 100644
--- a/zenserver-test/zenserver-test.cpp
+++ b/zenserver-test/zenserver-test.cpp
@@ -2367,6 +2367,82 @@ TEST_CASE("zcache.rpc.allpolicies")
}
}
+TEST_CASE("zcache.rpc.upstream")
+{
+ using namespace utils;
+
+ ZenConfig UpstreamCfg = ZenConfig::New(13338);
+ ZenServerInstance UpstreamServer(TestEnv);
+ ZenConfig LocalCfg = ZenConfig::NewWithUpstream(13338);
+ ZenServerInstance LocalServer(TestEnv);
+
+ const std::string Bucket = "AutoTestDummy";
+
+ const size_t InNumKeys = 1;
+ const size_t InNumValues = 1;
+
+ auto GenerateValue = [](size_t KeyIndex, size_t ValueIndex) {
+ const size_t NumBytes = (ValueIndex + 1) * 10;
+ IoBuffer ValueContents(NumBytes);
+ // Add N zeroed bytes where N corresponds to the value index times 10.
+ uint8_t* DataPtr = reinterpret_cast<uint8_t*>(ValueContents.MutableData());
+ for (size_t ContentIndex = 0; ContentIndex < NumBytes; ++ContentIndex)
+ {
+ DataPtr[ContentIndex] = static_cast<uint8_t>(KeyIndex + ContentIndex);
+ }
+
+ return ValueContents;
+ };
+
+ auto GenerateCacheRecord = [](IoHash Hash, const std::string& Bucket, const std::vector<CompressedBuffer>& Values) {
+ CbObjectWriter Builder;
+ Builder.BeginObject("key"sv);
+ Builder << "Bucket"sv << Bucket << "Hash"sv << Hash;
+ Builder.EndObject();
+ Builder.BeginArray("Values"sv);
+ for (size_t ValueIndex = 0; ValueIndex < Values.size(); ++ValueIndex)
+ {
+ Builder.BeginObject();
+
+ std::string ValueName = fmt::format("%d", ValueIndex);
+ Oid ValueId = Oid::FromMemory(IoHash::HashBuffer(ValueName.data(), ValueName.size() * sizeof(ValueName.data()[0])).Hash);
+ Builder.AddBinaryAttachment("RawHash"sv, IoHash::FromBLAKE3(Values[ValueIndex].GetRawHash()));
+ Builder.AddObjectId("Id"sv, ValueId);
+ Builder.AddInteger("RawSize"sv, Values[ValueIndex].GetRawSize());
+ Builder.EndObject();
+ }
+ Builder.EndArray();
+ return Builder.Save();
+ };
+
+ auto GenerateCacheRecords = [&GenerateValue, &GenerateCacheRecord](const std::string Bucket, size_t InNumKeys, size_t InNumValues) {
+ std::vector<CbObject> CacheRecords;
+ CacheRecords.reserve(InNumKeys);
+ for (size_t KeyIndex = 0; KeyIndex < InNumKeys; ++KeyIndex)
+ {
+ IoHashStream Hasher;
+
+ std::vector<CompressedBuffer> Values;
+ Values.reserve(InNumValues);
+ for (size_t ValueIndex = 0; ValueIndex < InNumValues; ++ValueIndex)
+ {
+ IoBuffer ValueContents = GenerateValue(KeyIndex, ValueIndex);
+ Hasher.Append(ValueContents.GetView());
+ auto CompressedData = CompressedBuffer::Compress(SharedBuffer(ValueContents));
+ Values.emplace_back(CompressedData);
+ }
+
+ IoHash Hash = Hasher.GetHash();
+
+ CbObject CacheRecord = GenerateCacheRecord(Hash, Bucket, Values);
+ CacheRecords.emplace_back(CacheRecord);
+ }
+ return CacheRecords;
+ };
+ std::vector<CbObject> CacheRecords = GenerateCacheRecords(Bucket, InNumKeys, InNumValues);
+ CacheRecords.clear();
+}
+
# if ZEN_WITH_EXEC_SERVICES
struct RemoteExecutionRequest