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 testRemoveRegistration() { $transport = $this->getMockBuilder('\\Thruway\\Transport\\TransportInterface')->getMock(); $transport->expects($this->any())->method("getTransportDetails")->will($this->returnValue("")); $session = $this->getMockBuilder('\\Thruway\\Session')->setMethods(["sendMessage"])->setConstructorArgs([$transport])->getMock(); /** @var $session \Thruway\Session */ $session->setRealm(new \Thruway\Realm("testrealm")); $broker = new \Thruway\Role\Broker(); $subscribeMsg = new \Thruway\Message\SubscribeMessage(\Thruway\Common\Utils::getUniqueId(), [], "test.topic"); $messageEvent = new \Thruway\Event\MessageEvent($session, $subscribeMsg); $broker->handleSubscribeMessage($messageEvent); $subscriptions = $broker->getSubscriptions(); $this->assertTrue(count($subscriptions) === 1); $subscriptions = array_values($subscriptions); $messageEvent = new \Thruway\Event\MessageEvent($session, new \Thruway\Message\UnsubscribeMessage(\Thruway\Common\Utils::getUniqueId(), $subscriptions[0]->getId())); $broker->handleUnsubscribeMessage($messageEvent); $this->assertTrue(count($broker->getSubscriptions()) === 0); }