Skip to content

Commit d7dfc06

Browse files
authored
test: Consolidate test providers (#1661)
* Consolidate test providers Signed-off-by: christian.lutnik <[email protected]> * spotless Signed-off-by: christian.lutnik <[email protected]> * fix errors on flag evaluation logic Signed-off-by: christian.lutnik <[email protected]> --------- Signed-off-by: christian.lutnik <[email protected]>
1 parent 110054f commit d7dfc06

17 files changed

+694
-551
lines changed

spotbugs-exclusions.xml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@
4949

5050
<!-- Test class that should be excluded -->
5151
<Match>
52-
<Class name="dev.openfeature.sdk.DoSomethingProvider"/>
5352
</Match>
5453
<!-- All bugs in test classes, except for JUnit-specific bugs -->
5554
<Match>
@@ -58,4 +57,4 @@
5857
<Bug code="IJU" />
5958
</Not>
6059
</Match>
61-
</FindBugsFilter>
60+
</FindBugsFilter>

src/main/java/dev/openfeature/sdk/ImmutableMetadata.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
@Slf4j
1414
@EqualsAndHashCode
1515
public class ImmutableMetadata {
16+
public static final ImmutableMetadata EMPTY = new ImmutableMetadata(Collections.emptyMap());
17+
1618
private final Map<String, Object> metadata;
1719

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

src/test/java/dev/openfeature/sdk/AlwaysBrokenWithDetailsProvider.java

Lines changed: 0 additions & 52 deletions
This file was deleted.

src/test/java/dev/openfeature/sdk/AlwaysBrokenWithExceptionProvider.java

Lines changed: 0 additions & 39 deletions
This file was deleted.

src/test/java/dev/openfeature/sdk/ClientProviderMappingTest.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

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

5+
import dev.openfeature.sdk.testutils.testProvider.TestProvider;
56
import org.junit.jupiter.api.Test;
67

78
class ClientProviderMappingTest {
@@ -10,13 +11,19 @@ class ClientProviderMappingTest {
1011
void clientProviderTest() {
1112
OpenFeatureAPI api = new OpenFeatureAPI();
1213

13-
api.setProviderAndWait("client1", new DoSomethingProvider());
14-
api.setProviderAndWait("client2", new NoOpProvider());
14+
var provider1 = TestProvider.builder().initsToReady();
15+
var provider2 = TestProvider.builder().initsToReady();
16+
17+
api.setProviderAndWait("client1", provider1);
18+
api.setProviderAndWait("client2", provider2);
1519

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

19-
assertTrue(c1.getBooleanValue("test", false));
20-
assertFalse(c2.getBooleanValue("test", false));
23+
c1.getBooleanValue("test", false);
24+
c2.getBooleanValue("test", false);
25+
26+
assertEquals(1, provider1.getFlagEvaluations().size());
27+
assertEquals(1, provider2.getFlagEvaluations().size());
2128
}
2229
}

src/test/java/dev/openfeature/sdk/DeveloperExperienceTest.java

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import static org.mockito.Mockito.verify;
99

1010
import dev.openfeature.sdk.fixtures.HookFixtures;
11-
import dev.openfeature.sdk.testutils.TestEventsProvider;
11+
import dev.openfeature.sdk.testutils.testProvider.TestProvider;
1212
import java.util.Arrays;
1313
import java.util.HashMap;
1414
import java.util.List;
@@ -23,13 +23,13 @@ class DeveloperExperienceTest implements HookFixtures {
2323
private OpenFeatureAPI api;
2424

2525
@BeforeEach
26-
public void setUp() throws Exception {
26+
void setUp() {
2727
api = new OpenFeatureAPI();
2828
}
2929

3030
@Test
3131
void simpleBooleanFlag() {
32-
api.setProviderAndWait(new TestEventsProvider());
32+
api.setProviderAndWait(TestProvider.builder().initsToReady());
3333
Client client = api.getClient();
3434
Boolean retval = client.getBooleanValue(flagKey, false);
3535
assertFalse(retval);
@@ -39,7 +39,7 @@ void simpleBooleanFlag() {
3939
void clientHooks() {
4040
Hook<Boolean> exampleHook = mockBooleanHook();
4141

42-
api.setProviderAndWait(new TestEventsProvider());
42+
api.setProviderAndWait(TestProvider.builder().initsToReady());
4343
Client client = api.getClient();
4444
client.addHooks(exampleHook);
4545
Boolean retval = client.getBooleanValue(flagKey, false);
@@ -52,7 +52,7 @@ void evalHooks() {
5252
Hook<Boolean> clientHook = mockBooleanHook();
5353
Hook<Boolean> evalHook = mockBooleanHook();
5454

55-
api.setProviderAndWait(new TestEventsProvider());
55+
api.setProviderAndWait(TestProvider.builder().initsToReady());
5656
Client client = api.getClient();
5757
client.addHooks(clientHook);
5858
Boolean retval = client.getBooleanValue(
@@ -72,7 +72,7 @@ void evalHooks() {
7272
@Test
7373
void providingContext() {
7474

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

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

103103
final String defaultValue = "string-value";
104104
final OpenFeatureAPI api = new OpenFeatureAPI();
105+
var provider1 = TestProvider.builder().initsToReady();
106+
var provider2 = TestProvider.builder().initsToReady();
105107

106108
class MutatingHook implements Hook {
107109

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

113-
api.setProviderAndWait(TestEventsProvider.newInitializedTestEventsProvider());
115+
api.setProviderAndWait(provider2);
114116

115117
return Optional.empty();
116118
}
117119
}
118120

119121
final Client client = api.getClient();
120-
api.setProviderAndWait(new DoSomethingProvider());
122+
api.setProviderAndWait(provider1);
121123
api.addHooks(new MutatingHook());
122124

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

127129
api.clearHooks();
128130

129131
// subsequent evaluations should now use new provider set by hook
130-
String noOpValue = client.getStringValue("val", defaultValue);
131-
assertEquals(noOpValue, defaultValue);
132+
client.getStringValue("val", defaultValue);
133+
assertEquals(1, provider2.getFlagEvaluations().size());
132134
}
133135

134136
@Test
135137
void setProviderAndWaitShouldPutTheProviderInReadyState() {
136138
String domain = "domain";
137-
api.setProviderAndWait(domain, new TestEventsProvider());
139+
api.setProviderAndWait(domain, TestProvider.builder().initsToReady());
138140
Client client = api.getClient(domain);
139141
assertThat(client.getProviderState()).isEqualTo(ProviderState.READY);
140142
}
@@ -146,7 +148,7 @@ void setProviderAndWaitShouldPutTheProviderInReadyState() {
146148
@Test
147149
void shouldPutTheProviderInStateErrorAfterEmittingErrorEvent() {
148150
String domain = "domain";
149-
TestEventsProvider provider = new TestEventsProvider();
151+
var provider = TestProvider.builder().initsToReady();
150152
api.setProviderAndWait(domain, provider);
151153
Client client = api.getClient(domain);
152154
assertThat(client.getProviderState()).isEqualTo(ProviderState.READY);
@@ -161,7 +163,7 @@ void shouldPutTheProviderInStateErrorAfterEmittingErrorEvent() {
161163
@Test
162164
void shouldPutTheProviderInStateStaleAfterEmittingStaleEvent() {
163165
String domain = "domain";
164-
TestEventsProvider provider = new TestEventsProvider();
166+
var provider = TestProvider.builder().initsToReady();
165167
api.setProviderAndWait(domain, provider);
166168
Client client = api.getClient(domain);
167169
assertThat(client.getProviderState()).isEqualTo(ProviderState.READY);
@@ -176,7 +178,7 @@ void shouldPutTheProviderInStateStaleAfterEmittingStaleEvent() {
176178
@Test
177179
void shouldPutTheProviderInStateReadyAfterEmittingReadyEvent() {
178180
String domain = "domain";
179-
TestEventsProvider provider = new TestEventsProvider();
181+
var provider = TestProvider.builder().initsToReady();
180182
api.setProviderAndWait(domain, provider);
181183
Client client = api.getClient(domain);
182184
assertThat(client.getProviderState()).isEqualTo(ProviderState.READY);

src/test/java/dev/openfeature/sdk/DoSomethingProvider.java

Lines changed: 0 additions & 64 deletions
This file was deleted.

0 commit comments

Comments
 (0)