45 lines
1.8 KiB
JavaScript
45 lines
1.8 KiB
JavaScript
/* -*- 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`);
|
|
});
|