function testWampErrorException() { $loop = \React\EventLoop\Factory::create(); $router = new \Thruway\Peer\Router($loop); //$router->addTransportProvider(new \Thruway\Transport\RawSocketTransportProvider()); $client = new \Thruway\Peer\Client("realm1", $loop); $client->setAttemptRetry(false); $client->on('open', function (\Thruway\ClientSession $session) use($router) { $session->register('procedure_with_exception', function ($args) { throw new \Thruway\Exception\WampErrorException("error.from.exception", $args, (object) ["theKw" => "great"], (object) ["more_details" => "some_more_details"]); })->then(function () use($session, $router) { $session->call('procedure_with_exception', ['one', 'two'])->then(function ($args) use($router) { $this->fail('Call with wamp exception should not have succeeded.'); $router->stop(); }, function ($err) use($router) { /** @var \Thruway\Message\ErrorMessage $err */ $this->assertInstanceOf('Thruway\\Message\\ErrorMessage', $err); $this->assertTrue(is_array($err->getArguments())); $this->assertEquals(2, count($err->getArguments())); $this->assertEquals("one", $err->getArguments()[0]); $this->assertEquals("two", $err->getArguments()[1]); $this->assertInstanceOf('stdClass', $err->getArgumentsKw()); $this->assertObjectHasAttribute('theKw', $err->getArgumentsKw()); $this->assertEquals('great', $err->getArgumentsKw()->theKw); $this->assertObjectHasAttribute('more_details', $err->getDetails()); $this->assertEquals('some_more_details', $err->getDetails()->more_details); $this->assertEquals('error.from.exception', $err->getErrorURI()); $router->stop(); }); }); }); //$client->addTransportProvider(new \Thruway\Transport\RawSocketClientTransportProvider()); $router->addInternalClient($client); $router->start(); }
public function testRouterStopWithInternalClientLiveSession() { $loop = \React\EventLoop\Factory::create(); $router = new \Thruway\Peer\Router($loop); // just so we have another transport $router->addTransportProvider(new \Thruway\Transport\RawSocketTransportProvider("127.0.0.1", 18080)); $client = new \Thruway\Peer\Client("some_realm", $loop); $client->on('open', function () use($loop, $router) { $router->stop(); $this->_result = "Stop was called"; }); $client->setAttemptRetry(false); // we are running on the same loop so if we allow retry, we will hang $router->addInternalClient($client); $loop->addTimer(0.1, function () use($client) { $client->start(false); // don't start loop yet }); $router->start(); // if the execution makes it here, stop worked $this->assertEquals("Stop was called", $this->_result); }