--- /dev/null
+<?php
+
+namespace Unish;
+
+class backendUnitCase extends UnitUnishTestCase {
+
+ /**
+ * Covers the following target responsibilities.
+ * - Insures that drush_invoke_process() called with fork backend set is able
+ * to invoke a non-blocking process.
+ */
+ function testBackendFork() {
+ if (self::is_windows()) {
+ $this->markTestSkipped('Fork tests not a priority on Windows.');
+ }
+
+ // Ensure that file that will be created by forked process does not exist
+ // before invocation.
+ $test_file = UNISH_SANDBOX . '/fork_test.txt';
+ if (file_exists($test_file)) {
+ unlink($test_file);
+ }
+
+ // Sleep for a millisecond, then create the file
+ $ev_php = "usleep(1000);fopen('$test_file','a');";
+ drush_invoke_process("@none", "ev", array($ev_php), array(), array("fork" => TRUE));
+
+ // Test file does not exist immediate after process forked
+ $this->assertEquals(file_exists($test_file), FALSE);
+ // Check every 100th of a second for up to 4 seconds to see if the file appeared
+ $repetitions = 400;
+ while (!file_exists($test_file) && ($repetitions > 0)) {
+ usleep(10000);
+ }
+ // Assert that the file did finally appear
+ $this->assertEquals(file_exists($test_file), TRUE);
+ }
+}