Skip to content

Commit 58cbbc7

Browse files
committed
Move IPv6 tests to a separate file. Add a setUp method to detect if PHP has IPv6 support, the host has IPv6 support, and that IPv6 is routable (quick connection to google IPv6 server). Skip tests if we are running on a host or network that cannot do IPv6
1 parent 71d129b commit 58cbbc7

File tree

2 files changed

+75
-35
lines changed

2 files changed

+75
-35
lines changed

tests/FunctionalTests.php renamed to tests/FunctionalTest.php

Lines changed: 1 addition & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
/**
1212
* Functional Tests
1313
*/
14-
class FunctionalTests extends TestCase
14+
class FunctionalTest extends TestCase
1515
{
1616
public function testResolveCloudflareViaPostResolves()
1717
{
@@ -86,40 +86,6 @@ public function testResolveSecondQueryReusesConnection()
8686
$this->assertEquals(Message::RCODE_OK, $answer->rcode);
8787
}
8888

89-
public function testResolveGoogleViaIPv6HostResolves()
90-
{
91-
$executor = new DohExecutor('https://dns64.dns.google/dns-query');
92-
$query = new Query('google.com', Message::TYPE_A, Message::CLASS_IN);
93-
$promise = $executor->query($query);
94-
95-
$answer = null;
96-
$promise->then(function ($message) use (&$answer) {
97-
$answer = $message;
98-
}, function($reason) { echo $reason->getMessage();});
99-
100-
Loop::run();
101-
102-
$this->assertNotNull($answer);
103-
$this->assertEquals(Message::RCODE_OK, $answer->rcode);
104-
}
105-
106-
public function testResolveGoogleViaIPv6IpResolves()
107-
{
108-
$executor = new DohExecutor('https://[2001:4860:4860::8888]/dns-query');
109-
$query = new Query('google.com', Message::TYPE_A, Message::CLASS_IN);
110-
$promise = $executor->query($query);
111-
112-
$answer = null;
113-
$promise->then(function ($message) use (&$answer) {
114-
$answer = $message;
115-
}, function($reason) { echo $reason->getMessage();});
116-
117-
Loop::run();
118-
119-
$this->assertNotNull($answer);
120-
$this->assertEquals(Message::RCODE_OK, $answer->rcode);
121-
}
122-
12389
public function testResolveInvalidRejects()
12490
{
12591
$executor = new DohExecutor('https://1.1.1.1/dns-query');

tests/IPv6Test.php

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace EdgeTelemetrics\React\Dns\Tests;
4+
5+
use EdgeTelemetrics\React\Dns\DohExecutor;
6+
use PHPUnit\Framework\TestCase;
7+
use React\Dns\Model\Message;
8+
use React\Dns\Query\Query;
9+
use React\EventLoop\Loop;
10+
11+
/**
12+
* IPv6 Tests
13+
*/
14+
class IPv6Test extends TestCase
15+
{
16+
protected function setUp(): void
17+
{
18+
if (!(defined("AF_INET6") && @\stream_socket_client('udp://[::1]:8888') !== false)) {
19+
$this->markTestSkipped('IPv6 Unavailable');
20+
}
21+
$context = stream_context_create();
22+
stream_context_set_option($context, 'ssl', 'verify_host', false);
23+
stream_context_set_option($context, 'ssl', 'verify_peer_name', false);
24+
25+
$dns = 'tls://[2001:4860:4860::8888]:443';
26+
27+
$socket = @\stream_socket_client($dns, $errno, $errstr, 5, STREAM_CLIENT_CONNECT, $context);
28+
if ($socket === false) {
29+
$this->markTestSkipped('IPv6 not routable');
30+
}
31+
}
32+
33+
public function testResolveGoogleViaIPv6HostResolves()
34+
{
35+
$executor = new DohExecutor('https://dns64.dns.google/dns-query');
36+
$query = new Query('google.com', Message::TYPE_A, Message::CLASS_IN);
37+
$promise = $executor->query($query);
38+
39+
$answer = null;
40+
$exception = null;
41+
$promise->then(function ($message) use (&$answer) {
42+
$answer = $message;
43+
}, function($reason) use (&$exception) {
44+
$exception = $reason;
45+
});
46+
47+
Loop::run();
48+
49+
$this->assertNull($exception);
50+
$this->assertNotNull($answer);
51+
$this->assertEquals(Message::RCODE_OK, $answer->rcode);
52+
}
53+
54+
public function testResolveGoogleViaIPv6IpResolves()
55+
{
56+
$executor = new DohExecutor('https://[2001:4860:4860::8888]/dns-query');
57+
$query = new Query('google.com', Message::TYPE_A, Message::CLASS_IN);
58+
$promise = $executor->query($query);
59+
60+
$answer = null;
61+
$exception = null;
62+
$promise->then(function ($message) use (&$answer) {
63+
$answer = $message;
64+
}, function($reason) use (&$exception) {
65+
$exception = $reason;
66+
});
67+
68+
Loop::run();
69+
70+
$this->assertNull($exception);
71+
$this->assertNotNull($answer);
72+
$this->assertEquals(Message::RCODE_OK, $answer->rcode);
73+
}
74+
}

0 commit comments

Comments
 (0)