Skip to content

Commit 2e4fda3

Browse files
authored
feat: introduce FlagdProvider constructor accepting FlagdConfig as parameter (#57)
Signed-off-by: odubajDT <[email protected]>
1 parent 19447b3 commit 2e4fda3

File tree

3 files changed

+73
-1
lines changed

3 files changed

+73
-1
lines changed

Diff for: src/OpenFeature.Contrib.Providers.Flagd/FlagdConfig.cs

+4-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33
namespace OpenFeature.Contrib.Providers.Flagd
44

55
{
6-
internal class FlagdConfig
6+
/// <summary>
7+
/// FlagdConfig is the configuration object for flagD.
8+
/// </summary>
9+
public class FlagdConfig
710
{
811
internal const string EnvVarHost = "FLAGD_HOST";
912
internal const string EnvVarPort = "FLAGD_PORT";

Diff for: src/OpenFeature.Contrib.Providers.Flagd/FlagdProvider.cs

+30
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,33 @@ public FlagdProvider(Uri url)
8484
_client = BuildClientForPlatform(url);
8585
}
8686

87+
/// <summary>
88+
/// Constructor of the provider.
89+
/// <param name="config">The FlagdConfig object</param>
90+
/// <exception cref="ArgumentNullException">if no config object is provided.</exception>
91+
/// </summary>
92+
public FlagdProvider(FlagdConfig config)
93+
{
94+
if (config == null)
95+
{
96+
throw new ArgumentNullException(nameof(config));
97+
}
98+
99+
_config = config;
100+
101+
_client = BuildClientForPlatform(_config.GetUri());
102+
103+
_mtx = new System.Threading.Mutex();
104+
105+
if (_config.CacheEnabled)
106+
{
107+
_cache = new LRUCache<string, object>(_config.MaxCacheSize);
108+
Task.Run(async () =>
109+
{
110+
await HandleEvents();
111+
});
112+
}
113+
}
87114

88115
// just for testing, internal but visible in tests
89116
internal FlagdProvider(Service.ServiceClient client, FlagdConfig config, ICache<string, object> cache = null)
@@ -102,6 +129,9 @@ internal FlagdProvider(Service.ServiceClient client, FlagdConfig config, ICache<
102129
}
103130
}
104131

132+
// just for testing, internal but visible in tests
133+
internal FlagdConfig GetConfig() => _config;
134+
105135
/// <summary>
106136
/// Get the provider name.
107137
/// </summary>

Diff for: test/OpenFeature.Contrib.Providers.Flagd.Test/FlagdProviderTest.cs

+39
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,45 @@ public void TestGetProviderWithDefaultConfig()
7878
Assert.NotNull(client);
7979
}
8080

81+
[Fact]
82+
public void TestGetProviderWithConfig()
83+
{
84+
// Create a config with default values set
85+
var config = new FlagdConfig();
86+
87+
// Set env variables (should be ignored by the constructor)
88+
System.Environment.SetEnvironmentVariable(FlagdConfig.EnvCertPart, "path");
89+
System.Environment.SetEnvironmentVariable(FlagdConfig.EnvVarHost, "localhost111");
90+
System.Environment.SetEnvironmentVariable(FlagdConfig.EnvVarPort, "5001");
91+
System.Environment.SetEnvironmentVariable(FlagdConfig.EnvVarTLS, "true");
92+
System.Environment.SetEnvironmentVariable(FlagdConfig.EnvVarCache, "LRU");
93+
System.Environment.SetEnvironmentVariable(FlagdConfig.EnvVarMaxCacheSize, "20");
94+
95+
// Create provider, which ignores the env vars and uses the config
96+
var flagdProvider = new FlagdProvider(config);
97+
98+
// Client should no be nil
99+
var client = flagdProvider.GetClient();
100+
Assert.NotNull(client);
101+
102+
// Retrieve config for assertions
103+
config = flagdProvider.GetConfig();
104+
105+
// Assert
106+
Assert.Equal("", config.CertificatePath);
107+
Assert.Equal(new Uri("http://localhost:8013"), config.GetUri());
108+
Assert.False(config.CacheEnabled);
109+
Assert.Equal(0, config.MaxCacheSize);
110+
111+
// Cleanup
112+
System.Environment.SetEnvironmentVariable(FlagdConfig.EnvCertPart, "");
113+
System.Environment.SetEnvironmentVariable(FlagdConfig.EnvVarHost, "");
114+
System.Environment.SetEnvironmentVariable(FlagdConfig.EnvVarPort, "");
115+
System.Environment.SetEnvironmentVariable(FlagdConfig.EnvVarTLS, "");
116+
System.Environment.SetEnvironmentVariable(FlagdConfig.EnvVarCache, "");
117+
System.Environment.SetEnvironmentVariable(FlagdConfig.EnvVarMaxCacheSize, "");
118+
}
119+
81120
[Fact]
82121
public void TestResolveBooleanValue()
83122
{

0 commit comments

Comments
 (0)