public function testUnsubscribeSendingUnsubThenError() { $broker = new \Thruway\Role\Broker(); $transport = new \Thruway\Transport\DummyTransport(); $session = new \Thruway\Session($transport); $subscribeMsg = new \Thruway\Message\SubscribeMessage(123, new stdClass(), 'issue100'); $broker->handleSubscribeMessage(new \Thruway\Event\MessageEvent($session, $subscribeMsg)); /** @var \Thruway\Message\SubscribedMessage $msg */ $msg = $transport->getLastMessageSent(); $this->assertInstanceOf('\\Thruway\\Message\\SubscribedMessage', $msg); $this->assertEquals(123, $msg->getRequestId()); $subId = $msg->getSubscriptionId(); // subscribe to a second that is in a different sub group $subscribeMsg = new \Thruway\Message\SubscribeMessage(234, new stdClass(), 'issue100_again'); $broker->handleSubscribeMessage(new \Thruway\Event\MessageEvent($session, $subscribeMsg)); /** @var \Thruway\Message\SubscribedMessage $msg */ $msg = $transport->getLastMessageSent(); $this->assertInstanceOf('\\Thruway\\Message\\SubscribedMessage', $msg); $this->assertEquals(234, $msg->getRequestId()); $subId2 = $msg->getSubscriptionId(); // unsubscribe from the first $unsubscribeMsg = new \Thruway\Message\UnsubscribeMessage(456, $subId); $broker->handleUnsubscribeMessage(new \Thruway\Event\MessageEvent($session, $unsubscribeMsg)); /** @var \Thruway\Message\UnsubscribedMessage $unsubedMsg */ $unsubedMsg = $transport->getLastMessageSent(); $this->assertInstanceOf('\\Thruway\\Message\\UnsubscribedMessage', $unsubedMsg); $this->assertEquals(456, $unsubedMsg->getRequestId()); // try unsubscribing again $unsubscribeMsg = new \Thruway\Message\UnsubscribeMessage(789, $subId); $broker->handleUnsubscribeMessage(new \Thruway\Event\MessageEvent($session, $unsubscribeMsg)); /** @var \Thruway\Message\ErrorMessage $unsubedErrMsg */ $unsubedErrMsg = $transport->getLastMessageSent(); $this->assertInstanceOf('\\Thruway\\Message\\ErrorMessage', $unsubedErrMsg); $this->assertEquals(\Thruway\Message\Message::MSG_UNSUBSCRIBE, $unsubedErrMsg->getErrorMsgCode()); $this->assertEquals(789, $unsubedErrMsg->getRequestId()); }
public function testInvocationError() { $dealer = new \Thruway\Role\Dealer(); $callerTransport = new \Thruway\Transport\DummyTransport(); $callerSession = new Session($callerTransport); $calleeTransport = new \Thruway\Transport\DummyTransport(); $calleeSession = new Session($calleeTransport); // register from callee $registerMsg = new \Thruway\Message\RegisterMessage(1, new stdClass(), 'test_proc_name'); $dealer->handleRegisterMessage(new \Thruway\Event\MessageEvent($calleeSession, $registerMsg)); $this->assertInstanceOf('\\Thruway\\Message\\RegisteredMessage', $calleeTransport->getLastMessageSent()); // call from one session $callRequestId = \Thruway\Common\Utils::getUniqueId(); $callMsg = new \Thruway\Message\CallMessage($callRequestId, new stdClass(), 'test_proc_name'); $dealer->handleCallMessage(new \Thruway\Event\MessageEvent($callerSession, $callMsg)); $this->assertInstanceOf('\\Thruway\\Message\\InvocationMessage', $calleeTransport->getLastMessageSent()); $errorMsg = \Thruway\Message\ErrorMessage::createErrorMessageFromMessage($calleeTransport->getLastMessageSent(), 'the.error.uri'); $dealer->handleErrorMessage(new \Thruway\Event\MessageEvent($calleeSession, $errorMsg)); /** @var \Thruway\Message\ErrorMessage $returnedError */ $returnedError = $callerTransport->getLastMessageSent(); $this->assertInstanceOf('\\Thruway\\Message\\ErrorMessage', $returnedError); $this->assertEquals(Message::MSG_CALL, $returnedError->getErrorMsgCode()); $this->assertEquals($callRequestId, $returnedError->getErrorRequestId()); $this->assertEquals('the.error.uri', $returnedError->getErrorURI()); }
public function testInvokeLastRegistration() { $transportCaller = new \Thruway\Transport\DummyTransport(); $sessionCaller = new \Thruway\Session($transportCaller); $transportA = new \Thruway\Transport\DummyTransport(); $sessionA = new \Thruway\Session($transportA); $transportB = new \Thruway\Transport\DummyTransport(); $sessionB = new \Thruway\Session($transportB); $proc = new \Thruway\Procedure('some.procedure'); $registerMsg = new \Thruway\Message\RegisterMessage(\Thruway\Common\Utils::getUniqueId(), ["invoke" => "last"], 'some.procedure'); $proc->processRegister($sessionA, $registerMsg); $proc->processRegister($sessionB, $registerMsg); $this->assertEquals(2, count($proc->getRegistrations())); // call a few times - make sure that we always get proc B for ($i = 0; $i < 10; $i++) { $callMessage = new \Thruway\Message\CallMessage(\Thruway\Common\Utils::getUniqueId(), [], 'some.procedure'); $call = new \Thruway\Call($sessionCaller, $callMessage, $proc); $proc->processCall($sessionCaller, $call); // make sure the invocation was called on the last registration $this->assertEquals($call->getInvocationRequestId(), $transportB->getLastMessageSent()->getRequestId()); } $this->assertEquals(10, $sessionB->getPendingCallCount()); }