michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: * http://creativecommons.org/publicdomain/zero/1.0/ michael@0: */ michael@0: michael@0: // This verifies that AddonUpdateChecker works correctly michael@0: michael@0: Components.utils.import("resource://gre/modules/addons/AddonUpdateChecker.jsm"); michael@0: michael@0: Components.utils.import("resource://testing-common/httpd.js"); michael@0: var testserver; michael@0: michael@0: function run_test() { michael@0: createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2"); michael@0: michael@0: // Create and configure the HTTP server. michael@0: testserver = new HttpServer(); michael@0: testserver.registerDirectory("/data/", do_get_file("data")); michael@0: testserver.start(4444); michael@0: michael@0: do_test_pending(); michael@0: run_test_1(); michael@0: } michael@0: michael@0: function end_test() { michael@0: testserver.stop(do_test_finished); michael@0: } michael@0: michael@0: // Test that a basic update check returns the expected available updates michael@0: function run_test_1() { michael@0: AddonUpdateChecker.checkForUpdates("updatecheck1@tests.mozilla.org", null, michael@0: "http://localhost:4444/data/test_updatecheck.rdf", { michael@0: onUpdateCheckComplete: function(updates) { michael@0: check_test_1(updates); michael@0: }, michael@0: michael@0: onUpdateCheckError: function(status) { michael@0: do_throw("Update check failed with status " + status); michael@0: } michael@0: }); michael@0: } michael@0: michael@0: function check_test_1(updates) { michael@0: do_check_eq(updates.length, 5); michael@0: let update = AddonUpdateChecker.getNewestCompatibleUpdate(updates); michael@0: do_check_neq(update, null); michael@0: do_check_eq(update.version, 3); michael@0: update = AddonUpdateChecker.getCompatibilityUpdate(updates, "2"); michael@0: do_check_neq(update, null); michael@0: do_check_eq(update.version, 2); michael@0: do_check_eq(update.targetApplications[0].minVersion, 1); michael@0: do_check_eq(update.targetApplications[0].maxVersion, 2); michael@0: michael@0: run_test_2(); michael@0: } michael@0: michael@0: /* michael@0: * Tests that the security checks are applied correctly michael@0: * michael@0: * Test signature updateHash updateLink expected michael@0: *-------------------------------------------------------- michael@0: * 2 absent absent http fail michael@0: * 3 broken absent http fail michael@0: * 4 correct absent http no update michael@0: * 5 correct sha1 http update michael@0: * 6 corrent absent https update michael@0: * 7 corrent sha1 https update michael@0: * 8 corrent md2 http no update michael@0: * 9 corrent md2 https update michael@0: */ michael@0: michael@0: let updateKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDK426erD/H3XtsjvaB5+PJqbhj" + michael@0: "Zc9EDI5OCJS8R3FIObJ9ZHJK1TXeaE7JWqt9WUmBWTEFvwS+FI9vWu8058N9CHhD" + michael@0: "NyeP6i4LuUYjTURnn7Yw/IgzyIJ2oKsYa32RuxAyteqAWqPT/J63wBixIeCxmysf" + michael@0: "awB/zH4KaPiY3vnrzQIDAQAB"; michael@0: michael@0: function run_test_2() { michael@0: AddonUpdateChecker.checkForUpdates("test_bug378216_5@tests.mozilla.org", michael@0: updateKey, michael@0: "http://localhost:4444/data/test_updatecheck.rdf", { michael@0: onUpdateCheckComplete: function(updates) { michael@0: do_throw("Expected the update check to fail"); michael@0: }, michael@0: michael@0: onUpdateCheckError: function(status) { michael@0: run_test_3(); michael@0: } michael@0: }); michael@0: } michael@0: michael@0: function run_test_3() { michael@0: AddonUpdateChecker.checkForUpdates("test_bug378216_7@tests.mozilla.org", michael@0: updateKey, michael@0: "http://localhost:4444/data/test_updatecheck.rdf", { michael@0: onUpdateCheckComplete: function(updates) { michael@0: do_throw("Expected the update check to fail"); michael@0: }, michael@0: michael@0: onUpdateCheckError: function(status) { michael@0: run_test_4(); michael@0: } michael@0: }); michael@0: } michael@0: michael@0: function run_test_4() { michael@0: AddonUpdateChecker.checkForUpdates("test_bug378216_8@tests.mozilla.org", michael@0: updateKey, michael@0: "http://localhost:4444/data/test_updatecheck.rdf", { michael@0: onUpdateCheckComplete: function(updates) { michael@0: do_check_eq(updates.length, 1); michael@0: do_check_false("updateURL" in updates[0]); michael@0: run_test_5(); michael@0: }, michael@0: michael@0: onUpdateCheckError: function(status) { michael@0: do_throw("Update check failed with status " + status); michael@0: } michael@0: }); michael@0: } michael@0: michael@0: function run_test_5() { michael@0: AddonUpdateChecker.checkForUpdates("test_bug378216_9@tests.mozilla.org", michael@0: updateKey, michael@0: "http://localhost:4444/data/test_updatecheck.rdf", { michael@0: onUpdateCheckComplete: function(updates) { michael@0: do_check_eq(updates.length, 1); michael@0: do_check_eq(updates[0].version, "2.0"); michael@0: do_check_true("updateURL" in updates[0]); michael@0: run_test_6(); michael@0: }, michael@0: michael@0: onUpdateCheckError: function(status) { michael@0: do_throw("Update check failed with status " + status); michael@0: } michael@0: }); michael@0: } michael@0: michael@0: function run_test_6() { michael@0: AddonUpdateChecker.checkForUpdates("test_bug378216_10@tests.mozilla.org", michael@0: updateKey, michael@0: "http://localhost:4444/data/test_updatecheck.rdf", { michael@0: onUpdateCheckComplete: function(updates) { michael@0: do_check_eq(updates.length, 1); michael@0: do_check_eq(updates[0].version, "2.0"); michael@0: do_check_true("updateURL" in updates[0]); michael@0: run_test_7(); michael@0: }, michael@0: michael@0: onUpdateCheckError: function(status) { michael@0: do_throw("Update check failed with status " + status); michael@0: } michael@0: }); michael@0: } michael@0: michael@0: function run_test_7() { michael@0: AddonUpdateChecker.checkForUpdates("test_bug378216_11@tests.mozilla.org", michael@0: updateKey, michael@0: "http://localhost:4444/data/test_updatecheck.rdf", { michael@0: onUpdateCheckComplete: function(updates) { michael@0: do_check_eq(updates.length, 1); michael@0: do_check_eq(updates[0].version, "2.0"); michael@0: do_check_true("updateURL" in updates[0]); michael@0: run_test_8(); michael@0: }, michael@0: michael@0: onUpdateCheckError: function(status) { michael@0: do_throw("Update check failed with status " + status); michael@0: } michael@0: }); michael@0: } michael@0: michael@0: function run_test_8() { michael@0: AddonUpdateChecker.checkForUpdates("test_bug378216_12@tests.mozilla.org", michael@0: updateKey, michael@0: "http://localhost:4444/data/test_updatecheck.rdf", { michael@0: onUpdateCheckComplete: function(updates) { michael@0: do_check_eq(updates.length, 1); michael@0: do_check_false("updateURL" in updates[0]); michael@0: run_test_9(); michael@0: }, michael@0: michael@0: onUpdateCheckError: function(status) { michael@0: do_throw("Update check failed with status " + status); michael@0: } michael@0: }); michael@0: } michael@0: michael@0: function run_test_9() { michael@0: AddonUpdateChecker.checkForUpdates("test_bug378216_13@tests.mozilla.org", michael@0: updateKey, michael@0: "http://localhost:4444/data/test_updatecheck.rdf", { michael@0: onUpdateCheckComplete: function(updates) { michael@0: do_check_eq(updates.length, 1); michael@0: do_check_eq(updates[0].version, "2.0"); michael@0: do_check_true("updateURL" in updates[0]); michael@0: run_test_10(); michael@0: }, michael@0: michael@0: onUpdateCheckError: function(status) { michael@0: do_throw("Update check failed with status " + status); michael@0: } michael@0: }); michael@0: } michael@0: michael@0: function run_test_10() { michael@0: AddonUpdateChecker.checkForUpdates("test_bug378216_14@tests.mozilla.org", michael@0: null, michael@0: "http://localhost:4444/data/test_updatecheck.rdf", { michael@0: onUpdateCheckComplete: function(updates) { michael@0: do_check_eq(updates.length, 0); michael@0: run_test_11(); michael@0: }, michael@0: michael@0: onUpdateCheckError: function(status) { michael@0: do_throw("Update check failed with status " + status); michael@0: } michael@0: }); michael@0: } michael@0: michael@0: function run_test_11() { michael@0: AddonUpdateChecker.checkForUpdates("test_bug378216_15@tests.mozilla.org", michael@0: null, michael@0: "http://localhost:4444/data/test_updatecheck.rdf", { michael@0: onUpdateCheckComplete: function(updates) { michael@0: do_throw("Update check should have failed"); michael@0: }, michael@0: michael@0: onUpdateCheckError: function(status) { michael@0: do_check_eq(status, AddonUpdateChecker.ERROR_PARSE_ERROR); michael@0: run_test_12(); michael@0: } michael@0: }); michael@0: } michael@0: michael@0: function run_test_12() { michael@0: AddonUpdateChecker.checkForUpdates("ignore-compat@tests.mozilla.org", michael@0: null, michael@0: "http://localhost:4444/data/test_updatecheck.rdf", { michael@0: onUpdateCheckComplete: function(updates) { michael@0: do_check_eq(updates.length, 3); michael@0: let update = AddonUpdateChecker.getNewestCompatibleUpdate(updates, michael@0: null, michael@0: null, michael@0: true); michael@0: do_check_neq(update, null); michael@0: do_check_eq(update.version, 2); michael@0: run_test_13(); michael@0: }, michael@0: michael@0: onUpdateCheckError: function(status) { michael@0: do_throw("Update check failed with status " + status); michael@0: } michael@0: }); michael@0: } michael@0: michael@0: function run_test_13() { michael@0: AddonUpdateChecker.checkForUpdates("compat-override@tests.mozilla.org", michael@0: null, michael@0: "http://localhost:4444/data/test_updatecheck.rdf", { michael@0: onUpdateCheckComplete: function(updates) { michael@0: do_check_eq(updates.length, 3); michael@0: let overrides = [{ michael@0: type: "incompatible", michael@0: minVersion: 1, michael@0: maxVersion: 2, michael@0: appID: "xpcshell@tests.mozilla.org", michael@0: appMinVersion: 0.1, michael@0: appMaxVersion: 0.2 michael@0: }, { michael@0: type: "incompatible", michael@0: minVersion: 2, michael@0: maxVersion: 2, michael@0: appID: "xpcshell@tests.mozilla.org", michael@0: appMinVersion: 1, michael@0: appMaxVersion: 2 michael@0: }]; michael@0: let update = AddonUpdateChecker.getNewestCompatibleUpdate(updates, michael@0: null, michael@0: null, michael@0: true, michael@0: false, michael@0: overrides); michael@0: do_check_neq(update, null); michael@0: do_check_eq(update.version, 1); michael@0: run_test_14(); michael@0: }, michael@0: michael@0: onUpdateCheckError: function(status) { michael@0: do_throw("Update check failed with status " + status); michael@0: } michael@0: }); michael@0: } michael@0: michael@0: function run_test_14() { michael@0: AddonUpdateChecker.checkForUpdates("compat-strict-optin@tests.mozilla.org", michael@0: null, michael@0: "http://localhost:4444/data/test_updatecheck.rdf", { michael@0: onUpdateCheckComplete: function(updates) { michael@0: do_check_eq(updates.length, 1); michael@0: let update = AddonUpdateChecker.getNewestCompatibleUpdate(updates, michael@0: null, michael@0: null, michael@0: true, michael@0: false); michael@0: do_check_eq(update, null); michael@0: end_test(); michael@0: }, michael@0: michael@0: onUpdateCheckError: function(status) { michael@0: do_throw("Update check failed with status " + status); michael@0: } michael@0: }); michael@0: }