summaryrefslogtreecommitdiffstats
path: root/toolkit/mozapps/extensions/test/xpcshell/test_updatecheck.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/mozapps/extensions/test/xpcshell/test_updatecheck.js')
-rw-r--r--toolkit/mozapps/extensions/test/xpcshell/test_updatecheck.js167
1 files changed, 167 insertions, 0 deletions
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);
+});