diff --git a/tests/FunctionalResolverTest.php b/tests/FunctionalResolverTest.php index c19de631..989bf347 100644 --- a/tests/FunctionalResolverTest.php +++ b/tests/FunctionalResolverTest.php @@ -2,14 +2,12 @@ namespace React\Tests\Dns; -use React\EventLoop\Factory as LoopFactory; use React\Dns\Resolver\Factory; -use React\Dns\RecordNotFoundException; use React\Dns\Model\Message; +use React\EventLoop\Loop; class FunctionalResolverTest extends TestCase { - private $loop; private $resolver; /** @@ -17,10 +15,8 @@ class FunctionalResolverTest extends TestCase */ public function setUpResolver() { - $this->loop = LoopFactory::create(); - $factory = new Factory(); - $this->resolver = $factory->create('8.8.8.8', $this->loop); + $this->resolver = $factory->create('8.8.8.8'); } public function testResolveLocalhostResolves() @@ -28,7 +24,7 @@ public function testResolveLocalhostResolves() $promise = $this->resolver->resolve('localhost'); $promise->then($this->expectCallableOnce(), $this->expectCallableNever()); - $this->loop->run(); + Loop::run(); } public function testResolveAllLocalhostResolvesWithArray() @@ -36,7 +32,7 @@ public function testResolveAllLocalhostResolvesWithArray() $promise = $this->resolver->resolveAll('localhost', Message::TYPE_A); $promise->then($this->expectCallableOnceWith($this->isType('array')), $this->expectCallableNever()); - $this->loop->run(); + Loop::run(); } /** @@ -47,7 +43,7 @@ public function testResolveGoogleResolves() $promise = $this->resolver->resolve('google.com'); $promise->then($this->expectCallableOnce(), $this->expectCallableNever()); - $this->loop->run(); + Loop::run(); } /** @@ -55,13 +51,13 @@ public function testResolveGoogleResolves() */ public function testResolveGoogleOverUdpResolves() { - $factory = new Factory($this->loop); - $this->resolver = $factory->create('udp://8.8.8.8', $this->loop); + $factory = new Factory(); + $this->resolver = $factory->create('udp://8.8.8.8'); $promise = $this->resolver->resolve('google.com'); $promise->then($this->expectCallableOnce(), $this->expectCallableNever()); - $this->loop->run(); + Loop::run(); } /** @@ -69,13 +65,13 @@ public function testResolveGoogleOverUdpResolves() */ public function testResolveGoogleOverTcpResolves() { - $factory = new Factory($this->loop); - $this->resolver = $factory->create('tcp://8.8.8.8', $this->loop); + $factory = new Factory(); + $this->resolver = $factory->create('tcp://8.8.8.8'); $promise = $this->resolver->resolve('google.com'); $promise->then($this->expectCallableOnce(), $this->expectCallableNever()); - $this->loop->run(); + Loop::run(); } /** @@ -84,12 +80,12 @@ public function testResolveGoogleOverTcpResolves() public function testResolveAllGoogleMxResolvesWithCache() { $factory = new Factory(); - $this->resolver = $factory->createCached('8.8.8.8', $this->loop); + $this->resolver = $factory->createCached('8.8.8.8'); $promise = $this->resolver->resolveAll('google.com', Message::TYPE_MX); $promise->then($this->expectCallableOnceWith($this->isType('array')), $this->expectCallableNever()); - $this->loop->run(); + Loop::run(); } /** * @group internet @@ -97,12 +93,12 @@ public function testResolveAllGoogleMxResolvesWithCache() public function testResolveAllGoogleCaaResolvesWithCache() { $factory = new Factory(); - $this->resolver = $factory->createCached('8.8.8.8', $this->loop); + $this->resolver = $factory->createCached('8.8.8.8'); $promise = $this->resolver->resolveAll('google.com', Message::TYPE_CAA); $promise->then($this->expectCallableOnceWith($this->isType('array')), $this->expectCallableNever()); - $this->loop->run(); + Loop::run(); } /** @@ -112,7 +108,7 @@ public function testResolveInvalidRejects() { $promise = $this->resolver->resolve('example.invalid'); - $this->loop->run(); + Loop::run(); $exception = null; $promise->then(null, function ($reason) use (&$exception) { @@ -134,7 +130,7 @@ public function testResolveCancelledRejectsImmediately() $promise->cancel(); $time = microtime(true); - $this->loop->run(); + Loop::run(); $time = microtime(true) - $time; $this->assertLessThan(0.1, $time); @@ -156,7 +152,7 @@ public function testResolveAllInvalidTypeRejects() { $promise = $this->resolver->resolveAll('google.com', Message::TYPE_PTR); - $this->loop->run(); + Loop::run(); $exception = null; $promise->then(null, function ($reason) use (&$exception) { @@ -172,7 +168,7 @@ public function testResolveAllInvalidTypeRejects() public function testInvalidResolverDoesNotResolveGoogle() { $factory = new Factory(); - $this->resolver = $factory->create('255.255.255.255', $this->loop); + $this->resolver = $factory->create('255.255.255.255'); $promise = $this->resolver->resolve('google.com'); $promise->then($this->expectCallableNever(), $this->expectCallableOnce()); @@ -185,7 +181,7 @@ public function testResolveShouldNotCauseGarbageReferencesWhenUsingInvalidNamese } $factory = new Factory(); - $this->resolver = $factory->create('255.255.255.255', $this->loop); + $this->resolver = $factory->create('255.255.255.255'); gc_collect_cycles(); gc_collect_cycles(); // clear twice to avoid leftovers in PHP 7.4 with ext-xdebug and code coverage turned on @@ -203,7 +199,7 @@ public function testResolveCachedShouldNotCauseGarbageReferencesWhenUsingInvalid } $factory = new Factory(); - $this->resolver = $factory->createCached('255.255.255.255', $this->loop); + $this->resolver = $factory->createCached('255.255.255.255'); gc_collect_cycles(); gc_collect_cycles(); // clear twice to avoid leftovers in PHP 7.4 with ext-xdebug and code coverage turned on @@ -221,7 +217,7 @@ public function testCancelResolveShouldNotCauseGarbageReferences() } $factory = new Factory(); - $this->resolver = $factory->create('127.0.0.1', $this->loop); + $this->resolver = $factory->create('127.0.0.1'); gc_collect_cycles(); gc_collect_cycles(); // clear twice to avoid leftovers in PHP 7.4 with ext-xdebug and code coverage turned on @@ -240,7 +236,7 @@ public function testCancelResolveCachedShouldNotCauseGarbageReferences() } $factory = new Factory(); - $this->resolver = $factory->createCached('127.0.0.1', $this->loop); + $this->resolver = $factory->createCached('127.0.0.1'); gc_collect_cycles(); gc_collect_cycles(); // clear twice to avoid leftovers in PHP 7.4 with ext-xdebug and code coverage turned on diff --git a/tests/Query/TcpTransportExecutorTest.php b/tests/Query/TcpTransportExecutorTest.php index 860ad0dc..583c5ce0 100644 --- a/tests/Query/TcpTransportExecutorTest.php +++ b/tests/Query/TcpTransportExecutorTest.php @@ -7,7 +7,7 @@ use React\Dns\Protocol\Parser; use React\Dns\Query\Query; use React\Dns\Query\TcpTransportExecutor; -use React\EventLoop\Factory; +use React\EventLoop\Loop; use React\Tests\Dns\TestCase; class TcpTransportExecutorTest extends TestCase @@ -215,7 +215,6 @@ public function testQueryRejectsOnCancellationWithoutClosingSocketAndWithoutStar $loop->expects($this->never())->method('addReadStream'); $loop->expects($this->never())->method('removeReadStream'); - $timer = $this->getMockBuilder('React\EventLoop\TimerInterface')->getMock(); $loop->expects($this->never())->method('addTimer'); $loop->expects($this->never())->method('cancelTimer'); @@ -255,9 +254,7 @@ public function testQueryAgainAfterPreviousWasCancelledReusesExistingSocket() public function testQueryRejectsWhenServerIsNotListening() { - $loop = Factory::create(); - - $executor = new TcpTransportExecutor('127.0.0.1:1', $loop); + $executor = new TcpTransportExecutor('127.0.0.1:1'); $query = new Query('google.com', Message::TYPE_A, Message::CLASS_IN); @@ -269,9 +266,9 @@ function ($e) use (&$exception) { } ); - \Clue\React\Block\sleep(0.01, $loop); + \Clue\React\Block\sleep(0.01); if ($exception === null) { - \Clue\React\Block\sleep(0.2, $loop); + \Clue\React\Block\sleep(0.2); } /** @var \RuntimeException $exception */ @@ -418,16 +415,17 @@ public function testQueryRejectsWhenClientKeepsSendingWhenServerClosesSocketWith public function testQueryRejectsWhenServerClosesConnection() { - $loop = Factory::create(); - $server = stream_socket_server('tcp://127.0.0.1:0'); - $loop->addReadStream($server, function ($server) use ($loop) { + Loop::addReadStream($server, function ($server) { $client = stream_socket_accept($server); fclose($client); + + Loop::removeReadStream($server); + fclose($server); }); $address = stream_socket_get_name($server, false); - $executor = new TcpTransportExecutor($address, $loop); + $executor = new TcpTransportExecutor($address); $query = new Query('google.com', Message::TYPE_A, Message::CLASS_IN); @@ -439,9 +437,9 @@ function ($e) use (&$exception) { } ); - \Clue\React\Block\sleep(0.01, $loop); + \Clue\React\Block\sleep(0.01); if ($exception === null) { - \Clue\React\Block\sleep(0.2, $loop); + \Clue\React\Block\sleep(0.2); } /** @var \RuntimeException $exception */ @@ -451,22 +449,21 @@ function ($e) use (&$exception) { public function testQueryKeepsPendingIfServerSendsIncompleteMessageLength() { - $loop = Factory::create(); - + $client = null; $server = stream_socket_server('tcp://127.0.0.1:0'); - $loop->addReadStream($server, function ($server) use ($loop) { + Loop::addReadStream($server, function ($server) use (&$client) { $client = stream_socket_accept($server); - $loop->addReadStream($client, function ($client) use ($loop) { - $loop->removeReadStream($client); + Loop::addReadStream($client, function ($client) { + Loop::removeReadStream($client); fwrite($client, "\x00"); }); - // keep reference to client to avoid disconnecting - $loop->addTimer(1, function () use ($client) { }); + Loop::removeReadStream($server); + fclose($server); }); $address = stream_socket_get_name($server, false); - $executor = new TcpTransportExecutor($address, $loop); + $executor = new TcpTransportExecutor($address); $query = new Query('google.com', Message::TYPE_A, Message::CLASS_IN); @@ -479,28 +476,31 @@ function ($e) use (&$wait) { } ); - \Clue\React\Block\sleep(0.2, $loop); + \Clue\React\Block\sleep(0.2); $this->assertTrue($wait); + + $this->assertNotNull($client); + fclose($client); + Loop::removeReadStream($client); } public function testQueryKeepsPendingIfServerSendsIncompleteMessageBody() { - $loop = Factory::create(); - + $client = null; $server = stream_socket_server('tcp://127.0.0.1:0'); - $loop->addReadStream($server, function ($server) use ($loop) { + Loop::addReadStream($server, function ($server) use (&$client) { $client = stream_socket_accept($server); - $loop->addReadStream($client, function ($client) use ($loop) { - $loop->removeReadStream($client); + Loop::addReadStream($client, function ($client) { + Loop::removeReadStream($client); fwrite($client, "\x00\xff" . "some incomplete message data"); }); - // keep reference to client to avoid disconnecting - $loop->addTimer(1, function () use ($client) { }); + Loop::removeReadStream($server); + fclose($server); }); $address = stream_socket_get_name($server, false); - $executor = new TcpTransportExecutor($address, $loop); + $executor = new TcpTransportExecutor($address); $query = new Query('google.com', Message::TYPE_A, Message::CLASS_IN); @@ -513,25 +513,30 @@ function ($e) use (&$wait) { } ); - \Clue\React\Block\sleep(0.2, $loop); + \Clue\React\Block\sleep(0.2); $this->assertTrue($wait); + + $this->assertNotNull($client); + fclose($client); + Loop::removeReadStream($client); } public function testQueryRejectsWhenServerSendsInvalidMessage() { - $loop = Factory::create(); - $server = stream_socket_server('tcp://127.0.0.1:0'); - $loop->addReadStream($server, function ($server) use ($loop) { + Loop::addReadStream($server, function ($server) { $client = stream_socket_accept($server); - $loop->addReadStream($client, function ($client) use ($loop) { - $loop->removeReadStream($client); + Loop::addReadStream($client, function ($client) { + Loop::removeReadStream($client); fwrite($client, "\x00\x0f" . 'invalid message'); }); + + Loop::removeReadStream($server); + fclose($server); }); $address = stream_socket_get_name($server, false); - $executor = new TcpTransportExecutor($address, $loop); + $executor = new TcpTransportExecutor($address); $query = new Query('google.com', Message::TYPE_A, Message::CLASS_IN); @@ -543,9 +548,9 @@ function ($e) use (&$exception) { } ); - \Clue\React\Block\sleep(0.01, $loop); + \Clue\React\Block\sleep(0.01); if ($exception === null) { - \Clue\React\Block\sleep(0.2, $loop); + \Clue\React\Block\sleep(0.2); } /** @var \RuntimeException $exception */ @@ -558,13 +563,11 @@ public function testQueryRejectsWhenServerSendsInvalidId() $parser = new Parser(); $dumper = new BinaryDumper(); - $loop = Factory::create(); - $server = stream_socket_server('tcp://127.0.0.1:0'); - $loop->addReadStream($server, function ($server) use ($loop, $parser, $dumper) { + Loop::addReadStream($server, function ($server) use ($parser, $dumper) { $client = stream_socket_accept($server); - $loop->addReadStream($client, function ($client) use ($loop, $parser, $dumper) { - $loop->removeReadStream($client); + Loop::addReadStream($client, function ($client) use ($parser, $dumper) { + Loop::removeReadStream($client); $data = fread($client, 512); list(, $length) = unpack('n', substr($data, 0, 2)); @@ -579,10 +582,13 @@ public function testQueryRejectsWhenServerSendsInvalidId() fwrite($client, $data); }); + + Loop::removeReadStream($server); + fclose($server); }); $address = stream_socket_get_name($server, false); - $executor = new TcpTransportExecutor($address, $loop); + $executor = new TcpTransportExecutor($address); $query = new Query('google.com', Message::TYPE_A, Message::CLASS_IN); @@ -594,9 +600,9 @@ function ($e) use (&$exception) { } ); - \Clue\React\Block\sleep(0.01, $loop); + \Clue\React\Block\sleep(0.01); if ($exception === null) { - \Clue\React\Block\sleep(0.2, $loop); + \Clue\React\Block\sleep(0.2); } /** @var \RuntimeException $exception */ @@ -609,13 +615,11 @@ public function testQueryRejectsIfServerSendsTruncatedResponse() $parser = new Parser(); $dumper = new BinaryDumper(); - $loop = Factory::create(); - $server = stream_socket_server('tcp://127.0.0.1:0'); - $loop->addReadStream($server, function ($server) use ($loop, $parser, $dumper) { + Loop::addReadStream($server, function ($server) use ($parser, $dumper) { $client = stream_socket_accept($server); - $loop->addReadStream($client, function ($client) use ($loop, $parser, $dumper) { - $loop->removeReadStream($client); + Loop::addReadStream($client, function ($client) use ($parser, $dumper) { + Loop::removeReadStream($client); $data = fread($client, 512); list(, $length) = unpack('n', substr($data, 0, 2)); @@ -630,10 +634,13 @@ public function testQueryRejectsIfServerSendsTruncatedResponse() fwrite($client, $data); }); + + Loop::removeReadStream($server); + fclose($server); }); $address = stream_socket_get_name($server, false); - $executor = new TcpTransportExecutor($address, $loop); + $executor = new TcpTransportExecutor($address); $query = new Query('google.com', Message::TYPE_A, Message::CLASS_IN); @@ -645,9 +652,9 @@ function ($e) use (&$exception) { } ); - \Clue\React\Block\sleep(0.01, $loop); + \Clue\React\Block\sleep(0.01); if ($exception === null) { - \Clue\React\Block\sleep(0.2, $loop); + \Clue\React\Block\sleep(0.2); } /** @var \RuntimeException $exception */ @@ -657,13 +664,11 @@ function ($e) use (&$exception) { public function testQueryResolvesIfServerSendsValidResponse() { - $loop = Factory::create(); - $server = stream_socket_server('tcp://127.0.0.1:0'); - $loop->addReadStream($server, function ($server) use ($loop) { + Loop::addReadStream($server, function ($server) { $client = stream_socket_accept($server); - $loop->addReadStream($client, function ($client) use ($loop) { - $loop->removeReadStream($client); + Loop::addReadStream($client, function ($client) { + Loop::removeReadStream($client); $data = fread($client, 512); list(, $length) = unpack('n', substr($data, 0, 2)); @@ -671,15 +676,18 @@ public function testQueryResolvesIfServerSendsValidResponse() fwrite($client, $data); }); + + Loop::removeReadStream($server); + fclose($server); }); $address = stream_socket_get_name($server, false); - $executor = new TcpTransportExecutor($address, $loop); + $executor = new TcpTransportExecutor($address); $query = new Query('google.com', Message::TYPE_A, Message::CLASS_IN); $promise = $executor->query($query); - $response = \Clue\React\Block\await($promise, $loop, 0.2); + $response = \Clue\React\Block\await($promise, null, 0.2); $this->assertInstanceOf('React\Dns\Model\Message', $response); } diff --git a/tests/Query/TimeoutExecutorTest.php b/tests/Query/TimeoutExecutorTest.php index a7537053..f413f331 100644 --- a/tests/Query/TimeoutExecutorTest.php +++ b/tests/Query/TimeoutExecutorTest.php @@ -7,14 +7,12 @@ use React\Dns\Query\Query; use React\Dns\Query\TimeoutException; use React\Dns\Query\TimeoutExecutor; -use React\EventLoop\Factory; use React\Promise; use React\Promise\Deferred; use React\Tests\Dns\TestCase; class TimeoutExecutorTest extends TestCase { - private $loop; private $wrapped; private $executor; @@ -23,11 +21,9 @@ class TimeoutExecutorTest extends TestCase */ public function setUpExecutor() { - $this->loop = Factory::create(); - $this->wrapped = $this->getMockBuilder('React\Dns\Query\ExecutorInterface')->getMock(); - $this->executor = new TimeoutExecutor($this->wrapped, 5.0, $this->loop); + $this->executor = new TimeoutExecutor($this->wrapped, 5.0); } public function testCtorWithoutLoopShouldAssignDefaultLoop() @@ -95,7 +91,7 @@ public function testRejectsPromiseWhenWrappedRejects() public function testWrappedWillBeCancelledOnTimeout() { - $this->executor = new TimeoutExecutor($this->wrapped, 0, $this->loop); + $this->executor = new TimeoutExecutor($this->wrapped, 0); $cancelled = 0; @@ -117,7 +113,7 @@ public function testWrappedWillBeCancelledOnTimeout() $this->assertEquals(0, $cancelled); try { - \Clue\React\Block\await($promise, $this->loop); + \Clue\React\Block\await($promise); $this->fail(); } catch (TimeoutException $exception) { $this->assertEquals('DNS query for igor.io (A) timed out' , $exception->getMessage()); diff --git a/tests/Query/UdpTransportExecutorTest.php b/tests/Query/UdpTransportExecutorTest.php index be674f71..066bfcf6 100644 --- a/tests/Query/UdpTransportExecutorTest.php +++ b/tests/Query/UdpTransportExecutorTest.php @@ -7,7 +7,7 @@ use React\Dns\Protocol\Parser; use React\Dns\Query\Query; use React\Dns\Query\UdpTransportExecutor; -use React\EventLoop\Factory; +use React\EventLoop\Loop; use React\Tests\Dns\TestCase; class UdpTransportExecutorTest extends TestCase @@ -250,16 +250,17 @@ public function testQueryRejectsOnCancellation() public function testQueryKeepsPendingIfServerSendsInvalidMessage() { - $loop = Factory::create(); - $server = stream_socket_server('udp://127.0.0.1:0', $errno, $errstr, STREAM_SERVER_BIND); - $loop->addReadStream($server, function ($server) { + Loop::addReadStream($server, function ($server) { $data = stream_socket_recvfrom($server, 512, 0, $peer); stream_socket_sendto($server, 'invalid', 0, $peer); + + Loop::removeReadStream($server); + fclose($server); }); $address = stream_socket_get_name($server, false); - $executor = new UdpTransportExecutor($address, $loop); + $executor = new UdpTransportExecutor($address); $query = new Query('google.com', Message::TYPE_A, Message::CLASS_IN); @@ -272,8 +273,10 @@ function ($e) use (&$wait) { } ); - \Clue\React\Block\sleep(0.2, $loop); + \Clue\React\Block\sleep(0.2); $this->assertTrue($wait); + + $promise->cancel(); } public function testQueryKeepsPendingIfServerSendsInvalidId() @@ -281,20 +284,21 @@ public function testQueryKeepsPendingIfServerSendsInvalidId() $parser = new Parser(); $dumper = new BinaryDumper(); - $loop = Factory::create(); - $server = stream_socket_server('udp://127.0.0.1:0', $errno, $errstr, STREAM_SERVER_BIND); - $loop->addReadStream($server, function ($server) use ($parser, $dumper) { + Loop::addReadStream($server, function ($server) use ($parser, $dumper) { $data = stream_socket_recvfrom($server, 512, 0, $peer); $message = $parser->parseMessage($data); $message->id = 0; stream_socket_sendto($server, $dumper->toBinary($message), 0, $peer); + + Loop::removeReadStream($server); + fclose($server); }); $address = stream_socket_get_name($server, false); - $executor = new UdpTransportExecutor($address, $loop); + $executor = new UdpTransportExecutor($address); $query = new Query('google.com', Message::TYPE_A, Message::CLASS_IN); @@ -307,8 +311,10 @@ function ($e) use (&$wait) { } ); - \Clue\React\Block\sleep(0.2, $loop); + \Clue\React\Block\sleep(0.2); $this->assertTrue($wait); + + $promise->cancel(); } public function testQueryRejectsIfServerSendsTruncatedResponse() @@ -316,20 +322,21 @@ public function testQueryRejectsIfServerSendsTruncatedResponse() $parser = new Parser(); $dumper = new BinaryDumper(); - $loop = Factory::create(); - $server = stream_socket_server('udp://127.0.0.1:0', $errno, $errstr, STREAM_SERVER_BIND); - $loop->addReadStream($server, function ($server) use ($parser, $dumper) { + Loop::addReadStream($server, function ($server) use ($parser, $dumper) { $data = stream_socket_recvfrom($server, 512, 0, $peer); $message = $parser->parseMessage($data); $message->tc = true; stream_socket_sendto($server, $dumper->toBinary($message), 0, $peer); + + Loop::removeReadStream($server); + fclose($server); }); $address = stream_socket_get_name($server, false); - $executor = new UdpTransportExecutor($address, $loop); + $executor = new UdpTransportExecutor($address); $query = new Query('google.com', Message::TYPE_A, Message::CLASS_IN); @@ -340,7 +347,7 @@ public function testQueryRejectsIfServerSendsTruncatedResponse() 'DNS query for google.com (A) failed: The DNS server udp://' . $address . ' returned a truncated result for a UDP query', defined('SOCKET_EMSGSIZE') ? SOCKET_EMSGSIZE : 90 ); - \Clue\React\Block\await($promise, $loop, 0.1); + \Clue\React\Block\await($promise, null, 0.1); } public function testQueryResolvesIfServerSendsValidResponse() @@ -348,24 +355,25 @@ public function testQueryResolvesIfServerSendsValidResponse() $parser = new Parser(); $dumper = new BinaryDumper(); - $loop = Factory::create(); - $server = stream_socket_server('udp://127.0.0.1:0', $errno, $errstr, STREAM_SERVER_BIND); - $loop->addReadStream($server, function ($server) use ($parser, $dumper) { + Loop::addReadStream($server, function ($server) use ($parser, $dumper) { $data = stream_socket_recvfrom($server, 512, 0, $peer); $message = $parser->parseMessage($data); stream_socket_sendto($server, $dumper->toBinary($message), 0, $peer); + + Loop::removeReadStream($server); + fclose($server); }); $address = stream_socket_get_name($server, false); - $executor = new UdpTransportExecutor($address, $loop); + $executor = new UdpTransportExecutor($address); $query = new Query('google.com', Message::TYPE_A, Message::CLASS_IN); $promise = $executor->query($query); - $response = \Clue\React\Block\await($promise, $loop, 0.2); + $response = \Clue\React\Block\await($promise, null, 0.2); $this->assertInstanceOf('React\Dns\Model\Message', $response); }