// Copyright Epic Games, Inc. All Rights Reserved. #if ZEN_WITH_TESTS # include "zenserver-test.h" # include # include # include # include ZEN_THIRD_PARTY_INCLUDES_START # include ZEN_THIRD_PARTY_INCLUDES_END namespace zen::tests { using namespace std::literals; TEST_SUITE_BEGIN("server.objectstore"); TEST_CASE("objectstore.blobs") { std::string_view Bucket = "bkt"sv; std::vector CompressedBlobsHashes; std::vector BlobsSizes; std::vector CompressedBlobsSizes; { ZenServerInstance Instance(TestEnv); const uint16_t PortNumber = Instance.SpawnServerAndWaitUntilReady(fmt::format("--objectstore-enabled")); CHECK(PortNumber != 0); HttpClient Client(Instance.GetBaseUri() + "/obj/"); for (size_t I = 0; I < 5; I++) { IoBuffer Blob = CreateSemiRandomBlob(4711 + I * 7); BlobsSizes.push_back(Blob.GetSize()); CompressedBuffer CompressedBlob = CompressedBuffer::Compress(SharedBuffer(std::move(Blob))); CompressedBlobsHashes.push_back(CompressedBlob.DecodeRawHash()); CompressedBlobsSizes.push_back(CompressedBlob.GetCompressedSize()); IoBuffer Payload = std::move(CompressedBlob).GetCompressed().Flatten().AsIoBuffer(); Payload.SetContentType(ZenContentType::kCompressedBinary); std::string ObjectPath = fmt::format("{}/{}.utoc", CompressedBlobsHashes.back().ToHexString().substr(0, 2), CompressedBlobsHashes.back().ToHexString()); HttpClient::Response Result = Client.Put(fmt::format("bucket/{}/{}.utoc", Bucket, ObjectPath), Payload); CHECK(Result); } for (size_t I = 0; I < 5; I++) { std::string ObjectPath = fmt::format("{}/{}.utoc", CompressedBlobsHashes[I].ToHexString().substr(0, 2), CompressedBlobsHashes[I].ToHexString()); HttpClient::Response Result = Client.Get(fmt::format("bucket/{}/{}.utoc", Bucket, ObjectPath)); CHECK(Result); CHECK_EQ(Result.ResponsePayload.GetSize(), CompressedBlobsSizes[I]); IoHash RawHash; uint64_t RawSize; CompressedBuffer Compressed = CompressedBuffer::FromCompressed(SharedBuffer(std::move(Result.ResponsePayload)), RawHash, RawSize); CHECK(Compressed); CHECK_EQ(RawHash, CompressedBlobsHashes[I]); CHECK_EQ(RawSize, BlobsSizes[I]); } } } TEST_SUITE_END(); } // namespace zen::tests #endif