Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* Any copyright is dedicated to the Public Domain.
*/
// This verifies that AddonUpdateChecker works correctly
const { AddonUpdateChecker } = ChromeUtils.importESModule(
);
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,
{
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);
});