/** * @param ChildProcess $process * @param LoopInterface $loop * @param array $options * @return PromiseInterface */ public static function create(ChildProcess $childProcess, LoopInterface $loop, array $options = []) { $options = array_merge(self::$defaultOptions, $options); return \WyriHaximus\React\ChildProcess\Pool\detectCoreCount($loop, $options)->then(function ($coreCount) use($childProcess, $loop, $options) { $options[Options::SIZE] = $coreCount; $processes = []; for ($i = 0; $i < $coreCount; $i++) { $processes[] = \WyriHaximus\React\ChildProcess\Pool\rebuildProcess($i, $childProcess)->then(function (ChildProcess $process) { return \React\Promise\resolve(new Process($process)); }); } return \React\Promise\all($processes)->then(function ($processes) use($loop, $options) { return \React\Promise\resolve(new Fixed(new ArrayList($processes), $loop, $options)); }); }); }
public function testRebuildProcessAndGetProcessPropertyValue() { $promise = new FulfilledPromise('taskset -c 13 a'); $affinity = Phake::mock('WyriHaximus\\CpuCoreDetector\\Core\\AffinityInterface'); Phake::when($affinity)->execute(13, 'a')->thenReturn($promise); Resolver::setAffinity($affinity); $process = new Process('a', 'b', ['c'], ['d']); $promiseResolved = false; \WyriHaximus\React\ChildProcess\Pool\rebuildProcess(13, $process)->then(function ($rebuildProcess) use(&$promiseResolved) { $this->assertSame('taskset -c 13 a', \WyriHaximus\React\ChildProcess\Pool\getProcessPropertyValue('cmd', $rebuildProcess)); $this->assertSame('b', \WyriHaximus\React\ChildProcess\Pool\getProcessPropertyValue('cwd', $rebuildProcess)); $this->assertSame(['c'], \WyriHaximus\React\ChildProcess\Pool\getProcessPropertyValue('env', $rebuildProcess)); $this->assertSame(['d'], \WyriHaximus\React\ChildProcess\Pool\getProcessPropertyValue('options', $rebuildProcess)); $promiseResolved = true; }); $this->assertTrue($promiseResolved); }