Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test runs only with pattern: os != 'android'
- Manifest: browser/modules/test/unit/xpcshell.toml
/* Any copyright is dedicated to the Public Domain.
*/
"use strict";
const UpdatePolicyEnforcer = ChromeUtils.importESModule(
"resource:///modules/UpdatePolicyEnforcer.sys.mjs"
);
const PREF_APP_UPDATE_COMPULSORY_RESTART = "app.update.compulsory_restart";
add_task(function test_calculateDelay_shouldUpdateTonight() {
const now = Temporal.ZonedDateTime.from({
timeZone: Temporal.Now.timeZoneId(),
year: 1970,
month: 1,
day: 1,
hour: 13,
minute: 15,
second: 0,
});
const notificationPeriodHours = 4;
const restartTimeOfDay = { Hour: 18, Minute: 15 };
const taskSchedule = UpdatePolicyEnforcer.calculateDelay(
now,
notificationPeriodHours,
restartTimeOfDay
);
Assert.ok(taskSchedule, "Expcted non-null taskSchedule");
Assert.equal(
0,
Temporal.Duration.compare(
Temporal.Duration.from({ hours: 4 }),
taskSchedule.notificationDelay
),
"Expected notification delay to be 4 hours"
);
Assert.equal(
0,
Temporal.Duration.compare(
Temporal.Duration.from({ hours: 5 }),
taskSchedule.restartDelay
),
"Expect restart delay to be 5 hours"
);
});
add_task(function test_calculateDelay_shouldUpdateTomorrow() {
const now = Temporal.ZonedDateTime.from({
timeZone: Temporal.Now.timeZoneId(),
year: 1970,
month: 1,
day: 1,
hour: 13,
minute: 16,
second: 0,
});
const notificationPeriodHours = 4;
const restartTimeOfDay = { Hour: 18, Minute: 15 };
const taskSchedule = UpdatePolicyEnforcer.calculateDelay(
now,
notificationPeriodHours,
restartTimeOfDay
);
Assert.ok(taskSchedule, "Expcted non-null taskSchedule");
Assert.equal(
0,
Temporal.Duration.compare(
Temporal.Duration.from({ hours: 4 }),
taskSchedule.notificationDelay
),
"Expected notification delay to be 4 hours"
);
Assert.equal(
0,
Temporal.Duration.compare(
Temporal.Duration.from({ hours: 28, minutes: 59 }),
taskSchedule.restartDelay
),
"Expect restart delay to be 28 hours, 59 minutes"
);
});
add_task(function test_createDeferredRestartTasks() {
const notificationDelay = Temporal.Duration.from({ hours: 48 });
const restartDelay = Temporal.Duration.from({ hours: 49 });
const { deferredNotificationTask, deferredRestartTask } =
UpdatePolicyEnforcer.createDeferredRestartTasks(
restartDelay,
notificationDelay
);
Assert.ok(deferredNotificationTask);
Assert.ok(deferredRestartTask);
Assert.ok(deferredNotificationTask.isArmed);
Assert.ok(deferredRestartTask.isArmed);
deferredNotificationTask.disarm();
deferredRestartTask.disarm();
});
add_task(function test_getCompulsoryRestartPolicy_has_setting() {
Services.prefs.setStringPref(
PREF_APP_UPDATE_COMPULSORY_RESTART,
JSON.stringify({
NotificationPeriodHours: 6,
RestartTimeOfDay: {
Hour: 19,
Minute: 0,
},
})
);
const policy = UpdatePolicyEnforcer.getCompulsoryRestartPolicy();
Assert.equal(6, policy.NotificationPeriodHours);
Assert.equal(19, policy.RestartTimeOfDay.Hour);
Assert.equal(0, policy.RestartTimeOfDay.Minute);
});
add_task(function test_getCompulsoryRestartPolicy_no_setting() {
Services.prefs.clearUserPref(PREF_APP_UPDATE_COMPULSORY_RESTART);
const policy = UpdatePolicyEnforcer.getCompulsoryRestartPolicy();
Assert.equal(null, policy);
});
add_task(function test_handleCompulsoryUpdatePolicy_has_setting() {
Assert.equal(null, UpdatePolicyEnforcer.testingOnly_getTaskStatus());
Services.prefs.setStringPref(
PREF_APP_UPDATE_COMPULSORY_RESTART,
JSON.stringify({
NotificationPeriodHours: 27,
RestartTimeOfDay: {
Hour: 10,
Minute: 0,
},
})
);
UpdatePolicyEnforcer.handleCompulsoryUpdatePolicy();
Assert.equal(
true,
UpdatePolicyEnforcer.testingOnly_getTaskStatus().notificationTask
);
Assert.equal(
true,
UpdatePolicyEnforcer.testingOnly_getTaskStatus().restartTask
);
UpdatePolicyEnforcer.testingOnly_resetTasks();
});
add_task(function test_handleCompulsoryUpdatePolicy_no_setting() {
Assert.equal(null, UpdatePolicyEnforcer.testingOnly_getTaskStatus());
Services.prefs.clearUserPref(PREF_APP_UPDATE_COMPULSORY_RESTART);
UpdatePolicyEnforcer.handleCompulsoryUpdatePolicy();
Assert.equal(null, UpdatePolicyEnforcer.testingOnly_getTaskStatus());
// Just in case
UpdatePolicyEnforcer.testingOnly_resetTasks();
});
add_task(function test_handleCompulsoryUpdatePolicy_invalid_setting() {
Assert.equal(null, UpdatePolicyEnforcer.testingOnly_getTaskStatus());
Services.prefs.setStringPref(
PREF_APP_UPDATE_COMPULSORY_RESTART,
JSON.stringify({ hello: "there" })
);
UpdatePolicyEnforcer.handleCompulsoryUpdatePolicy();
// There should not be any tasks in this case
Assert.equal(null, UpdatePolicyEnforcer.testingOnly_getTaskStatus());
UpdatePolicyEnforcer.testingOnly_resetTasks();
});