Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
Prev Previous commit
Next Next commit
Clean up
  • Loading branch information
gthea committed Jan 20, 2026
commit 8271d9531abd98bc8d45a03671e3aced4d34ec71
3 changes: 0 additions & 3 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
import com.vanniktech.maven.publish.AndroidFusedLibrary
import org.gradle.api.publish.maven.MavenPublication

buildscript {
repositories {
google()
Expand Down
104 changes: 104 additions & 0 deletions main/src/androidTest/java/helper/IntegrationHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,68 @@ public static String dummySingleSegment(String segment) {
return "{\"ms\":{\"k\":[{\"n\":\"" + segment + "\"}],\"cn\":null},\"ls\":{\"k\":[],\"cn\":1702507130121}}";
}

/**
* Builds a memberships response with custom segments and change number.
* @param segments Array of segment names for my segments
* @param msCn Change number for my segments (null if not needed)
* @param largeSegments Array of segment names for large segments
* @param lsCn Change number for large segments
*/
public static String membershipsResponse(String[] segments, Long msCn, String[] largeSegments, Long lsCn) {
StringBuilder msSegments = new StringBuilder();
for (int i = 0; i < segments.length; i++) {
if (i > 0) msSegments.append(",");
msSegments.append("{\"n\":\"").append(segments[i]).append("\"}");
}

StringBuilder lsSegments = new StringBuilder();
for (int i = 0; i < largeSegments.length; i++) {
if (i > 0) lsSegments.append(",");
lsSegments.append("{\"n\":\"").append(largeSegments[i]).append("\"}");
}

return String.format("{\"ms\":{\"k\":[%s],\"cn\":%s},\"ls\":{\"k\":[%s],\"cn\":%d}}",
msSegments, msCn, lsSegments, lsCn);
}

/**
* Simplified memberships response with only my segments.
*/
public static String membershipsResponse(String[] segments, long cn) {
return membershipsResponse(segments, cn, new String[]{}, cn);
}

/**
* Builds a targeting rules changes response with a simple flag.
*/
public static String targetingRulesChangesWithFlag(String flagName, long till) {
return String.format("{\"ff\":{\"s\":%d,\"t\":%d,\"d\":[" +
"{\"trafficTypeName\":\"user\",\"name\":\"%s\",\"status\":\"ACTIVE\"," +
"\"killed\":false,\"defaultTreatment\":\"off\",\"changeNumber\":%d," +
"\"conditions\":[{\"conditionType\":\"ROLLOUT\",\"matcherGroup\":{\"combiner\":\"AND\"," +
"\"matchers\":[{\"keySelector\":{\"trafficType\":\"user\"},\"matcherType\":\"ALL_KEYS\",\"negate\":false}]}," +
"\"partitions\":[{\"treatment\":\"on\",\"size\":100}]}]}" +
"]},\"rbs\":{\"s\":%d,\"t\":%d,\"d\":[]}}", till, till, flagName, till, till, till);
}

/**
* Builds a targeting rules changes response with both a flag and an RBS.
*/
public static String targetingRulesChangesWithFlagAndRbs(String flagName, String rbsName, long till) {
return String.format("{\"ff\":{\"s\":%d,\"t\":%d,\"d\":[" +
"{\"trafficTypeName\":\"user\",\"name\":\"%s\",\"status\":\"ACTIVE\"," +
"\"killed\":false,\"defaultTreatment\":\"off\",\"changeNumber\":%d," +
"\"conditions\":[{\"conditionType\":\"ROLLOUT\",\"matcherGroup\":{\"combiner\":\"AND\"," +
"\"matchers\":[{\"keySelector\":{\"trafficType\":\"user\"},\"matcherType\":\"ALL_KEYS\",\"negate\":false}]}," +
"\"partitions\":[{\"treatment\":\"on\",\"size\":100}]}]}" +
"]},\"rbs\":{\"s\":%d,\"t\":%d,\"d\":[" +
"{\"name\":\"%s\",\"status\":\"ACTIVE\",\"trafficTypeName\":\"user\"," +
"\"excluded\":{\"keys\":[],\"segments\":[]}," +
"\"conditions\":[{\"matcherGroup\":{\"combiner\":\"AND\"," +
"\"matchers\":[{\"keySelector\":{\"trafficType\":\"user\"},\"matcherType\":\"ALL_KEYS\",\"negate\":false}]}}]}" +
"]}}", till, till, flagName, till, till, till, rbsName);
}

public static String dummyApiKey() {
return "99049fd8653247c5ea42bc3c1ae2c6a42bc3";
}
Expand Down Expand Up @@ -509,4 +571,46 @@ public static class ServicePath {
public static final String IMPRESSIONS = "testImpressions/bulk";
public static final String AUTH = "v2/auth";
}

/**
* Creates a simple split entity JSON body for database population.
*/
public static String splitEntityBody(String name, long changeNumber) {
return String.format("{\"name\":\"%s\", \"changeNumber\": %d}", name, changeNumber);
}

/**
* Creates a segment list JSON for database population (my segments format).
* @param segments Array of segment names
*/
public static String segmentListJson(String... segments) {
StringBuilder sb = new StringBuilder("{\"k\":[");
for (int i = 0; i < segments.length; i++) {
if (i > 0) sb.append(",");
sb.append("{\"n\":\"").append(segments[i]).append("\"}");
}
sb.append("],\"cn\":null}");
return sb.toString();
}

public static String membershipKeyListUpdate(java.math.BigInteger hashedKey, String segmentName, long changeNumber) {
String keyListJson = "{\"a\":[" + hashedKey.toString() + "],\"r\":[]}";
String encodedKeyList = Base64.encodeToString(
keyListJson.getBytes(java.nio.charset.StandardCharsets.UTF_8),
Base64.NO_WRAP);

String notificationJson = "{" +
"\\\"type\\\":\\\"MEMBERSHIPS_MS_UPDATE\\\"," +
"\\\"cn\\\":" + changeNumber + "," +
"\\\"n\\\":[\\\"" + segmentName + "\\\"]," +
"\\\"c\\\":0," +
"\\\"u\\\":2," +
"\\\"d\\\":\\\"" + encodedKeyList + "\\\"" +
"}";

return "id: 1\n" +
"event: message\n" +
"data: {\"id\":\"m1\",\"clientId\":\"pri:test\",\"timestamp\":" + System.currentTimeMillis() +
",\"encoding\":\"json\",\"channel\":\"test_channel\",\"data\":\"" + notificationJson + "\"}\n";
}
}
Loading
Loading