diff --git a/toolkit/mozapps/update/test/unit/data/aus-0110_general-1.mar b/toolkit/mozapps/update/test/unit/data/aus-0110_general.mar similarity index 100% rename from toolkit/mozapps/update/test/unit/data/aus-0110_general-1.mar rename to toolkit/mozapps/update/test/unit/data/aus-0110_general.mar diff --git a/toolkit/mozapps/update/test/unit/data/aus-0110_general_ref_image1.png b/toolkit/mozapps/update/test/unit/data/aus-0110_general_ref_image.png similarity index 100% rename from toolkit/mozapps/update/test/unit/data/aus-0110_general_ref_image1.png rename to toolkit/mozapps/update/test/unit/data/aus-0110_general_ref_image.png diff --git a/toolkit/mozapps/update/test/unit/data/aus-0110_general-2.mar b/toolkit/mozapps/update/test/unit/data/aus-0111_general.mar similarity index 100% rename from toolkit/mozapps/update/test/unit/data/aus-0110_general-2.mar rename to toolkit/mozapps/update/test/unit/data/aus-0111_general.mar diff --git a/toolkit/mozapps/update/test/unit/data/aus-0110_general_ref_image2.png b/toolkit/mozapps/update/test/unit/data/aus-0111_general_ref_image.png similarity index 100% rename from toolkit/mozapps/update/test/unit/data/aus-0110_general_ref_image2.png rename to toolkit/mozapps/update/test/unit/data/aus-0111_general_ref_image.png diff --git a/toolkit/mozapps/update/test/unit/head_update.js b/toolkit/mozapps/update/test/unit/head_update.js index 5bfad87cd16..7322c69aa84 100644 --- a/toolkit/mozapps/update/test/unit/head_update.js +++ b/toolkit/mozapps/update/test/unit/head_update.js @@ -107,11 +107,13 @@ function getPrefBranch() { /** * Nulls out the most commonly used global vars used by tests as appropriate. - * This is not in the tail file due to check-interactive executing the tail file - * prior to _execute_test();. + * This was moved here from the tail file due to check-interactive executing + * the tail file prior to _execute_test(); (bug 384339). It hasn't been moved + * back since it is easier to comment out the call to cleanUp when needed. */ function cleanUp() { - gDirSvc.unregisterProvider(dirProvider); + removeUpdateDirsAndFiles(); + gDirSvc.unregisterProvider(gDirProvider); if (gXHR) { gXHRCallback = null; @@ -132,12 +134,9 @@ function cleanUp() { } /** - * Initializes the most commonly used global vars used by tests and - * nsIApplicationUpdateService + * Sets the most commonly used preferences used by tests */ -function startAUS() { - createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1.0", "2.0"); - +function setDefaultPrefs() { var pb = getPrefBranch(); // Don't display UI for a successful installation. Some apps may not set this // pref to false like Firefox does. @@ -150,7 +149,15 @@ function startAUS() { pb.setBoolPref("extensions.update.enabled", false); pb.setBoolPref("browser.search.update", false); pb.setBoolPref("browser.microsummary.updateGenerators", false); +} +/** + * Initializes nsIApplicationUpdateService and the most commonly used global + * vars used by tests. + */ +function startAUS() { + createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1.0", "2.0"); + setDefaultPrefs(); gAUS = AUS_Cc["@mozilla.org/updates/update-service;1"]. getService(AUS_Ci.nsIApplicationUpdateService); var os = AUS_Cc["@mozilla.org/observer-service;1"]. @@ -418,23 +425,13 @@ function writeStatusFile(aStatus) { * replaced. */ function writeFile(aFile, aText) { - var fos = AUS_Cc["@mozilla.org/network/safe-file-output-stream;1"]. + var fos = AUS_Cc["@mozilla.org/network/file-output-stream;1"]. createInstance(AUS_Ci.nsIFileOutputStream); if (!aFile.exists()) aFile.create(AUS_Ci.nsILocalFile.NORMAL_FILE_TYPE, PERMS_FILE); fos.init(aFile, MODE_WRONLY | MODE_CREATE | MODE_TRUNCATE, PERMS_FILE, 0); fos.write(aText, aText.length); - - if (fos instanceof AUS_Ci.nsISafeOutputStream) { - try { - fos.finish(); - } - catch (e) { - fos.close(); - } - } - else - fos.close(); + fos.close(); } /** @@ -479,27 +476,6 @@ function getString(aName) { return null; } -/** - * Toggles network offline. - * - * Be sure to toggle back to online before the test finishes to prevent the - * following from being printed to the test's log file. - * WARNING: NS_ENSURE_TRUE(thread) failed: file c:/moz/mozilla-central/mozilla/netwerk/base/src/nsSocketTransportService2.cpp, line 115 - * WARNING: unable to post SHUTDOWN message - */ -function toggleOffline(aOffline) { - const ioService = AUS_Cc["@mozilla.org/network/io-service;1"]. - getService(AUS_Ci.nsIIOService); - - try { - ioService.manageOfflineStatus = !aOffline; - } - catch (e) { - } - if (ioService.offline != aOffline) - ioService.offline = aOffline; -} - /** * Sets up the bare bones XMLHttpRequest implementation below. * @@ -627,7 +603,7 @@ const updateCheckListener = { */ function removeUpdateDirsAndFiles() { var appDir = getCurrentProcessDir(); - file = appDir.clone(); + var file = appDir.clone(); file.append("active-update.xml"); try { if (file.exists()) @@ -681,6 +657,8 @@ function removeUpdateDirsAndFiles() { * A nsIFile for the directory to be deleted */ function removeDirRecursive(aDir) { + if (!aDir.exists()) + return; try { aDir.remove(true); return; @@ -798,7 +776,7 @@ if (gProfD.exists()) gProfD.remove(true); gProfD.create(AUS_Ci.nsIFile.DIRECTORY_TYPE, PERMS_DIRECTORY); -var dirProvider = { +var gDirProvider = { getFile: function(prop, persistent) { switch (prop) { case NS_APP_USER_PROFILE_50_DIR: @@ -818,4 +796,4 @@ var dirProvider = { throw AUS_Cr.NS_ERROR_NO_INTERFACE; } }; -gDirSvc.QueryInterface(AUS_Ci.nsIDirectoryService).registerProvider(dirProvider); +gDirSvc.QueryInterface(AUS_Ci.nsIDirectoryService).registerProvider(gDirProvider); diff --git a/toolkit/mozapps/update/test/unit/test_0050_general.js b/toolkit/mozapps/update/test/unit/test_0050_general.js index f2e39f797ab..d3a3453ef89 100644 --- a/toolkit/mozapps/update/test/unit/test_0050_general.js +++ b/toolkit/mozapps/update/test/unit/test_0050_general.js @@ -36,10 +36,13 @@ * ***** END LICENSE BLOCK ***** */ -/* General nsIUpdateCheckListener onerror error code and statusText Tests */ +/* General nsIUpdateCheckListener onload and onerror error code and statusText + Tests */ // Errors tested: -// 200, 403, 404, 500, 2152398861, 2152398918, default (200) +// 200, 403, 404, 500, 2152398849, 2152398862, 2152398864, 2152398867, +// 2152398868, 2152398878, 2152398890, 2152398919, 2152398920, 2153390069, +// 2152398918, 2152398861 var gNextRunFunc; var gExpectedStatusCode; @@ -52,96 +55,154 @@ function run_test() { startUpdateChecker(); getPrefBranch().setCharPref(PREF_APP_UPDATE_URL_OVERRIDE, URL_HOST + "update.xml"); + overrideXHR(callHandleEvent); do_timeout(0, "run_test_pt1()"); } function end_test() { - stop_httpserver(do_test_finished); + do_test_finished(); cleanUp(); } -// Custom error httpd handler used to return error codes we can't simulate -function httpdErrorHandler(metadata, response) { - response.setStatusLine(metadata.httpVersion, gExpectedStatusCode, "Error"); +// Callback function used by the custom XMLHttpRequest implementation to +// call the nsIDOMEventListener's handleEvent method for onload. +function callHandleEvent() { + gXHR.status = gExpectedStatusCode; + var e = { target: gXHR }; + gXHR.onload.handleEvent(e); } -// Helper functions for testing nsIUpdateCheckListener onerror error statusText -function run_test_helper(aMsg, aExpectedStatusCode, aExpectedStatusTextCode, - aNextRunFunc) { +// Helper functions for testing nsIUpdateCheckListener statusText +function run_test_helper(aNextRunFunc, aExpectedStatusCode, aMsg) { gStatusCode = null; gStatusText = null; gCheckFunc = check_test_helper; gNextRunFunc = aNextRunFunc; - gExpectedStatusCode = gResponseStatusCode = aExpectedStatusCode; - gExpectedStatusText = getStatusText(aExpectedStatusTextCode); + gExpectedStatusCode = aExpectedStatusCode; dump("Testing: " + aMsg + "\n"); gUpdateChecker.checkForUpdates(updateCheckListener, true); } function check_test_helper() { do_check_eq(gStatusCode, gExpectedStatusCode); - do_check_eq(gStatusText, gExpectedStatusText); + var expectedStatusText = getStatusText(gExpectedStatusCode); + do_check_eq(gStatusText, expectedStatusText); gNextRunFunc(); } /** - * The following tests do not use the http server + * The following tests use a custom XMLHttpRequest to return the status codes */ -// network is offline -function run_test_pt1() { - toggleOffline(true); - run_test_helper("run_test_pt1 - network is offline", - 0, 2152398918, run_test_pt2); -} - -// connection refused -function run_test_pt2() { - toggleOffline(false); - run_test_helper("run_test_pt2 - connection refused", - 0, 2152398861, run_test_pt3); -} - -/** - * The following tests use the codes returned by the http server - */ - -// file not found -function run_test_pt3() { - start_httpserver(DIR_DATA); - run_test_helper("run_test_pt3 - file not found", - 404, 404, run_test_pt4); -} - -// file malformed -function run_test_pt4() { - gTestserver.registerPathHandler("/update.xml", pathHandler); - gResponseBody = "
\n"; - run_test_helper("run_test_pt4 - file malformed", - 200, 200, run_test_pt5); -} - -// internal server error -function run_test_pt5() { - gResponseBody = "\n"; - run_test_helper("run_test_pt5 - internal server error", - 500, 500, run_test_pt6); -} - -/** - * The following tests use a custom error handler to return codes from the http - * server - */ - -// access denied -function run_test_pt6() { - gTestserver.registerErrorHandler(404, httpdErrorHandler); - run_test_helper("run_test_pt6 - access denied", - 403, 403, run_test_pt7); -} - // default onerror error message (error code 399 is not defined) -function run_test_pt7() { - run_test_helper("run_test_pt7 - default onerror error message", - 399, 404, end_test); +function run_test_pt1() { + gStatusCode = null; + gStatusText = null; + gCheckFunc = check_test_pt1; + gExpectedStatusCode = 399; + dump("Testing: run_test_pt1 - default onerror error message\n"); + gUpdateChecker.checkForUpdates(updateCheckListener, true); +} + +function check_test_pt1() { + do_check_eq(gStatusCode, gExpectedStatusCode); + var expectedStatusText = getStatusText(404); + do_check_eq(gStatusText, expectedStatusText); + run_test_pt2(); +} + +// file malformed - 200 +function run_test_pt2() { + run_test_helper(run_test_pt3, 200, + "run_test_pt2 - file malformed"); +} + +// access denied - 403 +function run_test_pt3() { + run_test_helper(run_test_pt4, 403, + "run_test_pt3 - access denied"); +} + +// file not found - 404 +function run_test_pt4() { + run_test_helper(run_test_pt5, 404, + "run_test_pt4 - file not found"); +} + +// internal server error - 500 +function run_test_pt5() { + run_test_helper(run_test_pt6, 500, + "run_test_pt5 - internal server error"); +} + +// failed (unknown reason) - NS_BINDING_FAILED (2152398849) +function run_test_pt6() { + run_test_helper(run_test_pt7, AUS_Cr.NS_BINDING_FAILED, + "run_test_pt6 - failed (unknown reason)"); +} + +// connection timed out - NS_ERROR_NET_TIMEOUT (2152398862) +function run_test_pt7() { + run_test_helper(run_test_pt8, AUS_Cr.NS_ERROR_NET_TIMEOUT, + "run_test_pt7 - connection timed out"); +} + +// network offline - NS_ERROR_OFFLINE (2152398864) +function run_test_pt8() { + run_test_helper(run_test_pt9, AUS_Cr.NS_ERROR_OFFLINE, + "run_test_pt8 - network offline"); +} + +// port not allowed - NS_ERROR_PORT_ACCESS_NOT_ALLOWED (2152398867) +function run_test_pt9() { + run_test_helper(run_test_pt10, AUS_Cr.NS_ERROR_PORT_ACCESS_NOT_ALLOWED, + "run_test_pt9 - port not allowed"); +} + +// no data was received - NS_ERROR_NET_RESET (2152398868) +function run_test_pt10() { + run_test_helper(run_test_pt11, AUS_Cr.NS_ERROR_NET_RESET, + "run_test_pt10 - no data was received"); +} + +// update server not found - NS_ERROR_UNKNOWN_HOST (2152398878) +function run_test_pt11() { + run_test_helper(run_test_pt12, AUS_Cr.NS_ERROR_UNKNOWN_HOST, + "run_test_pt11 - update server not found"); +} + +// proxy server not found - NS_ERROR_UNKNOWN_PROXY_HOST (2152398890) +function run_test_pt12() { + run_test_helper(run_test_pt13, AUS_Cr.NS_ERROR_UNKNOWN_PROXY_HOST, + "run_test_pt12 - proxy server not found"); +} + +// data transfer interrupted - NS_ERROR_NET_INTERRUPT (2152398919) +function run_test_pt13() { + run_test_helper(run_test_pt14, AUS_Cr.NS_ERROR_NET_INTERRUPT, + "run_test_pt13 - data transfer interrupted"); +} + +// proxy server connection refused - NS_ERROR_PROXY_CONNECTION_REFUSED (2152398920) +function run_test_pt14() { + run_test_helper(run_test_pt15, AUS_Cr.NS_ERROR_PROXY_CONNECTION_REFUSED, + "run_test_pt14 - proxy server connection refused"); +} + +// server certificate expired - 2153390069 +function run_test_pt15() { + run_test_helper(run_test_pt16, 2153390069, + "run_test_pt15 - server certificate expired"); +} + +// network is offline - NS_ERROR_DOCUMENT_NOT_CACHED (2152398918) +function run_test_pt16() { + run_test_helper(run_test_pt17, AUS_Cr.NS_ERROR_DOCUMENT_NOT_CACHED, + "run_test_pt16 - network is offline"); +} + +// connection refused - NS_ERROR_CONNECTION_REFUSED (2152398861) +function run_test_pt17() { + run_test_helper(end_test, AUS_Cr.NS_ERROR_CONNECTION_REFUSED, + "run_test_pt17 - connection refused"); } diff --git a/toolkit/mozapps/update/test/unit/test_0051_general.js b/toolkit/mozapps/update/test/unit/test_0051_general.js deleted file mode 100644 index 2f3621e986c..00000000000 --- a/toolkit/mozapps/update/test/unit/test_0051_general.js +++ /dev/null @@ -1,160 +0,0 @@ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is the Application Update Service. - * - * The Initial Developer of the Original Code is - * Robert Strong