76 lines
1.9 KiB
JavaScript
76 lines
1.9 KiB
JavaScript
import { TelemetryArchive } from "resource://gre/modules/TelemetryArchive.sys.mjs";
|
|
|
|
function checkForProperties(ping, expected) {
|
|
for (let [props, val] of expected) {
|
|
let test = ping;
|
|
for (let prop of props) {
|
|
test = test[prop];
|
|
if (test === undefined) {
|
|
return false;
|
|
}
|
|
}
|
|
if (test !== val) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* A helper object that allows test code to check whether a telemetry ping
|
|
* was properly saved. To use, first initialize to collect the starting pings
|
|
* and then check for new ping data.
|
|
*/
|
|
function Checker() {}
|
|
Checker.prototype = {
|
|
promiseInit() {
|
|
this._pingMap = new Map();
|
|
return TelemetryArchive.promiseArchivedPingList().then(plist => {
|
|
for (let ping of plist) {
|
|
this._pingMap.set(ping.id, ping);
|
|
}
|
|
});
|
|
},
|
|
|
|
/**
|
|
* Find and return a new ping with certain properties.
|
|
*
|
|
* @param expected: an array of [['prop'...], 'value'] to check
|
|
* For example:
|
|
* [
|
|
* [['environment', 'build', 'applicationId'], '20150101010101'],
|
|
* [['version'], 1],
|
|
* [['metadata', 'OOMAllocationSize'], 123456789],
|
|
* ]
|
|
* @returns a matching ping if found, or null
|
|
*/
|
|
async promiseFindPing(type, expected) {
|
|
let candidates = [];
|
|
let plist = await TelemetryArchive.promiseArchivedPingList();
|
|
for (let ping of plist) {
|
|
if (this._pingMap.has(ping.id)) {
|
|
continue;
|
|
}
|
|
if (ping.type == type) {
|
|
candidates.push(ping);
|
|
}
|
|
}
|
|
|
|
for (let candidate of candidates) {
|
|
let ping = await TelemetryArchive.promiseArchivedPingById(candidate.id);
|
|
if (checkForProperties(ping, expected)) {
|
|
return ping;
|
|
}
|
|
}
|
|
return null;
|
|
},
|
|
};
|
|
|
|
export const TelemetryArchiveTesting = {
|
|
setup() {
|
|
Services.prefs.setCharPref("toolkit.telemetry.log.level", "Trace");
|
|
Services.prefs.setBoolPref("toolkit.telemetry.archive.enabled", true);
|
|
},
|
|
|
|
Checker,
|
|
};
|