aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2021-09-08 21:38:20 +0200
committerStefan Boberg <[email protected]>2021-09-08 21:38:20 +0200
commit74eeda8aa9c67ca9820b8f7dd98bc2da3f97748a (patch)
treed3b55f48abd50665eb4ec7f5022885061b2f604a
parentLog spawned process name (diff)
downloadzen-74eeda8aa9c67ca9820b8f7dd98bc2da3f97748a.tar.xz
zen-74eeda8aa9c67ca9820b8f7dd98bc2da3f97748a.zip
Introduced dedicated HTTP testing service, used during development to exercise the server framework
-rw-r--r--zenserver/testing/httptest.cpp48
-rw-r--r--zenserver/testing/httptest.h34
-rw-r--r--zenserver/zenserver.cpp16
-rw-r--r--zenserver/zenserver.vcxproj2
-rw-r--r--zenserver/zenserver.vcxproj.filters2
5 files changed, 100 insertions, 2 deletions
diff --git a/zenserver/testing/httptest.cpp b/zenserver/testing/httptest.cpp
new file mode 100644
index 000000000..0639c2b53
--- /dev/null
+++ b/zenserver/testing/httptest.cpp
@@ -0,0 +1,48 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+
+#include "httptest.h"
+
+namespace zen {
+
+HttpTestingService::HttpTestingService()
+{
+ m_Router.RegisterRoute(
+ "hello",
+ [this](HttpRouterRequest& Req) { Req.ServerRequest().WriteResponse(HttpResponse::OK); },
+ HttpVerb::kGet);
+
+ m_Router.RegisterRoute(
+ "echo",
+ [this](HttpRouterRequest& Req) {
+ IoBuffer Body = Req.ServerRequest().ReadPayload();
+ Req.ServerRequest().WriteResponse(HttpResponse::OK, HttpContentType::kBinary, Body);
+ },
+ HttpVerb::kPost);
+
+ m_Router.RegisterRoute("package", m_PackageHandler);
+}
+
+HttpTestingService::~HttpTestingService()
+{
+}
+
+const char*
+HttpTestingService::BaseUri() const
+{
+ return "/testing/";
+}
+
+void
+HttpTestingService::HandleRequest(HttpServerRequest& Request)
+{
+ m_Router.HandleRequest(Request);
+}
+
+void
+HttpTestingService::PackageHandler::HandleRequest(HttpRouterRequest& Req)
+{
+ IoBuffer Body = Req.ServerRequest().ReadPayload();
+ Req.ServerRequest().WriteResponse(HttpResponse::OK, HttpContentType::kBinary, Body);
+}
+
+} // namespace zen
diff --git a/zenserver/testing/httptest.h b/zenserver/testing/httptest.h
new file mode 100644
index 000000000..236d17ce7
--- /dev/null
+++ b/zenserver/testing/httptest.h
@@ -0,0 +1,34 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+
+#pragma once
+
+#include <zencore/httpserver.h>
+
+#include <spdlog/spdlog.h>
+
+namespace zen {
+
+/**
+ * Test service to facilitate testing the HTTP framework and client interactions
+ */
+class HttpTestingService : public HttpService
+{
+public:
+ HttpTestingService();
+ ~HttpTestingService();
+
+ virtual const char* BaseUri() const override;
+ virtual void HandleRequest(HttpServerRequest& Request) override;
+
+private:
+ HttpRequestRouter m_Router;
+
+ struct PackageHandler : public PackageEndpointHandler
+ {
+ virtual void HandleRequest(HttpRouterRequest& Request) override;
+ };
+
+ PackageHandler m_PackageHandler;
+};
+
+} // namespace zen
diff --git a/zenserver/zenserver.cpp b/zenserver/zenserver.cpp
index c857d4c71..57e691ea1 100644
--- a/zenserver/zenserver.cpp
+++ b/zenserver/zenserver.cpp
@@ -72,6 +72,7 @@
#include "diag/diagsvcs.h"
#include "experimental/usnjournal.h"
#include "projectstore.h"
+#include "testing/httptest.h"
#include "testing/launch.h"
#include "upstream/jupiter.h"
#include "upstream/upstreamcache.h"
@@ -205,7 +206,7 @@ public:
else
{
UpstreamCache.reset();
- spdlog::info("upstream cache NOT active");
+ spdlog::info("NOT using upstream cache");
}
}
@@ -221,10 +222,20 @@ public:
{
StartMesh(BasePort);
}
+ else
+ {
+ spdlog::info("NOT starting mesh");
+ }
m_Http.Initialize(BasePort);
m_Http.AddEndpoint(m_HealthService);
- m_Http.AddEndpoint(m_TestService);
+
+ if (m_TestMode)
+ {
+ m_Http.AddEndpoint(m_TestService);
+ m_Http.AddEndpoint(m_TestingService);
+ }
+
m_Http.AddEndpoint(m_AdminService);
if (m_HttpProjectService)
@@ -365,6 +376,7 @@ private:
zen::CasGc m_Gc{*m_CasStore};
zen::CasScrubber m_Scrubber{*m_CasStore};
HttpTestService m_TestService;
+ zen::HttpTestingService m_TestingService;
zen::HttpCasService m_CasService{*m_CasStore};
zen::RefPtr<zen::ProjectStore> m_ProjectStore;
zen::Ref<zen::LocalProjectService> m_LocalProjectService;
diff --git a/zenserver/zenserver.vcxproj b/zenserver/zenserver.vcxproj
index e4b40e13e..3c907e2fb 100644
--- a/zenserver/zenserver.vcxproj
+++ b/zenserver/zenserver.vcxproj
@@ -110,6 +110,7 @@
<ClInclude Include="config.h" />
<ClInclude Include="diag\logging.h" />
<ClInclude Include="sos\sos.h" />
+ <ClInclude Include="testing\httptest.h" />
<ClInclude Include="upstream\jupiter.h" />
<ClInclude Include="projectstore.h" />
<ClInclude Include="cache\cacheagent.h" />
@@ -132,6 +133,7 @@
<ClCompile Include="projectstore.cpp" />
<ClCompile Include="cache\cacheagent.cpp" />
<ClCompile Include="sos\sos.cpp" />
+ <ClCompile Include="testing\httptest.cpp" />
<ClCompile Include="upstream\jupiter.cpp" />
<ClCompile Include="testing\launch.cpp" />
<ClCompile Include="cache\cachestore.cpp" />
diff --git a/zenserver/zenserver.vcxproj.filters b/zenserver/zenserver.vcxproj.filters
index ca16caf77..3a17cbb07 100644
--- a/zenserver/zenserver.vcxproj.filters
+++ b/zenserver/zenserver.vcxproj.filters
@@ -38,6 +38,7 @@
<ClInclude Include="upstream\upstreamcache.h">
<Filter>upstream</Filter>
</ClInclude>
+ <ClInclude Include="testing\httptest.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="zenserver.cpp" />
@@ -71,6 +72,7 @@
<ClCompile Include="upstream\upstreamcache.cpp">
<Filter>upstream</Filter>
</ClCompile>
+ <ClCompile Include="testing\httptest.cpp" />
</ItemGroup>
<ItemGroup>
<Filter Include="cache">