Files
UXP-Fixed/toolkit/components/telemetry/tests/unit/test_TelemetryTimestamps.js
T
2018-02-02 04:16:08 -05:00

78 lines
2.9 KiB
JavaScript

/* 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();
});