summaryrefslogtreecommitdiffstats
path: root/toolkit/components/backgroundtasks/tests/xpcshell/test_backgroundtask_automaticrestart.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/backgroundtasks/tests/xpcshell/test_backgroundtask_automaticrestart.js')
-rw-r--r--toolkit/components/backgroundtasks/tests/xpcshell/test_backgroundtask_automaticrestart.js45
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`);
+});