зеркало из https://github.com/mozilla/gecko-dev.git
298 строки
9.8 KiB
JavaScript
298 строки
9.8 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/
|
|
*/
|
|
|
|
/* File in use inside removed dir partial MAR file background patch apply success test */
|
|
|
|
const TEST_ID = "0187";
|
|
const MAR_IN_USE_WIN_FILE = "data/partial.mar";
|
|
|
|
// The files are listed in the same order as they are applied from the mar's
|
|
// update.manifest. Complete updates have remove file and rmdir directory
|
|
// operations located in the precomplete file performed first.
|
|
const TEST_FILES = [
|
|
{
|
|
description : "Should never change",
|
|
fileName : "channel-prefs.js",
|
|
relPathDir : "a/b/defaults/pref/",
|
|
originalContents : "ShouldNotBeReplaced\n",
|
|
compareContents : "ShouldNotBeReplaced\n",
|
|
originalFile : null,
|
|
compareFile : null,
|
|
originalPerms : 0644,
|
|
comparePerms : 0644
|
|
}, {
|
|
description : "Added by update.manifest (add)",
|
|
fileName : "precomplete",
|
|
relPathDir : "",
|
|
originalContents : null,
|
|
compareContents : null,
|
|
originalFile : "data/complete_precomplete",
|
|
compareFile : "data/complete_precomplete",
|
|
originalPerms : 0666,
|
|
comparePerms : 0666
|
|
}, {
|
|
description : "Added by update.manifest (add)",
|
|
fileName : "searchpluginstext0",
|
|
relPathDir : "a/b/searchplugins/",
|
|
originalContents : "ToBeReplacedWithFromPartial\n",
|
|
compareContents : "ToBeReplacedWithFromPartial\n",
|
|
originalFile : null,
|
|
compareFile : null,
|
|
originalPerms : 0775,
|
|
comparePerms : 0775
|
|
}, {
|
|
description : "Patched by update.manifest if the file exists " +
|
|
"(patch-if)",
|
|
fileName : "searchpluginspng1.png",
|
|
relPathDir : "a/b/searchplugins/",
|
|
originalContents : null,
|
|
compareContents : null,
|
|
originalFile : "data/complete.png",
|
|
compareFile : "data/complete.png",
|
|
originalPerms : 0666,
|
|
comparePerms : 0666
|
|
}, {
|
|
description : "Patched by update.manifest if the file exists " +
|
|
"(patch-if)",
|
|
fileName : "searchpluginspng0.png",
|
|
relPathDir : "a/b/searchplugins/",
|
|
originalContents : null,
|
|
compareContents : null,
|
|
originalFile : "data/complete.png",
|
|
compareFile : "data/complete.png",
|
|
originalPerms : 0666,
|
|
comparePerms : 0666
|
|
}, {
|
|
description : "Added by update.manifest if the parent directory " +
|
|
"exists (add-if)",
|
|
fileName : "extensions1text0",
|
|
relPathDir : "a/b/extensions/extensions1/",
|
|
originalContents : null,
|
|
compareContents : null,
|
|
originalFile : null,
|
|
compareFile : null,
|
|
originalPerms : null,
|
|
comparePerms : null
|
|
}, {
|
|
description : "Patched by update.manifest if the parent directory " +
|
|
"exists (patch-if)",
|
|
fileName : "extensions1png1.png",
|
|
relPathDir : "a/b/extensions/extensions1/",
|
|
originalContents : null,
|
|
compareContents : null,
|
|
originalFile : "data/complete.png",
|
|
compareFile : "data/complete.png",
|
|
originalPerms : 0666,
|
|
comparePerms : 0666
|
|
}, {
|
|
description : "Patched by update.manifest if the parent directory " +
|
|
"exists (patch-if)",
|
|
fileName : "extensions1png0.png",
|
|
relPathDir : "a/b/extensions/extensions1/",
|
|
originalContents : null,
|
|
compareContents : null,
|
|
originalFile : "data/complete.png",
|
|
compareFile : "data/complete.png",
|
|
originalPerms : 0666,
|
|
comparePerms : 0666
|
|
}, {
|
|
description : "Added by update.manifest if the parent directory " +
|
|
"exists (add-if)",
|
|
fileName : "extensions0text0",
|
|
relPathDir : "a/b/extensions/extensions0/",
|
|
originalContents : "ToBeReplacedWithFromPartial\n",
|
|
compareContents : "ToBeReplacedWithFromPartial\n",
|
|
originalFile : null,
|
|
compareFile : null,
|
|
originalPerms : null,
|
|
comparePerms : null
|
|
}, {
|
|
description : "Patched by update.manifest if the parent directory " +
|
|
"exists (patch-if)",
|
|
fileName : "extensions0png1.png",
|
|
relPathDir : "a/b/extensions/extensions0/",
|
|
originalContents : null,
|
|
compareContents : null,
|
|
originalFile : "data/complete.png",
|
|
compareFile : "data/complete.png",
|
|
originalPerms : null,
|
|
comparePerms : null
|
|
}, {
|
|
description : "Patched by update.manifest if the parent directory " +
|
|
"exists (patch-if)",
|
|
fileName : "extensions0png0.png",
|
|
relPathDir : "a/b/extensions/extensions0/",
|
|
originalContents : null,
|
|
compareContents : null,
|
|
originalFile : "data/complete.png",
|
|
compareFile : "data/complete.png",
|
|
originalPerms : null,
|
|
comparePerms : null
|
|
}, {
|
|
description : "Patched by update.manifest (patch)",
|
|
fileName : "exe0.exe",
|
|
relPathDir : "a/b/",
|
|
originalContents : null,
|
|
compareContents : null,
|
|
originalFile : "data/complete.png",
|
|
compareFile : "data/complete.png",
|
|
originalPerms : 0755,
|
|
comparePerms : 0755
|
|
}, {
|
|
description : "Patched by update.manifest (patch)",
|
|
fileName : "0exe0.exe",
|
|
relPathDir : "a/b/0/",
|
|
originalContents : null,
|
|
compareContents : null,
|
|
originalFile : "data/complete.png",
|
|
compareFile : "data/complete.png",
|
|
originalPerms : 0755,
|
|
comparePerms : 0755
|
|
}, {
|
|
description : "Added by update.manifest (add)",
|
|
fileName : "00text0",
|
|
relPathDir : "a/b/0/00/",
|
|
originalContents : "ToBeReplacedWithFromPartial\n",
|
|
compareContents : "ToBeReplacedWithFromPartial\n",
|
|
originalFile : null,
|
|
compareFile : null,
|
|
originalPerms : 0644,
|
|
comparePerms : 0644
|
|
}, {
|
|
description : "Patched by update.manifest (patch)",
|
|
fileName : "00png0.png",
|
|
relPathDir : "a/b/0/00/",
|
|
originalContents : null,
|
|
compareContents : null,
|
|
originalFile : "data/complete.png",
|
|
compareFile : "data/complete.png",
|
|
originalPerms : 0666,
|
|
comparePerms : 0666
|
|
}, {
|
|
description : "Added by update.manifest (add)",
|
|
fileName : "20text0",
|
|
relPathDir : "a/b/2/20/",
|
|
originalContents : null,
|
|
compareContents : null,
|
|
originalFile : null,
|
|
compareFile : null,
|
|
originalPerms : null,
|
|
comparePerms : null
|
|
}, {
|
|
description : "Added by update.manifest (add)",
|
|
fileName : "20png0.png",
|
|
relPathDir : "a/b/2/20/",
|
|
originalContents : null,
|
|
compareContents : null,
|
|
originalFile : null,
|
|
compareFile : null,
|
|
originalPerms : null,
|
|
comparePerms : null
|
|
}, {
|
|
description : "Added by update.manifest (add)",
|
|
fileName : "00text2",
|
|
relPathDir : "a/b/0/00/",
|
|
originalContents : null,
|
|
compareContents : null,
|
|
originalFile : null,
|
|
compareFile : null,
|
|
originalPerms : null,
|
|
comparePerms : null
|
|
}, {
|
|
description : "Removed by update.manifest (remove)",
|
|
fileName : "10text0",
|
|
relPathDir : "a/b/1/10/",
|
|
originalContents : "ToBeDeleted\n",
|
|
compareContents : "ToBeDeleted\n",
|
|
originalFile : null,
|
|
compareFile : null,
|
|
originalPerms : null,
|
|
comparePerms : null
|
|
}, {
|
|
description : "Removed by update.manifest (remove)",
|
|
fileName : "00text1",
|
|
relPathDir : "a/b/0/00/",
|
|
originalContents : "ToBeDeleted\n",
|
|
compareContents : "ToBeDeleted\n",
|
|
originalFile : null,
|
|
compareFile : null,
|
|
originalPerms : null,
|
|
comparePerms : null
|
|
}];
|
|
|
|
ADDITIONAL_TEST_DIRS = [
|
|
{
|
|
description : "Removed by update.manifest (rmdir)",
|
|
relPathDir : "a/b/1/10/",
|
|
dirRemoved : true
|
|
}, {
|
|
description : "Removed by update.manifest (rmdir)",
|
|
relPathDir : "a/b/1/",
|
|
dirRemoved : true
|
|
}];
|
|
|
|
function run_test() {
|
|
do_test_pending();
|
|
do_register_cleanup(cleanupUpdaterTest);
|
|
|
|
gBackgroundUpdate = true;
|
|
setupUpdaterTest(MAR_IN_USE_WIN_FILE);
|
|
|
|
let fileInUseBin = getApplyDirFile(TEST_DIRS[2].relPathDir +
|
|
TEST_DIRS[2].files[0]);
|
|
// Remove the empty file created for the test so the helper application can
|
|
// replace it.
|
|
fileInUseBin.remove(false);
|
|
|
|
let helperBin = do_get_file(HELPER_BIN_FILE);
|
|
let fileInUseDir = getApplyDirFile(TEST_DIRS[2].relPathDir);
|
|
helperBin.copyTo(fileInUseDir, TEST_DIRS[2].files[0]);
|
|
|
|
// Launch an existing file so it is in use during the update
|
|
let args = [getApplyDirPath() + "a/b/", "input", "output", "-s", "40"];
|
|
let fileInUseProcess = AUS_Cc["@mozilla.org/process/util;1"].
|
|
createInstance(AUS_Ci.nsIProcess);
|
|
fileInUseProcess.init(fileInUseBin);
|
|
fileInUseProcess.run(false, args, args.length);
|
|
|
|
do_timeout(TEST_HELPER_TIMEOUT, waitForHelperSleep);
|
|
}
|
|
|
|
function doUpdate() {
|
|
let exitValue = runUpdate();
|
|
logTestInfo("testing updater binary process exitValue for success when " +
|
|
"applying a complete mar");
|
|
do_check_eq(exitValue, 0);
|
|
|
|
logTestInfo("testing update.status should be " + STATE_APPLIED);
|
|
let updatesDir = do_get_file(TEST_ID + UPDATES_DIR_SUFFIX);
|
|
do_check_eq(readStatusFile(updatesDir), STATE_APPLIED);
|
|
|
|
// Now switch the application and its updated version
|
|
gBackgroundUpdate = false;
|
|
gSwitchApp = true;
|
|
gDisableReplaceFallback = true;
|
|
exitValue = runUpdate();
|
|
logTestInfo("testing updater binary process exitValue for failure when " +
|
|
"switching to the updated application");
|
|
do_check_eq(exitValue, 1);
|
|
|
|
setupHelperFinish();
|
|
}
|
|
|
|
function checkUpdate() {
|
|
logTestInfo("testing update.status should be " + STATE_FAILED);
|
|
let updatesDir = do_get_file(TEST_ID + UPDATES_DIR_SUFFIX);
|
|
do_check_eq(readStatusFile(updatesDir).split(": ")[0], STATE_FAILED);
|
|
|
|
checkFilesAfterUpdateFailure(getApplyDirFile);
|
|
checkUpdateLogContains(ERR_RENAME_FILE);
|
|
|
|
logTestInfo("testing tobedeleted directory does not exist");
|
|
let toBeDeletedDir = getApplyDirFile("tobedeleted", true);
|
|
do_check_false(toBeDeletedDir.exists());
|
|
|
|
checkCallbackAppLog();
|
|
}
|