diff options
| author | Dan Engelbrecht <[email protected]> | 2022-04-14 16:54:51 +0200 |
|---|---|---|
| committer | Dan Engelbrecht <[email protected]> | 2022-06-13 12:04:20 +0200 |
| commit | e1cc2824a9f151284097f312c6a7041597e97b82 (patch) | |
| tree | fcd0f87116d098cfec8dbc54cc1e75f29e544dce /zenserver-test/zenserver-test.cpp | |
| parent | Merge branch 'main' of https://github.com/EpicGames/zen (diff) | |
| download | zen-e1cc2824a9f151284097f312c6a7041597e97b82.tar.xz zen-e1cc2824a9f151284097f312c6a7041597e97b82.zip | |
WIP
Diffstat (limited to 'zenserver-test/zenserver-test.cpp')
| -rw-r--r-- | zenserver-test/zenserver-test.cpp | 76 |
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 |