aboutsummaryrefslogtreecommitdiff
path: root/src/zenserver-test/zenserver-test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/zenserver-test/zenserver-test.cpp')
-rw-r--r--src/zenserver-test/zenserver-test.cpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/zenserver-test/zenserver-test.cpp b/src/zenserver-test/zenserver-test.cpp
index 8d5400294..0b2bc50c0 100644
--- a/src/zenserver-test/zenserver-test.cpp
+++ b/src/zenserver-test/zenserver-test.cpp
@@ -24,6 +24,10 @@
# include <atomic>
# include <filesystem>
+ZEN_THIRD_PARTY_INCLUDES_START
+# include <asio.hpp>
+ZEN_THIRD_PARTY_INCLUDES_END
+
# if ZEN_PLATFORM_WINDOWS
# include <ppl.h>
# include <process.h>
@@ -109,6 +113,11 @@ main(int argc, char** argv)
ServerClass = argv[++i];
}
}
+ else if (std::string_view Arg(argv[i]); Arg.starts_with("--httpclient="sv))
+ {
+ std::string_view Value = Arg.substr(13);
+ zen::SetDefaultHttpClientBackend(Value);
+ }
else if (argv[i] == "--verbose"sv)
{
Verbose = true;
@@ -341,6 +350,38 @@ TEST_CASE("http.package")
CHECK_EQ(ResponsePackage, TestPackage);
}
+# if defined(ASIO_HAS_LOCAL_SOCKETS)
+TEST_CASE("http.unixsocket")
+{
+ std::filesystem::path TestDir = TestEnv.CreateNewTestDir();
+ std::filesystem::path SocketDir = TestEnv.CreateNewTestDir();
+ std::string SocketPath = (SocketDir / "zen.sock").string();
+
+ ZenServerInstance Instance(TestEnv);
+ Instance.SetDataDir(TestDir);
+ const uint16_t PortNumber = Instance.SpawnServerAndWaitUntilReady(fmt::format("--http=asio --unix-socket {}", SocketPath));
+
+ // Connect via Unix socket (BaseUri still needed for Host header)
+ HttpClientSettings Settings;
+ Settings.UnixSocketPath = SocketPath;
+ HttpClient Http{fmt::format("http://localhost:{}", PortNumber), Settings, {}};
+
+ SUBCASE("GET over unix socket")
+ {
+ HttpClient::Response Res = Http.Get("/testing/hello");
+ CHECK(Res.IsSuccess());
+ }
+
+ SUBCASE("POST echo over unix socket")
+ {
+ IoBuffer Body{IoBuffer::Wrap, "unix-test", 9};
+ HttpClient::Response Res = Http.Post("/testing/echo", Body);
+ CHECK(Res.IsSuccess());
+ CHECK(Res.ResponsePayload.GetView().EqualBytes(Body.GetView()));
+ }
+}
+# endif
+
TEST_SUITE_END();
# if 0