зеркало из 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
|
// 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
|
// colon in the middle of non-whitespace), in case anything else is including
|
||||||
// these in error messages.
|
// these in error messages. Note that JSON.stringified stuff comes through
|
||||||
error = error.replace(/\S+:\S+/g, "<URL>");
|
// here, so we explicitly ignore double-quotes as well.
|
||||||
|
error = error.replace(/[^\s"]+:[^\s"]+/g, "<URL>");
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -713,10 +714,22 @@ class SyncTelemetryImpl {
|
||||||
if (error.result) {
|
if (error.result) {
|
||||||
return { name: "nserror", code: 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 {
|
return {
|
||||||
name: "unexpectederror",
|
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() {
|
add_task(async function test_engine_fail_ioerror() {
|
||||||
enableValidationPrefs();
|
enableValidationPrefs();
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче