summaryrefslogtreecommitdiffstats
path: root/toolkit/components/telemetry/tests/unit/test_SubsessionChaining.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/telemetry/tests/unit/test_SubsessionChaining.js')
-rw-r--r--toolkit/components/telemetry/tests/unit/test_SubsessionChaining.js236
1 files changed, 0 insertions, 236 deletions
diff --git a/toolkit/components/telemetry/tests/unit/test_SubsessionChaining.js b/toolkit/components/telemetry/tests/unit/test_SubsessionChaining.js
deleted file mode 100644
index c86fb0499..000000000
--- a/toolkit/components/telemetry/tests/unit/test_SubsessionChaining.js
+++ /dev/null
@@ -1,236 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- http://creativecommons.org/publicdomain/zero/1.0/
-*/
-
-Cu.import("resource://gre/modules/Preferences.jsm", this);
-Cu.import("resource://gre/modules/Promise.jsm", this);
-Cu.import("resource://gre/modules/Task.jsm", this);
-Cu.import("resource://gre/modules/TelemetryArchive.jsm", this);
-Cu.import("resource://gre/modules/TelemetryController.jsm", this);
-Cu.import("resource://gre/modules/TelemetryEnvironment.jsm", this);
-Cu.import("resource://gre/modules/osfile.jsm", this);
-Cu.import("resource://gre/modules/XPCOMUtils.jsm", this);
-
-const MS_IN_ONE_HOUR = 60 * 60 * 1000;
-const MS_IN_ONE_DAY = 24 * MS_IN_ONE_HOUR;
-
-const PREF_BRANCH = "toolkit.telemetry.";
-const PREF_ARCHIVE_ENABLED = PREF_BRANCH + "archive.enabled";
-
-const REASON_ABORTED_SESSION = "aborted-session";
-const REASON_DAILY = "daily";
-const REASON_ENVIRONMENT_CHANGE = "environment-change";
-const REASON_SHUTDOWN = "shutdown";
-
-XPCOMUtils.defineLazyGetter(this, "DATAREPORTING_PATH", function() {
- return OS.Path.join(OS.Constants.Path.profileDir, "datareporting");
-});
-
-var promiseValidateArchivedPings = Task.async(function*(aExpectedReasons) {
- // The list of ping reasons which mark the session end (and must reset the subsession
- // count).
- const SESSION_END_PING_REASONS = new Set([ REASON_ABORTED_SESSION, REASON_SHUTDOWN ]);
-
- let list = yield TelemetryArchive.promiseArchivedPingList();
-
- // We're just interested in the "main" pings.
- list = list.filter(p => p.type == "main");
-
- Assert.equal(aExpectedReasons.length, list.length, "All the expected pings must be received.");
-
- let previousPing = yield TelemetryArchive.promiseArchivedPingById(list[0].id);
- Assert.equal(aExpectedReasons.shift(), previousPing.payload.info.reason,
- "Telemetry should only get pings with expected reasons.");
- Assert.equal(previousPing.payload.info.previousSessionId, null,
- "The first session must report a null previous session id.");
- Assert.equal(previousPing.payload.info.previousSubsessionId, null,
- "The first subsession must report a null previous subsession id.");
- Assert.equal(previousPing.payload.info.profileSubsessionCounter, 1,
- "profileSubsessionCounter must be 1 the first time.");
- Assert.equal(previousPing.payload.info.subsessionCounter, 1,
- "subsessionCounter must be 1 the first time.");
-
- let expectedSubsessionCounter = 1;
- let expectedPreviousSessionId = previousPing.payload.info.sessionId;
-
- for (let i = 1; i < list.length; i++) {
- let currentPing = yield TelemetryArchive.promiseArchivedPingById(list[i].id);
- let currentInfo = currentPing.payload.info;
- let previousInfo = previousPing.payload.info;
- do_print("Archive entry " + i + " - id: " + currentPing.id + ", reason: " + currentInfo.reason);
-
- Assert.equal(aExpectedReasons.shift(), currentInfo.reason,
- "Telemetry should only get pings with expected reasons.");
- Assert.equal(currentInfo.previousSessionId, expectedPreviousSessionId,
- "Telemetry must correctly chain session identifiers.");
- Assert.equal(currentInfo.previousSubsessionId, previousInfo.subsessionId,
- "Telemetry must correctly chain subsession identifiers.");
- Assert.equal(currentInfo.profileSubsessionCounter, previousInfo.profileSubsessionCounter + 1,
- "Telemetry must correctly track the profile subsessions count.");
- Assert.equal(currentInfo.subsessionCounter, expectedSubsessionCounter,
- "The subsession counter should be monotonically increasing.");
-
- // Store the current ping as previous.
- previousPing = currentPing;
- // Reset the expected subsession counter, if required. Otherwise increment the expected
- // subsession counter.
- // If this is the final subsession of a session we need to update expected values accordingly.
- if (SESSION_END_PING_REASONS.has(currentInfo.reason)) {
- expectedSubsessionCounter = 1;
- expectedPreviousSessionId = currentInfo.sessionId;
- } else {
- expectedSubsessionCounter++;
- }
- }
-});
-
-add_task(function* test_setup() {
- do_test_pending();
-
- // Addon manager needs a profile directory
- do_get_profile();
- loadAddonManager("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2");
- // Make sure we don't generate unexpected pings due to pref changes.
- yield setEmptyPrefWatchlist();
-
- Preferences.set(PREF_TELEMETRY_ENABLED, true);
-});
-
-add_task(function* test_subsessionsChaining() {
- if (gIsAndroid) {
- // We don't support subsessions yet on Android, so skip the next checks.
- return;
- }
-
- const PREF_TEST = PREF_BRANCH + "test.pref1";
- const PREFS_TO_WATCH = new Map([
- [PREF_TEST, {what: TelemetryEnvironment.RECORD_PREF_VALUE}],
- ]);
- Preferences.reset(PREF_TEST);
-
- // Fake the clock data to manually trigger an aborted-session ping and a daily ping.
- // This is also helpful to make sure we get the archived pings in an expected order.
- let now = fakeNow(2009, 9, 18, 0, 0, 0);
- let monotonicNow = fakeMonotonicNow(1000);
-
- let moveClockForward = (minutes) => {
- let ms = minutes * MILLISECONDS_PER_MINUTE;
- now = fakeNow(futureDate(now, ms));
- monotonicNow = fakeMonotonicNow(monotonicNow + ms);
- }
-
- // Keep track of the ping reasons we're expecting in this test.
- let expectedReasons = [];
-
- // Start and shut down Telemetry. We expect a shutdown ping with profileSubsessionCounter: 1,
- // subsessionCounter: 1, subsessionId: A, and previousSubsessionId: null to be archived.
- yield TelemetryController.testSetup();
- yield TelemetryController.testShutdown();
- expectedReasons.push(REASON_SHUTDOWN);
-
- // Start Telemetry but don't wait for it to initialise before shutting down. We expect a
- // shutdown ping with profileSubsessionCounter: 2, subsessionCounter: 1, subsessionId: B
- // and previousSubsessionId: A to be archived.
- moveClockForward(30);
- TelemetryController.testReset();
- yield TelemetryController.testShutdown();
- expectedReasons.push(REASON_SHUTDOWN);
-
- // Start Telemetry and simulate an aborted-session ping. We expect an aborted-session ping
- // with profileSubsessionCounter: 3, subsessionCounter: 1, subsessionId: C and
- // previousSubsessionId: B to be archived.
- let schedulerTickCallback = null;
- fakeSchedulerTimer(callback => schedulerTickCallback = callback, () => {});
- yield TelemetryController.testReset();
- moveClockForward(6);
- // Trigger the an aborted session ping save. When testing,we are not saving the aborted-session
- // ping as soon as Telemetry starts, otherwise we would end up with unexpected pings being
- // sent when calling |TelemetryController.testReset()|, thus breaking some tests.
- Assert.ok(!!schedulerTickCallback);
- yield schedulerTickCallback();
- expectedReasons.push(REASON_ABORTED_SESSION);
-
- // Start Telemetry and trigger an environment change through a pref modification. We expect
- // an environment-change ping with profileSubsessionCounter: 4, subsessionCounter: 1,
- // subsessionId: D and previousSubsessionId: C to be archived.
- moveClockForward(30);
- yield TelemetryController.testReset();
- TelemetryEnvironment.testWatchPreferences(PREFS_TO_WATCH);
- moveClockForward(30);
- Preferences.set(PREF_TEST, 1);
- expectedReasons.push(REASON_ENVIRONMENT_CHANGE);
-
- // Shut down Telemetry. We expect a shutdown ping with profileSubsessionCounter: 5,
- // subsessionCounter: 2, subsessionId: E and previousSubsessionId: D to be archived.
- moveClockForward(30);
- yield TelemetryController.testShutdown();
- expectedReasons.push(REASON_SHUTDOWN);
-
- // Start Telemetry and trigger a daily ping. We expect a daily ping with
- // profileSubsessionCounter: 6, subsessionCounter: 1, subsessionId: F and
- // previousSubsessionId: E to be archived.
- moveClockForward(30);
- yield TelemetryController.testReset();
-
- // Delay the callback around midnight.
- now = fakeNow(futureDate(now, MS_IN_ONE_DAY));
- // Trigger the daily ping.
- yield schedulerTickCallback();
- expectedReasons.push(REASON_DAILY);
-
- // Trigger an environment change ping. We expect an environment-changed ping with
- // profileSubsessionCounter: 7, subsessionCounter: 2, subsessionId: G and
- // previousSubsessionId: F to be archived.
- moveClockForward(30);
- Preferences.set(PREF_TEST, 0);
- expectedReasons.push(REASON_ENVIRONMENT_CHANGE);
-
- // Shut down Telemetry and trigger a shutdown ping.
- moveClockForward(30);
- yield TelemetryController.testShutdown();
- expectedReasons.push(REASON_SHUTDOWN);
-
- // Start Telemetry and trigger an environment change.
- yield TelemetryController.testReset();
- TelemetryEnvironment.testWatchPreferences(PREFS_TO_WATCH);
- moveClockForward(30);
- Preferences.set(PREF_TEST, 1);
- expectedReasons.push(REASON_ENVIRONMENT_CHANGE);
-
- // Don't shut down, instead trigger an aborted-session ping.
- moveClockForward(6);
- // Trigger the an aborted session ping save.
- yield schedulerTickCallback();
- expectedReasons.push(REASON_ABORTED_SESSION);
-
- // Start Telemetry and trigger a daily ping.
- moveClockForward(30);
- yield TelemetryController.testReset();
- // Delay the callback around midnight.
- now = futureDate(now, MS_IN_ONE_DAY);
- fakeNow(now);
- // Trigger the daily ping.
- yield schedulerTickCallback();
- expectedReasons.push(REASON_DAILY);
-
- // Trigger an environment change.
- moveClockForward(30);
- Preferences.set(PREF_TEST, 0);
- expectedReasons.push(REASON_ENVIRONMENT_CHANGE);
-
- // And an aborted-session ping again.
- moveClockForward(6);
- // Trigger the an aborted session ping save.
- yield schedulerTickCallback();
- expectedReasons.push(REASON_ABORTED_SESSION);
-
- // Make sure the aborted-session ping gets archived.
- yield TelemetryController.testReset();
-
- yield promiseValidateArchivedPings(expectedReasons);
-});
-
-add_task(function* () {
- yield TelemetryController.testShutdown();
- do_test_finished();
-});