diff --git a/pom.xml b/pom.xml
index 69608af..1e3d2cd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
4.0.0
io.split.openfeature
split-openfeature-provider
- 1.2.1
+ 1.2.2
split-openfeature-provider-java
Split OpenFeature Java Provider
www.split.io
@@ -166,6 +166,12 @@
org.apache.maven.plugins
maven-gpg-plugin
3.2.8
+
+
+ --pinentry-mode
+ loopback
+
+
sign-artifacts
diff --git a/src/main/java/io/split/openfeature/SplitProvider.java b/src/main/java/io/split/openfeature/SplitProvider.java
index 67c43cf..d7927af 100644
--- a/src/main/java/io/split/openfeature/SplitProvider.java
+++ b/src/main/java/io/split/openfeature/SplitProvider.java
@@ -17,15 +17,20 @@
import io.split.client.SplitClient;
import io.split.client.api.SplitResult;
import io.split.openfeature.utils.Serialization;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import java.time.Instant;
import java.time.format.DateTimeParseException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
+import java.util.concurrent.TimeoutException;
import java.util.stream.Collectors;
public class SplitProvider implements FeatureProvider {
+ private static final Logger _log = LoggerFactory.getLogger(SplitProvider.class);
private static final String NAME = "Split";
@@ -33,6 +38,14 @@ public class SplitProvider implements FeatureProvider {
public SplitProvider(SplitClient splitClient) {
client = splitClient;
+ try {
+ this.client.blockUntilReady();
+ } catch (InterruptedException e) {
+ _log.error("Interrupted Exception: ", e);
+ Thread.currentThread().interrupt();
+ } catch (TimeoutException e) {
+ throw new GeneralError("Error occurred initializing the client.", e);
+ }
}
public SplitProvider(String apiKey) {
diff --git a/src/test/java/io/split/openfeature/ClientTest.java b/src/test/java/io/split/openfeature/ClientTest.java
index 9dd966a..667d33b 100644
--- a/src/test/java/io/split/openfeature/ClientTest.java
+++ b/src/test/java/io/split/openfeature/ClientTest.java
@@ -36,7 +36,11 @@ public class ClientTest {
public void init() {
openFeatureAPI = OpenFeatureAPI.getInstance();
try {
- SplitClientConfig config = SplitClientConfig.builder().splitFile("src/test/resources/split.yaml").build();
+ SplitClientConfig config = SplitClientConfig
+ .builder()
+ .splitFile("src/test/resources/split.yaml")
+ .setBlockUntilReadyTimeout(10000)
+ .build();
splitClient = SplitFactoryBuilder.build("localhost", config).client();
openFeatureAPI.setProviderAndWait(new SplitProvider(splitClient));
} catch (URISyntaxException | IOException e) {
diff --git a/src/test/java/io/split/openfeature/SplitProviderTest.java b/src/test/java/io/split/openfeature/SplitProviderTest.java
index 14f4575..5282bc8 100644
--- a/src/test/java/io/split/openfeature/SplitProviderTest.java
+++ b/src/test/java/io/split/openfeature/SplitProviderTest.java
@@ -20,6 +20,7 @@
import java.time.Instant;
import java.util.List;
import java.util.Map;
+import java.util.concurrent.TimeoutException;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -470,10 +471,10 @@ public void evalStructureErrorTest() {
}
@Test
- public void trackWithDetailsTest() {
+ public void trackWithDetailsTest() throws InterruptedException, TimeoutException {
SplitProvider provider = new SplitProvider(mockSplitClient);
-
+ verify(mockSplitClient).blockUntilReady();
EvaluationContext ctx = new MutableContext(key).add("trafficType", "user");
TrackingEventDetails details = new MutableTrackingEventDetails(42.5)
.add("plan", new Value("pro"))
@@ -491,18 +492,19 @@ public void trackWithDetailsTest() {
}
@Test
- public void trackTargetingKeyErrorTest() {
+ public void trackTargetingKeyErrorTest() throws InterruptedException, TimeoutException {
// Tracking without targetingKey should throw error
SplitProvider provider = new SplitProvider(mockSplitClient);
EvaluationContext ctx = new MutableContext().add("trafficType", "user");
assertThrows(dev.openfeature.sdk.exceptions.TargetingKeyMissingError.class,
() -> provider.track("purchase", ctx, null));
- verifyNoInteractions(mockSplitClient);
+ verify(mockSplitClient).blockUntilReady();
+ verifyNoMoreInteractions(mockSplitClient);
}
@Test
- public void trackEventNameErrorTest() {
+ public void trackEventNameErrorTest() throws InterruptedException, TimeoutException {
// Tracking without eventName should throw error
SplitProvider provider = new SplitProvider(mockSplitClient);
EvaluationContext ctx = new MutableContext(key).add("trafficType", "user");
@@ -510,11 +512,12 @@ public void trackEventNameErrorTest() {
GeneralError ex = assertThrows(GeneralError.class,
() -> provider.track(" ", ctx, null)); // blank name
assertTrue(ex.getMessage().toLowerCase().contains("eventname"));
- verifyNoInteractions(mockSplitClient);
+ verify(mockSplitClient).blockUntilReady();
+ verifyNoMoreInteractions(mockSplitClient);
}
@Test
- public void trackTrafficTypeErrorTest() {
+ public void trackTrafficTypeErrorTest() throws InterruptedException, TimeoutException {
// Tracking without trafficType should throw error
SplitProvider provider = new SplitProvider(mockSplitClient);
EvaluationContext ctx = new MutableContext(key);
@@ -522,7 +525,8 @@ public void trackTrafficTypeErrorTest() {
GeneralError ex = assertThrows(GeneralError.class,
() -> provider.track("purchase", ctx, null));
assertTrue(ex.getMessage().toLowerCase().contains("traffictype"));
- verifyNoInteractions(mockSplitClient);
+ verify(mockSplitClient).blockUntilReady();
+ verifyNoMoreInteractions(mockSplitClient);
}
@Test