зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1407082 - Handle more kinds of errors in SyncTelemetry.transformError. r=kitcambridge
MozReview-Commit-ID: CjwY7w7vUqs --HG-- extra : rebase_source : 4030ab88c3eccd755272499ff0527e9e316998b1
This commit is contained in:
Родитель
44b6375075
Коммит
7555b605f1
|
@ -416,8 +416,9 @@ function cleanErrorMessage(error) {
|
|||
}
|
||||
// Try to filter things that look somewhat like a URL (in that they contain a
|
||||
// colon in the middle of non-whitespace), in case anything else is including
|
||||
// these in error messages.
|
||||
error = error.replace(/\S+:\S+/g, "<URL>");
|
||||
// these in error messages. Note that JSON.stringified stuff comes through
|
||||
// here, so we explicitly ignore double-quotes as well.
|
||||
error = error.replace(/[^\s"]+:[^\s"]+/g, "<URL>");
|
||||
return error;
|
||||
}
|
||||
|
||||
|
@ -713,10 +714,22 @@ class SyncTelemetryImpl {
|
|||
if (error.result) {
|
||||
return { name: "nserror", code: error.result };
|
||||
}
|
||||
|
||||
// It's probably an Error object, but it also could be some
|
||||
// other object that may or may not override toString to do
|
||||
// something useful.
|
||||
let msg = String(error);
|
||||
if (msg.startsWith("[object")) {
|
||||
// Nothing useful in the default, check for a string "message" property.
|
||||
if (typeof error.message == "string") {
|
||||
msg = String(error.message);
|
||||
} else {
|
||||
// Hopefully it won't come to this...
|
||||
msg = JSON.stringify(error);
|
||||
}
|
||||
}
|
||||
return {
|
||||
name: "unexpectederror",
|
||||
error: cleanErrorMessage(String(error))
|
||||
error: cleanErrorMessage(msg)
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -360,6 +360,36 @@ add_task(async function test_generic_engine_fail() {
|
|||
}
|
||||
});
|
||||
|
||||
add_task(async function test_engine_fail_weird_errors() {
|
||||
enableValidationPrefs();
|
||||
await Service.engineManager.register(SteamEngine);
|
||||
let engine = Service.engineManager.get("steam");
|
||||
engine.enabled = true;
|
||||
let server = await serverForFoo(engine);
|
||||
await SyncTestingInfrastructure(server);
|
||||
try {
|
||||
let msg = "Bad things happened!"
|
||||
engine._errToThrow = { message: msg };
|
||||
let ping = await sync_and_validate_telem(true);
|
||||
equal(ping.status.service, SYNC_FAILED_PARTIAL);
|
||||
deepEqual(ping.engines.find(err => err.name === "steam").failureReason, {
|
||||
name: "unexpectederror",
|
||||
error: "Bad things happened!"
|
||||
});
|
||||
let e = { msg };
|
||||
engine._errToThrow = e;
|
||||
ping = await sync_and_validate_telem(true);
|
||||
deepEqual(ping.engines.find(err => err.name === "steam").failureReason, {
|
||||
name: "unexpectederror",
|
||||
error: JSON.stringify(e)
|
||||
});
|
||||
|
||||
} finally {
|
||||
await cleanAndGo(engine, server);
|
||||
Service.engineManager.unregister(engine);
|
||||
}
|
||||
});
|
||||
|
||||
add_task(async function test_engine_fail_ioerror() {
|
||||
enableValidationPrefs();
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче