diff options
Diffstat (limited to 'toolkit/components/backgroundtasks/tests/xpcshell/test_backgroundtask_automaticrestart.js')
-rw-r--r-- | toolkit/components/backgroundtasks/tests/xpcshell/test_backgroundtask_automaticrestart.js | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/toolkit/components/backgroundtasks/tests/xpcshell/test_backgroundtask_automaticrestart.js b/toolkit/components/backgroundtasks/tests/xpcshell/test_backgroundtask_automaticrestart.js new file mode 100644 index 0000000000..ee1be8a3a9 --- /dev/null +++ b/toolkit/components/backgroundtasks/tests/xpcshell/test_backgroundtask_automaticrestart.js @@ -0,0 +1,45 @@ +/* -*- 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`, `-no-remote`], + 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`); +}); |