From 12c7df315c11d92a6bb8c5d2d22ebd2fb61227f4 Mon Sep 17 00:00:00 2001 From: Marcin Olko Date: Thu, 12 Mar 2026 15:31:37 +0000 Subject: [PATCH 1/4] Added missing configuration unit tests Signed-off-by: Marcin Olko --- providers/flagd/tests/BUILD | 9 ++ providers/flagd/tests/configuration_test.cpp | 96 ++++++++++++++++++++ 2 files changed, 105 insertions(+) create mode 100644 providers/flagd/tests/configuration_test.cpp diff --git a/providers/flagd/tests/BUILD b/providers/flagd/tests/BUILD index 1227f7c..caa96c1 100644 --- a/providers/flagd/tests/BUILD +++ b/providers/flagd/tests/BUILD @@ -10,3 +10,12 @@ cc_test( "@nlohmann_json//:json", ], ) + +cc_test( + name = "configuration_test", + srcs = ["configuration_test.cpp"], + deps = [ + "//providers/flagd/src:flagd_configuration", + "@googletest//:gtest_main", + ], +) diff --git a/providers/flagd/tests/configuration_test.cpp b/providers/flagd/tests/configuration_test.cpp new file mode 100644 index 0000000..fe02cfd --- /dev/null +++ b/providers/flagd/tests/configuration_test.cpp @@ -0,0 +1,96 @@ +#include "flagd/configuration.h" + +#include + +namespace flagd { + +class ConfigurationTest : public ::testing::Test { + protected: + void SetUp() override { + // Clear relevant environment variables to ensure a clean state + unsetenv("FLAGD_HOST"); + unsetenv("FLAGD_PORT"); + unsetenv("FLAGD_TARGET_URI"); + unsetenv("FLAGD_TLS"); + unsetenv("FLAGD_SOCKET_PATH"); + unsetenv("FLAGD_SERVER_CERT_PATH"); + unsetenv("FLAGD_SOURCE_SELECTOR"); + unsetenv("FLAGD_PROVIDER_ID"); + } + + void TearDown() override { + // Clean up + unsetenv("FLAGD_HOST"); + unsetenv("FLAGD_PORT"); + unsetenv("FLAGD_TARGET_URI"); + unsetenv("FLAGD_TLS"); + unsetenv("FLAGD_SOCKET_PATH"); + unsetenv("FLAGD_SERVER_CERT_PATH"); + unsetenv("FLAGD_SOURCE_SELECTOR"); + unsetenv("FLAGD_PROVIDER_ID"); + } +}; + +TEST_F(ConfigurationTest, DefaultValues) { + FlagdProviderConfig config; + EXPECT_EQ(config.GetHost(), "localhost"); + EXPECT_EQ(config.GetPort(), 8015); + EXPECT_FALSE(config.GetTls()); + EXPECT_EQ(config.GetEffectiveTargetUri(), "localhost:8015"); +} + +TEST_F(ConfigurationTest, EnvironmentVariables) { + setenv("FLAGD_HOST", "myhost", 1); + setenv("FLAGD_PORT", "9000", 1); + setenv("FLAGD_TLS", "true", 1); + setenv("FLAGD_SOURCE_SELECTOR", "my-selector", 1); + + FlagdProviderConfig config; + EXPECT_EQ(config.GetHost(), "myhost"); + EXPECT_EQ(config.GetPort(), 9000); + EXPECT_TRUE(config.GetTls()); + EXPECT_TRUE(config.GetSelector().has_value()); + EXPECT_EQ(config.GetSelector().value(), "my-selector"); + EXPECT_EQ(config.GetEffectiveTargetUri(), "myhost:9000"); +} + +TEST_F(ConfigurationTest, EffectiveTargetUriPrecedence) { + FlagdProviderConfig config; + const int port = 1234; + + config.SetHost("host").SetPort(port); + EXPECT_EQ(config.GetEffectiveTargetUri(), "host:1234"); + + config.SetSocketPath("/tmp/flagd.sock"); + EXPECT_EQ(config.GetEffectiveTargetUri(), "unix:///tmp/flagd.sock"); + + config.SetTargetUri("grpc://custom:5000"); + EXPECT_EQ(config.GetEffectiveTargetUri(), "grpc://custom:5000"); +} + +TEST_F(ConfigurationTest, GetEffectiveCredentialsInsecure) { + FlagdProviderConfig config; + config.SetTls(false); + auto creds = config.GetEffectiveCredentials(); + ASSERT_TRUE(creds.ok()); + EXPECT_NE(*creds, nullptr); +} + +TEST_F(ConfigurationTest, GetEffectiveCredentialsTlsNoCert) { + FlagdProviderConfig config; + config.SetTls(true); + auto creds = config.GetEffectiveCredentials(); + ASSERT_TRUE(creds.ok()); + EXPECT_NE(*creds, nullptr); +} + +TEST_F(ConfigurationTest, GetEffectiveCredentialsExplicit) { + FlagdProviderConfig config; + auto my_creds = grpc::InsecureChannelCredentials(); + config.SetChannelCredentials(my_creds); + auto creds = config.GetEffectiveCredentials(); + ASSERT_TRUE(creds.ok()); + EXPECT_EQ(*creds, my_creds); +} + +} // namespace flagd From 2d062d8892fb7f84c8116584261cbbfd06e5669a Mon Sep 17 00:00:00 2001 From: Marcin Olko Date: Fri, 13 Mar 2026 11:39:27 +0000 Subject: [PATCH 2/4] Removed redundancy in code Signed-off-by: Marcin Olko --- providers/flagd/tests/configuration_test.cpp | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/providers/flagd/tests/configuration_test.cpp b/providers/flagd/tests/configuration_test.cpp index fe02cfd..bef039f 100644 --- a/providers/flagd/tests/configuration_test.cpp +++ b/providers/flagd/tests/configuration_test.cpp @@ -6,20 +6,12 @@ namespace flagd { class ConfigurationTest : public ::testing::Test { protected: - void SetUp() override { - // Clear relevant environment variables to ensure a clean state - unsetenv("FLAGD_HOST"); - unsetenv("FLAGD_PORT"); - unsetenv("FLAGD_TARGET_URI"); - unsetenv("FLAGD_TLS"); - unsetenv("FLAGD_SOCKET_PATH"); - unsetenv("FLAGD_SERVER_CERT_PATH"); - unsetenv("FLAGD_SOURCE_SELECTOR"); - unsetenv("FLAGD_PROVIDER_ID"); - } + void SetUp() override { ClearFlagdEnvVars(); } + + void TearDown() override { ClearFlagdEnvVars(); } - void TearDown() override { - // Clean up + private: + void ClearFlagdEnvVars() { unsetenv("FLAGD_HOST"); unsetenv("FLAGD_PORT"); unsetenv("FLAGD_TARGET_URI"); From 796188a18dbf8e500dcfc0c850ea0bf74c8c12e9 Mon Sep 17 00:00:00 2001 From: Marcin Olko Date: Wed, 18 Mar 2026 09:45:49 +0000 Subject: [PATCH 3/4] Addressed comments Signed-off-by: Marcin Olko --- providers/flagd/tests/BUILD | 1 + providers/flagd/tests/configuration_test.cpp | 39 +++++++++++++------- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/providers/flagd/tests/BUILD b/providers/flagd/tests/BUILD index caa96c1..971b32a 100644 --- a/providers/flagd/tests/BUILD +++ b/providers/flagd/tests/BUILD @@ -16,6 +16,7 @@ cc_test( srcs = ["configuration_test.cpp"], deps = [ "//providers/flagd/src:flagd_configuration", + "@abseil-cpp//absl/strings", "@googletest//:gtest_main", ], ) diff --git a/providers/flagd/tests/configuration_test.cpp b/providers/flagd/tests/configuration_test.cpp index bef039f..4d477e9 100644 --- a/providers/flagd/tests/configuration_test.cpp +++ b/providers/flagd/tests/configuration_test.cpp @@ -2,6 +2,8 @@ #include +#include "absl/strings/str_cat.h" + namespace flagd { class ConfigurationTest : public ::testing::Test { @@ -25,39 +27,48 @@ class ConfigurationTest : public ::testing::Test { TEST_F(ConfigurationTest, DefaultValues) { FlagdProviderConfig config; - EXPECT_EQ(config.GetHost(), "localhost"); - EXPECT_EQ(config.GetPort(), 8015); + const std::string default_host = "localhost"; + const int default_port = 8015; + EXPECT_EQ(config.GetHost(), default_host); + EXPECT_EQ(config.GetPort(), default_port); EXPECT_FALSE(config.GetTls()); - EXPECT_EQ(config.GetEffectiveTargetUri(), "localhost:8015"); + EXPECT_EQ(config.GetEffectiveTargetUri(), + absl::StrCat(default_host, ":", default_port)); } TEST_F(ConfigurationTest, EnvironmentVariables) { - setenv("FLAGD_HOST", "myhost", 1); - setenv("FLAGD_PORT", "9000", 1); + const std::string host = "myhost"; + const int port = 9000; + setenv("FLAGD_HOST", host.c_str(), 1); + setenv("FLAGD_PORT", std::to_string(port).c_str(), 1); setenv("FLAGD_TLS", "true", 1); setenv("FLAGD_SOURCE_SELECTOR", "my-selector", 1); FlagdProviderConfig config; - EXPECT_EQ(config.GetHost(), "myhost"); - EXPECT_EQ(config.GetPort(), 9000); + EXPECT_EQ(config.GetHost(), host); + EXPECT_EQ(config.GetPort(), port); EXPECT_TRUE(config.GetTls()); EXPECT_TRUE(config.GetSelector().has_value()); EXPECT_EQ(config.GetSelector().value(), "my-selector"); - EXPECT_EQ(config.GetEffectiveTargetUri(), "myhost:9000"); + EXPECT_EQ(config.GetEffectiveTargetUri(), absl::StrCat(host, ":", port)); } TEST_F(ConfigurationTest, EffectiveTargetUriPrecedence) { FlagdProviderConfig config; + const std::string host = "host"; const int port = 1234; - config.SetHost("host").SetPort(port); - EXPECT_EQ(config.GetEffectiveTargetUri(), "host:1234"); + config.SetHost(host).SetPort(port); + EXPECT_EQ(config.GetEffectiveTargetUri(), absl::StrCat(host, ":", port)); - config.SetSocketPath("/tmp/flagd.sock"); - EXPECT_EQ(config.GetEffectiveTargetUri(), "unix:///tmp/flagd.sock"); + const std::string socket_path = "/tmp/flagd.sock"; + config.SetSocketPath(socket_path); + EXPECT_EQ(config.GetEffectiveTargetUri(), + absl::StrCat("unix://", socket_path)); - config.SetTargetUri("grpc://custom:5000"); - EXPECT_EQ(config.GetEffectiveTargetUri(), "grpc://custom:5000"); + const std::string target_uri = "grpc://custom:5000"; + config.SetTargetUri(target_uri); + EXPECT_EQ(config.GetEffectiveTargetUri(), target_uri); } TEST_F(ConfigurationTest, GetEffectiveCredentialsInsecure) { From cad3d1a0f20e282071d52ae242ce4ec24d08a764 Mon Sep 17 00:00:00 2001 From: Marcin Olko Date: Wed, 18 Mar 2026 09:50:15 +0000 Subject: [PATCH 4/4] Addressed comments Signed-off-by: Marcin Olko --- providers/flagd/tests/configuration_test.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/providers/flagd/tests/configuration_test.cpp b/providers/flagd/tests/configuration_test.cpp index 4d477e9..63e20df 100644 --- a/providers/flagd/tests/configuration_test.cpp +++ b/providers/flagd/tests/configuration_test.cpp @@ -74,7 +74,8 @@ TEST_F(ConfigurationTest, EffectiveTargetUriPrecedence) { TEST_F(ConfigurationTest, GetEffectiveCredentialsInsecure) { FlagdProviderConfig config; config.SetTls(false); - auto creds = config.GetEffectiveCredentials(); + absl::StatusOr> creds = + config.GetEffectiveCredentials(); ASSERT_TRUE(creds.ok()); EXPECT_NE(*creds, nullptr); } @@ -82,16 +83,19 @@ TEST_F(ConfigurationTest, GetEffectiveCredentialsInsecure) { TEST_F(ConfigurationTest, GetEffectiveCredentialsTlsNoCert) { FlagdProviderConfig config; config.SetTls(true); - auto creds = config.GetEffectiveCredentials(); + absl::StatusOr> creds = + config.GetEffectiveCredentials(); ASSERT_TRUE(creds.ok()); EXPECT_NE(*creds, nullptr); } TEST_F(ConfigurationTest, GetEffectiveCredentialsExplicit) { FlagdProviderConfig config; - auto my_creds = grpc::InsecureChannelCredentials(); + std::shared_ptr my_creds = + grpc::InsecureChannelCredentials(); config.SetChannelCredentials(my_creds); - auto creds = config.GetEffectiveCredentials(); + absl::StatusOr> creds = + config.GetEffectiveCredentials(); ASSERT_TRUE(creds.ok()); EXPECT_EQ(*creds, my_creds); }