aboutsummaryrefslogtreecommitdiff
path: root/src/zenserver-test/hub-tests.cpp
diff options
context:
space:
mode:
authorZousar Shaker <[email protected]>2026-03-20 05:45:44 -0600
committerGitHub Enterprise <[email protected]>2026-03-20 12:45:44 +0100
commitd44a692aaeb6f78e8cf7520236b21977333fa3c3 (patch)
treeb8ae4ae8b2e6b51ae6fee2123424e2abd7cebb74 /src/zenserver-test/hub-tests.cpp
parentZen disk benchmark utility (#868) (diff)
downloadzen-d44a692aaeb6f78e8cf7520236b21977333fa3c3.tar.xz
zen-d44a692aaeb6f78e8cf7520236b21977333fa3c3.zip
Zs/consul token (#870)
- Feature: Added support for consul token passed via environment variable, and specified a default env var name of CONSUL_HTTP_TOKEN for it in hub mode
Diffstat (limited to 'src/zenserver-test/hub-tests.cpp')
-rw-r--r--src/zenserver-test/hub-tests.cpp56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/zenserver-test/hub-tests.cpp b/src/zenserver-test/hub-tests.cpp
index 958a0b050..29c3b76ba 100644
--- a/src/zenserver-test/hub-tests.cpp
+++ b/src/zenserver-test/hub-tests.cpp
@@ -21,6 +21,11 @@
# include <zenutil/consul.h>
# include <zencore/thread.h>
# include <zencore/timer.h>
+# if ZEN_PLATFORM_WINDOWS
+# include <zencore/windows.h>
+# else
+# include <cstdlib>
+# endif
namespace zen::tests::hub {
@@ -290,6 +295,57 @@ TEST_CASE("hub.consul.hub.registration")
ConsulProc.StopConsulAgent();
}
+TEST_CASE("hub.consul.hub.registration.token")
+{
+ // Set an env var that the server will read its Consul token from.
+ // Children inherit parent environment, so the spawned server will see it.
+ constexpr const char* TokenEnvVarName = "ZEN_TEST_CONSUL_TOKEN";
+ constexpr const char* TokenValue = "test-token-value";
+# if ZEN_PLATFORM_WINDOWS
+ char PrevBuf[1024] = {};
+ DWORD PrevLen = GetEnvironmentVariableA(TokenEnvVarName, PrevBuf, sizeof(PrevBuf));
+ REQUIRE(PrevLen < sizeof(PrevBuf));
+ SetEnvironmentVariableA(TokenEnvVarName, TokenValue);
+ auto EnvCleanup = MakeGuard([PrevEnvValue = std::string(PrevBuf, PrevLen), HadPrevToken = PrevLen > 0] {
+ SetEnvironmentVariableA(TokenEnvVarName, HadPrevToken ? PrevEnvValue.c_str() : nullptr);
+ });
+# else
+ const char* PrevEnvPtr = getenv(TokenEnvVarName);
+ setenv(TokenEnvVarName, TokenValue, /*overwrite=*/1);
+ auto EnvCleanup = MakeGuard([PrevEnvValue = std::string(PrevEnvPtr ? PrevEnvPtr : ""), HadPrevToken = PrevEnvPtr != nullptr] {
+ if (HadPrevToken)
+ {
+ setenv(TokenEnvVarName, PrevEnvValue.c_str(), /*overwrite=*/1);
+ }
+ else
+ {
+ unsetenv(TokenEnvVarName);
+ }
+ });
+# endif
+
+ consul::ConsulProcess ConsulProc;
+ ConsulProc.SpawnConsulAgent();
+
+ ZenServerInstance Instance(TestEnv, ZenServerInstance::ServerMode::kHubServer);
+ const uint16_t PortNumber = Instance.SpawnServerAndWaitUntilReady(
+ "--consul-endpoint=http://localhost:8500/ --instance-id=test-instance "
+ "--consul-token-env=ZEN_TEST_CONSUL_TOKEN");
+ REQUIRE(PortNumber != 0);
+
+ // Use a plain client — dev-mode Consul doesn't enforce ACLs, but the
+ // server has exercised the ConsulTokenEnv -> GetEnvVariable -> ConsulClient path.
+ consul::ConsulClient Client("http://localhost:8500/");
+
+ REQUIRE(WaitForConsulService(Client, "zen-hub-test-instance", true, 5000));
+
+ Instance.Shutdown();
+
+ CHECK(!Client.HasService("zen-hub-test-instance"));
+
+ ConsulProc.StopConsulAgent();
+}
+
TEST_CASE("hub.consul.provision.registration")
{
consul::ConsulProcess ConsulProc;