Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 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
8 changes: 7 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>io.split.openfeature</groupId>
<artifactId>split-openfeature-provider</artifactId>
<version>1.2.1</version>
<version>1.2.2</version>
<name>split-openfeature-provider-java</name>
<description>Split OpenFeature Java Provider</description>
<url>www.split.io</url>
Expand Down Expand Up @@ -166,6 +166,12 @@
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>3.2.8</version>
<configuration>
<gpgArguments>
<arg>--pinentry-mode</arg>
<arg>loopback</arg>
</gpgArguments>
</configuration>
<executions>
<execution>
<id>sign-artifacts</id>
Expand Down
13 changes: 13 additions & 0 deletions src/main/java/io/split/openfeature/SplitProvider.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,22 +17,35 @@
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";

private final SplitClient client;

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) {
Expand Down
6 changes: 5 additions & 1 deletion src/test/java/io/split/openfeature/ClientTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
20 changes: 12 additions & 8 deletions src/test/java/io/split/openfeature/SplitProviderTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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"))
Expand All @@ -491,38 +492,41 @@ 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");

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);

GeneralError ex = assertThrows(GeneralError.class,
() -> provider.track("purchase", ctx, null));
assertTrue(ex.getMessage().toLowerCase().contains("traffictype"));
verifyNoInteractions(mockSplitClient);
verify(mockSplitClient).blockUntilReady();
verifyNoMoreInteractions(mockSplitClient);
}

@Test
Expand Down
Loading