Bug 683396 follow-up: Fix intermittent test failures

This commit is contained in:
Marina Samuel 2011-09-06 19:15:28 -07:00
parent 6c39f4933e
commit fb406c9e6d
2 changed files with 100 additions and 121 deletions

View File

@ -495,9 +495,9 @@ let ErrorHandler = {
if (this.shouldReportError()) {
this.resetFileLog(Svc.Prefs.get("log.appender.file.logOnError"),
LOG_PREFIX_ERROR);
Svc.Obs.notify("weave:ui:login:error");
this.notifyOnNextTick("weave:ui:login:error");
} else {
Svc.Obs.notify("weave:ui:clear-error");
this.notifyOnNextTick("weave:ui:clear-error");
}
this.dontIgnoreErrors = false;
@ -510,9 +510,9 @@ let ErrorHandler = {
if (this.shouldReportError()) {
this.resetFileLog(Svc.Prefs.get("log.appender.file.logOnError"),
LOG_PREFIX_ERROR);
Svc.Obs.notify("weave:ui:sync:error");
this.notifyOnNextTick("weave:ui:sync:error");
} else {
Svc.Obs.notify("weave:ui:sync:finish");
this.notifyOnNextTick("weave:ui:sync:finish");
}
this.dontIgnoreErrors = false;
@ -525,7 +525,7 @@ let ErrorHandler = {
if (this.shouldReportError()) {
this.dontIgnoreErrors = false;
Svc.Obs.notify("weave:ui:sync:error");
this.notifyOnNextTick("weave:ui:sync:error");
break;
}
} else {
@ -533,11 +533,15 @@ let ErrorHandler = {
LOG_PREFIX_SUCCESS);
}
this.dontIgnoreErrors = false;
Svc.Obs.notify("weave:ui:sync:finish");
this.notifyOnNextTick("weave:ui:sync:finish");
break;
}
},
notifyOnNextTick: function notifyOnNextTick(topic) {
Utils.nextTick(function() Svc.Obs.notify(topic));
},
/**
* Trigger a sync and don't muffle any errors, particularly network errors.
*/

View File

@ -111,6 +111,12 @@ function setUp() {
return serverKeys.upload(Service.cryptoKeysURL).success;
}
function clean() {
Service.startOver();
Status.resetSync();
Status.resetBackoff();
}
add_test(function test_401_logout() {
let server = sync_httpd_setup();
setUp();
@ -364,7 +370,7 @@ add_test(function test_shouldReportError_master_password() {
// Clean up.
Service.verifyLogin = Service._verifyLogin;
Service.startOver();
clean();
server.stop(run_next_test);
});
@ -379,7 +385,7 @@ add_test(function test_login_syncAndReportErrors_non_network_error() {
Svc.Obs.remove("weave:ui:login:error", onSyncError);
do_check_eq(Status.login, LOGIN_FAILED_NO_PASSWORD);
Service.startOver();
clean();
server.stop(run_next_test);
});
@ -404,7 +410,7 @@ add_test(function test_sync_syncAndReportErrors_non_network_error() {
Svc.Obs.remove("weave:ui:sync:error", onSyncError);
do_check_eq(Status.sync, CREDENTIALS_CHANGED);
Service.startOver();
clean();
server.stop(run_next_test);
});
@ -423,7 +429,7 @@ add_test(function test_login_syncAndReportErrors_prolonged_non_network_error() {
Svc.Obs.remove("weave:ui:login:error", onSyncError);
do_check_eq(Status.login, LOGIN_FAILED_NO_PASSWORD);
Service.startOver();
clean();
server.stop(run_next_test);
});
@ -448,7 +454,7 @@ add_test(function test_sync_syncAndReportErrors_prolonged_non_network_error() {
Svc.Obs.remove("weave:ui:sync:error", onSyncError);
do_check_eq(Status.sync, CREDENTIALS_CHANGED);
Service.startOver();
clean();
server.stop(run_next_test);
});
@ -467,7 +473,7 @@ add_test(function test_login_syncAndReportErrors_network_error() {
Svc.Obs.remove("weave:ui:login:error", onSyncError);
do_check_eq(Status.login, LOGIN_FAILED_NETWORK_ERROR);
Service.startOver();
clean();
run_next_test();
});
@ -485,7 +491,7 @@ add_test(function test_sync_syncAndReportErrors_network_error() {
do_check_eq(Status.sync, LOGIN_FAILED_NETWORK_ERROR);
Services.io.offline = false;
Service.startOver();
clean();
run_next_test();
});
@ -503,9 +509,9 @@ add_test(function test_login_syncAndReportErrors_prolonged_network_error() {
Svc.Obs.add("weave:ui:login:error", function onSyncError() {
Svc.Obs.remove("weave:ui:login:error", onSyncError);
do_check_eq(Status.sync, LOGIN_FAILED_NETWORK_ERROR);
do_check_eq(Status.login, LOGIN_FAILED_NETWORK_ERROR);
Service.startOver();
clean();
run_next_test();
});
@ -523,7 +529,7 @@ add_test(function test_sync_syncAndReportErrors_prolonged_network_error() {
do_check_eq(Status.sync, LOGIN_FAILED_NETWORK_ERROR);
Services.io.offline = false;
Service.startOver();
clean();
run_next_test();
});
@ -541,7 +547,7 @@ add_test(function test_login_prolonged_non_network_error() {
Svc.Obs.remove("weave:ui:login:error", onSyncError);
do_check_eq(Status.sync, PROLONGED_SYNC_FAILURE);
Service.startOver();
clean();
server.stop(run_next_test);
});
@ -565,7 +571,7 @@ add_test(function test_sync_prolonged_non_network_error() {
Svc.Obs.remove("weave:ui:sync:error", onSyncError);
do_check_eq(Status.sync, PROLONGED_SYNC_FAILURE);
Service.startOver();
clean();
server.stop(run_next_test);
});
@ -584,7 +590,7 @@ add_test(function test_login_prolonged_network_error() {
Svc.Obs.remove("weave:ui:login:error", onSyncError);
do_check_eq(Status.sync, PROLONGED_SYNC_FAILURE);
Service.startOver();
clean();
run_next_test();
});
@ -601,7 +607,7 @@ add_test(function test_sync_prolonged_network_error() {
do_check_eq(Status.sync, PROLONGED_SYNC_FAILURE);
Services.io.offline = false;
Service.startOver();
clean();
run_next_test();
});
@ -619,7 +625,7 @@ add_test(function test_login_non_network_error() {
Svc.Obs.remove("weave:ui:login:error", onSyncError);
do_check_eq(Status.login, LOGIN_FAILED_NO_PASSWORD);
Service.startOver();
clean();
server.stop(run_next_test);
});
@ -627,7 +633,6 @@ add_test(function test_login_non_network_error() {
Service.sync();
});
add_test(function test_sync_non_network_error() {
// Test non-network errors are reported
let server = sync_httpd_setup();
@ -644,7 +649,7 @@ add_test(function test_sync_non_network_error() {
Svc.Obs.remove("weave:ui:sync:error", onSyncError);
do_check_eq(Status.sync, CREDENTIALS_CHANGED);
Service.startOver();
clean();
server.stop(run_next_test);
});
@ -664,9 +669,8 @@ add_test(function test_login_network_error() {
do_check_eq(Status.login, LOGIN_FAILED_NETWORK_ERROR);
Service.startOver();
Status.resetSync();
Services.io.offline = false;
clean();
run_next_test();
});
@ -682,9 +686,8 @@ add_test(function test_sync_network_error() {
Svc.Obs.remove("weave:ui:sync:finish", onUIUpdate);
do_check_eq(Status.sync, LOGIN_FAILED_NETWORK_ERROR);
Service.startOver();
Services.io.offline = false;
Status.resetSync();
clean();
run_next_test();
});
@ -703,24 +706,26 @@ add_test(function test_sync_server_maintenance_error() {
engine.exception = {status: 503,
headers: {"retry-after": BACKOFF}};
function onUIUpdate() {
function onSyncError() {
do_throw("Shouldn't get here!");
}
Svc.Obs.add("weave:ui:sync:error", onUIUpdate);
Svc.Obs.add("weave:ui:sync:error", onSyncError);
do_check_eq(Status.service, STATUS_OK);
Svc.Obs.add("weave:ui:sync:finish", function onSyncFinish() {
Svc.Obs.remove("weave:ui:sync:finish", onSyncFinish);
do_check_eq(Status.service, SYNC_FAILED_PARTIAL);
do_check_eq(Status.sync, SERVER_MAINTENANCE);
Svc.Obs.remove("weave:ui:sync:error", onSyncError);
clean();
server.stop(run_next_test);
});
setLastSync(NON_PROLONGED_ERROR_DURATION);
Service.sync();
do_check_eq(Status.service, SYNC_FAILED_PARTIAL);
do_check_eq(Status.sync, SERVER_MAINTENANCE);
Svc.Obs.remove("weave:ui:sync:error", onUIUpdate);
Service.startOver();
Status.resetSync();
Status.resetBackoff();
server.stop(run_next_test);
});
add_test(function test_info_collections_login_server_maintenance_error() {
@ -745,20 +750,21 @@ add_test(function test_info_collections_login_server_maintenance_error() {
do_check_false(Status.enforceBackoff);
do_check_eq(Status.service, STATUS_OK);
Svc.Obs.add("weave:ui:clear-error", function onLoginFinish() {
Svc.Obs.remove("weave:ui:clear-error", onLoginFinish);
do_check_true(Status.enforceBackoff);
do_check_eq(backoffInterval, 42);
do_check_eq(Status.service, LOGIN_FAILED);
do_check_eq(Status.login, SERVER_MAINTENANCE);
Svc.Obs.remove("weave:ui:login:error", onUIUpdate);
clean();
server.stop(run_next_test);
});
setLastSync(NON_PROLONGED_ERROR_DURATION);
Service.sync();
do_check_true(Status.enforceBackoff);
do_check_eq(backoffInterval, 42);
do_check_eq(Status.service, LOGIN_FAILED);
do_check_eq(Status.login, SERVER_MAINTENANCE);
Svc.Obs.remove("weave:ui:login:error", onUIUpdate);
Service.startOver();
Status.resetSync();
Status.resetBackoff();
server.stop(run_next_test);
});
add_test(function test_meta_global_login_server_maintenance_error() {
@ -783,20 +789,21 @@ add_test(function test_meta_global_login_server_maintenance_error() {
do_check_false(Status.enforceBackoff);
do_check_eq(Status.service, STATUS_OK);
Svc.Obs.add("weave:ui:clear-error", function onLoginFinish() {
Svc.Obs.remove("weave:ui:clear-error", onLoginFinish);
do_check_true(Status.enforceBackoff);
do_check_eq(backoffInterval, 42);
do_check_eq(Status.service, LOGIN_FAILED);
do_check_eq(Status.login, SERVER_MAINTENANCE);
Svc.Obs.remove("weave:ui:login:error", onUIUpdate);
clean();
server.stop(run_next_test);
});
setLastSync(NON_PROLONGED_ERROR_DURATION);
Service.sync();
do_check_true(Status.enforceBackoff);
do_check_eq(backoffInterval, 42);
do_check_eq(Status.service, LOGIN_FAILED);
do_check_eq(Status.login, SERVER_MAINTENANCE);
Svc.Obs.remove("weave:ui:login:error", onUIUpdate);
Service.startOver();
Status.resetSync();
Status.resetBackoff();
server.stop(run_next_test);
});
add_test(function test_crypto_keys_login_server_maintenance_error() {
@ -821,20 +828,21 @@ add_test(function test_crypto_keys_login_server_maintenance_error() {
do_check_false(Status.enforceBackoff);
do_check_eq(Status.service, STATUS_OK);
Svc.Obs.add("weave:ui:clear-error", function onLoginFinish() {
Svc.Obs.remove("weave:ui:clear-error", onLoginFinish);
do_check_true(Status.enforceBackoff);
do_check_eq(backoffInterval, 42);
do_check_eq(Status.service, LOGIN_FAILED);
do_check_eq(Status.login, SERVER_MAINTENANCE);
Svc.Obs.remove("weave:ui:login:error", onUIUpdate);
clean();
server.stop(run_next_test);
});
setLastSync(NON_PROLONGED_ERROR_DURATION);
Service.sync();
do_check_true(Status.enforceBackoff);
do_check_eq(backoffInterval, 42);
do_check_eq(Status.service, LOGIN_FAILED);
do_check_eq(Status.login, SERVER_MAINTENANCE);
Svc.Obs.remove("weave:ui:login:error", onUIUpdate);
Service.startOver();
Status.resetSync();
Status.resetBackoff();
server.stop(run_next_test);
});
add_test(function test_sync_prolonged_server_maintenance_error() {
@ -853,9 +861,7 @@ add_test(function test_sync_prolonged_server_maintenance_error() {
do_check_eq(Status.service, SYNC_FAILED);
do_check_eq(Status.sync, PROLONGED_SYNC_FAILURE);
Service.startOver();
Status.resetSync();
Status.resetBackoff();
clean();
server.stop(run_next_test);
});
@ -886,9 +892,7 @@ add_test(function test_info_collections_login_prolonged_server_maintenance_error
do_check_eq(Status.service, SYNC_FAILED);
do_check_eq(Status.sync, PROLONGED_SYNC_FAILURE);
Service.startOver();
Status.resetSync();
Status.resetBackoff();
clean();
server.stop(run_next_test);
});
@ -920,9 +924,7 @@ add_test(function test_meta_global_login_prolonged_server_maintenance_error(){
do_check_eq(Status.service, SYNC_FAILED);
do_check_eq(Status.sync, PROLONGED_SYNC_FAILURE);
Service.startOver();
Status.resetSync();
Status.resetBackoff();
clean();
server.stop(run_next_test);
});
@ -954,9 +956,7 @@ add_test(function test_crypto_keys_login_prolonged_server_maintenance_error(){
do_check_eq(Status.service, SYNC_FAILED);
do_check_eq(Status.sync, PROLONGED_SYNC_FAILURE);
Service.startOver();
Status.resetSync();
Status.resetBackoff();
clean();
server.stop(run_next_test);
});
@ -984,9 +984,7 @@ add_test(function test_sync_syncAndReportErrors_server_maintenance_error() {
do_check_eq(Status.service, SYNC_FAILED_PARTIAL);
do_check_eq(Status.sync, SERVER_MAINTENANCE);
Service.startOver();
Status.resetSync();
Status.resetBackoff();
clean();
server.stop(run_next_test);
});
@ -1018,9 +1016,7 @@ add_test(function test_info_collections_login_syncAndReportErrors_server_mainten
do_check_eq(Status.service, LOGIN_FAILED);
do_check_eq(Status.login, SERVER_MAINTENANCE);
Service.startOver();
Status.resetSync();
Status.resetBackoff();
clean();
server.stop(run_next_test);
});
@ -1053,9 +1049,7 @@ add_test(function test_meta_global_login_syncAndReportErrors_server_maintenance_
do_check_eq(Status.service, LOGIN_FAILED);
do_check_eq(Status.login, SERVER_MAINTENANCE);
Service.startOver();
Status.resetSync();
Status.resetBackoff();
clean();
server.stop(run_next_test);
});
@ -1088,9 +1082,7 @@ add_test(function test_crypto_keys_login_syncAndReportErrors_server_maintenance_
do_check_eq(Status.service, LOGIN_FAILED);
do_check_eq(Status.login, SERVER_MAINTENANCE);
Service.startOver();
Status.resetSync();
Status.resetBackoff();
clean();
server.stop(run_next_test);
});
@ -1118,9 +1110,7 @@ add_test(function test_sync_syncAndReportErrors_prolonged_server_maintenance_err
do_check_eq(Status.service, SYNC_FAILED_PARTIAL);
do_check_eq(Status.sync, SERVER_MAINTENANCE);
Service.startOver();
Status.resetBackoff();
Status.resetSync();
clean();
server.stop(run_next_test);
});
@ -1152,9 +1142,7 @@ add_test(function test_info_collections_login_syncAndReportErrors_prolonged_serv
do_check_eq(Status.service, LOGIN_FAILED);
do_check_eq(Status.login, SERVER_MAINTENANCE);
Service.startOver();
Status.resetSync();
Status.resetBackoff();
clean();
server.stop(run_next_test);
});
@ -1187,9 +1175,7 @@ add_test(function test_meta_global_login_syncAndReportErrors_prolonged_server_ma
do_check_eq(Status.service, LOGIN_FAILED);
do_check_eq(Status.login, SERVER_MAINTENANCE);
Service.startOver();
Status.resetSync();
Status.resetBackoff();
clean();
server.stop(run_next_test);
});
@ -1222,9 +1208,7 @@ add_test(function test_crypto_keys_login_syncAndReportErrors_prolonged_server_ma
do_check_eq(Status.service, LOGIN_FAILED);
do_check_eq(Status.login, SERVER_MAINTENANCE);
Service.startOver();
Status.resetSync();
Status.resetBackoff();
clean();
server.stop(run_next_test);
});
@ -1263,16 +1247,11 @@ add_test(function test_sync_engine_generic_fail() {
do_check_eq(logfile.leafName.slice(0, LOG_PREFIX_ERROR.length),
LOG_PREFIX_ERROR);
Status.resetSync();
Service.startOver();
server.stop(run_next_test);
clean();
});
do_check_eq(Status.engines["catapult"], undefined);
do_check_true(setUp());
Service.sync();
});
@ -1304,15 +1283,11 @@ add_test(function test_engine_applyFailed() {
do_check_eq(logfile.leafName.slice(0, LOG_PREFIX_ERROR.length),
LOG_PREFIX_ERROR);
Status.resetSync();
Service.startOver();
clean();
server.stop(run_next_test);
});
do_check_eq(Status.engines["catapult"], undefined);
do_check_true(setUp());
Service.sync();
});