167 lines
4.9 KiB
JavaScript
167 lines
4.9 KiB
JavaScript
/* 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);
|
|
});
|