/** * @param bool $usingDeferred * @throws RuntimeException */ private function assertDeferred($usingDeferred) { if ($usingDeferred and !$this->zmqClient->handlesDeferred()) { throw new RuntimeException(__CLASS__ . ' cannot handle query messages which require future responses.'); } if ($this->zmqClient->handlesDeferred() and !$usingDeferred) { throw new RuntimeException(__CLASS__ . ' cannot handle push and forget messages.'); } }
/** * @test */ public function it_can_handle_rpc() { $this->zmqClient->handlesDeferred()->willReturn(true)->shouldBeCalled(); $this->zmqClient->receive()->willReturn($response = 'Hello World')->shouldBeCalled(); $deferred = $this->prophesize(Deferred::class); $deferred->resolve($response)->shouldBeCalled(); $zmqMessageProducer = $this->zmqMessageProducer; $doSomething = new DoSomething(['data' => 'test command']); $this->zmqClient->send($this->validate_message_body($doSomething), \ZMQ::MODE_NOBLOCK)->willReturn(null)->shouldBeCalled(); $zmqMessageProducer($doSomething, $deferred->reveal()); }