예제 #1
0
 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());
 }
예제 #2
0
 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());
 }
예제 #3
0
 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());
 }