/** * @throws Exception * @expectedException Exception */ public function testBadMessageToOnMessage() { $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(); $broker = new \Thruway\Role\Broker(); $goodbyeMsg = new \Thruway\Message\GoodbyeMessage([], 'test_reason'); $broker->onMessage($session, $goodbyeMsg); }
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 testEligibleAuthids() { $transport = $this->getMockBuilder('\\Thruway\\Transport\\TransportInterface')->getMock(); $transport->method("getTransportDetails")->will($this->returnValue("")); $session = $this->getMockBuilder('\\Thruway\\Session')->setMethods(["sendMessage", "getAuthenticationDetails"])->setConstructorArgs([$transport])->getMock(); $authDetails = new \Thruway\Authentication\AuthenticationDetails(); $authDetails->addAuthRole("test_role1"); $authDetails->addAuthRole("test_role2"); $authDetails->setAuthId("test_authid"); $session->expects($this->any())->method("getAuthenticationDetails")->willReturn($authDetails); $broker = new \Thruway\Role\Broker(); $session->expects($this->exactly(4))->method("sendMessage")->withConsecutive([$this->isInstanceOf('\\Thruway\\Message\\SubscribedMessage')], [$this->callback(function ($msg) { $this->assertInstanceOf('\\Thruway\\Message\\EventMessage', $msg); $this->assertEquals("first publish", $msg->getArguments()[0]); return true; })], [$this->callback(function ($msg) { $this->assertInstanceOf('\\Thruway\\Message\\EventMessage', $msg); $this->assertEquals("third publish", $msg->getArguments()[0]); return true; })], [$this->callback(function ($msg) { $this->assertInstanceOf('\\Thruway\\Message\\EventMessage', $msg); $this->assertEquals("fourth publish", $msg->getArguments()[0]); return true; })]); $subscribeMessage = new \Thruway\Message\SubscribeMessage(1, (object) [], "a.b.c"); $messageEvent = new \Thruway\Event\MessageEvent($session, $subscribeMessage); $broker->handleSubscribeMessage($messageEvent); $pubSession = $this->getMockBuilder('\\Thruway\\Session')->setMethods(["sendMessage"])->setConstructorArgs([$transport])->getMock(); $pubSession->expects($this->never())->method("sendMessage"); // test regular publish $pubMessage = new \Thruway\Message\PublishMessage(2, (object) [], "a.b.c", ["first publish"]); $messageEvent = new \Thruway\Event\MessageEvent($pubSession, $pubMessage); $broker->handlePublishMessage($messageEvent); // test publish to authrole that is not us $pubMessage = new \Thruway\Message\PublishMessage(2, (object) ["_thruway_eligible_authids" => ["alpha", "bravo", "charlie"]], "a.b.c", ["second publish"]); $messageEvent = new \Thruway\Event\MessageEvent($pubSession, $pubMessage); $broker->handlePublishMessage($messageEvent); // test publish to our first authrole $pubMessage = new \Thruway\Message\PublishMessage(2, (object) ["_thruway_eligible_authids" => ["alpha", "bravo", "test_authid", "charlie"]], "a.b.c", ["third publish"]); $messageEvent = new \Thruway\Event\MessageEvent($pubSession, $pubMessage); $broker->handlePublishMessage($messageEvent); // test publish to our second authrole $pubMessage = new \Thruway\Message\PublishMessage(2, (object) ["_thruway_eligible_authids" => ["test_authid"]], "a.b.c", ["fourth publish"]); $messageEvent = new \Thruway\Event\MessageEvent($pubSession, $pubMessage); $broker->handlePublishMessage($messageEvent); // test publish to empty authrole $pubMessage = new \Thruway\Message\PublishMessage(2, (object) ["_thruway_eligible_authids" => []], "a.b.c", ["fifth publish"]); $messageEvent = new \Thruway\Event\MessageEvent($pubSession, $pubMessage); $broker->handlePublishMessage($messageEvent); // test publish to invalid authrole $pubMessage = new \Thruway\Message\PublishMessage(2, (object) ["_thruway_eligible_authids" => "test_authid"], "a.b.c", ["sixth publish"]); $messageEvent = new \Thruway\Event\MessageEvent($pubSession, $pubMessage); $broker->handlePublishMessage($messageEvent); }