Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
Original file line number Diff line number Diff line change
Expand Up @@ -252,7 +252,7 @@ private <ValT, ReqT extends Message, ResT extends Message> ProviderEvaluation<Va
final String variant = getField(response, Config.VARIANT_FIELD);

final ProviderEvaluation.ProviderEvaluationBuilder<ValT> resultBuilder;
if ("DEFAULT".equals(reason) && variant.isEmpty()) {
if (variant.isEmpty() && ("DEFAULT".equals(reason) || "DISABLED".equals(reason))) {
resultBuilder = ProviderEvaluation.<ValT>builder().value(defaultValue);
} else {
resultBuilder = ProviderEvaluation.<ValT>builder().value(value).variant(variant);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -312,7 +312,17 @@ public void disabledFlag() throws Exception {
// when/then
ProviderEvaluation<Boolean> disabledFlag =
inProcessResolver.booleanEvaluation("disabledFlag", false, new ImmutableContext());
assertEquals(ErrorCode.FLAG_NOT_FOUND, disabledFlag.getErrorCode());
assertEquals(null, disabledFlag.getErrorCode());
assertEquals(false, disabledFlag.getValue());
assertEquals(null, disabledFlag.getVariant());
assertEquals(Reason.DISABLED.toString(), disabledFlag.getReason());
Comment thread
jonathannorris marked this conversation as resolved.
Comment thread
jonathannorris marked this conversation as resolved.

ProviderEvaluation<Value> disabledObject =
inProcessResolver.objectEvaluation("disabledFlag", null, new ImmutableContext());
assertEquals(null, disabledObject.getErrorCode());
assertEquals(null, disabledObject.getValue());
assertEquals(null, disabledObject.getVariant());
assertEquals(Reason.DISABLED.toString(), disabledObject.getReason());
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ public ProviderEvaluation<Double> resolveDoubleValue(String flagKey, Double defa
public ProviderEvaluation<Value> resolveObjectValue(String flagKey, Value defaultValue, EvaluationContext ctx) {
final ProviderEvaluation<Object> evaluation = resolve(Object.class, flagKey, defaultValue, ctx);
return ProviderEvaluation.<Value>builder()
.value(Value.objectToValue(evaluation.getValue()))
.value(evaluation.getValue() != null ? Value.objectToValue(evaluation.getValue()) : null)
.variant(evaluation.getVariant())
.reason(evaluation.getReason())
.errorCode(evaluation.getErrorCode())
Expand All @@ -101,8 +101,8 @@ private <T> ProviderEvaluation<T> resolve(Class<T> type, String key, T defaultVa
// state check
if ("DISABLED".equals(flag.getState())) {
return ProviderEvaluation.<T>builder()
.errorMessage("flag: " + key + " is disabled")
.errorCode(ErrorCode.FLAG_NOT_FOUND)
.value(defaultValue)
.reason(Reason.DISABLED.toString())
.flagMetadata(getFlagMetadata(flagSetMetadata, flag))
.build();
Comment thread
jonathannorris marked this conversation as resolved.
}
Comment thread
jonathannorris marked this conversation as resolved.
Expand Down
2 changes: 1 addition & 1 deletion providers/flagd/test-harness
2 changes: 1 addition & 1 deletion tools/flagd-api-testkit/test-harness
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ public ProviderEvaluation<Value> resolveObjectValue(String flagKey, Value defaul
final ProviderEvaluation<Object> evaluation = resolve(Object.class, flagKey, defaultValue, ctx);

return ProviderEvaluation.<Value>builder()
.value(Value.objectToValue(evaluation.getValue()))
.value(evaluation.getValue() != null ? Value.objectToValue(evaluation.getValue()) : null)
.variant(evaluation.getVariant())
.reason(evaluation.getReason())
.errorCode(evaluation.getErrorCode())
Expand Down Expand Up @@ -210,12 +210,12 @@ private <T> ProviderEvaluation<T> resolve(Class<T> type, String key, T defaultVa
.build();
}

// state check
// state check (DISABLED flags default with reason = DEFAULT)
if ("DISABLED".equals(flag.getState())) {
return ProviderEvaluation.<T>builder()
.errorMessage("flag: " + key + " is disabled")
.errorCode(ErrorCode.FLAG_NOT_FOUND)
.flagMetadata(getFlagMetadata(currentFlagSetMetadata, null))
.value(defaultValue)
.reason(Reason.DISABLED.toString())
.flagMetadata(getFlagMetadata(currentFlagSetMetadata, flag))
.build();
}
Comment thread
jonathannorris marked this conversation as resolved.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import dev.openfeature.sdk.ImmutableContext;
import dev.openfeature.sdk.ProviderEvaluation;
import dev.openfeature.sdk.Reason;
import dev.openfeature.sdk.Value;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
Expand Down Expand Up @@ -79,12 +80,24 @@ void resolveBooleanValue_flagNotFound_returnsError() {
}

@Test
void resolveBooleanValue_disabledFlag_returnsError() {
void resolveBooleanValue_disabledFlag_returnsDisabledReasonWithDefault() {
ProviderEvaluation<Boolean> result =
flagdCore.resolveBooleanValue("disabledFlag", false, new ImmutableContext());

assertThat(result.getErrorCode()).isNotNull();
assertThat(result.getErrorMessage()).contains("disabled");
assertThat(result.getErrorCode()).isNull();
assertThat(result.getValue()).isFalse();
assertThat(result.getVariant()).isNull();
assertThat(result.getReason()).isEqualTo(Reason.DISABLED.toString());
Comment thread
jonathannorris marked this conversation as resolved.
}
Comment thread
jonathannorris marked this conversation as resolved.

@Test
void resolveObjectValue_disabledFlag_returnsDisabledReasonWithDefault() {
ProviderEvaluation<Value> result = flagdCore.resolveObjectValue("disabledFlag", null, new ImmutableContext());

assertThat(result.getErrorCode()).isNull();
assertThat(result.getValue()).isNull();
assertThat(result.getVariant()).isNull();
assertThat(result.getReason()).isEqualTo(Reason.DISABLED.toString());
}

@Test
Expand Down
Loading