Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
11 changes: 11 additions & 0 deletions client/src/main/java/io/split/Spec.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package io.split;

public final class Spec {

private Spec() {
// restrict instantiation
}

public static final String SPEC_VERSION = "1.1";
}

12 changes: 8 additions & 4 deletions client/src/main/java/io/split/client/HttpSplitChangeFetcher.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package io.split.client;

import com.google.common.annotations.VisibleForTesting;

import io.split.client.dtos.SplitChange;
import io.split.client.dtos.SplitHttpResponse;
import io.split.client.exceptions.UriTooLongException;
Expand All @@ -21,6 +22,7 @@
import java.net.URISyntaxException;

import static com.google.common.base.Preconditions.checkNotNull;
import static io.split.Spec.SPEC_VERSION;

/**
* Created by adilaijaz on 5/30/15.
Expand All @@ -31,6 +33,7 @@ public final class HttpSplitChangeFetcher implements SplitChangeFetcher {
private static final String SINCE = "since";
private static final String TILL = "till";
private static final String SETS = "sets";
private static final String SPEC = "s";
private final SplitHttpClient _client;
private final URI _target;
private final TelemetryRuntimeProducer _telemetryRuntimeProducer;
Expand Down Expand Up @@ -58,13 +61,14 @@ public SplitChange fetch(long since, FetchOptions options) {
long start = System.currentTimeMillis();

try {
URIBuilder uriBuilder = new URIBuilder(_target).addParameter(SINCE, "" + since);
if (options.hasCustomCN()) {
uriBuilder.addParameter(TILL, "" + options.targetCN());
}
URIBuilder uriBuilder = new URIBuilder(_target).addParameter(SPEC, "" + SPEC_VERSION);
uriBuilder.addParameter(SINCE, "" + since);
if (!options.flagSetsFilter().isEmpty()) {
uriBuilder.addParameter(SETS, "" + options.flagSetsFilter());
}
if (options.hasCustomCN()) {
uriBuilder.addParameter(TILL, "" + options.targetCN());
}
URI uri = uriBuilder.build();
SplitHttpResponse response = _client.get(uri, options, null);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public boolean match(Object matchValue, String bucketingKey, Map<String, Object>
@Override
public String toString() {
StringBuilder bldr = new StringBuilder();
bldr.append("== ");
bldr.append("== semver ");
bldr.append(_semVer.Version());
return bldr.toString();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public boolean match(Object matchValue, String bucketingKey, Map<String, Object>
@Override
public String toString() {
StringBuilder bldr = new StringBuilder();
bldr.append("== ");
bldr.append(">= semver ");
bldr.append(_semVer.Version());
return bldr.toString();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public boolean match(Object matchValue, String bucketingKey, Map<String, Object>
@Override
public String toString() {
StringBuilder bldr = new StringBuilder();
bldr.append("in semver list ");
bldr.append("in semver list [");
boolean first = true;

for (Semver item : _semverlist) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public boolean match(Object matchValue, String bucketingKey, Map<String, Object>
@Override
public String toString() {
StringBuilder bldr = new StringBuilder();
bldr.append("== ");
bldr.append("<= semver ");
bldr.append(_semVer.Version());
return bldr.toString();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,12 @@
import java.net.URI;

import static com.google.common.base.Preconditions.checkNotNull;
import static io.split.Spec.SPEC_VERSION;

public class AuthApiClientImp implements AuthApiClient {
private static final Logger _log = LoggerFactory.getLogger(AuthApiClientImp.class);

private static final String SPEC = "s";
private final SplitHttpClient _httpClient;
private final String _target;
private final TelemetryRuntimeProducer _telemetryRuntimeProducer;
Expand All @@ -36,7 +38,7 @@ public AuthApiClientImp(String url, SplitHttpClient httpClient, TelemetryRuntime
public AuthenticationResponse Authenticate() {
try {
long initTime = System.currentTimeMillis();
URI uri = new URIBuilder(_target).build();
URI uri = new URIBuilder(_target).addParameter(SPEC, "" + SPEC_VERSION).build();
SplitHttpResponse response = _httpClient.get(uri, new FetchOptions.Builder().cacheControlHeaders(false).build(), null);
Integer statusCode = response.statusCode();

Expand Down
20 changes: 10 additions & 10 deletions client/src/test/java/io/split/client/utils/CustomDispatcher.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,16 @@
import java.util.*;

public class CustomDispatcher extends Dispatcher {
public static final String INITIAL_SPLIT_CHANGES = "/api/splitChanges?since=-1";
public static final String INITIAL_FLAGS_BY_SETS = "/api/splitChanges?since=-1&sets=set1%2Cset2";
public static final String SINCE_1602796638344 = "/api/splitChanges?since=1602796638344&sets=set1%2Cset2";
public static final String AUTH_ENABLED = "/api/auth/enabled";
public static final String AUTH_DISABLED = "/api/auth/disabled";
public static final String SINCE_1585948850109 = "/api/splitChanges?since=1585948850109";
public static final String SINCE_1585948850109_FLAG_SET = "/api/splitChanges?since=-1&sets=set_1%2Cset_2";
public static final String SINCE_1585948850110 = "/api/splitChanges?since=1585948850110";
public static final String SINCE_1585948850111 = "/api/splitChanges?since=1585948850111";
public static final String SINCE_1585948850112 = "/api/splitChanges?since=1585948850112";
public static final String INITIAL_SPLIT_CHANGES = "/api/splitChanges?s=1.1&since=-1";
public static final String INITIAL_FLAGS_BY_SETS = "/api/splitChanges?s=1.1&since=-1&sets=set1%2Cset2";
public static final String SINCE_1602796638344 = "/api/splitChanges?s=1.1&since=1602796638344&sets=set1%2Cset2";
public static final String AUTH_ENABLED = "/api/auth/enabled?s=1.1";
public static final String AUTH_DISABLED = "/api/auth/disabled?s=1.1";
public static final String SINCE_1585948850109 = "/api/splitChanges?s=1.1&since=1585948850109";
public static final String SINCE_1585948850109_FLAG_SET = "/api/splitChanges?s=1.1&since=-1&sets=set_1%2Cset_2";
public static final String SINCE_1585948850110 = "/api/splitChanges?s=1.1&since=1585948850110";
public static final String SINCE_1585948850111 = "/api/splitChanges?s=1.1&since=1585948850111";
public static final String SINCE_1585948850112 = "/api/splitChanges?s=1.1&since=1585948850112";
public static final String SEGMENT_TEST_INITIAL = "/api/segmentChanges/segment-test?since=-1";
public static final String SEGMENT3_INITIAL = "/api/segmentChanges/segment3?since=-1";
public static final String SEGMENT3_SINCE_1585948850110 = "/api/segmentChanges/segment3?since=1585948850110";
Expand Down
116 changes: 115 additions & 1 deletion client/src/test/java/io/split/engine/experiments/SplitParserTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@
import org.junit.Test;
import org.mockito.Mockito;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
Expand Down Expand Up @@ -533,7 +537,7 @@ public void contains_string() {
}

@Test
public void unsupportedMatcher() {
public void UnsupportedMatcher() {
SplitParser parser = new SplitParser();
String splitWithUndefinedMatcher = "{\"since\":-1,\"till\": 1457726098069,\"splits\": [{ \"changeNumber\": 123, \"trafficTypeName\": \"user\", \"name\": \"some_name\","
+ "\"trafficAllocation\": 100, \"trafficAllocationSeed\": 123456, \"seed\": 321654, \"status\": \"ACTIVE\","
Expand All @@ -555,6 +559,116 @@ public void unsupportedMatcher() {
}
}

@Test
public void EqualToSemverMatcher() throws IOException {
SplitParser parser = new SplitParser();
String splits = new String(Files.readAllBytes(Paths.get("src/test/resources/semver/semver-splits.json")), StandardCharsets.UTF_8);
SplitChange change = Json.fromJson(splits, SplitChange.class);
for (Split split : change.splits) {
// should not cause exception
ParsedSplit parsedSplit = parser.parse(split);
if (split.name.equals("semver_equalto")) {
for (ParsedCondition parsedCondition : parsedSplit.parsedConditions()) {
assertTrue(parsedCondition.label().equals("equal to semver"));
for (AttributeMatcher matcher : parsedCondition.matcher().attributeMatchers()) {
// Check the matcher is ALL_KEYS
assertTrue(matcher.matcher().toString().equals(" == semver 1\\.22\\.9"));
return;
}
}
}
}
assertTrue(false);
}

@Test
public void GreaterThanOrEqualSemverMatcher() throws IOException {
SplitParser parser = new SplitParser();
String splits = new String(Files.readAllBytes(Paths.get("src/test/resources/semver/semver-splits.json")), StandardCharsets.UTF_8);
SplitChange change = Json.fromJson(splits, SplitChange.class);
for (Split split : change.splits) {
// should not cause exception
ParsedSplit parsedSplit = parser.parse(split);
if (split.name.equals("semver_greater_or_equalto")) {
for (ParsedCondition parsedCondition : parsedSplit.parsedConditions()) {
assertTrue(parsedCondition.label().equals("greater than or equal to semver"));
for (AttributeMatcher matcher : parsedCondition.matcher().attributeMatchers()) {
// Check the matcher is ALL_KEYS
assertTrue(matcher.matcher().toString().equals(" >= semver 1\\.22\\.9"));
return;
}
}
}
}
assertTrue(false);
}

@Test
public void LessThanOrEqualSemverMatcher() throws IOException {
SplitParser parser = new SplitParser();
String splits = new String(Files.readAllBytes(Paths.get("src/test/resources/semver/semver-splits.json")), StandardCharsets.UTF_8);
SplitChange change = Json.fromJson(splits, SplitChange.class);
for (Split split : change.splits) {
// should not cause exception
ParsedSplit parsedSplit = parser.parse(split);
if (split.name.equals("semver_less_or_equalto")) {
for (ParsedCondition parsedCondition : parsedSplit.parsedConditions()) {
assertTrue(parsedCondition.label().equals("less than or equal to semver"));
for (AttributeMatcher matcher : parsedCondition.matcher().attributeMatchers()) {
// Check the matcher is ALL_KEYS
assertTrue(matcher.matcher().toString().equals(" <= semver 1\\.22\\.9"));
return;
}
}
}
}
assertTrue(false);
}

@Test
public void BetweenSemverMatcher() throws IOException {
SplitParser parser = new SplitParser();
String splits = new String(Files.readAllBytes(Paths.get("src/test/resources/semver/semver-splits.json")), StandardCharsets.UTF_8);
SplitChange change = Json.fromJson(splits, SplitChange.class);
for (Split split : change.splits) {
// should not cause exception
ParsedSplit parsedSplit = parser.parse(split);
if (split.name.equals("semver_between")) {
for (ParsedCondition parsedCondition : parsedSplit.parsedConditions()) {
assertTrue(parsedCondition.label().equals("between semver"));
for (AttributeMatcher matcher : parsedCondition.matcher().attributeMatchers()) {
// Check the matcher is ALL_KEYS
assertTrue(matcher.matcher().toString().equals(" between semver 1\\.22\\.9 and 2\\.1\\.0"));
return;
}
}
}
}
assertTrue(false);
}

@Test
public void InListSemverMatcher() throws IOException {
SplitParser parser = new SplitParser();
String splits = new String(Files.readAllBytes(Paths.get("src/test/resources/semver/semver-splits.json")), StandardCharsets.UTF_8);
SplitChange change = Json.fromJson(splits, SplitChange.class);
for (Split split : change.splits) {
// should not cause exception
ParsedSplit parsedSplit = parser.parse(split);
if (split.name.equals("semver_inlist")) {
for (ParsedCondition parsedCondition : parsedSplit.parsedConditions()) {
assertTrue(parsedCondition.label().equals("in list semver"));
for (AttributeMatcher matcher : parsedCondition.matcher().attributeMatchers()) {
// Check the matcher is ALL_KEYS
assertTrue(matcher.matcher().toString().startsWith(" in semver list"));
return;
}
}
}
}
assertTrue(false);
}

public void set_matcher_test(Condition c, io.split.engine.matchers.Matcher m) {

// SegmentSynchronizationTask segmentFetcher = new SegmentSynchronizationTaskImp(fetcherMap);
Expand Down
Loading