aboutsummaryrefslogtreecommitdiff
path: root/zenserver-test/zenserver-test.cpp
diff options
context:
space:
mode:
authorPer Larsson <[email protected]>2021-09-20 08:54:34 +0200
committerPer Larsson <[email protected]>2021-09-20 08:54:34 +0200
commite25b4b20d8a5696aa7055c9c167fa47b3739bc7e (patch)
tree049654b87096a22e1bf696a385db608a75f229fa /zenserver-test/zenserver-test.cpp
parentProbe upstream Zen server when initializing upstream cache. (diff)
parentFixed unused variable warnings exposed by xmake build (unclear why I do not r... (diff)
downloadzen-e25b4b20d8a5696aa7055c9c167fa47b3739bc7e.tar.xz
zen-e25b4b20d8a5696aa7055c9c167fa47b3739bc7e.zip
Merge branch 'main' of https://github.com/EpicGames/zen
Diffstat (limited to 'zenserver-test/zenserver-test.cpp')
-rw-r--r--zenserver-test/zenserver-test.cpp52
1 files changed, 27 insertions, 25 deletions
diff --git a/zenserver-test/zenserver-test.cpp b/zenserver-test/zenserver-test.cpp
index 7629e2ea1..a556d896e 100644
--- a/zenserver-test/zenserver-test.cpp
+++ b/zenserver-test/zenserver-test.cpp
@@ -12,6 +12,7 @@
#include <zencore/iohash.h>
#include <zencore/logging.h>
#include <zencore/memory.h>
+#include <zencore/refcount.h>
#include <zencore/stream.h>
#include <zencore/string.h>
#include <zencore/thread.h>
@@ -37,6 +38,7 @@
#include <map>
#include <random>
#include <span>
+#include <unordered_map>
#include <atlbase.h>
#include <process.h>
@@ -80,7 +82,7 @@ class HttpClientConnection
static HttpClientConnection* This(http_parser* Parser) { return (HttpClientConnection*)Parser->data; };
public:
- HttpClientConnection(asio::io_context& IoContext, HttpConnectionPool& Pool, asio::ip::tcp::socket&& InSocket)
+ HttpClientConnection(asio::io_context& IoContext, zen::Ref<HttpConnectionPool> Pool, asio::ip::tcp::socket&& InSocket)
: m_IoContext(IoContext)
, m_Pool(Pool)
, m_Resolver(IoContext)
@@ -89,8 +91,8 @@ public:
}
~HttpClientConnection() {}
- HttpConnectionPool& ConnectionPool() { return m_Pool; }
- void SetKeepAlive(bool NewState) { m_KeepAlive = NewState; }
+ zen::Ref<HttpConnectionPool> ConnectionPool() { return m_Pool; }
+ void SetKeepAlive(bool NewState) { m_KeepAlive = NewState; }
void Get(const std::string_view Server, int Port, const std::string_view Path)
{
@@ -227,16 +229,16 @@ private:
}
private:
- asio::io_context& m_IoContext;
- HttpConnectionPool& m_Pool;
- asio::ip::tcp::resolver m_Resolver;
- asio::ip::tcp::socket m_Socket;
- std::string m_Uri;
- std::string m_RequestBody; // Initial request data
- http_parser m_HttpParser{};
- http_parser_settings m_HttpParserSettings{};
- uint8_t m_ResponseIoBuffer[4096];
- asio::mutable_buffer m_ResponseBuffer{m_ResponseIoBuffer, sizeof m_ResponseIoBuffer};
+ asio::io_context& m_IoContext;
+ zen::Ref<HttpConnectionPool> m_Pool;
+ asio::ip::tcp::resolver m_Resolver;
+ asio::ip::tcp::socket m_Socket;
+ std::string m_Uri;
+ std::string m_RequestBody; // Initial request data
+ http_parser m_HttpParser{};
+ http_parser_settings m_HttpParserSettings{};
+ uint8_t m_ResponseIoBuffer[4096];
+ asio::mutable_buffer m_ResponseBuffer{m_ResponseIoBuffer, sizeof m_ResponseIoBuffer};
enum class RequestState
{
@@ -259,7 +261,7 @@ private:
//////////////////////////////////////////////////////////////////////////
-class HttpConnectionPool
+class HttpConnectionPool : public zen::RefCounted
{
public:
HttpConnectionPool(asio::io_context& Context, std::string_view HostName, uint16_t Port);
@@ -322,7 +324,7 @@ HttpConnectionPool::GetConnection()
return nullptr;
}
- return std::make_unique<HttpClientConnection>(m_Context, *this, std::move(Socket));
+ return std::make_unique<HttpClientConnection>(m_Context, this, std::move(Socket));
}
std::unique_ptr<HttpClientConnection> Connection{m_AvailableConnections.back()};
@@ -347,15 +349,15 @@ public:
std::unique_ptr<HttpClientConnection> GetConnection(std::string_view HostName, uint16_t Port)
{
- return ConnectionPool(HostName, Port).GetConnection();
+ return ConnectionPool(HostName, Port)->GetConnection();
}
void ReturnConnection(std::unique_ptr<HttpClientConnection> Connection)
{
- Connection->ConnectionPool().ReturnConnection(std::move(Connection));
+ Connection->ConnectionPool()->ReturnConnection(std::move(Connection));
}
- HttpConnectionPool& ConnectionPool(std::string_view HostName, uint16_t Port)
+ zen::Ref<HttpConnectionPool> ConnectionPool(std::string_view HostName, uint16_t Port)
{
zen::RwLock::ExclusiveLockScope _(m_Lock);
ConnectionId ConnId{std::string(HostName), Port};
@@ -364,7 +366,7 @@ public:
{
// Not found - create new entry
- auto In = m_ConnectionPools.insert({ConnId, std::move(HttpConnectionPool(m_Context, HostName, Port))});
+ auto In = m_ConnectionPools.emplace(ConnId, new HttpConnectionPool(m_Context, HostName, Port));
return In.first->second;
}
@@ -393,8 +395,8 @@ private:
uint16_t Port;
};
- zen::RwLock m_Lock;
- std::map<ConnectionId, HttpConnectionPool> m_ConnectionPools;
+ zen::RwLock m_Lock;
+ std::map<ConnectionId, zen::Ref<HttpConnectionPool>> m_ConnectionPools;
};
//////////////////////////////////////////////////////////////////////////
@@ -670,7 +672,7 @@ main(int argc, char** argv)
zen::logging::InitializeLogging();
spdlog::set_level(spdlog::level::debug);
- spdlog::set_formatter(std::make_unique< ::logging::full_formatter>("test", std::chrono::system_clock::now()));
+ spdlog::set_formatter(std::make_unique<::logging::full_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";
@@ -1919,9 +1921,9 @@ public:
ZenServerInstance& GetInstance(int Index) { return *m_Instances[Index]; }
private:
- std::string m_HelperId;
- int m_ServerCount = 0;
- std::vector<std::unique_ptr<ZenServerInstance> > m_Instances;
+ std::string m_HelperId;
+ int m_ServerCount = 0;
+ std::vector<std::unique_ptr<ZenServerInstance>> m_Instances;
};
TEST_CASE("http.basics")