Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*-
* vim: sw=4 ts=4 sts=4 et
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
// Run a background task which itself waits for a launched background task, which itself waits for a
// launched background task, etc. This is an easy way to ensure that tasks are running concurrently
// without requiring concurrency primitives.
add_task(async function test_backgroundtask_automatic_restart() {
let restartTimeoutSec = 30;
const path = await IOUtils.createUniqueFile(
PathUtils.tempDir,
"automatic_restart.txt"
);
let fileExists = await IOUtils.exists(path);
ok(fileExists, `File at ${path} was created`);
let stdoutLines = [];
// Test restart functionality.
let exitCode = await do_backgroundtask("automaticrestart", {
extraArgs: [`-no-wait`, path, `-attach-console`],
onStdoutLine: line => stdoutLines.push(line),
});
Assert.equal(0, exitCode);
let pid = -1;
for (let line of stdoutLines) {
if (line.includes("*** ApplyUpdate: launched")) {
let lineArr = line.split(" ");
pid = Number.parseInt(lineArr[lineArr.length - 2]);
}
}
console.log(`found launched pid ${pid}`);
let updateProcessor = Cc[
"@mozilla.org/updates/update-processor;1"
].createInstance(Ci.nsIUpdateProcessor);
updateProcessor.waitForProcessExit(pid, restartTimeoutSec * 1000);
let finalMessage = await IOUtils.readUTF8(path);
ok(finalMessage.includes(`${pid}`), `New process message: ${finalMessage}`);
await IOUtils.remove(path, { ignoreAbsent: true });
fileExists = await IOUtils.exists(path);
ok(!fileExists, `File at ${path} was removed`);
});