mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 610832 - Dump log to disk when sync fails. r=rnewman
This commit is contained in:
parent
627c18014a
commit
3e28e5010d
@ -60,7 +60,6 @@ const KEYS_WBO = "keys";
|
||||
const LOG_DATE_FORMAT = "%Y-%m-%d %H:%M:%S";
|
||||
|
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
Cu.import("resource://gre/modules/FileUtils.jsm");
|
||||
Cu.import("resource://services-sync/record.js");
|
||||
Cu.import("resource://services-sync/constants.js");
|
||||
Cu.import("resource://services-sync/engines.js");
|
||||
@ -451,7 +450,16 @@ WeaveSvc.prototype = {
|
||||
},
|
||||
|
||||
_migratePrefs: function _migratePrefs() {
|
||||
// No need to re-migrate
|
||||
// Migrate old debugLog prefs.
|
||||
let logLevel = Svc.Prefs.get("services.sync.log.appender.debugLog");
|
||||
if (logLevel) {
|
||||
Svc.Prefs.set("services.sync.log.appender.file.level", logLevel);
|
||||
}
|
||||
if (Svc.Prefs.get("log.appender.debugLog.enabled")) {
|
||||
Svc.Prefs.set("services.sync.log.appender.file.logOnSuccess");
|
||||
}
|
||||
|
||||
// Migrate old extensions.weave.* prefs if we haven't already tried.
|
||||
if (Svc.Prefs.get("migrated", false))
|
||||
return;
|
||||
|
||||
@ -489,26 +497,28 @@ WeaveSvc.prototype = {
|
||||
dapp.level = Log4Moz.Level[Svc.Prefs.get("log.appender.dump")];
|
||||
root.addAppender(dapp);
|
||||
|
||||
let enabled = Svc.Prefs.get("log.appender.debugLog.enabled", false);
|
||||
if (enabled) {
|
||||
let verbose = FileUtils.getFile(
|
||||
"ProfD", ["weave", "logs", "verbose-log.txt"], true);
|
||||
|
||||
if (Svc.Prefs.get("log.appender.debugLog.rotate", true)) {
|
||||
let maxSize = Svc.Prefs.get("log.appender.debugLog.maxSize");
|
||||
this._debugApp = new Log4Moz.RotatingFileAppender(verbose, formatter,
|
||||
maxSize);
|
||||
} else {
|
||||
this._debugApp = new Log4Moz.FileAppender(verbose, formatter);
|
||||
}
|
||||
this._debugApp.level = Log4Moz.Level[Svc.Prefs.get("log.appender.debugLog")];
|
||||
root.addAppender(this._debugApp);
|
||||
}
|
||||
let fapp = this._logAppender = new Log4Moz.StorageStreamAppender(formatter);
|
||||
fapp.level = Log4Moz.Level[Svc.Prefs.get("log.appender.file.level")];
|
||||
root.addAppender(fapp);
|
||||
},
|
||||
|
||||
clearLogs: function WeaveSvc_clearLogs() {
|
||||
if (this._debugApp)
|
||||
this._debugApp.clear();
|
||||
_resetFileLog: function resetFileLog(flushToFile) {
|
||||
let inStream = this._logAppender.getInputStream();
|
||||
this._logAppender.reset();
|
||||
if (flushToFile && inStream) {
|
||||
try {
|
||||
let filename = Date.now() + ".log";
|
||||
let file = FileUtils.getFile("ProfD", ["weave", "logs", filename]);
|
||||
let outStream = FileUtils.openFileOutputStream(file);
|
||||
NetUtil.asyncCopy(inStream, outStream, function () {
|
||||
Svc.Obs.notify("weave:service:reset-file-log");
|
||||
});
|
||||
} catch (ex) {
|
||||
Svc.Obs.notify("weave:service:reset-file-log");
|
||||
}
|
||||
} else {
|
||||
Svc.Obs.notify("weave:service:reset-file-log");
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
@ -548,6 +558,8 @@ WeaveSvc.prototype = {
|
||||
if (Status.login == LOGIN_FAILED_NETWORK_ERROR &&
|
||||
!Services.io.offline) {
|
||||
this._ignorableErrorCount += 1;
|
||||
} else {
|
||||
this._resetFileLog(Svc.Prefs.get("log.appender.file.logOnError"));
|
||||
}
|
||||
break;
|
||||
case "weave:service:sync:error":
|
||||
@ -561,9 +573,13 @@ WeaveSvc.prototype = {
|
||||
case CREDENTIALS_CHANGED:
|
||||
this.logout();
|
||||
break;
|
||||
default:
|
||||
this._resetFileLog(Svc.Prefs.get("log.appender.file.logOnError"));
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case "weave:service:sync:finish":
|
||||
this._resetFileLog(Svc.Prefs.get("log.appender.file.logOnSuccess"));
|
||||
this._scheduleNextSync();
|
||||
this._syncErrors = 0;
|
||||
this._ignorableErrorCount = 0;
|
||||
|
@ -36,7 +36,7 @@
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
const EXPORTED_SYMBOLS = ["XPCOMUtils", "Services", "NetUtil", "PlacesUtils",
|
||||
"Utils", "Svc", "Str"];
|
||||
"FileUtils", "Utils", "Svc", "Str"];
|
||||
|
||||
const Cc = Components.classes;
|
||||
const Ci = Components.interfaces;
|
||||
|
@ -24,10 +24,9 @@ pref("services.sync.jpake.maxTries", 10);
|
||||
|
||||
pref("services.sync.log.appender.console", "Warn");
|
||||
pref("services.sync.log.appender.dump", "Error");
|
||||
pref("services.sync.log.appender.debugLog", "Trace");
|
||||
pref("services.sync.log.appender.debugLog.enabled", false);
|
||||
pref("services.sync.log.appender.debugLog.rotate", true);
|
||||
pref("services.sync.log.appender.debugLog.maxSize", 1048576);
|
||||
pref("services.sync.log.appender.file.level", "Trace");
|
||||
pref("services.sync.log.appender.file.logOnError", true);
|
||||
pref("services.sync.log.appender.file.logOnSuccess", false);
|
||||
pref("services.sync.log.rootLogger", "Debug");
|
||||
pref("services.sync.log.logger.service.main", "Debug");
|
||||
pref("services.sync.log.logger.authenticator", "Debug");
|
||||
|
155
services/sync/tests/unit/test_service_filelog.js
Normal file
155
services/sync/tests/unit/test_service_filelog.js
Normal file
@ -0,0 +1,155 @@
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
Cu.import("resource://services-sync/service.js");
|
||||
Cu.import("resource://services-sync/util.js");
|
||||
Cu.import("resource://services-sync/log4moz.js");
|
||||
|
||||
const logsdir = FileUtils.getDir("ProfD", ["weave", "logs"], true);
|
||||
|
||||
function run_test() {
|
||||
run_next_test();
|
||||
}
|
||||
|
||||
add_test(function test_noOutput() {
|
||||
// Clear log output from startup.
|
||||
Svc.Prefs.set("log.appender.file.logOnSuccess", false);
|
||||
Svc.Obs.notify("weave:service:sync:finish");
|
||||
|
||||
// Clear again without having issued any output.
|
||||
Svc.Prefs.set("log.appender.file.logOnSuccess", true);
|
||||
|
||||
Svc.Obs.add("weave:service:reset-file-log", function onResetFileLog() {
|
||||
Svc.Obs.remove("weave:service:reset-file-log", onResetFileLog);
|
||||
|
||||
Svc.Prefs.resetBranch("");
|
||||
run_next_test();
|
||||
});
|
||||
|
||||
// Fake a successful sync.
|
||||
Svc.Obs.notify("weave:service:sync:finish");
|
||||
});
|
||||
|
||||
add_test(function test_logOnSuccess_false() {
|
||||
Svc.Prefs.set("log.appender.file.logOnSuccess", false);
|
||||
|
||||
let log = Log4Moz.repository.getLogger("Sync.Test.FileLog");
|
||||
log.info("this won't show up");
|
||||
|
||||
Svc.Obs.add("weave:service:reset-file-log", function onResetFileLog() {
|
||||
Svc.Obs.remove("weave:service:reset-file-log", onResetFileLog);
|
||||
// No log file was written.
|
||||
do_check_false(logsdir.directoryEntries.hasMoreElements());
|
||||
|
||||
Svc.Prefs.resetBranch("");
|
||||
run_next_test();
|
||||
});
|
||||
|
||||
// Fake a successful sync.
|
||||
Svc.Obs.notify("weave:service:sync:finish");
|
||||
});
|
||||
|
||||
function readFile(file, callback) {
|
||||
NetUtil.asyncFetch(file, function (inputStream, statusCode, request) {
|
||||
let data = NetUtil.readInputStreamToString(inputStream,
|
||||
inputStream.available());
|
||||
callback(statusCode, data);
|
||||
});
|
||||
}
|
||||
|
||||
add_test(function test_logOnSuccess_true() {
|
||||
Svc.Prefs.set("log.appender.file.logOnSuccess", true);
|
||||
|
||||
let log = Log4Moz.repository.getLogger("Sync.Test.FileLog");
|
||||
const MESSAGE = "this WILL show up";
|
||||
log.info(MESSAGE);
|
||||
|
||||
Svc.Obs.add("weave:service:reset-file-log", function onResetFileLog() {
|
||||
Svc.Obs.remove("weave:service:reset-file-log", onResetFileLog);
|
||||
|
||||
// Exactly one log file was written.
|
||||
let entries = logsdir.directoryEntries;
|
||||
do_check_true(entries.hasMoreElements());
|
||||
let logfile = entries.getNext().QueryInterface(Ci.nsILocalFile);
|
||||
do_check_eq(logfile.leafName.slice(-4), ".log");
|
||||
do_check_false(entries.hasMoreElements());
|
||||
|
||||
// Ensure the log message was actually written to file.
|
||||
readFile(logfile, function (error, data) {
|
||||
do_check_true(Components.isSuccessCode(error));
|
||||
do_check_neq(data.indexOf(MESSAGE), -1);
|
||||
|
||||
// Clean up.
|
||||
try {
|
||||
logfile.remove(false);
|
||||
} catch(ex) {
|
||||
dump("Couldn't delete file: " + ex + "\n");
|
||||
// Stupid Windows box.
|
||||
}
|
||||
|
||||
Svc.Prefs.resetBranch("");
|
||||
run_next_test();
|
||||
});
|
||||
});
|
||||
|
||||
// Fake a successful sync.
|
||||
Svc.Obs.notify("weave:service:sync:finish");
|
||||
});
|
||||
|
||||
add_test(function test_logOnError_false() {
|
||||
Svc.Prefs.set("log.appender.file.logOnError", false);
|
||||
|
||||
let log = Log4Moz.repository.getLogger("Sync.Test.FileLog");
|
||||
log.info("this won't show up");
|
||||
|
||||
Svc.Obs.add("weave:service:reset-file-log", function onResetFileLog() {
|
||||
Svc.Obs.remove("weave:service:reset-file-log", onResetFileLog);
|
||||
// No log file was written.
|
||||
do_check_false(logsdir.directoryEntries.hasMoreElements());
|
||||
|
||||
Svc.Prefs.resetBranch("");
|
||||
run_next_test();
|
||||
});
|
||||
|
||||
// Fake an unsuccessful sync.
|
||||
Svc.Obs.notify("weave:service:sync:error");
|
||||
});
|
||||
|
||||
add_test(function test_logOnError_true() {
|
||||
Svc.Prefs.set("log.appender.file.logOnError", true);
|
||||
|
||||
let log = Log4Moz.repository.getLogger("Sync.Test.FileLog");
|
||||
const MESSAGE = "this WILL show up";
|
||||
log.info(MESSAGE);
|
||||
|
||||
Svc.Obs.add("weave:service:reset-file-log", function onResetFileLog() {
|
||||
Svc.Obs.remove("weave:service:reset-file-log", onResetFileLog);
|
||||
|
||||
// Exactly one log file was written.
|
||||
let entries = logsdir.directoryEntries;
|
||||
do_check_true(entries.hasMoreElements());
|
||||
let logfile = entries.getNext().QueryInterface(Ci.nsILocalFile);
|
||||
do_check_eq(logfile.leafName.slice(-4), ".log");
|
||||
do_check_false(entries.hasMoreElements());
|
||||
|
||||
// Ensure the log message was actually written to file.
|
||||
readFile(logfile, function (error, data) {
|
||||
do_check_true(Components.isSuccessCode(error));
|
||||
do_check_neq(data.indexOf(MESSAGE), -1);
|
||||
|
||||
// Clean up.
|
||||
try {
|
||||
logfile.remove(false);
|
||||
} catch(ex) {
|
||||
dump("Couldn't delete file: " + ex + "\n");
|
||||
// Stupid Windows box.
|
||||
}
|
||||
|
||||
Svc.Prefs.resetBranch("");
|
||||
run_next_test();
|
||||
});
|
||||
});
|
||||
|
||||
// Fake an unsuccessful sync.
|
||||
Svc.Obs.notify("weave:service:sync:error");
|
||||
});
|
@ -50,6 +50,7 @@ tail =
|
||||
[test_service_cluster.js]
|
||||
[test_service_createAccount.js]
|
||||
[test_service_detect_upgrade.js]
|
||||
[test_service_filelog.js]
|
||||
[test_service_login.js]
|
||||
[test_service_migratePrefs.js]
|
||||
[test_service_passwordUTF8.js]
|
||||
|
Loading…
Reference in New Issue
Block a user