Skip to content
This repository has been archived by the owner on Nov 1, 2022. It is now read-only.

Commit

Permalink
Closes #1606: Add PocketEvent test + fix queueEvent
Browse files Browse the repository at this point in the history
  • Loading branch information
psymoon authored and pocmo committed Jan 8, 2019
1 parent e3b8dea commit 74ea893
Show file tree
Hide file tree
Showing 3 changed files with 80 additions and 6 deletions.
Expand Up @@ -20,6 +20,7 @@
import org.mozilla.telemetry.ping.TelemetryMobileEventPingBuilder;
import org.mozilla.telemetry.ping.TelemetryPing;
import org.mozilla.telemetry.ping.TelemetryPingBuilder;
import org.mozilla.telemetry.ping.TelemetryPocketEventPingBuilder;
import org.mozilla.telemetry.schedule.TelemetryScheduler;
import org.mozilla.telemetry.storage.TelemetryStorage;

Expand Down Expand Up @@ -95,6 +96,7 @@ public void run() {
// ping type and then falling back on the legacy ping type.
final TelemetryPingBuilder mobileEventBuilder = pingBuilders.get(TelemetryMobileEventPingBuilder.TYPE);
final TelemetryPingBuilder focusEventBuilder = pingBuilders.get(TelemetryEventPingBuilder.TYPE);
final TelemetryPingBuilder pocketEventBuilder = pingBuilders.get(TelemetryPocketEventPingBuilder.TYPE);
final EventsMeasurement measurement;
final String addedPingType;
if (mobileEventBuilder != null) {
Expand All @@ -103,11 +105,13 @@ public void run() {
} else if (focusEventBuilder != null) {
measurement = ((TelemetryEventPingBuilder) focusEventBuilder).getEventsMeasurement();
addedPingType = focusEventBuilder.getType();
} else if (pocketEventBuilder != null) {
measurement = ((TelemetryPocketEventPingBuilder) pocketEventBuilder).getEventsMeasurement();
addedPingType = pocketEventBuilder.getType();
} else {
throw new IllegalStateException("Expect either TelemetryEventPingBuilder or " +
"TelemetryMobileEventPingBuilder to be added to queue events");
}

measurement.add(event);
if (measurement.getEventCount() >= configuration.getMaximumNumberOfEventsPerPing()) {
queuePing(addedPingType);
Expand Down
Expand Up @@ -6,6 +6,7 @@

import org.mozilla.telemetry.config.TelemetryConfiguration;
import org.mozilla.telemetry.measurement.CreatedTimestampMeasurement;
import org.mozilla.telemetry.measurement.DeviceMeasurement;
import org.mozilla.telemetry.measurement.EventsMeasurement;
import org.mozilla.telemetry.measurement.LocaleMeasurement;
import org.mozilla.telemetry.measurement.OperatingSystemMeasurement;
Expand Down Expand Up @@ -34,6 +35,7 @@ public TelemetryPocketEventPingBuilder(TelemetryConfiguration configuration) {
addMeasurement(new ProcessStartTimestampMeasurement(configuration));
addMeasurement(new SequenceMeasurement(configuration, this));
addMeasurement(new LocaleMeasurement());
addMeasurement(new DeviceMeasurement());
addMeasurement(new OperatingSystemMeasurement());
addMeasurement(new OperatingSystemVersionMeasurement());
addMeasurement(new CreatedTimestampMeasurement());
Expand All @@ -50,11 +52,6 @@ public EventsMeasurement getEventsMeasurement() {
return eventsMeasurement;
}

@Override
public boolean canBuild() {
return eventsMeasurement.getEventCount() >= getConfiguration().getMinimumEventsForUpload();
}

@Override
protected String getUploadPath(final String documentId) {
return super.getUploadPath(documentId) + "?v=4";
Expand Down
Expand Up @@ -35,6 +35,7 @@
import org.mozilla.telemetry.ping.TelemetryCorePingBuilder;
import org.mozilla.telemetry.ping.TelemetryEventPingBuilder;
import org.mozilla.telemetry.ping.TelemetryMobileEventPingBuilder;
import org.mozilla.telemetry.ping.TelemetryPocketEventPingBuilder;
import org.mozilla.telemetry.schedule.TelemetryScheduler;
import org.mozilla.telemetry.schedule.jobscheduler.JobSchedulerTelemetryScheduler;
import org.mozilla.telemetry.schedule.jobscheduler.TelemetryJobService;
Expand Down Expand Up @@ -404,6 +405,78 @@ public String getDefaultSearchEngineIdentifier() {
server.shutdown();
}

@Test
public void testPocketPingIntegration() throws Exception {
final MockWebServer server = new MockWebServer();
server.enqueue(new MockResponse().setBody("OK"));

final TelemetryConfiguration configuration = new TelemetryConfiguration(RuntimeEnvironment.application)
.setAppName("TelemetryTest")
.setAppVersion("13.1.3")
.setUpdateChannel("test")
.setBuildId("789")
.setServerEndpoint("http://" + server.getHostName() + ":" + server.getPort())
.setUserAgent(TEST_USER_AGENT);

final TelemetryPingSerializer serializer = new JSONPingSerializer();
final FileTelemetryStorage storage = new FileTelemetryStorage(configuration, serializer);

final TelemetryClient client = spy(new TelemetryClient(httpClient));
final TelemetryScheduler scheduler = new JobSchedulerTelemetryScheduler();

final TelemetryPocketEventPingBuilder pingBuilder = spy(new TelemetryPocketEventPingBuilder(configuration));
doReturn("ffffffff-0000-0000-ffff-ffffffffffff").when(pingBuilder).generateDocumentId();

final Telemetry telemetry = new Telemetry(configuration, storage, client, scheduler)
.addPingBuilder(pingBuilder);
TelemetryHolder.set(telemetry);

TelemetryEvent.create("action", "type", "search_bar").queue();
TelemetryEvent.create("action", "type_query", "search_bar").queue();
TelemetryEvent.create("action", "click", "erase_button").queue();

telemetry.queuePing(TelemetryPocketEventPingBuilder.TYPE);
telemetry.scheduleUpload();

TestUtils.waitForExecutor(telemetry);

int a = storage.countStoredPings(TelemetryPocketEventPingBuilder.TYPE);
int b = telemetry.getStorage().countStoredPings(TelemetryPocketEventPingBuilder.TYPE);

assertEquals(1, storage.countStoredPings(TelemetryPocketEventPingBuilder.TYPE));

assertJobIsScheduled();
executePendingJob(TelemetryPocketEventPingBuilder.TYPE);

verify(client).uploadPing(eq(configuration), anyString(), anyString());

assertEquals(0, storage.countStoredPings(TelemetryPocketEventPingBuilder.TYPE));

final RecordedRequest request = server.takeRequest();
assertEquals("POST /submit/telemetry/ffffffff-0000-0000-ffff-ffffffffffff/fire-tv-events/TelemetryTest/13.1.3/test/789?v=4 HTTP/1.1", request.getRequestLine());
assertEquals("application/json; charset=utf-8", request.getHeader("Content-Type"));
assertEquals(TEST_USER_AGENT, request.getHeader("User-Agent"));
assertNotNull(request.getHeader("Date"));

final JSONObject object = new JSONObject(request.getBody().readUtf8());

assertFalse(object.has("clientId")); //Make sure pocket ping doesn't include client-id
assertTrue(object.has("pocketId"));
assertTrue(object.has("v"));
assertTrue(object.has("seq"));
assertTrue(object.has("locale"));
assertTrue(object.has("os"));
assertTrue(object.has("device"));
assertTrue(object.has("created"));
assertTrue(object.has("tz"));
assertTrue(object.has("events"));

final JSONArray events = object.getJSONArray("events");
assertEquals(3, events.length());

server.shutdown();
}

@Test
public void testPingIsQueuedIfEventLimitIsReached() throws Exception {
final TelemetryConfiguration configuration = new TelemetryConfiguration(RuntimeEnvironment.application);
Expand Down

0 comments on commit 74ea893

Please sign in to comment.