Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 13 additions & 4 deletions src/OpenFeature.Contrib.Providers.Flagd/FlagdConfig.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ public class FlagdConfig
{
internal const string EnvVarHost = "FLAGD_HOST";
internal const string EnvVarPort = "FLAGD_PORT";
internal const string EnvVarSyncPort = "FLAGD_SYNC_PORT";
internal const string EnvVarTLS = "FLAGD_TLS";
internal const string EnvCertPart = "FLAGD_SERVER_CERT_PATH";
internal const string EnvVarSocketPath = "FLAGD_SOCKET_PATH";
Expand Down Expand Up @@ -176,7 +177,7 @@ public ILogger Logger
internal bool UseCertificate => _cert.Length > 0;

private string _host;
private int _port;
private int _port = 0;
private bool _useTLS;
private string _cert;
private string _socketPath;
Expand All @@ -190,7 +191,6 @@ public ILogger Logger
internal FlagdConfig()
{
_host = string.IsNullOrWhiteSpace(Environment.GetEnvironmentVariable(EnvVarHost)) ? "localhost" : Environment.GetEnvironmentVariable(EnvVarHost);
_port = int.TryParse(Environment.GetEnvironmentVariable(EnvVarPort), out var port) ? port : 0;
_useTLS = bool.TryParse(Environment.GetEnvironmentVariable(EnvVarTLS), out var useTLS) ? useTLS : false;
_cert = Environment.GetEnvironmentVariable(EnvCertPart) ?? "";
_socketPath = Environment.GetEnvironmentVariable(EnvVarSocketPath) ?? "";
Expand Down Expand Up @@ -353,14 +353,23 @@ private void PreBuild()
{
if (this._config.Port == 0)
{
var defaultPortForResolver = this._config.ResolverType switch
var defaultPort = this._config.ResolverType switch
{
ResolverType.RPC => 8013,
ResolverType.IN_PROCESS => 8015,
_ => throw new NotImplementedException("ResolverType does not use Ports.")
};

this._config.Port = defaultPortForResolver;
var fromPortEnv = TryGetEnvironmentVariableOrDefault(FlagdConfig.EnvVarPort, defaultPort);

this._config.Port = this._config.ResolverType == ResolverType.IN_PROCESS ?
TryGetEnvironmentVariableOrDefault(FlagdConfig.EnvVarSyncPort, fromPortEnv) :
fromPortEnv;
}
}

private static int TryGetEnvironmentVariableOrDefault(string enviromentVariable, int defaultPort)
{
return int.TryParse(Environment.GetEnvironmentVariable(enviromentVariable), out var p) ? p : defaultPort;
}
Comment thread
kylejuliandev marked this conversation as resolved.
Outdated
}
2 changes: 1 addition & 1 deletion src/OpenFeature.Contrib.Providers.Flagd/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ The URI of the flagd server to which the `flagd Provider` connects to can either
| Option name | Environment variable name | Type | Default | Values |
| ---------------------------- | ------------------------------ | ------- | --------- | --------------- |
| host | FLAGD_HOST | string | localhost | |
| port | FLAGD_PORT | number | 8013 | |
| port | FLAGD_PORT (FLAGD_SYNC_PORT when resolver is in-process) | number | 8013 (8015 when resolver in in-process) | |
Comment thread
kylejuliandev marked this conversation as resolved.
Outdated
| tls | FLAGD_TLS | boolean | false | |
| tls certPath | FLAGD_SERVER_CERT_PATH | string | | |
| unix socket path | FLAGD_SOCKET_PATH | string | | |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ public class ConfigSteps
"FLAGD_RESOLVER",
"FLAGD_HOST",
"FLAGD_PORT",
"FLAGD_SYNC_PORT",
"FLAGD_TARGET_URI",
"FLAGD_TLS",
"FLAGD_SOCKET_PATH",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ public void BeforeScenario(ScenarioInfo scenarioInfo, FeatureInfo featureInfo)
var scenarioTags = scenarioInfo.Tags;
var featureTags = featureInfo.Tags;
var tags = new HashSet<string>(scenarioTags.Concat(featureTags));
Skip.If(tags.Contains("sync-port"), "Skipping sync-port as it is not supported.");
Skip.If(!tags.Contains("in-process"), "Skipping scenario because it does not have required tag.");
Skip.If(tags.Contains("fractional-v1"), "Skipping legacy fractional bucketing test; v2 algorithm is implemented.");
Skip.If(tags.Contains("operator-errors"), "Skipping operator-errors test; flagd server does not yet fall back to default on operator errors.");
Expand Down
71 changes: 71 additions & 0 deletions test/OpenFeature.Contrib.Providers.Flagd.Test/FlagdConfigTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -221,4 +221,75 @@ public void TestFlagdConfigBuilder()
Assert.True(config.UseCertificate);
Assert.Equal(logger, config.Logger);
}

[Fact]
public void SyncPortOverridesPort()
{
// Arrange
Environment.SetEnvironmentVariable(FlagdConfig.EnvVarPort, "5001");
Environment.SetEnvironmentVariable(FlagdConfig.EnvVarSyncPort, "5002");

// Act & Assert
try
{
var config = new FlagdConfigBuilder()
.WithResolverType(ResolverType.IN_PROCESS)
.Build();

Assert.Equal(5002, config.Port);
}
finally
{
// Cleanup
Environment.SetEnvironmentVariable(FlagdConfig.EnvVarPort, "");
Environment.SetEnvironmentVariable(FlagdConfig.EnvVarSyncPort, "");
}
}

[Fact]
public void FallsBackToLegacyPort()
{
// Arrange
Environment.SetEnvironmentVariable(FlagdConfig.EnvVarPort, "5001");
Environment.SetEnvironmentVariable(FlagdConfig.EnvVarSyncPort, "");

// Act & Assert
try
{
var config = new FlagdConfigBuilder()
.WithResolverType(ResolverType.IN_PROCESS)
.Build();

Assert.Equal(5001, config.Port);
}
finally
{
// Cleanup
Environment.SetEnvironmentVariable(FlagdConfig.EnvVarPort, "");
}
}

[Fact]
public void DoesNotUseSyncPortForRpcResolver()
{
// Arrange
Environment.SetEnvironmentVariable(FlagdConfig.EnvVarPort, "5001");
Environment.SetEnvironmentVariable(FlagdConfig.EnvVarSyncPort, "5002");

// Act & Assert
try
{
var config = new FlagdConfigBuilder()
.WithResolverType(ResolverType.RPC)
.Build();

Assert.Equal(5001, config.Port);
}
finally
{
// Cleanup
Environment.SetEnvironmentVariable(FlagdConfig.EnvVarPort, "");
Environment.SetEnvironmentVariable(FlagdConfig.EnvVarSyncPort, "");
}
}
}
Loading