diff options
Diffstat (limited to 'toolkit/mozapps/webextensions/test/xpcshell/test_signed_install.js')
-rw-r--r-- | toolkit/mozapps/webextensions/test/xpcshell/test_signed_install.js | 265 |
1 files changed, 0 insertions, 265 deletions
diff --git a/toolkit/mozapps/webextensions/test/xpcshell/test_signed_install.js b/toolkit/mozapps/webextensions/test/xpcshell/test_signed_install.js deleted file mode 100644 index 19b07ac16..000000000 --- a/toolkit/mozapps/webextensions/test/xpcshell/test_signed_install.js +++ /dev/null @@ -1,265 +0,0 @@ -// Enable signature checks for these tests -gUseRealCertChecks = true; -// Disable update security -Services.prefs.setBoolPref(PREF_EM_CHECK_UPDATE_SECURITY, false); - -const DATA = "data/signing_checks/"; -const ADDONS = { - bootstrap: { - unsigned: "unsigned_bootstrap_2.xpi", - badid: "signed_bootstrap_badid_2.xpi", - preliminary: "preliminary_bootstrap_2.xpi", - signed: "signed_bootstrap_2.xpi", - }, -}; -const WORKING = "signed_bootstrap_1.xpi"; -const ID = "test@tests.mozilla.org"; - -var gServer = createHttpServer(4444); - -// Creates an add-on with a broken signature by changing an existing file -function createBrokenAddonModify(file) { - let brokenFile = gTmpD.clone(); - brokenFile.append("broken.xpi"); - file.copyTo(brokenFile.parent, brokenFile.leafName); - - var stream = AM_Cc["@mozilla.org/io/string-input-stream;1"]. - createInstance(AM_Ci.nsIStringInputStream); - stream.setData("FOOBAR", -1); - var zipW = AM_Cc["@mozilla.org/zipwriter;1"]. - createInstance(AM_Ci.nsIZipWriter); - zipW.open(brokenFile, FileUtils.MODE_RDWR | FileUtils.MODE_APPEND); - zipW.removeEntry("test.txt", false); - zipW.addEntryStream("test.txt", 0, AM_Ci.nsIZipWriter.COMPRESSION_NONE, - stream, false); - zipW.close(); - - return brokenFile; -} - -// Creates an add-on with a broken signature by adding a new file -function createBrokenAddonAdd(file) { - let brokenFile = gTmpD.clone(); - brokenFile.append("broken.xpi"); - file.copyTo(brokenFile.parent, brokenFile.leafName); - - var stream = AM_Cc["@mozilla.org/io/string-input-stream;1"]. - createInstance(AM_Ci.nsIStringInputStream); - stream.setData("FOOBAR", -1); - var zipW = AM_Cc["@mozilla.org/zipwriter;1"]. - createInstance(AM_Ci.nsIZipWriter); - zipW.open(brokenFile, FileUtils.MODE_RDWR | FileUtils.MODE_APPEND); - zipW.addEntryStream("test2.txt", 0, AM_Ci.nsIZipWriter.COMPRESSION_NONE, - stream, false); - zipW.close(); - - return brokenFile; -} - -// Creates an add-on with a broken signature by removing an existing file -function createBrokenAddonRemove(file) { - let brokenFile = gTmpD.clone(); - brokenFile.append("broken.xpi"); - file.copyTo(brokenFile.parent, brokenFile.leafName); - - var stream = AM_Cc["@mozilla.org/io/string-input-stream;1"]. - createInstance(AM_Ci.nsIStringInputStream); - stream.setData("FOOBAR", -1); - var zipW = AM_Cc["@mozilla.org/zipwriter;1"]. - createInstance(AM_Ci.nsIZipWriter); - zipW.open(brokenFile, FileUtils.MODE_RDWR | FileUtils.MODE_APPEND); - zipW.removeEntry("test.txt", false); - zipW.close(); - - return brokenFile; -} - -function createInstall(url) { - return new Promise(resolve => { - AddonManager.getInstallForURL(url, resolve, "application/x-xpinstall"); - }); -} - -function serveUpdateRDF(leafName) { - gServer.registerPathHandler("/update.rdf", function(request, response) { - let updateData = {}; - updateData[ID] = [{ - version: "2.0", - targetApplications: [{ - id: "xpcshell@tests.mozilla.org", - minVersion: "4", - maxVersion: "6", - updateLink: "http://localhost:4444/" + leafName - }] - }]; - - response.setStatusLine(request.httpVersion, 200, "OK"); - response.write(createUpdateRDF(updateData)); - }); -} - - -function* test_install_broken(file, expectedError) { - gServer.registerFile("/" + file.leafName, file); - - let install = yield createInstall("http://localhost:4444/" + file.leafName); - yield promiseCompleteAllInstalls([install]); - - do_check_eq(install.state, AddonManager.STATE_DOWNLOAD_FAILED); - do_check_eq(install.error, expectedError); - do_check_eq(install.addon, null); - - gServer.registerFile("/" + file.leafName, null); -} - -function* test_install_working(file, expectedSignedState) { - gServer.registerFile("/" + file.leafName, file); - - let install = yield createInstall("http://localhost:4444/" + file.leafName); - yield promiseCompleteAllInstalls([install]); - - do_check_eq(install.state, AddonManager.STATE_INSTALLED); - do_check_neq(install.addon, null); - do_check_eq(install.addon.signedState, expectedSignedState); - - gServer.registerFile("/" + file.leafName, null); - - install.addon.uninstall(); -} - -function* test_update_broken(file, expectedError) { - // First install the older version - yield promiseInstallAllFiles([do_get_file(DATA + WORKING)]); - - gServer.registerFile("/" + file.leafName, file); - serveUpdateRDF(file.leafName); - - let addon = yield promiseAddonByID(ID); - let update = yield promiseFindAddonUpdates(addon); - let install = update.updateAvailable; - yield promiseCompleteAllInstalls([install]); - - do_check_eq(install.state, AddonManager.STATE_DOWNLOAD_FAILED); - do_check_eq(install.error, expectedError); - do_check_eq(install.addon, null); - - gServer.registerFile("/" + file.leafName, null); - gServer.registerPathHandler("/update.rdf", null); - - addon.uninstall(); -} - -function* test_update_working(file, expectedSignedState) { - // First install the older version - yield promiseInstallAllFiles([do_get_file(DATA + WORKING)]); - - gServer.registerFile("/" + file.leafName, file); - serveUpdateRDF(file.leafName); - - let addon = yield promiseAddonByID(ID); - let update = yield promiseFindAddonUpdates(addon); - let install = update.updateAvailable; - yield promiseCompleteAllInstalls([install]); - - do_check_eq(install.state, AddonManager.STATE_INSTALLED); - do_check_neq(install.addon, null); - do_check_eq(install.addon.signedState, expectedSignedState); - - gServer.registerFile("/" + file.leafName, null); - gServer.registerPathHandler("/update.rdf", null); - - install.addon.uninstall(); -} - -function run_test() { - createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "4", "4"); - startupManager(); - - run_next_test(); -} - -// Try to install a broken add-on -add_task(function*() { - let file = createBrokenAddonModify(do_get_file(DATA + ADDONS.bootstrap.signed)); - yield test_install_broken(file, AddonManager.ERROR_CORRUPT_FILE); - file.remove(true); -}); - -add_task(function*() { - let file = createBrokenAddonAdd(do_get_file(DATA + ADDONS.bootstrap.signed)); - yield test_install_broken(file, AddonManager.ERROR_CORRUPT_FILE); - file.remove(true); -}); - -add_task(function*() { - let file = createBrokenAddonRemove(do_get_file(DATA + ADDONS.bootstrap.signed)); - yield test_install_broken(file, AddonManager.ERROR_CORRUPT_FILE); - file.remove(true); -}); - -// Try to install an add-on with an incorrect ID -add_task(function*() { - let file = do_get_file(DATA + ADDONS.bootstrap.badid); - yield test_install_broken(file, AddonManager.ERROR_CORRUPT_FILE); -}); - -// Try to install an unsigned add-on -add_task(function*() { - let file = do_get_file(DATA + ADDONS.bootstrap.unsigned); - yield test_install_broken(file, AddonManager.ERROR_SIGNEDSTATE_REQUIRED); -}); - -// Try to install a preliminarily reviewed add-on -add_task(function*() { - let file = do_get_file(DATA + ADDONS.bootstrap.preliminary); - yield test_install_working(file, AddonManager.SIGNEDSTATE_PRELIMINARY); -}); - -// Try to install a signed add-on -add_task(function*() { - let file = do_get_file(DATA + ADDONS.bootstrap.signed); - yield test_install_working(file, AddonManager.SIGNEDSTATE_SIGNED); -}); - -// Try to update to a broken add-on -add_task(function*() { - let file = createBrokenAddonModify(do_get_file(DATA + ADDONS.bootstrap.signed)); - yield test_update_broken(file, AddonManager.ERROR_CORRUPT_FILE); - file.remove(true); -}); - -add_task(function*() { - let file = createBrokenAddonAdd(do_get_file(DATA + ADDONS.bootstrap.signed)); - yield test_update_broken(file, AddonManager.ERROR_CORRUPT_FILE); - file.remove(true); -}); - -add_task(function*() { - let file = createBrokenAddonRemove(do_get_file(DATA + ADDONS.bootstrap.signed)); - yield test_update_broken(file, AddonManager.ERROR_CORRUPT_FILE); - file.remove(true); -}); - -// Try to update to an add-on with an incorrect ID -add_task(function*() { - let file = do_get_file(DATA + ADDONS.bootstrap.badid); - yield test_update_broken(file, AddonManager.ERROR_CORRUPT_FILE); -}); - -// Try to update to an unsigned add-on -add_task(function*() { - let file = do_get_file(DATA + ADDONS.bootstrap.unsigned); - yield test_update_broken(file, AddonManager.ERROR_SIGNEDSTATE_REQUIRED); -}); - -// Try to update to a preliminarily reviewed add-on -add_task(function*() { - let file = do_get_file(DATA + ADDONS.bootstrap.preliminary); - yield test_update_working(file, AddonManager.SIGNEDSTATE_PRELIMINARY); -}); - -// Try to update to a signed add-on -add_task(function*() { - let file = do_get_file(DATA + ADDONS.bootstrap.signed); - yield test_update_working(file, AddonManager.SIGNEDSTATE_SIGNED); -}); |