Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ public final class Config {
static final String RESOLVER_ENV_VAR = "FLAGD_RESOLVER";
static final String HOST_ENV_VAR_NAME = "FLAGD_HOST";
static final String PORT_ENV_VAR_NAME = "FLAGD_PORT";
static final String SYNC_PORT_ENV_VAR_NAME = "FLAGD_SYNC_PORT";
static final String TLS_ENV_VAR_NAME = "FLAGD_TLS";
static final String DEFAULT_AUTHORITY_ENV_VAR_NAME = "FLAGD_DEFAULT_AUTHORITY";
static final String SOCKET_PATH_ENV_VAR_NAME = "FLAGD_SOCKET_PATH";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -254,8 +254,14 @@ void prebuild() {
}

if (port == 0 && resolverType != Config.Resolver.FILE) {
port = Integer.parseInt(
fallBackToEnvOrDefault(Config.PORT_ENV_VAR_NAME, determineDefaultPortForResolver()));
String defaultPort = determineDefaultPortForResolver();
String fromPortEnv = fallBackToEnvOrDefault(Config.PORT_ENV_VAR_NAME, defaultPort);

String portValue = resolverType == Config.Resolver.IN_PROCESS
? fallBackToEnvOrDefault(Config.SYNC_PORT_ENV_VAR_NAME, fromPortEnv)
: fromPortEnv;

port = Integer.parseInt(portValue);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,11 @@
import static dev.openfeature.contrib.providers.flagd.Config.DEFAULT_RPC_PORT;
import static dev.openfeature.contrib.providers.flagd.Config.KEEP_ALIVE_MS_ENV_VAR_NAME;
import static dev.openfeature.contrib.providers.flagd.Config.KEEP_ALIVE_MS_ENV_VAR_NAME_OLD;
import static dev.openfeature.contrib.providers.flagd.Config.PORT_ENV_VAR_NAME;
import static dev.openfeature.contrib.providers.flagd.Config.RESOLVER_ENV_VAR;
import static dev.openfeature.contrib.providers.flagd.Config.RESOLVER_IN_PROCESS;
import static dev.openfeature.contrib.providers.flagd.Config.RESOLVER_RPC;
import static dev.openfeature.contrib.providers.flagd.Config.SYNC_PORT_ENV_VAR_NAME;
import static dev.openfeature.contrib.providers.flagd.Config.TARGET_URI_ENV_VAR_NAME;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
Expand Down Expand Up @@ -201,6 +203,37 @@ void testInProcessProviderFromEnv_portConfigured_usesConfiguredPort() {
assertThat(flagdOptions.getPort()).isEqualTo(1000);
}

@Test
@SetEnvironmentVariable(key = RESOLVER_ENV_VAR, value = RESOLVER_IN_PROCESS)
@SetEnvironmentVariable(key = SYNC_PORT_ENV_VAR_NAME, value = "9999")
void testInProcessProvider_usesSyncPortEnvVarWhenSet() {
FlagdOptions flagdOptions = FlagdOptions.builder().build();

assertThat(flagdOptions.getResolverType()).isEqualTo(Resolver.IN_PROCESS);
assertThat(flagdOptions.getPort()).isEqualTo(9999);
}

@Test
@SetEnvironmentVariable(key = RESOLVER_ENV_VAR, value = RESOLVER_IN_PROCESS)
@SetEnvironmentVariable(key = PORT_ENV_VAR_NAME, value = "8888")
void testInProcessProvider_fallsBackToFlagdPortWhenSyncPortNotSet() {
FlagdOptions flagdOptions = FlagdOptions.builder().build();

assertThat(flagdOptions.getResolverType()).isEqualTo(Resolver.IN_PROCESS);
assertThat(flagdOptions.getPort()).isEqualTo(8888);
}

@Test
@SetEnvironmentVariable(key = RESOLVER_ENV_VAR, value = RESOLVER_IN_PROCESS)
@SetEnvironmentVariable(key = PORT_ENV_VAR_NAME, value = "8888")
@SetEnvironmentVariable(key = SYNC_PORT_ENV_VAR_NAME, value = "9999")
void testInProcessProvider_syncPortTakesPrecedenceOverFlagdPort() {
FlagdOptions flagdOptions = FlagdOptions.builder().build();

assertThat(flagdOptions.getResolverType()).isEqualTo(Resolver.IN_PROCESS);
assertThat(flagdOptions.getPort()).isEqualTo(9999);
}

@Test
@SetEnvironmentVariable(key = RESOLVER_ENV_VAR, value = RESOLVER_RPC)
void testRpcProviderFromEnv_noPortConfigured_defaultsToCorrectPort() {
Expand Down