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.js236
1 files changed, 236 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 000000000..e8529bb2c
--- /dev/null
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_updatecheck.js
@@ -0,0 +1,236 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+// This verifies that AddonUpdateChecker works correctly
+
+Components.utils.import("resource://gre/modules/addons/AddonUpdateChecker.jsm");
+
+Components.utils.import("resource://testing-common/httpd.js");
+
+var testserver = createHttpServer(4444);
+testserver.registerDirectory("/data/", do_get_file("data"));
+
+function checkUpdates(aId, aUpdateKey, aUpdateFile) {
+ return new Promise((resolve, reject) => {
+ AddonUpdateChecker.checkForUpdates(aId, aUpdateKey, `http://localhost:4444/data/${aUpdateFile}`, {
+ onUpdateCheckComplete: resolve,
+
+ onUpdateCheckError: function(status) {
+ let error = new Error("Update check failed with status " + status);
+ error.status = status;
+ reject(error);
+ }
+ });
+ });
+}
+
+function run_test() {
+ createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1");
+
+ run_next_test();
+}
+
+// Test that a basic update check returns the expected available updates
+add_task(function* () {
+ for (let file of ["test_updatecheck.rdf", "test_updatecheck.json"]) {
+ let updates = yield checkUpdates("updatecheck1@tests.mozilla.org", null, file);
+
+ equal(updates.length, 5);
+ let update = 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");
+ }
+});
+
+/*
+ * Tests that the security checks are applied correctly
+ *
+ * Test signature updateHash updateLink expected
+ *--------------------------------------------------------
+ * 2 absent absent http fail
+ * 3 broken absent http fail
+ * 4 correct absent http no update
+ * 5 correct sha1 http update
+ * 6 corrent absent https update
+ * 7 corrent sha1 https update
+ * 8 corrent md2 http no update
+ * 9 corrent md2 https update
+ */
+
+var updateKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDK426erD/H3XtsjvaB5+PJqbhj" +
+ "Zc9EDI5OCJS8R3FIObJ9ZHJK1TXeaE7JWqt9WUmBWTEFvwS+FI9vWu8058N9CHhD" +
+ "NyeP6i4LuUYjTURnn7Yw/IgzyIJ2oKsYa32RuxAyteqAWqPT/J63wBixIeCxmysf" +
+ "awB/zH4KaPiY3vnrzQIDAQAB";
+
+add_task(function* () {
+ for (let file of ["test_updatecheck.rdf", "test_updatecheck.json"]) {
+ try {
+ yield checkUpdates("test_bug378216_5@tests.mozilla.org",
+ updateKey, file);
+ throw "Expected the update check to fail";
+ } catch (e) {}
+ }
+});
+
+add_task(function* () {
+ for (let file of ["test_updatecheck.rdf", "test_updatecheck.json"]) {
+ try {
+ yield checkUpdates("test_bug378216_7@tests.mozilla.org",
+ updateKey, file);
+
+ throw "Expected the update check to fail";
+ } catch (e) {}
+ }
+});
+
+add_task(function* () {
+ // Make sure that the JSON manifest is rejected when an update key is
+ // required, but perform the remaining tests which aren't expected to fail
+ // because of the update key, without requiring one for the JSON variant.
+
+ try {
+ let updates = yield checkUpdates("test_bug378216_8@tests.mozilla.org",
+ updateKey, "test_updatecheck.json");
+
+ throw "Expected the update check to fail";
+ } catch (e) {}
+
+ for (let [file, key] of [["test_updatecheck.rdf", updateKey],
+ ["test_updatecheck.json", null]]) {
+ let updates = yield checkUpdates("test_bug378216_8@tests.mozilla.org",
+ key, file);
+ equal(updates.length, 1);
+ ok(!("updateURL" in updates[0]));
+ }
+});
+
+add_task(function* () {
+ for (let [file, key] of [["test_updatecheck.rdf", updateKey],
+ ["test_updatecheck.json", null]]) {
+ let updates = yield checkUpdates("test_bug378216_9@tests.mozilla.org",
+ key, file);
+ equal(updates.length, 1);
+ equal(updates[0].version, "2.0");
+ ok("updateURL" in updates[0]);
+ }
+});
+
+add_task(function* () {
+ for (let [file, key] of [["test_updatecheck.rdf", updateKey],
+ ["test_updatecheck.json", null]]) {
+ let updates = yield checkUpdates("test_bug378216_10@tests.mozilla.org",
+ key, file);
+ equal(updates.length, 1);
+ equal(updates[0].version, "2.0");
+ ok("updateURL" in updates[0]);
+ }
+});
+
+add_task(function* () {
+ for (let [file, key] of [["test_updatecheck.rdf", updateKey],
+ ["test_updatecheck.json", null]]) {
+ let updates = yield checkUpdates("test_bug378216_11@tests.mozilla.org",
+ key, file);
+ equal(updates.length, 1);
+ equal(updates[0].version, "2.0");
+ ok("updateURL" in updates[0]);
+ }
+});
+
+add_task(function* () {
+ for (let [file, key] of [["test_updatecheck.rdf", updateKey],
+ ["test_updatecheck.json", null]]) {
+ let updates = yield checkUpdates("test_bug378216_12@tests.mozilla.org",
+ key, file);
+ equal(updates.length, 1);
+ do_check_false("updateURL" in updates[0]);
+ }
+});
+
+add_task(function* () {
+ for (let [file, key] of [["test_updatecheck.rdf", updateKey],
+ ["test_updatecheck.json", null]]) {
+ let updates = yield checkUpdates("test_bug378216_13@tests.mozilla.org",
+ key, file);
+ equal(updates.length, 1);
+ equal(updates[0].version, "2.0");
+ ok("updateURL" in updates[0]);
+ }
+});
+
+add_task(function* () {
+ for (let file of ["test_updatecheck.rdf", "test_updatecheck.json"]) {
+ let updates = yield checkUpdates("test_bug378216_14@tests.mozilla.org",
+ null, file);
+ equal(updates.length, 0);
+ }
+});
+
+add_task(function* () {
+ for (let file of ["test_updatecheck.rdf", "test_updatecheck.json"]) {
+ try {
+ yield checkUpdates("test_bug378216_15@tests.mozilla.org",
+ null, file);
+
+ throw "Update check should have failed";
+ } catch (e) {
+ equal(e.status, AddonUpdateChecker.ERROR_PARSE_ERROR);
+ }
+ }
+});
+
+add_task(function* () {
+ for (let file of ["test_updatecheck.rdf", "test_updatecheck.json"]) {
+ let updates = yield checkUpdates("ignore-compat@tests.mozilla.org",
+ null, file);
+ equal(updates.length, 3);
+ let update = AddonUpdateChecker.getNewestCompatibleUpdate(
+ updates, null, null, true);
+ notEqual(update, null);
+ equal(update.version, 2);
+ }
+});
+
+add_task(function* () {
+ for (let file of ["test_updatecheck.rdf", "test_updatecheck.json"]) {
+ let updates = yield checkUpdates("compat-override@tests.mozilla.org",
+ null, file);
+ equal(updates.length, 3);
+ let overrides = [{
+ type: "incompatible",
+ minVersion: 1,
+ maxVersion: 2,
+ appID: "xpcshell@tests.mozilla.org",
+ appMinVersion: 0.1,
+ appMaxVersion: 0.2
+ }, {
+ type: "incompatible",
+ minVersion: 2,
+ maxVersion: 2,
+ appID: "xpcshell@tests.mozilla.org",
+ appMinVersion: 1,
+ appMaxVersion: 2
+ }];
+ let update = AddonUpdateChecker.getNewestCompatibleUpdate(
+ updates, null, null, true, false, overrides);
+ notEqual(update, null);
+ equal(update.version, 1);
+ }
+});
+
+add_task(function* () {
+ for (let file of ["test_updatecheck.rdf", "test_updatecheck.json"]) {
+ let updates = yield checkUpdates("compat-strict-optin@tests.mozilla.org",
+ null, file);
+ equal(updates.length, 1);
+ let update = AddonUpdateChecker.getNewestCompatibleUpdate(
+ updates, null, null, true, false);
+ equal(update, null);
+ }
+});