public function testTransportSendMessage() { $transport = $this->getMockBuilder('\\Thruway\\Transport\\TransportInterface')->getMock(); $session = new \Thruway\Session($transport); $transport->expects($this->exactly(2))->method("sendMessage")->withConsecutive([$this->isInstanceOf('\\Thruway\\Message\\GoodbyeMessage')], [$this->isInstanceOf('\\Thruway\\Message\\GoodbyeMessage')]); $session->sendMessage(new \Thruway\Message\GoodbyeMessage([], "test.message")); $session->sendMessage(new \Thruway\Message\GoodbyeMessage([], "test.message")); }
public function testDealerFeatures() { $dealerFeatures = null; $session = new \Thruway\Session(new \Thruway\Transport\DummyTransport()); $dealer = new \Thruway\Role\Dealer(); $session->dispatcher->addRealmSubscriber($dealer); $welcomeMessage = new \Thruway\Message\WelcomeMessage($session->getSessionId(), new stdClass()); $session->dispatcher->addListener('SendWelcomeMessageEvent', function (\Thruway\Event\MessageEvent $event) use(&$brokerFeatures, &$dealerFeatures) { $dealerFeatures = $event->message->getDetails()->roles->dealer->features; }); $session->dispatchMessage($welcomeMessage, "Send"); $this->assertInstanceOf('stdClass', $dealerFeatures); $this->assertTrue($dealerFeatures->caller_identification); $this->assertTrue($dealerFeatures->progressive_call_results); }
public function testStateRestoreWithNoQueue() { $router = new \Thruway\Peer\Router(); $stateHandlerRegistry = new \Thruway\Subscription\StateHandlerRegistry('state.test.realm'); $router->registerModule($stateHandlerRegistry); $router->start(false); $transportStateHandler = $this->createTransportMock(); $registrationId = 0; $invocationReqId = 0; $subscriptionId = 0; $transportStateHandler->expects($this->exactly(7))->method('sendMessage')->withConsecutive([$this->isInstanceOf('\\Thruway\\Message\\WelcomeMessage')], [$this->callback(function (\Thruway\Message\RegisteredMessage $msg) use(&$registrationId) { $registrationId = $msg->getRegistrationId(); return true; })], [$this->callback(function (\Thruway\Message\ErrorMessage $msg) { $this->assertEquals("No uri set for state handler registration.", $msg->getArguments()[0]); return true; })], [$this->callback(function (\Thruway\Message\ErrorMessage $msg) { $this->assertEquals("No handler uri set for state handler registration.", $msg->getArguments()[0]); return true; })], [$this->callback(function (\Thruway\Message\ErrorMessage $msg) { $this->assertEquals("No uri set for state handler registration.", $msg->getArguments()[0]); return true; })], [$this->callback(function (\Thruway\Message\ResultMessage $msg) { return true; })], [$this->callback(function (\Thruway\Message\InvocationMessage $msg) use(&$registrationId, &$invocationReqId) { $this->assertEquals($registrationId, $msg->getRegistrationId()); $invocationReqId = $msg->getRequestId(); return true; })]); $transportSubscriber = $this->createTransportMock(); $transportSubscriber->expects($this->exactly(5))->method("sendMessage")->withConsecutive([$this->isInstanceOf('\\Thruway\\Message\\WelcomeMessage')], [$this->callback(function (\Thruway\Message\SubscribedMessage $msg) use(&$subscriptionId) { $subscriptionId = $msg->getSubscriptionId(); return true; })], [$this->callback(function ($msg) { $this->assertEventMessageWithArgument0(3, $msg); return true; })], [$this->callback(function ($msg) { $this->assertEventMessageWithArgument0(4, $msg); return true; })], [$this->callback(function ($msg) { $this->assertEventMessageWithArgument0(5, $msg); return true; })]); $sessionStateHandler = new \Thruway\Session($transportStateHandler); $sessionSubscriber = new \Thruway\Session($transportSubscriber); $router->getEventDispatcher()->dispatch("connection_open", new \Thruway\Event\ConnectionOpenEvent($sessionStateHandler)); $router->getEventDispatcher()->dispatch("connection_open", new \Thruway\Event\ConnectionOpenEvent($sessionSubscriber)); $hello = new \Thruway\Message\HelloMessage('state.test.realm', (object) []); $sessionStateHandler->dispatchMessage($hello); $sessionSubscriber->dispatchMessage($hello); $register = new \Thruway\Message\RegisterMessage(12345, (object) [], 'my_state_handler'); $sessionStateHandler->dispatchMessage($register); $call = new \Thruway\Message\CallMessage(2, (object) [], 'add_state_handler', [[]]); $sessionStateHandler->dispatchMessage($call); $call->setArguments([(object) ["uri" => "test.stateful.uri"]]); $sessionStateHandler->dispatchMessage($call); $call->setArguments([(object) ["handler_uri" => "my_state_handler"]]); $sessionStateHandler->dispatchMessage($call); $call->setArguments([(object) ["uri" => "test.stateful.uri", "handler_uri" => "my_state_handler"]]); $sessionStateHandler->dispatchMessage($call); $subscribe = new \Thruway\Message\SubscribeMessage(2, (object) [], "test.stateful.uri"); $sessionSubscriber->dispatchMessage($subscribe); $yield = new \Thruway\Message\YieldMessage($invocationReqId, (object) []); $sessionStateHandler->dispatchMessage($yield); for ($i = 3; $i < 6; $i++) { $publish = new \Thruway\Message\PublishMessage($i, (object) [], "test.stateful.uri", [$i]); $publish->setPublicationId($i); $sessionStateHandler->dispatchMessage($publish); } }