forked from mirrors/gecko-dev
189 lines
5 KiB
JavaScript
189 lines
5 KiB
JavaScript
"use strict";
|
|
|
|
const { NormandyAddonManager } = ChromeUtils.importESModule(
|
|
"resource://normandy/lib/NormandyAddonManager.sys.mjs"
|
|
);
|
|
|
|
decorate_task(ensureAddonCleanup(), async function download_and_install() {
|
|
const applyDeferred = Promise.withResolvers();
|
|
|
|
const [addonId, addonVersion] = await NormandyAddonManager.downloadAndInstall(
|
|
{
|
|
extensionDetails: {
|
|
extension_id: FIXTURE_ADDON_ID,
|
|
hash: FIXTURE_ADDON_DETAILS["normandydriver-a-1.0"].hash,
|
|
hash_algorithm: "sha256",
|
|
version: "1.0",
|
|
xpi: FIXTURE_ADDON_DETAILS["normandydriver-a-1.0"].url,
|
|
},
|
|
applyNormandyChanges: () => {
|
|
applyDeferred.resolve();
|
|
},
|
|
createError: () => {},
|
|
reportError: () => {},
|
|
undoNormandyChanges: () => {},
|
|
}
|
|
);
|
|
|
|
// Ensure applyNormandyChanges was called
|
|
await applyDeferred;
|
|
|
|
const addon = await AddonManager.getAddonByID(FIXTURE_ADDON_ID);
|
|
is(addon.id, addonId, "add-on is installed");
|
|
is(addon.version, addonVersion, "add-on version is correct");
|
|
|
|
// Cleanup
|
|
await addon.uninstall();
|
|
});
|
|
|
|
decorate_task(ensureAddonCleanup(), async function id_mismatch() {
|
|
const applyDeferred = Promise.withResolvers();
|
|
const undoDeferred = Promise.withResolvers();
|
|
|
|
let error;
|
|
|
|
try {
|
|
await NormandyAddonManager.downloadAndInstall({
|
|
extensionDetails: {
|
|
extension_id: FIXTURE_ADDON_ID,
|
|
hash: FIXTURE_ADDON_DETAILS["normandydriver-b-1.0"].hash,
|
|
hash_algorithm: "sha256",
|
|
version: "1.0",
|
|
xpi: FIXTURE_ADDON_DETAILS["normandydriver-b-1.0"].url,
|
|
},
|
|
applyNormandyChanges: () => {
|
|
applyDeferred.resolve();
|
|
},
|
|
createError: (reason, extra) => {
|
|
return [reason, extra];
|
|
},
|
|
reportError: err => {
|
|
return err;
|
|
},
|
|
undoNormandyChanges: () => {
|
|
undoDeferred.resolve();
|
|
},
|
|
});
|
|
} catch ([reason, extra]) {
|
|
error = true;
|
|
is(reason, "metadata-mismatch", "the expected reason is provided");
|
|
Assert.deepEqual(
|
|
extra,
|
|
undefined,
|
|
"the expected extra details are provided"
|
|
);
|
|
}
|
|
|
|
ok(error, "an error occured");
|
|
|
|
// Ensure applyNormandyChanges was called
|
|
await applyDeferred;
|
|
|
|
// Ensure undoNormandyChanges was called
|
|
await undoDeferred;
|
|
|
|
const addon = await AddonManager.getAddonByID(FIXTURE_ADDON_ID);
|
|
ok(!addon, "add-on is not installed");
|
|
});
|
|
|
|
decorate_task(ensureAddonCleanup(), async function version_mismatch() {
|
|
const applyDeferred = Promise.withResolvers();
|
|
const undoDeferred = Promise.withResolvers();
|
|
|
|
let error;
|
|
|
|
try {
|
|
await NormandyAddonManager.downloadAndInstall({
|
|
extensionDetails: {
|
|
extension_id: FIXTURE_ADDON_ID,
|
|
hash: FIXTURE_ADDON_DETAILS["normandydriver-a-1.0"].hash,
|
|
hash_algorithm: "sha256",
|
|
version: "2.0",
|
|
xpi: FIXTURE_ADDON_DETAILS["normandydriver-a-1.0"].url,
|
|
},
|
|
applyNormandyChanges: () => {
|
|
applyDeferred.resolve();
|
|
},
|
|
createError: (reason, extra) => {
|
|
return [reason, extra];
|
|
},
|
|
reportError: err => {
|
|
return err;
|
|
},
|
|
undoNormandyChanges: () => {
|
|
undoDeferred.resolve();
|
|
},
|
|
});
|
|
} catch ([reason, extra]) {
|
|
error = true;
|
|
is(reason, "metadata-mismatch", "the expected reason is provided");
|
|
Assert.deepEqual(
|
|
extra,
|
|
undefined,
|
|
"the expected extra details are provided"
|
|
);
|
|
}
|
|
|
|
ok(error, "should throw an error");
|
|
|
|
// Ensure applyNormandyChanges was called
|
|
await applyDeferred;
|
|
|
|
// Ensure undoNormandyChanges was called
|
|
await undoDeferred;
|
|
|
|
const addon = await AddonManager.getAddonByID(FIXTURE_ADDON_ID);
|
|
ok(!addon, "add-on is not installed");
|
|
});
|
|
|
|
decorate_task(ensureAddonCleanup(), async function download_failure() {
|
|
const applyDeferred = Promise.withResolvers();
|
|
const undoDeferred = Promise.withResolvers();
|
|
|
|
let error;
|
|
|
|
try {
|
|
await NormandyAddonManager.downloadAndInstall({
|
|
extensionDetails: {
|
|
extension_id: FIXTURE_ADDON_ID,
|
|
hash: FIXTURE_ADDON_DETAILS["normandydriver-b-1.0"].hash,
|
|
hash_algorithm: "sha256",
|
|
version: "1.0",
|
|
xpi: FIXTURE_ADDON_DETAILS["normandydriver-a-1.0"].url,
|
|
},
|
|
applyNormandyChanges: () => {
|
|
applyDeferred.resolve();
|
|
},
|
|
createError: (reason, extra) => {
|
|
return [reason, extra];
|
|
},
|
|
reportError: err => {
|
|
return err;
|
|
},
|
|
undoNormandyChanges: () => {
|
|
undoDeferred.resolve();
|
|
},
|
|
});
|
|
} catch ([reason, extra]) {
|
|
error = true;
|
|
is(reason, "download-failure", "the expected reason is provided");
|
|
Assert.deepEqual(
|
|
extra,
|
|
{
|
|
detail: "ERROR_INCORRECT_HASH",
|
|
},
|
|
"the expected extra details are provided"
|
|
);
|
|
}
|
|
|
|
ok(error, "an error occured");
|
|
|
|
// Ensure applyNormandyChanges was called
|
|
await applyDeferred;
|
|
|
|
// Ensure undoNormandyChanges was called
|
|
await undoDeferred;
|
|
|
|
const addon = await AddonManager.getAddonByID(FIXTURE_ADDON_ID);
|
|
ok(!addon, "add-on is not installed");
|
|
});
|