diff options
| author | Per Larsson <[email protected]> | 2021-11-12 14:49:35 +0100 |
|---|---|---|
| committer | Per Larsson <[email protected]> | 2021-11-12 14:49:35 +0100 |
| commit | 59235d89b643757dcd3e13d84a16ffe8f8f2970c (patch) | |
| tree | 9ea6033174051b44f336c95eb8699b479626dded /zenserver-test/zenserver-test.cpp | |
| parent | Fixed bug when cloning CbObject. (diff) | |
| download | zen-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.cpp | 122 |
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); } } |