Bug 1379025 - Update sync ping tests for the "firm up" changes r=nalexander
MozReview-Commit-ID: 19eC01yOg3n
--- a/mobile/android/tests/background/junit4/src/org/mozilla/gecko/telemetry/pingbuilders/TelemetrySyncPingBuilderTest.java
+++ b/mobile/android/tests/background/junit4/src/org/mozilla/gecko/telemetry/pingbuilders/TelemetrySyncPingBuilderTest.java
@@ -38,47 +38,44 @@ public class TelemetrySyncPingBuilderTes
.setUID("uid")
.setTook(123L)
.setRestarted(false)
.build();
ExtendedJSONObject payload = localPing.getPayload();
assertEquals("uid", payload.getString("uid"));
assertEquals(Long.valueOf(123L), payload.getLong("took"));
assertEquals("device-id", payload.getString("deviceID"));
- assertEquals(Integer.valueOf(1), payload.getIntegerSafely("version"));
assertFalse(payload.containsKey("restarted"));
localPing = builder
.setDeviceID("device-id")
.setUID("uid")
.setTook(123L)
.setRestarted(true)
.build();
payload = localPing.getPayload();
assertEquals("uid", payload.getString("uid"));
assertEquals(Long.valueOf(123L), payload.getLong("took"));
assertEquals("device-id", payload.getString("deviceID"));
- assertEquals(Integer.valueOf(1), payload.getIntegerSafely("version"));
+ assertTrue(payload.getLong("when") != null);
assertEquals(true, payload.getBoolean("restarted"));
}
@Test
public void testDevices() throws Exception {
ArrayList<Parcelable> devices = new ArrayList<>();
TelemetryLocalPing localPing = builder
.setDevices(devices)
.build();
ExtendedJSONObject payload = localPing.getPayload();
// Empty list isn't part of the JSON.
- assertEquals(
- "{\"version\":1}",
- payload.toString()
- );
+ assertTrue(payload.containsKey("when"));
+ assertEquals(1, payload.keySet().size());
Bundle device = new Bundle();
device.putString("os", "Android");
device.putString("version", "53.0a1");
device.putString("id", "80daf12dsadsa4236914cff2cc6e9d0f80a965380e2cf8e976e4004ead887521b5d9");
devices.add(device);
// Test with only one device
--- a/mobile/android/tests/background/junit4/src/org/mozilla/gecko/telemetry/pingbuilders/TelemetrySyncPingBundleBuilderTest.java
+++ b/mobile/android/tests/background/junit4/src/org/mozilla/gecko/telemetry/pingbuilders/TelemetrySyncPingBundleBuilderTest.java
@@ -107,35 +107,48 @@ public class TelemetrySyncPingBundleBuil
builder.setSyncEventStore(eventPings);
TelemetryOutgoingPing outgoingPing = builder.build();
assertTrue(outgoingPing.getPayload().containsKey("application"));
assertTrue(outgoingPing.getPayload().containsKey("payload"));
assertTrue(outgoingPing.getPayload().containsKey("id"));
assertEquals("sync", outgoingPing.getPayload().getString("type"));
- assertEquals(Integer.valueOf(4), outgoingPing.getPayload().getIntegerSafely("version"));
+ assertEquals(Integer.valueOf(5), outgoingPing.getPayload().getIntegerSafely("version"));
// Test application key.
ExtendedJSONObject application = outgoingPing.getPayload().getObject("application");
assertEquals("Mozilla", application.getString("vendor"));
assertTrue(application.containsKey("architecture"));
assertTrue(application.containsKey("platformVersion"));
assertTrue(application.containsKey("displayVersion"));
assertTrue(application.containsKey("version"));
assertTrue(application.containsKey("name"));
assertTrue(application.containsKey("channel"));
- assertTrue(application.containsKey("buildID"));
+ assertTrue(application.containsKey("buildId"));
assertTrue(application.containsKey("xpcomAbi"));
- // Test general shape of payload.
+ // Test os key.
+ ExtendedJSONObject os = outgoingPing.getPayload().getObject("os");
+ assertEquals(3, os.keySet().size());
+ assertEquals("Android", os.getString("name"));
+ // Going to be different depending on the test environment.
+ // Test for presence and type to void random failures.
+ assertTrue(os.getIntegerSafely("version") != null);
+ // Likely "en-US" in tests, but let's test for presence and type to avoid random failures.
+ assertTrue(os.getString("locale") != null);
+
+ // Test general shape of payload. Expecting {"syncs":[],"why":"schedule", "version": 1}.
// NB that even though we set an empty sync event store, it's not in the json string.
// That's because sync events are not yet instrumented.
ExtendedJSONObject payload = outgoingPing.getPayload().getObject("payload");
- assertEquals("{\"syncs\":[],\"why\":\"schedule\"}", payload.toJSONString());
+ assertEquals(3, payload.keySet().size());
+ assertEquals("schedule", payload.getString("why"));
+ assertEquals(Integer.valueOf(1), payload.getIntegerSafely("version"));
+ assertEquals(0, payload.getArray("syncs").size());
}
@Test
public void testBundlingOfMultiplePings() throws Exception {
// Try just one ping first.
syncPings.storePing(new TelemetrySyncPingBuilder()
.setDeviceID("test-device-id")
.setRestarted(true)
@@ -147,17 +160,17 @@ public class TelemetrySyncPingBundleBuil
TelemetryOutgoingPing outgoingPing = builder.build();
// Ensure we have that one ping.
ExtendedJSONObject payload = outgoingPing.getPayload().getObject("payload");
assertEquals("schedule", payload.getString("why"));
JSONArray syncs = payload.getArray("syncs");
assertEquals(1, syncs.size());
- assertSync((ExtendedJSONObject) syncs.get(0), "test-uid", 123L, "test-device-id", 1, true);
+ assertSync((ExtendedJSONObject) syncs.get(0), "test-uid", 123L, "test-device-id", true);
// Add another ping.
syncPings.storePing(new TelemetrySyncPingBuilder()
.setDeviceID("test-device-id")
.setRestarted(false)
.setTook(321L)
.setUID("test-uid")
.build()
@@ -165,25 +178,31 @@ public class TelemetrySyncPingBundleBuil
builder.setSyncStore(syncPings);
// We should have two pings now.
outgoingPing = builder.build();
syncs = outgoingPing.getPayload()
.getObject("payload")
.getArray("syncs");
assertEquals(2, syncs.size());
- assertSync((ExtendedJSONObject) syncs.get(0), "test-uid", 123L, "test-device-id", 1, true);
- assertSync((ExtendedJSONObject) syncs.get(1), "test-uid", 321L, "test-device-id", 1, false);
+ assertSync((ExtendedJSONObject) syncs.get(0), "test-uid", 123L, "test-device-id", true);
+ assertSync((ExtendedJSONObject) syncs.get(1), "test-uid", 321L, "test-device-id", false);
}
- private void assertSync(ExtendedJSONObject sync, String uid, long took, String deviceID, int version, boolean restarted) throws JSONException {
+ private void assertSync(ExtendedJSONObject sync, String uid, long took, String deviceID, boolean restarted) throws JSONException {
assertEquals(uid, sync.getString("uid"));
assertEquals(Long.valueOf(took), sync.getLong("took"));
assertEquals(deviceID, sync.getString("deviceID"));
- assertEquals(Integer.valueOf(version), sync.getIntegerSafely("version"));
+
+ // Test that 'when' timestamp looks generally sane.
+ final long now = System.currentTimeMillis();
+ final long yearAgo = now - 1000L * 60 * 60 * 24 * 365;
+ assertTrue(sync.getLong("when") > yearAgo);
+ assertTrue(sync.getLong("when") <= now);
+
if (restarted) {
assertEquals(true, sync.getBoolean("restarted"));
} else {
assertFalse(sync.containsKey("restarted"));
}
}
}
\ No newline at end of file