diff options
Diffstat (limited to 'toolkit/components/telemetry/tests/unit/test_TelemetryTimestamps.js')
-rw-r--r-- | toolkit/components/telemetry/tests/unit/test_TelemetryTimestamps.js | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/toolkit/components/telemetry/tests/unit/test_TelemetryTimestamps.js b/toolkit/components/telemetry/tests/unit/test_TelemetryTimestamps.js new file mode 100644 index 000000000..75bf3157a --- /dev/null +++ b/toolkit/components/telemetry/tests/unit/test_TelemetryTimestamps.js @@ -0,0 +1,77 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +var Cu = Components.utils; +var Cc = Components.classes; +var Ci = Components.interfaces; +Cu.import("resource://gre/modules/Services.jsm"); +Cu.import("resource://gre/modules/TelemetryController.jsm", this); +Cu.import("resource://gre/modules/TelemetrySession.jsm", this); +Cu.import('resource://gre/modules/XPCOMUtils.jsm'); + +// The @mozilla/xre/app-info;1 XPCOM object provided by the xpcshell test harness doesn't +// implement the nsIXULAppInfo interface, which is needed by Services.jsm and +// TelemetrySession.jsm. updateAppInfo() creates and registers a minimal mock app-info. +Cu.import("resource://testing-common/AppInfo.jsm"); +updateAppInfo(); + +var gGlobalScope = this; + +function getSimpleMeasurementsFromTelemetryController() { + return TelemetrySession.getPayload().simpleMeasurements; +} + +add_task(function* test_setup() { + // Telemetry needs the AddonManager. + loadAddonManager(); + // Make profile available for |TelemetryController.testShutdown()|. + do_get_profile(); + + // Make sure we don't generate unexpected pings due to pref changes. + yield setEmptyPrefWatchlist(); + + yield new Promise(resolve => + Services.telemetry.asyncFetchTelemetryData(resolve)); +}); + +add_task(function* actualTest() { + yield TelemetryController.testSetup(); + + // Test the module logic + let tmp = {}; + Cu.import("resource://gre/modules/TelemetryTimestamps.jsm", tmp); + let TelemetryTimestamps = tmp.TelemetryTimestamps; + let now = Date.now(); + TelemetryTimestamps.add("foo"); + do_check_true(TelemetryTimestamps.get().foo != null); // foo was added + do_check_true(TelemetryTimestamps.get().foo >= now); // foo has a reasonable value + + // Add timestamp with value + // Use a value far in the future since TelemetryController substracts the time of + // process initialization. + const YEAR_4000_IN_MS = 64060588800000; + TelemetryTimestamps.add("bar", YEAR_4000_IN_MS); + do_check_eq(TelemetryTimestamps.get().bar, YEAR_4000_IN_MS); // bar has the right value + + // Can't add the same timestamp twice + TelemetryTimestamps.add("bar", 2); + do_check_eq(TelemetryTimestamps.get().bar, YEAR_4000_IN_MS); // bar wasn't overwritten + + let threw = false; + try { + TelemetryTimestamps.add("baz", "this isn't a number"); + } catch (ex) { + threw = true; + } + do_check_true(threw); // adding non-number threw + do_check_null(TelemetryTimestamps.get().baz); // no baz was added + + // Test that the data gets added to the telemetry ping properly + let simpleMeasurements = getSimpleMeasurementsFromTelemetryController(); + do_check_true(simpleMeasurements != null); // got simple measurements from ping data + do_check_true(simpleMeasurements.foo > 1); // foo was included + do_check_true(simpleMeasurements.bar > 1); // bar was included + do_check_eq(undefined, simpleMeasurements.baz); // baz wasn't included since it wasn't added + + yield TelemetryController.testShutdown(); +}); |