Ejemplo n.º 1
0
 /**
  * @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);
 }
Ejemplo n.º 2
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());
 }
Ejemplo n.º 3
0
 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);
 }