forked from open-feature/java-sdk
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathOpenFeatureAPITest.java
104 lines (83 loc) · 4.45 KB
/
OpenFeatureAPITest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
package dev.openfeature.sdk;
import dev.openfeature.sdk.providers.memory.InMemoryProvider;
import dev.openfeature.sdk.testutils.FeatureProviderTestUtils;
import dev.openfeature.sdk.testutils.TestEventsProvider;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import java.util.Collections;
import java.util.HashMap;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatCode;
import static org.junit.jupiter.api.Assertions.assertEquals;
class OpenFeatureAPITest {
private static final String DOMAIN_NAME = "my domain";
private OpenFeatureAPI api;
@BeforeEach
void setupTest() {
api = OpenFeatureAPI.getInstance();
}
@Test
void namedProviderTest() {
FeatureProvider provider = new NoOpProvider();
FeatureProviderTestUtils.setFeatureProvider("namedProviderTest", provider);
assertThat(provider.getMetadata().getName())
.isEqualTo(api.getProviderMetadata("namedProviderTest").getName());
}
@Specification(number = "1.1.3", text = "The API MUST provide a function to bind a given provider to one or more clients using a domain. If the domain already has a bound provider, it is overwritten with the new mapping.")
@Test
void namedProviderOverwrittenTest() {
String domain = "namedProviderOverwrittenTest";
FeatureProvider provider1 = new NoOpProvider();
FeatureProvider provider2 = new DoSomethingProvider();
FeatureProviderTestUtils.setFeatureProvider(domain, provider1);
FeatureProviderTestUtils.setFeatureProvider(domain, provider2);
assertThat(OpenFeatureAPI.getInstance().getProvider(domain).getMetadata().getName())
.isEqualTo(DoSomethingProvider.name);
}
@Test
void providerToMultipleNames() throws Exception {
FeatureProvider inMemAsEventingProvider = new InMemoryProvider(Collections.EMPTY_MAP);
FeatureProvider noOpAsNonEventingProvider = new NoOpProvider();
// register same provider for multiple names & as default provider
OpenFeatureAPI.getInstance().setProviderAndWait(inMemAsEventingProvider);
OpenFeatureAPI.getInstance().setProviderAndWait("clientA", inMemAsEventingProvider);
OpenFeatureAPI.getInstance().setProviderAndWait("clientB", inMemAsEventingProvider);
OpenFeatureAPI.getInstance().setProviderAndWait("clientC", noOpAsNonEventingProvider);
OpenFeatureAPI.getInstance().setProviderAndWait("clientD", noOpAsNonEventingProvider);
assertEquals(inMemAsEventingProvider, OpenFeatureAPI.getInstance().getProvider());
assertEquals(inMemAsEventingProvider, OpenFeatureAPI.getInstance().getProvider("clientA"));
assertEquals(inMemAsEventingProvider, OpenFeatureAPI.getInstance().getProvider("clientB"));
assertEquals(noOpAsNonEventingProvider, OpenFeatureAPI.getInstance().getProvider("clientC"));
assertEquals(noOpAsNonEventingProvider, OpenFeatureAPI.getInstance().getProvider("clientD"));
}
@Test
void settingDefaultProviderToNullErrors() {
assertThatCode(() -> api.setProvider(null)).isInstanceOf(IllegalArgumentException.class);
}
@Test
void settingDomainProviderToNullErrors() {
assertThatCode(() -> api.setProvider(DOMAIN_NAME, null)).isInstanceOf(IllegalArgumentException.class);
}
@Test
void settingTransactionalContextPropagatorToNullErrors() {
assertThatCode(() -> api.setTransactionContextPropagator(null)).isInstanceOf(IllegalArgumentException.class);
}
@Test
void setEvaluationContextShouldAllowChaining() {
OpenFeatureClient client = new OpenFeatureClient(api, "name", "version");
EvaluationContext ctx = new ImmutableContext("targeting key", new HashMap<>());
OpenFeatureClient result = client.setEvaluationContext(ctx);
assertEquals(client, result);
}
@Test
void getStateReturnsTheStateOfTheAppropriateProvider() throws Exception {
String domain = "namedProviderOverwrittenTest";
FeatureProvider provider1 = new NoOpProvider();
FeatureProvider provider2 = new TestEventsProvider();
FeatureProviderTestUtils.setFeatureProvider(domain, provider1);
FeatureProviderTestUtils.setFeatureProvider(domain, provider2);
provider2.initialize(null);
assertThat(OpenFeatureAPI.getInstance().getClient(domain).getProviderState())
.isEqualTo(ProviderState.READY);
}
}