tenfourfox/services/healthreport/tests/xpcshell/test_provider_hotfix.js
Cameron Kaiser c9b2922b70 hello FPR
2017-04-19 00:56:45 -07:00

180 lines
5.1 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
var {utils: Cu} = Components;
Cu.import("resource://gre/modules/osfile.jsm");
Cu.import("resource://gre/modules/Metrics.jsm");
Cu.import("resource://gre/modules/services/healthreport/providers.jsm");
const EXAMPLE_2014052701 = {
"upgradedFrom":"13.0.1",
"uninstallReason":"SUCCESSFUL_UPGRADE",
"_entityID":null,
"forensicsID":"29525548-b653-49db-bfb8-a160cdfbeb4a",
"_installInProgress":false,
"_everCompatible":true,
"reportedWindowsVersion":[6,1,1],
"actualWindowsVersion":[6,1,1],
"firstNotifyDay":0,
"lastNotifyDay":0,
"downloadAttempts":1,
"downloadFailures":0,
"installAttempts":1,
"installSuccesses":1,
"installLauncherFailures":0,
"installFailures":0,
"notificationsShown":0,
"notificationsClicked":0,
"notificationsDismissed":0,
"notificationsRemoved":0,
"launcherExitCodes":{"0":1}
};
function run_test() {
run_next_test();
}
add_task(function* init() {
do_get_profile();
});
add_task(function test_constructor() {
new HotfixProvider();
});
add_task(function* test_init() {
let storage = yield Metrics.Storage("init");
let provider = new HotfixProvider();
yield provider.init(storage);
yield provider.shutdown();
yield storage.close();
});
add_task(function* test_collect_empty() {
let storage = yield Metrics.Storage("collect_empty");
let provider = new HotfixProvider();
yield provider.init(storage);
yield provider.collectDailyData();
let m = provider.getMeasurement("update", 1);
let data = yield m.getValues();
Assert.equal(data.singular.size, 0);
Assert.equal(data.days.size, 0);
yield storage.close();
});
add_task(function* test_collect_20140527() {
let storage = yield Metrics.Storage("collect_20140527");
let provider = new HotfixProvider();
yield provider.init(storage);
let path = OS.Path.join(OS.Constants.Path.profileDir,
"hotfix.v20140527.01.json");
let encoder = new TextEncoder();
yield OS.File.writeAtomic(path,
encoder.encode(JSON.stringify(EXAMPLE_2014052701)));
yield provider.collectDailyData();
let m = provider.getMeasurement("update", 1);
let data = yield m.getValues();
let s = data.singular;
Assert.equal(s.size, 7);
Assert.equal(s.get("v20140527.upgradedFrom")[1], "13.0.1");
Assert.equal(s.get("v20140527.uninstallReason")[1], "SUCCESSFUL_UPGRADE");
Assert.equal(s.get("v20140527.downloadAttempts")[1], 1);
Assert.equal(s.get("v20140527.downloadFailures")[1], 0);
Assert.equal(s.get("v20140527.installAttempts")[1], 1);
Assert.equal(s.get("v20140527.installFailures")[1], 0);
Assert.equal(s.get("v20140527.notificationsShown")[1], 0);
// Ensure the dynamic fields get serialized.
let serializer = m.serializer(m.SERIALIZE_JSON);
let d = serializer.singular(s);
Assert.deepEqual(d, {
"_v": 1,
"v20140527.upgradedFrom": "13.0.1",
"v20140527.uninstallReason": "SUCCESSFUL_UPGRADE",
"v20140527.downloadAttempts": 1,
"v20140527.downloadFailures": 0,
"v20140527.installAttempts": 1,
"v20140527.installFailures": 0,
"v20140527.notificationsShown": 0,
});
// Don't interfere with next test.
yield OS.File.remove(path);
yield storage.close();
});
add_task(function* test_collect_multiple_versions() {
let storage = yield Metrics.Storage("collect_multiple_versions");
let provider = new HotfixProvider();
yield provider.init(storage);
let p1 = {
upgradedFrom: "12.0",
uninstallReason: "SUCCESSFUL_UPGRADE",
downloadAttempts: 3,
downloadFailures: 1,
installAttempts: 1,
installFailures: 1,
notificationsShown: 2,
};
let p2 = {
downloadAttempts: 5,
downloadFailures: 3,
installAttempts: 2,
installFailures: 2,
uninstallReason: null,
notificationsShown: 1,
};
let path1 = OS.Path.join(OS.Constants.Path.profileDir, "updateHotfix.v20140601.json");
let path2 = OS.Path.join(OS.Constants.Path.profileDir, "updateHotfix.v20140701.json");
let encoder = new TextEncoder();
yield OS.File.writeAtomic(path1, encoder.encode(JSON.stringify(p1)));
yield OS.File.writeAtomic(path2, encoder.encode(JSON.stringify(p2)));
yield provider.collectDailyData();
let m = provider.getMeasurement("update", 1);
let data = yield m.getValues();
let serializer = m.serializer(m.SERIALIZE_JSON);
let d = serializer.singular(data.singular);
Assert.deepEqual(d, {
"_v": 1,
"v20140601.upgradedFrom": "12.0",
"v20140601.uninstallReason": "SUCCESSFUL_UPGRADE",
"v20140601.downloadAttempts": 3,
"v20140601.downloadFailures": 1,
"v20140601.installAttempts": 1,
"v20140601.installFailures": 1,
"v20140601.notificationsShown": 2,
"v20140701.uninstallReason": "STILL_INSTALLED",
"v20140701.downloadAttempts": 5,
"v20140701.downloadFailures": 3,
"v20140701.installAttempts": 2,
"v20140701.installFailures": 2,
"v20140701.notificationsShown": 1,
});
// Don't interfere with next test.
yield OS.File.remove(path1);
yield OS.File.remove(path2);
yield storage.close();
});