Bug 1811796 - Change Troubleshoot.sys.mjs to use console.error rather than Cu.reportError. r=mossop
Depends on D167517 Differential Revision: https://phabricator.services.mozilla.com/D167518
This commit is contained in:
@@ -356,103 +356,4 @@ const NormandyTestUtils = {
|
||||
};
|
||||
};
|
||||
},
|
||||
|
||||
/**
|
||||
* Creates an nsIConsoleListener that records all console messages. The
|
||||
* listener will be provided in the options argument to the test as
|
||||
* `consoleSpy`, and will have methods to assert that expected messages were
|
||||
* received. */
|
||||
withConsoleSpy() {
|
||||
return function(testFunction) {
|
||||
return async function wrappedTestFunction(args) {
|
||||
const consoleSpy = new TestConsoleListener();
|
||||
console.log("Starting to track console messages");
|
||||
Services.console.registerListener(consoleSpy);
|
||||
try {
|
||||
await testFunction({ ...args, consoleSpy });
|
||||
} finally {
|
||||
Services.console.unregisterListener(consoleSpy);
|
||||
console.log("Stopped monitoring console messages");
|
||||
}
|
||||
};
|
||||
};
|
||||
},
|
||||
};
|
||||
|
||||
class TestConsoleListener {
|
||||
constructor() {
|
||||
this.messages = [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Check that every item listed has been received on the console. Items can
|
||||
* be strings or regexes.
|
||||
*
|
||||
* Strings must be exact matches. Regexes must match according to
|
||||
* `RegExp::test`, which is to say they are not automatically bound to the
|
||||
* start or end of the message. If this is desired, include `^` and/or `$` in
|
||||
* your expression.
|
||||
*
|
||||
* @param {String|RegExp} expectedMessages
|
||||
* @param {String} [assertMessage] A message to include in the assertion message.
|
||||
* @return {boolean}
|
||||
*/
|
||||
assertAtLeast(
|
||||
expectedMessages,
|
||||
assertMessage = "Console should contain the expected messages."
|
||||
) {
|
||||
let expectedSet = new Set(expectedMessages);
|
||||
for (let { message } of this.messages) {
|
||||
let found = false;
|
||||
for (let expected of expectedSet) {
|
||||
if (expected.test && expected.test(message)) {
|
||||
found = true;
|
||||
} else if (expected === message) {
|
||||
found = true;
|
||||
}
|
||||
if (found) {
|
||||
expectedSet.delete(expected);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (expectedSet.size) {
|
||||
let remaining = Array.from(expectedSet);
|
||||
let errorMessageParts = [];
|
||||
if (assertMessage) {
|
||||
errorMessageParts.push(assertMessage);
|
||||
}
|
||||
errorMessageParts.push(`"${remaining[0]}"`);
|
||||
if (remaining.length > 1) {
|
||||
errorMessageParts.push(`and ${remaining.length - 1} more log messages`);
|
||||
}
|
||||
errorMessageParts.push("expected in the console but not found.");
|
||||
testGlobals.Assert.equal(
|
||||
expectedSet.size,
|
||||
0,
|
||||
errorMessageParts.join(" ")
|
||||
);
|
||||
} else {
|
||||
testGlobals.Assert.equal(expectedSet.size, 0, assertMessage);
|
||||
}
|
||||
}
|
||||
|
||||
// XPCOM
|
||||
|
||||
get QueryInterface() {
|
||||
return ChromeUtils.generateQI(["nsIConsoleListener"]);
|
||||
}
|
||||
|
||||
// nsIObserver
|
||||
|
||||
/**
|
||||
* Takes all script error messages that do not have an exception attached,
|
||||
* and emits a "Log.entryAdded" event.
|
||||
*
|
||||
* @param {nsIConsoleMessage} message
|
||||
* Message originating from the nsIConsoleService.
|
||||
*/
|
||||
observe(message) {
|
||||
this.messages.push(message);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -190,7 +190,7 @@ export var Troubleshoot = {
|
||||
dataProviders[name](providerDone.bind(null, name));
|
||||
} catch (err) {
|
||||
let msg = "Troubleshoot data provider failed: " + name + "\n" + err;
|
||||
Cu.reportError(msg);
|
||||
console.error(msg);
|
||||
providerDone(name, msg);
|
||||
}
|
||||
}
|
||||
@@ -920,7 +920,7 @@ var dataProviders = {
|
||||
].map(promise =>
|
||||
promise
|
||||
.catch(error => {
|
||||
Cu.reportError(error);
|
||||
console.error(error);
|
||||
return [];
|
||||
})
|
||||
.then(items => items.sort((a, b) => a.slug.localeCompare(b.slug)))
|
||||
|
||||
@@ -222,8 +222,8 @@ add_task(function normandyErrorHandling() {
|
||||
NormandyTestUtils.withStub(PreferenceRollouts, "getAllActive", {
|
||||
returnValue: Promise.reject("Expected error - PreferenceRollouts"),
|
||||
}),
|
||||
NormandyTestUtils.withConsoleSpy(),
|
||||
async function testNormandyErrorHandling({ consoleSpy }) {
|
||||
async function testNormandyErrorHandling() {
|
||||
let consoleEndFn = TestUtils.listenForConsoleMessages();
|
||||
let snapshot = await Troubleshoot.snapshot();
|
||||
let info = snapshot.normandy;
|
||||
Assert.deepEqual(
|
||||
@@ -241,12 +241,33 @@ add_task(function normandyErrorHandling() {
|
||||
[],
|
||||
"pref rollouts should be an empty list if there is an error"
|
||||
);
|
||||
|
||||
consoleSpy.assertAtLeast([
|
||||
let msgs = await consoleEndFn();
|
||||
let expectedSet = new Set([
|
||||
/Expected error - PreferenceExperiments/,
|
||||
/Expected error - AddonStudies/,
|
||||
/Expected error - PreferenceRollouts/,
|
||||
]);
|
||||
|
||||
for (let msg of msgs) {
|
||||
msg = msg.wrappedJSObject;
|
||||
if (msg.level != "error") {
|
||||
continue;
|
||||
}
|
||||
|
||||
let msgContents = msg.arguments[0];
|
||||
for (let expected of expectedSet) {
|
||||
if (expected.test(msgContents)) {
|
||||
expectedSet.delete(expected);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Assert.equal(
|
||||
expectedSet.size,
|
||||
0,
|
||||
"Should have no messages left in the expected set"
|
||||
);
|
||||
}
|
||||
)();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user