Bug 1379025 - Update sync ping tests for the "firm up" changes r=nalexander draft
authorGrigory Kruglov <gkruglov@mozilla.com>
Fri, 07 Jul 2017 15:15:58 -0400
changeset 605453 5ad6f7e1ca1b7e1b8d63cfba960b1d3ca22e6974
parent 604915 e23f55311ecb5e0cd14c5010d1b40663b3a2e7d0
child 636497 82626f069cb80d4ecfaf48cc85de4aa8745db2e8
push id67413
push userbmo:gkruglov@mozilla.com
push dateFri, 07 Jul 2017 19:16:33 +0000
reviewersnalexander
bugs1379025
milestone56.0a1
Bug 1379025 - Update sync ping tests for the "firm up" changes r=nalexander MozReview-Commit-ID: 19eC01yOg3n
mobile/android/tests/background/junit4/src/org/mozilla/gecko/telemetry/pingbuilders/TelemetrySyncPingBuilderTest.java
mobile/android/tests/background/junit4/src/org/mozilla/gecko/telemetry/pingbuilders/TelemetrySyncPingBundleBuilderTest.java
--- 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