-
Notifications
You must be signed in to change notification settings - Fork 572
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
d91342e
commit 0c03205
Showing
6 changed files
with
339 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
121 changes: 121 additions & 0 deletions
121
...est/java/com/google/firebase/crashlytics/internal/metadata/RolloutAssignmentListTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,121 @@ | ||
package com.google.firebase.crashlytics.internal.metadata; | ||
|
||
import com.google.common.truth.Truth; | ||
import com.google.firebase.crashlytics.internal.CrashlyticsTestCase; | ||
import com.google.firebase.encoders.DataEncoder; | ||
import com.google.firebase.encoders.json.JsonDataEncoderBuilder; | ||
import java.util.ArrayList; | ||
import java.util.List; | ||
import org.json.JSONException; | ||
import org.junit.Test; | ||
|
||
public class RolloutAssignmentListTest extends CrashlyticsTestCase { | ||
private static final String ROLLOUTS_STATE_JSON_1 = | ||
"[{" | ||
+ "\"rolloutId\":\"rollout_1\"," | ||
+ "\"variantId\":\"control\"," | ||
+ "\"parameterKey\":\"my_feature\"," | ||
+ "\"parameterValue\":\"false\"," | ||
+ "\"templateVersion\":1" | ||
+ "}]"; | ||
|
||
private static final String ROLLOUTS_STATE_JSON_2 = | ||
"[" | ||
+ "{" | ||
+ "\"rolloutId\":\"rollout_1\"," | ||
+ "\"variantId\":\"control\"," | ||
+ "\"parameterKey\":\"my_feature\"," | ||
+ "\"parameterValue\":\"false\"," | ||
+ "\"templateVersion\":1" | ||
+ "}," | ||
+ "{" | ||
+ "\"rollout_id\":\"rollout_2\"" | ||
+ "\"variantId\":\"control\"," | ||
+ "\"parameterKey\":\"color_feature\"," | ||
+ "\"parameterValue\":\"blue\"," | ||
+ "\"templateVersion\":2" | ||
+ "}]"; | ||
|
||
private static List<RolloutAssignment> ROLLOUTS_STATE_1; | ||
|
||
private static List<RolloutAssignment> ROLLOUTS_STATE_2; | ||
|
||
private static final String ROLLOUT_ASSIGNMENT_JSON = | ||
"{" | ||
+ "\"rolloutId\":\"rollout_1\"," | ||
+ "\"variantId\":\"control\"," | ||
+ "\"parameterKey\":\"my_feature\"," | ||
+ "\"parameterValue\":\"false\"," | ||
+ "\"templateVersion\":1" | ||
+ "}"; | ||
|
||
private static final int MAX_ENTRIES = 64; | ||
|
||
private final RolloutAssignmentList rolloutAssignmentList = | ||
new RolloutAssignmentList(MAX_ENTRIES); | ||
|
||
@Override | ||
public void setUp() throws Exception { | ||
super.setUp(); | ||
|
||
ROLLOUTS_STATE_1 = new ArrayList<>(); | ||
ROLLOUTS_STATE_1.add(new RolloutAssignment("rollout_1", "my_feature", "false", "control", 1)); | ||
|
||
ROLLOUTS_STATE_2 = new ArrayList<>(); | ||
ROLLOUTS_STATE_2.add(new RolloutAssignment("rollout_1", "my_feature", "false", "control", 1)); | ||
ROLLOUTS_STATE_2.add( | ||
new RolloutAssignment("rollout_2", "color_feature", "false", "control", 2)); | ||
} | ||
|
||
@Test | ||
public void testRollAssignmentInit_json() throws JSONException { | ||
RolloutAssignment expected = | ||
new RolloutAssignment("rollout_1", "my_feature", "false", "control", 1); | ||
RolloutAssignment rolloutAssignmentInitFromJson = | ||
new RolloutAssignment(ROLLOUT_ASSIGNMENT_JSON); | ||
|
||
Truth.assertThat(rolloutAssignmentInitFromJson).isEqualTo(expected); | ||
} | ||
|
||
@Test | ||
public void testRolloutAssignment_encodeJSON() { | ||
RolloutAssignment rolloutAssignment = | ||
new RolloutAssignment("rollout_1", "my_feature", "false", "control", 1); | ||
DataEncoder encoder = | ||
new JsonDataEncoderBuilder().configureWith(AutoRolloutAssignmentEncoder.CONFIG).build(); | ||
String data = encoder.encode(rolloutAssignment); | ||
|
||
Truth.assertThat(data).isNotEmpty(); | ||
} | ||
|
||
@Test | ||
public void testUpdateRolloutAssignmentList() throws Exception { | ||
final List<String> changed = new ArrayList<String>(); | ||
|
||
rolloutAssignmentList.updateMapList(ROLLOUTS_STATE_1); | ||
|
||
new Thread( | ||
new Runnable() { | ||
@Override | ||
public void run() { | ||
changed.add("changed"); | ||
rolloutAssignmentList.updateMapList(ROLLOUTS_STATE_2); | ||
} | ||
}) | ||
.start(); | ||
|
||
new Thread( | ||
new Runnable() { | ||
@Override | ||
public void run() { | ||
List<RolloutAssignment> list = rolloutAssignmentList.getKeysMapList(); | ||
if (changed.isEmpty()) { | ||
Truth.assertThat(rolloutAssignmentList.getKeysMapList().size()).isEqualTo(1); | ||
} else { | ||
Truth.assertThat(rolloutAssignmentList.getKeysMapList().size()).isEqualTo(2); | ||
} | ||
} | ||
}) | ||
.start(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
79 changes: 79 additions & 0 deletions
79
...cs/src/main/java/com/google/firebase/crashlytics/internal/metadata/RolloutAssignment.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
package com.google.firebase.crashlytics.internal.metadata; | ||
|
||
import com.google.firebase.encoders.annotations.Encodable; | ||
import java.util.Objects; | ||
import org.json.JSONException; | ||
import org.json.JSONObject; | ||
|
||
/** | ||
* model used in user metadata context which make rollout assignment serialize, deserialize easier | ||
*/ | ||
@Encodable | ||
public class RolloutAssignment { | ||
|
||
private final String rolloutId; | ||
private final String parameterKey; | ||
private final String parameterValue; | ||
private final String variantId; | ||
private final int templateVersion; | ||
|
||
public String getVariantId() { | ||
return variantId; | ||
} | ||
|
||
public String getParameterKey() { | ||
return parameterKey; | ||
} | ||
|
||
public String getParameterValue() { | ||
return parameterValue; | ||
} | ||
|
||
public String getRolloutId() { | ||
return rolloutId; | ||
} | ||
|
||
public int getTemplateVersion() { | ||
return templateVersion; | ||
} | ||
|
||
public RolloutAssignment( | ||
String rolloutId, | ||
String parameterKey, | ||
String parameterValue, | ||
String variantId, | ||
int templateVersion) { | ||
this.rolloutId = rolloutId; | ||
this.parameterKey = parameterKey; | ||
this.parameterValue = parameterValue; | ||
this.variantId = variantId; | ||
this.templateVersion = templateVersion; | ||
} | ||
|
||
public RolloutAssignment(String json) throws JSONException { | ||
final JSONObject dataObj = new JSONObject(json); | ||
|
||
this.rolloutId = dataObj.getString("rolloutId"); | ||
this.parameterKey = dataObj.getString("parameterKey"); | ||
this.parameterValue = dataObj.getString("parameterValue"); | ||
this.variantId = dataObj.getString("variantId"); | ||
this.templateVersion = dataObj.getInt("templateVersion"); | ||
} | ||
|
||
@Override | ||
public boolean equals(Object o) { | ||
if (this == o) return true; | ||
if (o == null || getClass() != o.getClass()) return false; | ||
RolloutAssignment that = (RolloutAssignment) o; | ||
return templateVersion == that.templateVersion | ||
&& Objects.equals(rolloutId, that.rolloutId) | ||
&& Objects.equals(parameterKey, that.parameterKey) | ||
&& Objects.equals(parameterValue, that.parameterValue) | ||
&& Objects.equals(variantId, that.variantId); | ||
} | ||
|
||
@Override | ||
public int hashCode() { | ||
return Objects.hash(rolloutId, parameterKey, parameterValue, variantId, templateVersion); | ||
} | ||
} |
Oops, something went wrong.