From 74eeda8aa9c67ca9820b8f7dd98bc2da3f97748a Mon Sep 17 00:00:00 2001 From: Stefan Boberg Date: Wed, 8 Sep 2021 21:38:20 +0200 Subject: Introduced dedicated HTTP testing service, used during development to exercise the server framework --- zenserver/testing/httptest.cpp | 48 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 zenserver/testing/httptest.cpp (limited to 'zenserver/testing/httptest.cpp') 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 -- cgit v1.2.3 From 822b0b1cb3868fdfc2b7159cdbf11c3df776c9dd Mon Sep 17 00:00:00 2001 From: Stefan Boberg Date: Sun, 12 Sep 2021 11:51:29 +0200 Subject: HttpResponse enum -> HttpResponseCode Also removed initial CbPackage API HttpServer changes as I have decided to take a different approach --- zenserver/testing/httptest.cpp | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) (limited to 'zenserver/testing/httptest.cpp') diff --git a/zenserver/testing/httptest.cpp b/zenserver/testing/httptest.cpp index 0639c2b53..653f76046 100644 --- a/zenserver/testing/httptest.cpp +++ b/zenserver/testing/httptest.cpp @@ -8,18 +8,16 @@ HttpTestingService::HttpTestingService() { m_Router.RegisterRoute( "hello", - [this](HttpRouterRequest& Req) { Req.ServerRequest().WriteResponse(HttpResponse::OK); }, + [this](HttpRouterRequest& Req) { Req.ServerRequest().WriteResponse(HttpResponseCode::OK); }, HttpVerb::kGet); m_Router.RegisterRoute( "echo", [this](HttpRouterRequest& Req) { IoBuffer Body = Req.ServerRequest().ReadPayload(); - Req.ServerRequest().WriteResponse(HttpResponse::OK, HttpContentType::kBinary, Body); + Req.ServerRequest().WriteResponse(HttpResponseCode::OK, HttpContentType::kBinary, Body); }, HttpVerb::kPost); - - m_Router.RegisterRoute("package", m_PackageHandler); } HttpTestingService::~HttpTestingService() @@ -38,11 +36,4 @@ 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 -- cgit v1.2.3 From 9e6ab12f40a9b626405bcdda9f51085e04064a42 Mon Sep 17 00:00:00 2001 From: Stefan Boberg Date: Mon, 13 Sep 2021 10:07:45 +0200 Subject: Package filtering related test code --- zenserver/testing/httptest.cpp | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'zenserver/testing/httptest.cpp') diff --git a/zenserver/testing/httptest.cpp b/zenserver/testing/httptest.cpp index 653f76046..d1955ca27 100644 --- a/zenserver/testing/httptest.cpp +++ b/zenserver/testing/httptest.cpp @@ -36,4 +36,46 @@ HttpTestingService::HandleRequest(HttpServerRequest& Request) m_Router.HandleRequest(Request); } +////////////////////////////////////////////////////////////////////////// + +Ref +HttpTestingService::HandlePackageRequest(HttpServerRequest& HttpServiceRequest) +{ + return new PackageHandler(HttpServiceRequest); +} + +HttpTestingService::PackageHandler::PackageHandler(const HttpServerRequest& Request) +{ + ZEN_UNUSED(Request); +} + +HttpTestingService::PackageHandler::~PackageHandler() +{ +} + +void +HttpTestingService::PackageHandler::FilterOffer(std::vector& OfferCids) +{ + ZEN_UNUSED(OfferCids); + // No-op + return; +} +void +HttpTestingService::PackageHandler::OnBeginChunks() +{ +} + +zen::IoBuffer +HttpTestingService::PackageHandler::CreateTarget(const IoHash& Cid, uint64_t StorageSize) +{ + ZEN_UNUSED(Cid, StorageSize); + + return {}; +} + +void +HttpTestingService::PackageHandler::OnEndChunks() +{ +} + } // namespace zen -- cgit v1.2.3 From 4e2649977d034b913413d2cb35d4a88afc30393f Mon Sep 17 00:00:00 2001 From: Stefan Boberg Date: Mon, 13 Sep 2021 12:24:59 +0200 Subject: Changed interface for httpServerRequest::SessionId()/RequestId() so they share storage and lazy eval logic They now call into ParseSessionId()/ParseRequestId() when required Eliminates redundant logic in derived implementations Also moved package transport code into httpshared.(cpp|h) for easier sharing with client code Added some I/O error reporting in http.sys related code Changed IHttpPackageHandler interface to support partially updated handling flow --- zenserver/testing/httptest.cpp | 38 +++++++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 11 deletions(-) (limited to 'zenserver/testing/httptest.cpp') diff --git a/zenserver/testing/httptest.cpp b/zenserver/testing/httptest.cpp index d1955ca27..2d469c936 100644 --- a/zenserver/testing/httptest.cpp +++ b/zenserver/testing/httptest.cpp @@ -36,17 +36,33 @@ HttpTestingService::HandleRequest(HttpServerRequest& Request) m_Router.HandleRequest(Request); } -////////////////////////////////////////////////////////////////////////// - Ref HttpTestingService::HandlePackageRequest(HttpServerRequest& HttpServiceRequest) { - return new PackageHandler(HttpServiceRequest); + RwLock::ExclusiveLockScope _(m_RwLock); + + const uint32_t RequestId = HttpServiceRequest.RequestId(); + + if (auto It = m_HandlerMap.find(RequestId); It != m_HandlerMap.end()) + { + Ref Handler = std::move(It->second); + + m_HandlerMap.erase(It); + + return Handler.Get(); + } + + auto InsertResult = m_HandlerMap.insert({RequestId, nullptr}); + + _.ReleaseNow(); + + return (InsertResult.first->second = new PackageHandler(*this, RequestId)).Get(); } -HttpTestingService::PackageHandler::PackageHandler(const HttpServerRequest& Request) +////////////////////////////////////////////////////////////////////////// + +HttpTestingService::PackageHandler::PackageHandler(HttpTestingService& Svc, uint32_t RequestId) : m_Svc(Svc), m_RequestId(RequestId) { - ZEN_UNUSED(Request); } HttpTestingService::PackageHandler::~PackageHandler() @@ -61,7 +77,12 @@ HttpTestingService::PackageHandler::FilterOffer(std::vector& OfferCids) return; } void -HttpTestingService::PackageHandler::OnBeginChunks() +HttpTestingService::PackageHandler::OnRequestBegin() +{ +} + +void +HttpTestingService::PackageHandler::OnRequestComplete() { } @@ -73,9 +94,4 @@ HttpTestingService::PackageHandler::CreateTarget(const IoHash& Cid, uint64_t Sto return {}; } -void -HttpTestingService::PackageHandler::OnEndChunks() -{ -} - } // namespace zen -- cgit v1.2.3 From 55d2b7526ea4b75b8b1beff6c099b304a1916c4e Mon Sep 17 00:00:00 2001 From: Stefan Boberg Date: Mon, 13 Sep 2021 21:44:38 +0200 Subject: Added client implementation of CbPackage filter/transact --- zenserver/testing/httptest.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'zenserver/testing/httptest.cpp') diff --git a/zenserver/testing/httptest.cpp b/zenserver/testing/httptest.cpp index 2d469c936..b44db2722 100644 --- a/zenserver/testing/httptest.cpp +++ b/zenserver/testing/httptest.cpp @@ -2,6 +2,8 @@ #include "httptest.h" +#include + namespace zen { HttpTestingService::HttpTestingService() @@ -18,6 +20,14 @@ HttpTestingService::HttpTestingService() Req.ServerRequest().WriteResponse(HttpResponseCode::OK, HttpContentType::kBinary, Body); }, HttpVerb::kPost); + + m_Router.RegisterRoute( + "package", + [this](HttpRouterRequest& Req) { + CbPackage Pkg = Req.ServerRequest().ReadPayloadPackage(); + Req.ServerRequest().WriteResponse(HttpResponseCode::OK, Pkg); + }, + HttpVerb::kPost); } HttpTestingService::~HttpTestingService() -- cgit v1.2.3 From f277fad0ea747807021bb92ae8fd026384901fb7 Mon Sep 17 00:00:00 2001 From: Stefan Boberg Date: Mon, 13 Sep 2021 22:25:03 +0200 Subject: Implemented intended package streaming API flow (but currently it "streams" from memory) --- zenserver/testing/httptest.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'zenserver/testing/httptest.cpp') diff --git a/zenserver/testing/httptest.cpp b/zenserver/testing/httptest.cpp index b44db2722..c4fd6003c 100644 --- a/zenserver/testing/httptest.cpp +++ b/zenserver/testing/httptest.cpp @@ -96,12 +96,11 @@ HttpTestingService::PackageHandler::OnRequestComplete() { } -zen::IoBuffer +IoBuffer HttpTestingService::PackageHandler::CreateTarget(const IoHash& Cid, uint64_t StorageSize) { - ZEN_UNUSED(Cid, StorageSize); - - return {}; + ZEN_UNUSED(Cid); + return IoBuffer{StorageSize}; } } // namespace zen -- cgit v1.2.3