From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- .../extensions/test/xpcshell/test_updatecheck.js | 167 +++++++++++++++++++++ 1 file changed, 167 insertions(+) create mode 100644 toolkit/mozapps/extensions/test/xpcshell/test_updatecheck.js (limited to 'toolkit/mozapps/extensions/test/xpcshell/test_updatecheck.js') diff --git a/toolkit/mozapps/extensions/test/xpcshell/test_updatecheck.js b/toolkit/mozapps/extensions/test/xpcshell/test_updatecheck.js new file mode 100644 index 0000000000..9ddaf82bf3 --- /dev/null +++ b/toolkit/mozapps/extensions/test/xpcshell/test_updatecheck.js @@ -0,0 +1,167 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ + */ + +// This verifies that AddonUpdateChecker works correctly + +const { AddonUpdateChecker } = ChromeUtils.importESModule( + "resource://gre/modules/addons/AddonUpdateChecker.sys.mjs" +); + +createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1"); + +var testserver = AddonTestUtils.createHttpServer({ hosts: ["example.com"] }); + +testserver.registerDirectory("/data/", do_get_file("data")); + +function checkUpdates(aId) { + return new Promise((resolve, reject) => { + AddonUpdateChecker.checkForUpdates( + aId, + `http://example.com/data/test_updatecheck.json`, + { + onUpdateCheckComplete: resolve, + + onUpdateCheckError(status) { + let error = new Error("Update check failed with status " + status); + error.status = status; + reject(error); + }, + } + ); + }); +} + +// Test that a basic update check returns the expected available updates +add_task(async function test_basic_update() { + let updates = await checkUpdates("updatecheck1@tests.mozilla.org"); + + equal(updates.length, 5); + let update = await AddonUpdateChecker.getNewestCompatibleUpdate(updates, {}); + notEqual(update, null); + equal(update.version, "3.0"); + update = AddonUpdateChecker.getCompatibilityUpdate(updates, "2"); + notEqual(update, null); + equal(update.version, "2.0"); + equal(update.targetApplications[0].minVersion, "1"); + equal(update.targetApplications[0].maxVersion, "2"); +}); + +// Test that only newer versions are considered. +add_task(async function test_update_newer_versions_only() { + let updates = await checkUpdates("updatecheck1@tests.mozilla.org"); + + // This should be an AddonWrapper instance, but for the purpose of this test, + // an object with the version property suffices. + let addon = { version: "2.0" }; + let update = await AddonUpdateChecker.getNewestCompatibleUpdate( + updates, + addon + ); + notEqual(update, null); + equal(update.version, "3.0"); + + addon = { version: "3.0" }; + update = await AddonUpdateChecker.getNewestCompatibleUpdate(updates, addon); + equal(update, null); +}); + +/* + * Tests that the security checks are applied correctly + * + * Test updateHash updateLink expected + *-------------------------------------------- + * 4 absent http no update + * 5 sha1 http update + * 6 absent https update + * 7 sha1 https update + * 8 md2 http no update + * 9 md2 https update + */ + +add_task(async function test_4() { + let updates = await checkUpdates("test_bug378216_8@tests.mozilla.org"); + equal(updates.length, 1); + ok(!("updateURL" in updates[0])); +}); + +add_task(async function test_5() { + let updates = await checkUpdates("test_bug378216_9@tests.mozilla.org"); + equal(updates.length, 1); + equal(updates[0].version, "2.0"); + ok("updateURL" in updates[0]); +}); + +add_task(async function test_6() { + let updates = await checkUpdates("test_bug378216_10@tests.mozilla.org"); + equal(updates.length, 1); + equal(updates[0].version, "2.0"); + ok("updateURL" in updates[0]); +}); + +add_task(async function test_7() { + let updates = await checkUpdates("test_bug378216_11@tests.mozilla.org"); + equal(updates.length, 1); + equal(updates[0].version, "2.0"); + ok("updateURL" in updates[0]); +}); + +add_task(async function test_8() { + let updates = await checkUpdates("test_bug378216_12@tests.mozilla.org"); + equal(updates.length, 1); + ok(!("updateURL" in updates[0])); +}); + +add_task(async function test_9() { + let updates = await checkUpdates("test_bug378216_13@tests.mozilla.org"); + equal(updates.length, 1); + equal(updates[0].version, "2.0"); + ok("updateURL" in updates[0]); +}); + +add_task(async function test_no_update_data() { + let updates = await checkUpdates("test_bug378216_14@tests.mozilla.org"); + equal(updates.length, 0); +}); + +add_task(async function test_invalid_json() { + await checkUpdates("test_bug378216_15@tests.mozilla.org") + .then(() => { + ok(false, "Expected the update check to fail"); + }) + .catch(e => { + equal( + e.status, + AddonManager.ERROR_PARSE_ERROR, + "expected AddonManager.ERROR_PARSE_ERROR" + ); + }); +}); + +add_task(async function test_ignore_compat() { + let updates = await checkUpdates("ignore-compat@tests.mozilla.org"); + equal(updates.length, 3); + let update = await AddonUpdateChecker.getNewestCompatibleUpdate( + updates, + {}, // dummy value instead of addon. + null, + null, + true + ); + notEqual(update, null); + equal(update.version, 2); +}); + +add_task(async function test_strict_compat() { + let updates = await checkUpdates("compat-strict-optin@tests.mozilla.org"); + equal(updates.length, 1); + let update = await AddonUpdateChecker.getNewestCompatibleUpdate( + updates, + {}, // dummy value instead of addon. + null, + null, + true, + false + ); + equal(update, null); +}); -- cgit v1.2.3