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.js312
1 files changed, 312 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..d2e15103b
--- /dev/null
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_updatecheck.js
@@ -0,0 +1,312 @@
+/* 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;
+
+function run_test() {
+ createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2");
+
+ // Create and configure the HTTP server.
+ testserver = new HttpServer();
+ testserver.registerDirectory("/data/", do_get_file("data"));
+ testserver.start(4444);
+
+ do_test_pending();
+ run_test_1();
+}
+
+function end_test() {
+ testserver.stop(do_test_finished);
+}
+
+// Test that a basic update check returns the expected available updates
+function run_test_1() {
+ AddonUpdateChecker.checkForUpdates("updatecheck1@tests.mozilla.org", null,
+ "http://localhost:4444/data/test_updatecheck.rdf", {
+ onUpdateCheckComplete: function(updates) {
+ check_test_1(updates);
+ },
+
+ onUpdateCheckError: function(status) {
+ do_throw("Update check failed with status " + status);
+ }
+ });
+}
+
+function check_test_1(updates) {
+ do_check_eq(updates.length, 5);
+ let update = AddonUpdateChecker.getNewestCompatibleUpdate(updates);
+ do_check_neq(update, null);
+ do_check_eq(update.version, 3);
+ update = AddonUpdateChecker.getCompatibilityUpdate(updates, "2");
+ do_check_neq(update, null);
+ do_check_eq(update.version, 2);
+ do_check_eq(update.targetApplications[0].minVersion, 1);
+ do_check_eq(update.targetApplications[0].maxVersion, 2);
+
+ run_test_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
+ */
+
+let updateKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDK426erD/H3XtsjvaB5+PJqbhj" +
+ "Zc9EDI5OCJS8R3FIObJ9ZHJK1TXeaE7JWqt9WUmBWTEFvwS+FI9vWu8058N9CHhD" +
+ "NyeP6i4LuUYjTURnn7Yw/IgzyIJ2oKsYa32RuxAyteqAWqPT/J63wBixIeCxmysf" +
+ "awB/zH4KaPiY3vnrzQIDAQAB";
+
+function run_test_2() {
+ AddonUpdateChecker.checkForUpdates("test_bug378216_5@tests.mozilla.org",
+ updateKey,
+ "http://localhost:4444/data/test_updatecheck.rdf", {
+ onUpdateCheckComplete: function(updates) {
+ do_throw("Expected the update check to fail");
+ },
+
+ onUpdateCheckError: function(status) {
+ run_test_3();
+ }
+ });
+}
+
+function run_test_3() {
+ AddonUpdateChecker.checkForUpdates("test_bug378216_7@tests.mozilla.org",
+ updateKey,
+ "http://localhost:4444/data/test_updatecheck.rdf", {
+ onUpdateCheckComplete: function(updates) {
+ do_throw("Expected the update check to fail");
+ },
+
+ onUpdateCheckError: function(status) {
+ run_test_4();
+ }
+ });
+}
+
+function run_test_4() {
+ AddonUpdateChecker.checkForUpdates("test_bug378216_8@tests.mozilla.org",
+ updateKey,
+ "http://localhost:4444/data/test_updatecheck.rdf", {
+ onUpdateCheckComplete: function(updates) {
+ do_check_eq(updates.length, 1);
+ do_check_false("updateURL" in updates[0]);
+ run_test_5();
+ },
+
+ onUpdateCheckError: function(status) {
+ do_throw("Update check failed with status " + status);
+ }
+ });
+}
+
+function run_test_5() {
+ AddonUpdateChecker.checkForUpdates("test_bug378216_9@tests.mozilla.org",
+ updateKey,
+ "http://localhost:4444/data/test_updatecheck.rdf", {
+ onUpdateCheckComplete: function(updates) {
+ do_check_eq(updates.length, 1);
+ do_check_eq(updates[0].version, "2.0");
+ do_check_true("updateURL" in updates[0]);
+ run_test_6();
+ },
+
+ onUpdateCheckError: function(status) {
+ do_throw("Update check failed with status " + status);
+ }
+ });
+}
+
+function run_test_6() {
+ AddonUpdateChecker.checkForUpdates("test_bug378216_10@tests.mozilla.org",
+ updateKey,
+ "http://localhost:4444/data/test_updatecheck.rdf", {
+ onUpdateCheckComplete: function(updates) {
+ do_check_eq(updates.length, 1);
+ do_check_eq(updates[0].version, "2.0");
+ do_check_true("updateURL" in updates[0]);
+ run_test_7();
+ },
+
+ onUpdateCheckError: function(status) {
+ do_throw("Update check failed with status " + status);
+ }
+ });
+}
+
+function run_test_7() {
+ AddonUpdateChecker.checkForUpdates("test_bug378216_11@tests.mozilla.org",
+ updateKey,
+ "http://localhost:4444/data/test_updatecheck.rdf", {
+ onUpdateCheckComplete: function(updates) {
+ do_check_eq(updates.length, 1);
+ do_check_eq(updates[0].version, "2.0");
+ do_check_true("updateURL" in updates[0]);
+ run_test_8();
+ },
+
+ onUpdateCheckError: function(status) {
+ do_throw("Update check failed with status " + status);
+ }
+ });
+}
+
+function run_test_8() {
+ AddonUpdateChecker.checkForUpdates("test_bug378216_12@tests.mozilla.org",
+ updateKey,
+ "http://localhost:4444/data/test_updatecheck.rdf", {
+ onUpdateCheckComplete: function(updates) {
+ do_check_eq(updates.length, 1);
+ do_check_false("updateURL" in updates[0]);
+ run_test_9();
+ },
+
+ onUpdateCheckError: function(status) {
+ do_throw("Update check failed with status " + status);
+ }
+ });
+}
+
+function run_test_9() {
+ AddonUpdateChecker.checkForUpdates("test_bug378216_13@tests.mozilla.org",
+ updateKey,
+ "http://localhost:4444/data/test_updatecheck.rdf", {
+ onUpdateCheckComplete: function(updates) {
+ do_check_eq(updates.length, 1);
+ do_check_eq(updates[0].version, "2.0");
+ do_check_true("updateURL" in updates[0]);
+ run_test_10();
+ },
+
+ onUpdateCheckError: function(status) {
+ do_throw("Update check failed with status " + status);
+ }
+ });
+}
+
+function run_test_10() {
+ AddonUpdateChecker.checkForUpdates("test_bug378216_14@tests.mozilla.org",
+ null,
+ "http://localhost:4444/data/test_updatecheck.rdf", {
+ onUpdateCheckComplete: function(updates) {
+ do_check_eq(updates.length, 0);
+ run_test_11();
+ },
+
+ onUpdateCheckError: function(status) {
+ do_throw("Update check failed with status " + status);
+ }
+ });
+}
+
+function run_test_11() {
+ AddonUpdateChecker.checkForUpdates("test_bug378216_15@tests.mozilla.org",
+ null,
+ "http://localhost:4444/data/test_updatecheck.rdf", {
+ onUpdateCheckComplete: function(updates) {
+ do_throw("Update check should have failed");
+ },
+
+ onUpdateCheckError: function(status) {
+ do_check_eq(status, AddonUpdateChecker.ERROR_PARSE_ERROR);
+ run_test_12();
+ }
+ });
+}
+
+function run_test_12() {
+ AddonUpdateChecker.checkForUpdates("ignore-compat@tests.mozilla.org",
+ null,
+ "http://localhost:4444/data/test_updatecheck.rdf", {
+ onUpdateCheckComplete: function(updates) {
+ do_check_eq(updates.length, 3);
+ let update = AddonUpdateChecker.getNewestCompatibleUpdate(updates,
+ null,
+ null,
+ true);
+ do_check_neq(update, null);
+ do_check_eq(update.version, 2);
+ run_test_13();
+ },
+
+ onUpdateCheckError: function(status) {
+ do_throw("Update check failed with status " + status);
+ }
+ });
+}
+
+function run_test_13() {
+ AddonUpdateChecker.checkForUpdates("compat-override@tests.mozilla.org",
+ null,
+ "http://localhost:4444/data/test_updatecheck.rdf", {
+ onUpdateCheckComplete: function(updates) {
+ do_check_eq(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);
+ do_check_neq(update, null);
+ do_check_eq(update.version, 1);
+ run_test_14();
+ },
+
+ onUpdateCheckError: function(status) {
+ do_throw("Update check failed with status " + status);
+ }
+ });
+}
+
+function run_test_14() {
+ AddonUpdateChecker.checkForUpdates("compat-strict-optin@tests.mozilla.org",
+ null,
+ "http://localhost:4444/data/test_updatecheck.rdf", {
+ onUpdateCheckComplete: function(updates) {
+ do_check_eq(updates.length, 1);
+ let update = AddonUpdateChecker.getNewestCompatibleUpdate(updates,
+ null,
+ null,
+ true,
+ false);
+ do_check_eq(update, null);
+ end_test();
+ },
+
+ onUpdateCheckError: function(status) {
+ do_throw("Update check failed with status " + status);
+ }
+ });
+}