diff options
| author | Stefan Boberg <[email protected]> | 2023-12-11 13:09:03 +0100 |
|---|---|---|
| committer | Stefan Boberg <[email protected]> | 2023-12-11 13:09:03 +0100 |
| commit | 93afeddbc7a5b5df390a29407f5515acd5a70fc1 (patch) | |
| tree | 6f85ee551aabe20dece64a750c0b2d5d2c5d2d5d /src/zenserver-test/zenserver-test.cpp | |
| parent | removed unnecessary SHA1 references (diff) | |
| parent | Make sure that PathFromHandle don't hide true error when throwing exceptions ... (diff) | |
| download | zen-93afeddbc7a5b5df390a29407f5515acd5a70fc1.tar.xz zen-93afeddbc7a5b5df390a29407f5515acd5a70fc1.zip | |
Merge branch 'main' of https://github.com/EpicGames/zen
Diffstat (limited to 'src/zenserver-test/zenserver-test.cpp')
| -rw-r--r-- | src/zenserver-test/zenserver-test.cpp | 321 |
1 files changed, 145 insertions, 176 deletions
diff --git a/src/zenserver-test/zenserver-test.cpp b/src/zenserver-test/zenserver-test.cpp index 6aa58ee14..3efa57fdb 100644 --- a/src/zenserver-test/zenserver-test.cpp +++ b/src/zenserver-test/zenserver-test.cpp @@ -101,22 +101,23 @@ int main(int argc, char** argv) { using namespace std::literals; + using namespace zen; # if ZEN_USE_MIMALLOC mi_version(); # endif - zen::zencore_forcelinktests(); - zen::zenhttp_forcelinktests(); - zen::cacherequests_forcelink(); + zencore_forcelinktests(); + zenhttp_forcelinktests(); + cacherequests_forcelink(); zen::logging::InitializeLogging(); zen::logging::SetLogLevel(zen::logging::level::Debug); spdlog::set_formatter(std::make_unique<zen::logging::full_test_formatter>("test", std::chrono::system_clock::now())); - std::filesystem::path ProgramBaseDir = std::filesystem::path(argv[0]).parent_path(); - std::filesystem::path TestBaseDir = ProgramBaseDir.parent_path().parent_path() / ".test"; + std::filesystem::path ProgramBaseDir = GetRunningExecutablePath().parent_path(); + std::filesystem::path TestBaseDir = std::filesystem::current_path() / ".test"; // This is pretty janky because we're passing most of the options through to the test // framework, so we can't just use cxxopts (I think). This should ideally be cleaned up @@ -153,11 +154,7 @@ TEST_CASE("default.single") ZenServerInstance Instance(TestEnv); Instance.SetTestDir(TestDir); - Instance.SpawnServer(13337); - - ZEN_INFO("Waiting..."); - - Instance.WaitUntilReady(); + const uint16_t PortNumber = Instance.SpawnServerAndWaitUntilReady(); std::atomic<uint64_t> RequestCount{0}; std::atomic<uint64_t> BatchCounter{0}; @@ -170,7 +167,7 @@ TEST_CASE("default.single") ZEN_INFO("query batch {} started (thread {})", BatchNo, ThreadId); cpr::Session cli; - cli.SetUrl(cpr::Url{"http://localhost:13337/test/hello"}); + cli.SetUrl(cpr::Url{fmt::format("http://localhost:{}/test/hello", PortNumber)}); for (int i = 0; i < 10000; ++i) { @@ -206,17 +203,17 @@ TEST_CASE("multi.basic") ZenServerInstance Instance1(TestEnv); std::filesystem::path TestDir1 = TestEnv.CreateNewTestDir(); Instance1.SetTestDir(TestDir1); - Instance1.SpawnServer(13337); + Instance1.SpawnServer(); ZenServerInstance Instance2(TestEnv); std::filesystem::path TestDir2 = TestEnv.CreateNewTestDir(); Instance2.SetTestDir(TestDir2); - Instance2.SpawnServer(13338); + Instance2.SpawnServer(); ZEN_INFO("Waiting..."); - Instance1.WaitUntilReady(); - Instance2.WaitUntilReady(); + const uint16_t PortNum1 = Instance1.WaitUntilReady(); + const uint16_t PortNum2 = Instance2.WaitUntilReady(); std::atomic<uint64_t> RequestCount{0}; std::atomic<uint64_t> BatchCounter{0}; @@ -242,10 +239,10 @@ TEST_CASE("multi.basic") ZEN_INFO("Running multi-server test..."); - Concurrency::parallel_invoke([&] { IssueTestRequests(13337); }, - [&] { IssueTestRequests(13338); }, - [&] { IssueTestRequests(13337); }, - [&] { IssueTestRequests(13338); }); + Concurrency::parallel_invoke([&] { IssueTestRequests(PortNum1); }, + [&] { IssueTestRequests(PortNum2); }, + [&] { IssueTestRequests(PortNum1); }, + [&] { IssueTestRequests(PortNum2); }); uint64_t Elapsed = timer.GetElapsedTimeMs(); @@ -261,12 +258,10 @@ TEST_CASE("project.basic") std::filesystem::path TestDir = TestEnv.CreateNewTestDir(); - const uint16_t PortNumber = 13337; - ZenServerInstance Instance1(TestEnv); Instance1.SetTestDir(TestDir); - Instance1.SpawnServer(PortNumber); - Instance1.WaitUntilReady(); + + const uint16_t PortNumber = Instance1.SpawnServerAndWaitUntilReady(); std::atomic<uint64_t> RequestCount{0}; @@ -423,29 +418,6 @@ TEST_CASE("project.basic") zen::NiceRate(RequestCount, (uint32_t)Elapsed, "req")); } -# if 0 // this is extremely WIP -TEST_CASE("project.pipe") -{ - using namespace std::literals; - - std::filesystem::path TestDir = TestEnv.CreateNewTestDir(); - - const uint16_t PortNumber = 13337; - - ZenServerInstance Instance1(TestEnv); - Instance1.SetTestDir(TestDir); - Instance1.SpawnServer(PortNumber); - Instance1.WaitUntilReady(); - - zen::LocalProjectClient LocalClient(PortNumber); - - zen::CbObjectWriter Cbow; - Cbow << "hey" << 42; - - zen::CbObject Response = LocalClient.MessageTransaction(Cbow.Save()); -} -# endif - namespace utils { struct ZenConfig @@ -455,43 +427,46 @@ namespace utils { std::string BaseUri; std::string Args; - static ZenConfig New(uint16_t Port = 13337, std::string Args = "") + static ZenConfig New(std::string Args = "") + { + return ZenConfig{.DataDir = TestEnv.CreateNewTestDir(), .Port = TestEnv.GetNewPortNumber(), .Args = std::move(Args)}; + } + + static ZenConfig New(uint16_t Port, std::string Args = "") { - return ZenConfig{.DataDir = TestEnv.CreateNewTestDir(), - .Port = Port, - .BaseUri = fmt::format("http://localhost:{}/z$", Port), - .Args = std::move(Args)}; + return ZenConfig{.DataDir = TestEnv.CreateNewTestDir(), .Port = Port, .Args = std::move(Args)}; } - static ZenConfig NewWithUpstream(uint16_t UpstreamPort) + static ZenConfig NewWithUpstream(uint16_t Port, uint16_t UpstreamPort) { - return New(13337, fmt::format("--debug --upstream-thread-count=0 --upstream-zen-url=http://localhost:{}", UpstreamPort)); + return New(Port, fmt::format("--debug --upstream-thread-count=0 --upstream-zen-url=http://localhost:{}", UpstreamPort)); } - static ZenConfig NewWithThreadedUpstreams(std::span<uint16_t> UpstreamPorts, bool Debug) + static ZenConfig NewWithThreadedUpstreams(uint16_t NewPort, std::span<uint16_t> UpstreamPorts, bool Debug) { std::string Args = Debug ? "--debug" : ""; for (uint16_t Port : UpstreamPorts) { Args = fmt::format("{}{}--upstream-zen-url=http://localhost:{}", Args, Args.length() > 0 ? " " : "", Port); } - return New(13337, Args); + return New(NewPort, Args); } void Spawn(ZenServerInstance& Inst) { Inst.SetTestDir(DataDir); Inst.SpawnServer(Port, Args); - Inst.WaitUntilReady(); + const uint16_t InstancePort = Inst.WaitUntilReady(); + + if (Port != InstancePort) + ZEN_DEBUG("relocation detected from {} to {}", Port, InstancePort); + + Port = InstancePort; + BaseUri = fmt::format("http://localhost:{}/z$", Port); } }; - void SpawnServer(ZenServerInstance& Server, ZenConfig& Cfg) - { - Server.SetTestDir(Cfg.DataDir); - Server.SpawnServer(Cfg.Port, Cfg.Args); - Server.WaitUntilReady(); - } + void SpawnServer(ZenServerInstance& Server, ZenConfig& Cfg) { Cfg.Spawn(Server); } } // namespace utils @@ -501,18 +476,16 @@ TEST_CASE("zcache.basic") std::filesystem::path TestDir = TestEnv.CreateNewTestDir(); - const uint16_t PortNumber = 13337; - - const int kIterationCount = 100; - const auto BaseUri = fmt::format("http://localhost:{}/z$", PortNumber); + const int kIterationCount = 100; auto HashKey = [](int i) -> zen::IoHash { return zen::IoHash::HashBuffer(&i, sizeof i); }; { ZenServerInstance Instance1(TestEnv); Instance1.SetTestDir(TestDir); - Instance1.SpawnServer(PortNumber); - Instance1.WaitUntilReady(); + + const uint16_t PortNumber = Instance1.SpawnServerAndWaitUntilReady(); + const std::string BaseUri = fmt::format("http://localhost:{}/z$", PortNumber); // Populate with some simple data @@ -569,8 +542,9 @@ TEST_CASE("zcache.basic") { ZenServerInstance Instance1(TestEnv); Instance1.SetTestDir(TestDir); - Instance1.SpawnServer(PortNumber); - Instance1.WaitUntilReady(); + const uint16_t PortNumber = Instance1.SpawnServerAndWaitUntilReady(); + + const std::string BaseUri = fmt::format("http://localhost:{}/z$", PortNumber); // Retrieve data again @@ -647,14 +621,12 @@ TEST_CASE("zcache.cbpackage") SUBCASE("PUT/GET returns correct package") { - std::filesystem::path TestDir = TestEnv.CreateNewTestDir(); - const uint16_t PortNumber = 13337; - const auto BaseUri = fmt::format("http://localhost:{}/z$", PortNumber); + std::filesystem::path TestDir = TestEnv.CreateNewTestDir(); ZenServerInstance Instance1(TestEnv); Instance1.SetTestDir(TestDir); - Instance1.SpawnServer(PortNumber); - Instance1.WaitUntilReady(); + const uint16_t PortNumber = Instance1.SpawnServerAndWaitUntilReady(); + const std::string BaseUri = fmt::format("http://localhost:{}/z$", PortNumber); const std::string_view Bucket = "mosdef"sv; zen::IoHash Key; @@ -687,24 +659,21 @@ TEST_CASE("zcache.cbpackage") SUBCASE("PUT propagates upstream") { // Setup local and remote server - std::filesystem::path LocalDataDir = TestEnv.CreateNewTestDir(); - std::filesystem::path RemoteDataDir = TestEnv.CreateNewTestDir(); - const uint16_t LocalPortNumber = 13337; - const uint16_t RemotePortNumber = 13338; - - const auto LocalBaseUri = fmt::format("http://localhost:{}/z$", LocalPortNumber); - const auto RemoteBaseUri = fmt::format("http://localhost:{}/z$", RemotePortNumber); + std::filesystem::path LocalDataDir = TestEnv.CreateNewTestDir(); + std::filesystem::path RemoteDataDir = TestEnv.CreateNewTestDir(); ZenServerInstance RemoteInstance(TestEnv); RemoteInstance.SetTestDir(RemoteDataDir); - RemoteInstance.SpawnServer(RemotePortNumber); - RemoteInstance.WaitUntilReady(); + const uint16_t RemotePortNumber = RemoteInstance.SpawnServerAndWaitUntilReady(); ZenServerInstance LocalInstance(TestEnv); LocalInstance.SetTestDir(LocalDataDir); - LocalInstance.SpawnServer(LocalPortNumber, + LocalInstance.SpawnServer(TestEnv.GetNewPortNumber(), fmt::format("--upstream-thread-count=0 --upstream-zen-url=http://localhost:{}", RemotePortNumber)); - LocalInstance.WaitUntilReady(); + const uint16_t LocalPortNumber = LocalInstance.WaitUntilReady(); + + const auto LocalBaseUri = fmt::format("http://localhost:{}/z$", LocalPortNumber); + const auto RemoteBaseUri = fmt::format("http://localhost:{}/z$", RemotePortNumber); const std::string_view Bucket = "mosdef"sv; zen::IoHash Key; @@ -750,24 +719,21 @@ TEST_CASE("zcache.cbpackage") SUBCASE("GET finds upstream when missing in local") { // Setup local and remote server - std::filesystem::path LocalDataDir = TestEnv.CreateNewTestDir(); - std::filesystem::path RemoteDataDir = TestEnv.CreateNewTestDir(); - const uint16_t LocalPortNumber = 13337; - const uint16_t RemotePortNumber = 13338; - - const auto LocalBaseUri = fmt::format("http://localhost:{}/z$", LocalPortNumber); - const auto RemoteBaseUri = fmt::format("http://localhost:{}/z$", RemotePortNumber); + std::filesystem::path LocalDataDir = TestEnv.CreateNewTestDir(); + std::filesystem::path RemoteDataDir = TestEnv.CreateNewTestDir(); ZenServerInstance RemoteInstance(TestEnv); RemoteInstance.SetTestDir(RemoteDataDir); - RemoteInstance.SpawnServer(RemotePortNumber); - RemoteInstance.WaitUntilReady(); + const uint16_t RemotePortNumber = RemoteInstance.SpawnServerAndWaitUntilReady(); ZenServerInstance LocalInstance(TestEnv); LocalInstance.SetTestDir(LocalDataDir); - LocalInstance.SpawnServer(LocalPortNumber, + LocalInstance.SpawnServer(TestEnv.GetNewPortNumber(), fmt::format("--upstream-thread-count=0 --upstream-zen-url=http://localhost:{}", RemotePortNumber)); - LocalInstance.WaitUntilReady(); + const uint16_t LocalPortNumber = LocalInstance.WaitUntilReady(); + + const auto LocalBaseUri = fmt::format("http://localhost:{}/z$", LocalPortNumber); + const auto RemoteBaseUri = fmt::format("http://localhost:{}/z$", RemotePortNumber); const std::string_view Bucket = "mosdef"sv; zen::IoHash Key; @@ -843,15 +809,17 @@ TEST_CASE("zcache.policy") SUBCASE("query - 'local' does not query upstream (binary)") { - ZenConfig UpstreamCfg = ZenConfig::New(13338); + ZenConfig UpstreamCfg = ZenConfig::New(TestEnv.GetNewPortNumber()); ZenServerInstance UpstreamInst(TestEnv); - ZenConfig LocalCfg = ZenConfig::NewWithUpstream(13338); - ZenServerInstance LocalInst(TestEnv); - const auto Bucket = "legacy"sv; - UpstreamCfg.Spawn(UpstreamInst); + const uint16_t UpstreamPort = UpstreamCfg.Port; + + ZenConfig LocalCfg = ZenConfig::NewWithUpstream(TestEnv.GetNewPortNumber(), UpstreamPort); + ZenServerInstance LocalInst(TestEnv); LocalCfg.Spawn(LocalInst); + const std::string_view Bucket = "legacy"sv; + zen::IoHash Key; auto BinaryValue = GenerateData(1024, Key); @@ -878,15 +846,17 @@ TEST_CASE("zcache.policy") SUBCASE("store - 'local' does not store upstream (binary)") { - ZenConfig UpstreamCfg = ZenConfig::New(13338); + ZenConfig UpstreamCfg = ZenConfig::New(TestEnv.GetNewPortNumber()); ZenServerInstance UpstreamInst(TestEnv); - ZenConfig LocalCfg = ZenConfig::NewWithUpstream(13338); - ZenServerInstance LocalInst(TestEnv); - const auto Bucket = "legacy"sv; - UpstreamCfg.Spawn(UpstreamInst); + const uint16_t UpstreamPort = UpstreamCfg.Port; + + ZenConfig LocalCfg = ZenConfig::NewWithUpstream(TestEnv.GetNewPortNumber(), UpstreamPort); + ZenServerInstance LocalInst(TestEnv); LocalCfg.Spawn(LocalInst); + const auto Bucket = "legacy"sv; + zen::IoHash Key; auto BinaryValue = GenerateData(1024, Key); @@ -913,15 +883,16 @@ TEST_CASE("zcache.policy") SUBCASE("store - 'local/remote' stores local and upstream (binary)") { - ZenConfig UpstreamCfg = ZenConfig::New(13338); + ZenConfig UpstreamCfg = ZenConfig::New(TestEnv.GetNewPortNumber()); ZenServerInstance UpstreamInst(TestEnv); - ZenConfig LocalCfg = ZenConfig::NewWithUpstream(13338); - ZenServerInstance LocalInst(TestEnv); - const auto Bucket = "legacy"sv; - UpstreamCfg.Spawn(UpstreamInst); + + ZenConfig LocalCfg = ZenConfig::NewWithUpstream(TestEnv.GetNewPortNumber(), UpstreamCfg.Port); + ZenServerInstance LocalInst(TestEnv); LocalCfg.Spawn(LocalInst); + const auto Bucket = "legacy"sv; + zen::IoHash Key; auto BinaryValue = GenerateData(1024, Key); @@ -948,15 +919,16 @@ TEST_CASE("zcache.policy") SUBCASE("query - 'local' does not query upstream (cppackage)") { - ZenConfig UpstreamCfg = ZenConfig::New(13338); + ZenConfig UpstreamCfg = ZenConfig::New(TestEnv.GetNewPortNumber()); ZenServerInstance UpstreamInst(TestEnv); - ZenConfig LocalCfg = ZenConfig::NewWithUpstream(13338); - ZenServerInstance LocalInst(TestEnv); - const auto Bucket = "legacy"sv; - UpstreamCfg.Spawn(UpstreamInst); + + ZenConfig LocalCfg = ZenConfig::NewWithUpstream(TestEnv.GetNewPortNumber(), UpstreamCfg.Port); + ZenServerInstance LocalInst(TestEnv); LocalCfg.Spawn(LocalInst); + const auto Bucket = "legacy"sv; + zen::IoHash Key; zen::IoHash PayloadId; zen::CbPackage Package = GeneratePackage(Key, PayloadId); @@ -985,15 +957,16 @@ TEST_CASE("zcache.policy") SUBCASE("store - 'local' does not store upstream (cbpackge)") { - ZenConfig UpstreamCfg = ZenConfig::New(13338); + ZenConfig UpstreamCfg = ZenConfig::New(TestEnv.GetNewPortNumber()); ZenServerInstance UpstreamInst(TestEnv); - ZenConfig LocalCfg = ZenConfig::NewWithUpstream(13338); - ZenServerInstance LocalInst(TestEnv); - const auto Bucket = "legacy"sv; - UpstreamCfg.Spawn(UpstreamInst); + + ZenConfig LocalCfg = ZenConfig::NewWithUpstream(TestEnv.GetNewPortNumber(), UpstreamCfg.Port); + ZenServerInstance LocalInst(TestEnv); LocalCfg.Spawn(LocalInst); + const auto Bucket = "legacy"sv; + zen::IoHash Key; zen::IoHash PayloadId; zen::CbPackage Package = GeneratePackage(Key, PayloadId); @@ -1022,15 +995,16 @@ TEST_CASE("zcache.policy") SUBCASE("store - 'local/remote' stores local and upstream (cbpackage)") { - ZenConfig UpstreamCfg = ZenConfig::New(13338); + ZenConfig UpstreamCfg = ZenConfig::New(TestEnv.GetNewPortNumber()); ZenServerInstance UpstreamInst(TestEnv); - ZenConfig LocalCfg = ZenConfig::NewWithUpstream(13338); - ZenServerInstance LocalInst(TestEnv); - const auto Bucket = "legacy"sv; - UpstreamCfg.Spawn(UpstreamInst); + + ZenConfig LocalCfg = ZenConfig::NewWithUpstream(TestEnv.GetNewPortNumber(), UpstreamCfg.Port); + ZenServerInstance LocalInst(TestEnv); LocalCfg.Spawn(LocalInst); + const auto Bucket = "legacy"sv; + zen::IoHash Key; zen::IoHash PayloadId; zen::CbPackage Package = GeneratePackage(Key, PayloadId); @@ -1059,12 +1033,12 @@ TEST_CASE("zcache.policy") SUBCASE("skip - 'data' returns cache record without attachments/empty payload") { - ZenConfig Cfg = ZenConfig::New(); + ZenConfig Cfg = ZenConfig::New(TestEnv.GetNewPortNumber()); ZenServerInstance Instance(TestEnv); - const auto Bucket = "test"sv; - Cfg.Spawn(Instance); + const auto Bucket = "test"sv; + zen::IoHash Key; zen::IoHash PayloadId; zen::CbPackage Package = GeneratePackage(Key, PayloadId); @@ -1111,12 +1085,12 @@ TEST_CASE("zcache.policy") SUBCASE("skip - 'data' returns empty binary value") { - ZenConfig Cfg = ZenConfig::New(); + ZenConfig Cfg = ZenConfig::New(TestEnv.GetNewPortNumber()); ZenServerInstance Instance(TestEnv); - const auto Bucket = "test"sv; - Cfg.Spawn(Instance); + const auto Bucket = "test"sv; + zen::IoHash Key; auto BinaryValue = GenerateData(1024, Key); @@ -1245,14 +1219,13 @@ TEST_CASE("zcache.rpc") SUBCASE("get cache records") { - std::filesystem::path TestDir = TestEnv.CreateNewTestDir(); - const uint16_t PortNumber = 13337; - const auto BaseUri = fmt::format("http://localhost:{}/z$", PortNumber); + std::filesystem::path TestDir = TestEnv.CreateNewTestDir(); ZenServerInstance Inst(TestEnv); Inst.SetTestDir(TestDir); - Inst.SpawnServer(PortNumber); - Inst.WaitUntilReady(); + + const uint16_t BasePort = Inst.SpawnServerAndWaitUntilReady(); + const std::string BaseUri = fmt::format("http://localhost:{}/z$", BasePort); CachePolicy Policy = CachePolicy::Default; std::vector<zen::CacheKey> Keys = PutCacheRecords(BaseUri, "ue4.ddc"sv, "mastodon"sv, 128); @@ -1276,14 +1249,12 @@ TEST_CASE("zcache.rpc") SUBCASE("get missing cache records") { - std::filesystem::path TestDir = TestEnv.CreateNewTestDir(); - const uint16_t PortNumber = 13337; - const auto BaseUri = fmt::format("http://localhost:{}/z$", PortNumber); + std::filesystem::path TestDir = TestEnv.CreateNewTestDir(); ZenServerInstance Inst(TestEnv); Inst.SetTestDir(TestDir); - Inst.SpawnServer(PortNumber); - Inst.WaitUntilReady(); + const uint16_t BasePort = Inst.SpawnServerAndWaitUntilReady(); + const std::string BaseUri = fmt::format("http://localhost:{}/z$", BasePort); CachePolicy Policy = CachePolicy::Default; std::vector<zen::CacheKey> ExistingKeys = PutCacheRecords(BaseUri, "ue4.ddc"sv, "mastodon"sv, 128); @@ -1324,12 +1295,12 @@ TEST_CASE("zcache.rpc") { using namespace utils; - ZenConfig UpstreamCfg = ZenConfig::New(13338); + ZenConfig UpstreamCfg = ZenConfig::New(TestEnv.GetNewPortNumber()); ZenServerInstance UpstreamServer(TestEnv); - ZenConfig LocalCfg = ZenConfig::NewWithUpstream(13338); - ZenServerInstance LocalServer(TestEnv); - SpawnServer(UpstreamServer, UpstreamCfg); + + ZenConfig LocalCfg = ZenConfig::NewWithUpstream(TestEnv.GetNewPortNumber(), UpstreamCfg.Port); + ZenServerInstance LocalServer(TestEnv); SpawnServer(LocalServer, LocalCfg); std::vector<zen::CacheKey> Keys = PutCacheRecords(UpstreamCfg.BaseUri, "ue4.ddc"sv, "mastodon"sv, 4); @@ -1349,12 +1320,12 @@ TEST_CASE("zcache.rpc") { using namespace utils; - ZenConfig UpstreamCfg = ZenConfig::New(13338); + ZenConfig UpstreamCfg = ZenConfig::New(TestEnv.GetNewPortNumber()); ZenServerInstance UpstreamServer(TestEnv); - ZenConfig LocalCfg = ZenConfig::NewWithUpstream(13338); - ZenServerInstance LocalServer(TestEnv); - SpawnServer(UpstreamServer, UpstreamCfg); + + ZenConfig LocalCfg = ZenConfig::NewWithUpstream(TestEnv.GetNewPortNumber(), UpstreamCfg.Port); + ZenServerInstance LocalServer(TestEnv); SpawnServer(LocalServer, LocalCfg); std::vector<zen::CacheKey> Keys = PutCacheRecords(UpstreamCfg.BaseUri, "ue4.ddc"sv, "mastodon"sv, 4); @@ -1376,14 +1347,13 @@ TEST_CASE("zcache.rpc") { using namespace utils; - std::filesystem::path TestDir = TestEnv.CreateNewTestDir(); - const uint16_t PortNumber = 13337; - const auto BaseUri = fmt::format("http://localhost:{}/z$", PortNumber); + std::filesystem::path TestDir = TestEnv.CreateNewTestDir(); ZenServerInstance Inst(TestEnv); Inst.SetTestDir(TestDir); - Inst.SpawnServer(PortNumber); - Inst.WaitUntilReady(); + + const uint16_t BasePort = Inst.SpawnServerAndWaitUntilReady(); + const std::string BaseUri = fmt::format("http://localhost:{}/z$", BasePort); std::vector<zen::CacheKey> SmallKeys = PutCacheRecords(BaseUri, "ue4.ddc"sv, "mastodon"sv, 4, 1024); std::vector<zen::CacheKey> LargeKeys = PutCacheRecords(BaseUri, "ue4.ddc"sv, "mastodon"sv, 4, 1024 * 1024 * 16, SmallKeys.size()); @@ -1525,26 +1495,25 @@ TEST_CASE("zcache.failing.upstream") using namespace std::literals; using namespace utils; - const uint16_t Upstream1PortNumber = 13338; - ZenConfig Upstream1Cfg = ZenConfig::New(Upstream1PortNumber); + ZenConfig Upstream1Cfg = ZenConfig::New(TestEnv.GetNewPortNumber()); ZenServerInstance Upstream1Server(TestEnv); + SpawnServer(Upstream1Server, Upstream1Cfg); - const uint16_t Upstream2PortNumber = 13339; - ZenConfig Upstream2Cfg = ZenConfig::New(Upstream2PortNumber); + ZenConfig Upstream2Cfg = ZenConfig::New(TestEnv.GetNewPortNumber()); ZenServerInstance Upstream2Server(TestEnv); + SpawnServer(Upstream2Server, Upstream2Cfg); - std::vector<std::uint16_t> UpstreamPorts = {Upstream1PortNumber, Upstream2PortNumber}; - ZenConfig LocalCfg = ZenConfig::NewWithThreadedUpstreams(UpstreamPorts, false); + std::vector<std::uint16_t> UpstreamPorts = {Upstream1Cfg.Port, Upstream2Cfg.Port}; + ZenConfig LocalCfg = ZenConfig::NewWithThreadedUpstreams(TestEnv.GetNewPortNumber(), UpstreamPorts, false); LocalCfg.Args += (" --upstream-thread-count 2"); ZenServerInstance LocalServer(TestEnv); - const uint16_t LocalPortNumber = 13337; - const auto LocalUri = fmt::format("http://localhost:{}/z$", LocalPortNumber); - const auto Upstream1Uri = fmt::format("http://localhost:{}/z$", Upstream1PortNumber); - const auto Upstream2Uri = fmt::format("http://localhost:{}/z$", Upstream2PortNumber); - - SpawnServer(Upstream1Server, Upstream1Cfg); - SpawnServer(Upstream2Server, Upstream2Cfg); SpawnServer(LocalServer, LocalCfg); + + const uint16_t LocalPortNumber = LocalCfg.Port; + const auto LocalUri = fmt::format("http://localhost:{}/z$", LocalPortNumber); + const auto Upstream1Uri = fmt::format("http://localhost:{}/z$", Upstream1Cfg.Port); + const auto Upstream2Uri = fmt::format("http://localhost:{}/z$", Upstream2Cfg.Port); + bool Upstream1Running = true; bool Upstream2Running = true; @@ -1785,16 +1754,16 @@ TEST_CASE("zcache.rpc.allpolicies") using namespace std::literals; using namespace utils; - ZenConfig UpstreamCfg = ZenConfig::New(13338); + ZenConfig UpstreamCfg = ZenConfig::New(TestEnv.GetNewPortNumber()); ZenServerInstance UpstreamServer(TestEnv); - ZenConfig LocalCfg = ZenConfig::NewWithUpstream(13338); - ZenServerInstance LocalServer(TestEnv); - const uint16_t LocalPortNumber = 13337; - const auto BaseUri = fmt::format("http://localhost:{}/z$", LocalPortNumber); - SpawnServer(UpstreamServer, UpstreamCfg); + + ZenConfig LocalCfg = ZenConfig::NewWithUpstream(TestEnv.GetNewPortNumber(), UpstreamCfg.Port); + ZenServerInstance LocalServer(TestEnv); SpawnServer(LocalServer, LocalCfg); + const auto BaseUri = fmt::format("http://localhost:{}/z$", LocalServer.GetBasePort()); + std::string_view TestVersion = "F72150A02AE34B57A9EC91D36BA1CE08"sv; std::string_view TestBucket = "allpoliciestest"sv; std::string_view TestNamespace = "ue4.ddc"sv; @@ -2321,7 +2290,7 @@ public: Callback(*Instance); - Instance->SpawnServer(13337 + i, AdditionalServerArgs); + Instance->SpawnServer(TestEnv.GetNewPortNumber(), AdditionalServerArgs); } for (int i = 0; i < m_ServerCount; ++i) |