Skip to content

Commit f532e1d

Browse files
Merge pull request #56 from splitio/fme-10575
[FME-10575] add block until ready to client init
2 parents f98da67 + a76f0a9 commit f532e1d

File tree

4 files changed

+37
-10
lines changed

4 files changed

+37
-10
lines changed

pom.xml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<modelVersion>4.0.0</modelVersion>
77
<groupId>io.split.openfeature</groupId>
88
<artifactId>split-openfeature-provider</artifactId>
9-
<version>1.2.1</version>
9+
<version>1.2.2</version>
1010
<name>split-openfeature-provider-java</name>
1111
<description>Split OpenFeature Java Provider</description>
1212
<url>www.split.io</url>
@@ -166,6 +166,12 @@
166166
<groupId>org.apache.maven.plugins</groupId>
167167
<artifactId>maven-gpg-plugin</artifactId>
168168
<version>3.2.8</version>
169+
<configuration>
170+
<gpgArguments>
171+
<arg>--pinentry-mode</arg>
172+
<arg>loopback</arg>
173+
</gpgArguments>
174+
</configuration>
169175
<executions>
170176
<execution>
171177
<id>sign-artifacts</id>

src/main/java/io/split/openfeature/SplitProvider.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,35 @@
1717
import io.split.client.SplitClient;
1818
import io.split.client.api.SplitResult;
1919
import io.split.openfeature.utils.Serialization;
20+
import org.slf4j.Logger;
21+
import org.slf4j.LoggerFactory;
22+
2023
import java.time.Instant;
2124
import java.time.format.DateTimeParseException;
2225
import java.util.HashMap;
2326
import java.util.List;
2427
import java.util.Map;
2528
import java.util.Optional;
29+
import java.util.concurrent.TimeoutException;
2630
import java.util.stream.Collectors;
2731

2832
public class SplitProvider implements FeatureProvider {
33+
private static final Logger _log = LoggerFactory.getLogger(SplitProvider.class);
2934

3035
private static final String NAME = "Split";
3136

3237
private final SplitClient client;
3338

3439
public SplitProvider(SplitClient splitClient) {
3540
client = splitClient;
41+
try {
42+
this.client.blockUntilReady();
43+
} catch (InterruptedException e) {
44+
_log.error("Interrupted Exception: ", e);
45+
Thread.currentThread().interrupt();
46+
} catch (TimeoutException e) {
47+
throw new GeneralError("Error occurred initializing the client.", e);
48+
}
3649
}
3750

3851
public SplitProvider(String apiKey) {

src/test/java/io/split/openfeature/ClientTest.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,11 @@ public class ClientTest {
3636
public void init() {
3737
openFeatureAPI = OpenFeatureAPI.getInstance();
3838
try {
39-
SplitClientConfig config = SplitClientConfig.builder().splitFile("src/test/resources/split.yaml").build();
39+
SplitClientConfig config = SplitClientConfig
40+
.builder()
41+
.splitFile("src/test/resources/split.yaml")
42+
.setBlockUntilReadyTimeout(10000)
43+
.build();
4044
splitClient = SplitFactoryBuilder.build("localhost", config).client();
4145
openFeatureAPI.setProviderAndWait(new SplitProvider(splitClient));
4246
} catch (URISyntaxException | IOException e) {

src/test/java/io/split/openfeature/SplitProviderTest.java

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.time.Instant;
2121
import java.util.List;
2222
import java.util.Map;
23+
import java.util.concurrent.TimeoutException;
2324

2425
import static org.junit.jupiter.api.Assertions.assertEquals;
2526
import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -470,10 +471,10 @@ public void evalStructureErrorTest() {
470471
}
471472

472473
@Test
473-
public void trackWithDetailsTest() {
474+
public void trackWithDetailsTest() throws InterruptedException, TimeoutException {
474475
SplitProvider provider = new SplitProvider(mockSplitClient);
475476

476-
477+
verify(mockSplitClient).blockUntilReady();
477478
EvaluationContext ctx = new MutableContext(key).add("trafficType", "user");
478479
TrackingEventDetails details = new MutableTrackingEventDetails(42.5)
479480
.add("plan", new Value("pro"))
@@ -491,38 +492,41 @@ public void trackWithDetailsTest() {
491492
}
492493

493494
@Test
494-
public void trackTargetingKeyErrorTest() {
495+
public void trackTargetingKeyErrorTest() throws InterruptedException, TimeoutException {
495496
// Tracking without targetingKey should throw error
496497
SplitProvider provider = new SplitProvider(mockSplitClient);
497498
EvaluationContext ctx = new MutableContext().add("trafficType", "user");
498499

499500
assertThrows(dev.openfeature.sdk.exceptions.TargetingKeyMissingError.class,
500501
() -> provider.track("purchase", ctx, null));
501-
verifyNoInteractions(mockSplitClient);
502+
verify(mockSplitClient).blockUntilReady();
503+
verifyNoMoreInteractions(mockSplitClient);
502504
}
503505

504506
@Test
505-
public void trackEventNameErrorTest() {
507+
public void trackEventNameErrorTest() throws InterruptedException, TimeoutException {
506508
// Tracking without eventName should throw error
507509
SplitProvider provider = new SplitProvider(mockSplitClient);
508510
EvaluationContext ctx = new MutableContext(key).add("trafficType", "user");
509511

510512
GeneralError ex = assertThrows(GeneralError.class,
511513
() -> provider.track(" ", ctx, null)); // blank name
512514
assertTrue(ex.getMessage().toLowerCase().contains("eventname"));
513-
verifyNoInteractions(mockSplitClient);
515+
verify(mockSplitClient).blockUntilReady();
516+
verifyNoMoreInteractions(mockSplitClient);
514517
}
515518

516519
@Test
517-
public void trackTrafficTypeErrorTest() {
520+
public void trackTrafficTypeErrorTest() throws InterruptedException, TimeoutException {
518521
// Tracking without trafficType should throw error
519522
SplitProvider provider = new SplitProvider(mockSplitClient);
520523
EvaluationContext ctx = new MutableContext(key);
521524

522525
GeneralError ex = assertThrows(GeneralError.class,
523526
() -> provider.track("purchase", ctx, null));
524527
assertTrue(ex.getMessage().toLowerCase().contains("traffictype"));
525-
verifyNoInteractions(mockSplitClient);
528+
verify(mockSplitClient).blockUntilReady();
529+
verifyNoMoreInteractions(mockSplitClient);
526530
}
527531

528532
@Test

0 commit comments

Comments
 (0)