/** * @return PromiseInterface|Rpc */ public function dequeue() { $promise = $this->requeue(); if ($this->memory->count() > 0) { return $this->memory->dequeue(); } return $promise->then(function () { return \React\Promise\resolve($this->memory->dequeue()); }); }
public function testOverflow() { $memory = new Memory(); $queue = Phake::mock('WyriHaximus\\React\\ChildProcess\\Pool\\QueueInterface'); Phake::when($queue)->count()->thenReturnCallback(function () use($memory) { return $memory->count(); }); Phake::when($queue)->dequeue()->thenReturnCallback(function () use($memory) { return new FulfilledPromise($memory->dequeue()); }); Phake::when($queue)->enqueue($this->isInstanceOf('WyriHaximus\\React\\ChildProcess\\Messenger\\Messages\\Rpc'))->thenReturnCallback(function (Rpc $rpc) use($memory) { return new FulfilledPromise($memory->enqueue($rpc)); }); $overflow = new Overflow($queue, 1); $rpc0 = Factory::rpc('a', ['b']); $rpc1 = Factory::rpc('c', ['d']); $this->assertSame(0, $memory->count()); $this->assertSame(0, $overflow->count()); $overflow->enqueue($rpc0); $this->assertSame(0, $memory->count()); $this->assertSame(1, $overflow->count()); $overflow->enqueue($rpc1); $this->assertSame(1, $memory->count()); $this->assertSame(2, $overflow->count()); $this->assertSame(json_encode($rpc0), json_encode($this->dequeue($overflow->dequeue()))); $this->assertSame(0, $memory->count()); $this->assertSame(1, $overflow->count()); $this->assertSame(json_encode($rpc1), json_encode($this->dequeue($overflow->dequeue()))); $this->assertSame(0, $memory->count()); $this->assertSame(0, $overflow->count()); }