Skip to content
Draft
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
3 changes: 1 addition & 2 deletions spotbugs-exclusions.xml
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@

<!-- Test class that should be excluded -->
<Match>
<Class name="dev.openfeature.sdk.DoSomethingProvider"/>
</Match>
<!-- All bugs in test classes, except for JUnit-specific bugs -->
<Match>
Expand All @@ -58,4 +57,4 @@
<Bug code="IJU" />
</Not>
</Match>
</FindBugsFilter>
</FindBugsFilter>
2 changes: 2 additions & 0 deletions src/main/java/dev/openfeature/sdk/ImmutableMetadata.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
@Slf4j
@EqualsAndHashCode
public class ImmutableMetadata {
public static final ImmutableMetadata EMPTY = new ImmutableMetadata(Collections.emptyMap());

private final Map<String, Object> metadata;

private ImmutableMetadata(Map<String, Object> metadata) {
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import static org.junit.jupiter.api.Assertions.*;

import dev.openfeature.sdk.testutils.testProvider.TestProvider;
import org.junit.jupiter.api.Test;

class ClientProviderMappingTest {
Expand All @@ -10,13 +11,19 @@ class ClientProviderMappingTest {
void clientProviderTest() {
OpenFeatureAPI api = new OpenFeatureAPI();

api.setProviderAndWait("client1", new DoSomethingProvider());
api.setProviderAndWait("client2", new NoOpProvider());
var provider1 = TestProvider.builder().isReady();
var provider2 = TestProvider.builder().isReady();

api.setProviderAndWait("client1", provider1);
api.setProviderAndWait("client2", provider2);

Client c1 = api.getClient("client1");
Client c2 = api.getClient("client2");

assertTrue(c1.getBooleanValue("test", false));
assertFalse(c2.getBooleanValue("test", false));
c1.getBooleanValue("test", false);
c2.getBooleanValue("test", false);

assertEquals(1, provider1.getFlagEvaluations().size());
assertEquals(1, provider2.getFlagEvaluations().size());
}
}
36 changes: 19 additions & 17 deletions src/test/java/dev/openfeature/sdk/DeveloperExperienceTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import static org.mockito.Mockito.verify;

import dev.openfeature.sdk.fixtures.HookFixtures;
import dev.openfeature.sdk.testutils.TestEventsProvider;
import dev.openfeature.sdk.testutils.testProvider.TestProvider;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
Expand All @@ -23,13 +23,13 @@ class DeveloperExperienceTest implements HookFixtures {
private OpenFeatureAPI api;

@BeforeEach
public void setUp() throws Exception {
void setUp() {
api = new OpenFeatureAPI();
}

@Test
void simpleBooleanFlag() {
api.setProviderAndWait(new TestEventsProvider());
api.setProviderAndWait(TestProvider.builder().isReady());
Client client = api.getClient();
Boolean retval = client.getBooleanValue(flagKey, false);
assertFalse(retval);
Expand All @@ -39,7 +39,7 @@ void simpleBooleanFlag() {
void clientHooks() {
Hook<Boolean> exampleHook = mockBooleanHook();

api.setProviderAndWait(new TestEventsProvider());
api.setProviderAndWait(TestProvider.builder().isReady());
Client client = api.getClient();
client.addHooks(exampleHook);
Boolean retval = client.getBooleanValue(flagKey, false);
Expand All @@ -52,7 +52,7 @@ void evalHooks() {
Hook<Boolean> clientHook = mockBooleanHook();
Hook<Boolean> evalHook = mockBooleanHook();

api.setProviderAndWait(new TestEventsProvider());
api.setProviderAndWait(TestProvider.builder().isReady());
Client client = api.getClient();
client.addHooks(clientHook);
Boolean retval = client.getBooleanValue(
Expand All @@ -72,7 +72,7 @@ void evalHooks() {
@Test
void providingContext() {

api.setProviderAndWait(new TestEventsProvider());
api.setProviderAndWait(TestProvider.builder().isReady());
Client client = api.getClient();
Map<String, Value> attributes = new HashMap<>();
List<Value> values = Arrays.asList(new Value(2), new Value(4));
Expand All @@ -88,7 +88,7 @@ void providingContext() {

@Test
void brokenProvider() {
api.setProviderAndWait(new AlwaysBrokenWithExceptionProvider());
api.setProviderAndWait(TestProvider.builder().withExceptionOnFlagEvaluation());
Client client = api.getClient();
FlagEvaluationDetails<Boolean> retval = client.getBooleanDetails(flagKey, false);
assertEquals(ErrorCode.FLAG_NOT_FOUND, retval.getErrorCode());
Expand All @@ -102,6 +102,8 @@ void providerLockedPerTransaction() {

final String defaultValue = "string-value";
final OpenFeatureAPI api = new OpenFeatureAPI();
var provider1 = TestProvider.builder().isReady();
var provider2 = TestProvider.builder().isReady();

class MutatingHook implements Hook {

Expand All @@ -110,31 +112,31 @@ class MutatingHook implements Hook {
// change the provider during a before hook - this should not impact the evaluation in progress
public Optional before(HookContext ctx, Map hints) {

api.setProviderAndWait(TestEventsProvider.newInitializedTestEventsProvider());
api.setProviderAndWait(provider2);

return Optional.empty();
}
}

final Client client = api.getClient();
api.setProviderAndWait(new DoSomethingProvider());
api.setProviderAndWait(provider1);
api.addHooks(new MutatingHook());

// if provider is changed during an evaluation transaction it should proceed with the original provider
String doSomethingValue = client.getStringValue("val", defaultValue);
assertEquals(new StringBuilder(defaultValue).reverse().toString(), doSomethingValue);
client.getStringValue("val", defaultValue);
assertEquals(1, provider1.getFlagEvaluations().size());

api.clearHooks();

// subsequent evaluations should now use new provider set by hook
String noOpValue = client.getStringValue("val", defaultValue);
assertEquals(noOpValue, defaultValue);
client.getStringValue("val", defaultValue);
assertEquals(1, provider2.getFlagEvaluations().size());
}

@Test
void setProviderAndWaitShouldPutTheProviderInReadyState() {
String domain = "domain";
api.setProviderAndWait(domain, new TestEventsProvider());
api.setProviderAndWait(domain, TestProvider.builder().isReady());
Client client = api.getClient(domain);
assertThat(client.getProviderState()).isEqualTo(ProviderState.READY);
}
Expand All @@ -146,7 +148,7 @@ void setProviderAndWaitShouldPutTheProviderInReadyState() {
@Test
void shouldPutTheProviderInStateErrorAfterEmittingErrorEvent() {
String domain = "domain";
TestEventsProvider provider = new TestEventsProvider();
var provider = TestProvider.builder().isReady();
api.setProviderAndWait(domain, provider);
Client client = api.getClient(domain);
assertThat(client.getProviderState()).isEqualTo(ProviderState.READY);
Expand All @@ -161,7 +163,7 @@ void shouldPutTheProviderInStateErrorAfterEmittingErrorEvent() {
@Test
void shouldPutTheProviderInStateStaleAfterEmittingStaleEvent() {
String domain = "domain";
TestEventsProvider provider = new TestEventsProvider();
var provider = TestProvider.builder().isReady();
api.setProviderAndWait(domain, provider);
Client client = api.getClient(domain);
assertThat(client.getProviderState()).isEqualTo(ProviderState.READY);
Expand All @@ -176,7 +178,7 @@ void shouldPutTheProviderInStateStaleAfterEmittingStaleEvent() {
@Test
void shouldPutTheProviderInStateReadyAfterEmittingReadyEvent() {
String domain = "domain";
TestEventsProvider provider = new TestEventsProvider();
var provider = TestProvider.builder().isReady();
api.setProviderAndWait(domain, provider);
Client client = api.getClient(domain);
assertThat(client.getProviderState()).isEqualTo(ProviderState.READY);
Expand Down
64 changes: 0 additions & 64 deletions src/test/java/dev/openfeature/sdk/DoSomethingProvider.java

This file was deleted.

Loading
Loading