mirror of
https://github.com/danog/dns-over-https.git
synced 2024-11-26 20:04:47 +01:00
186 lines
6.8 KiB
PHP
186 lines
6.8 KiB
PHP
<?php
|
|
|
|
namespace Amp\DoH\Test;
|
|
|
|
use Amp\Dns\DnsException;
|
|
use Amp\DoH\JsonDecoderFactory;
|
|
use Amp\PHPUnit\TestCase;
|
|
use LibDNS\Messages\Message;
|
|
use LibDNS\Messages\MessageTypes;
|
|
|
|
class JsonDecoderTest extends TestCase
|
|
{
|
|
/**
|
|
* Test decoding of valid JSON DNS payloads.
|
|
*
|
|
* @param string $message
|
|
* @param int $requestId
|
|
* @return void
|
|
*
|
|
* @dataProvider provideValidJsonPayloads
|
|
*/
|
|
public function testDecodesValidJsonPayloads(string $message, int $requestId)
|
|
{
|
|
$decoder = (new JsonDecoderFactory)->create();
|
|
$response = $decoder->decode($message, $requestId);
|
|
|
|
$this->assertInstanceOf(Message::class, $response);
|
|
$this->assertEquals(MessageTypes::RESPONSE, $response->getType());
|
|
}
|
|
|
|
public function provideValidJsonPayloads()
|
|
{
|
|
return [
|
|
[
|
|
'{
|
|
"Status": 0,
|
|
"TC": false,
|
|
"RD": true,
|
|
"RA": true,
|
|
"AD": false,
|
|
"CD": false,
|
|
"Question":
|
|
[
|
|
{
|
|
"name": "apple.com.",
|
|
"type": 1
|
|
}
|
|
],
|
|
"Answer":
|
|
[
|
|
{
|
|
"name": "apple.com.",
|
|
"type": 1,
|
|
"TTL": 3599,
|
|
"data": "17.178.96.59"
|
|
},
|
|
{
|
|
"name": "apple.com.",
|
|
"type": 1,
|
|
"TTL": 3599,
|
|
"data": "17.172.224.47"
|
|
},
|
|
{
|
|
"name": "apple.com.",
|
|
"type": 1,
|
|
"TTL": 3599,
|
|
"data": "17.142.160.59"
|
|
}
|
|
],
|
|
"Additional": [ ],
|
|
"edns_client_subnet": "12.34.56.78/0"
|
|
}',
|
|
2,
|
|
],
|
|
[
|
|
'{"Status": 0,"TC": false,"RD": true, "RA": true, "AD": true,"CD": false,"Question":[{"name": "example.com.", "type": 28}],"Answer":[{"name": "example.com.", "type": 28, "TTL": 7092, "data": "2606:2800:220:1:248:1893:25c8:1946"}]}',
|
|
3,
|
|
],
|
|
[
|
|
'{"Status": 0,"TC": false,"RD": true, "RA": true, "AD": false,"CD": false,"Question":[{"name": "daniil.it.", "type": 1}],"Answer":[{"name": "daniil.it.", "type": 1, "TTL": 300, "data": "104.27.146.166"},{"name": "daniil.it.", "type": 1, "TTL": 300, "data": "104.27.147.166"}]}',
|
|
3,
|
|
],
|
|
[
|
|
'{"Status": 0,"TC": false,"RD": true, "RA": true, "AD": false,"CD": false,"Question":[{"name": "amphp.org.", "type": 15}],"Answer":[{"name": "amphp.org.", "type": 15, "TTL": 86400, "data": "0 mail.negativeion.net."}]}',
|
|
3,
|
|
],
|
|
];
|
|
}
|
|
|
|
|
|
/**
|
|
* Test decoding of invalid JSON DNS payloads.
|
|
*
|
|
* @param string $message
|
|
* @param int $requestId
|
|
* @return void
|
|
*
|
|
* @dataProvider provideInvalidJsonPayloads
|
|
*/
|
|
public function testDecodesInvalidJsonPayloads($message, $requestId)
|
|
{
|
|
$decoder = (new JsonDecoderFactory)->create();
|
|
$this->expectException(DnsException::class);
|
|
$decoder->decode($message, $requestId);
|
|
}
|
|
|
|
public function provideInvalidJsonPayloads()
|
|
{
|
|
return [
|
|
[
|
|
'{lmfao
|
|
"Status": 0,
|
|
"TC": false,
|
|
"RD": true,
|
|
"RA": true,
|
|
"AD": false,
|
|
"CD": false,
|
|
"Question":
|
|
[
|
|
{
|
|
"name": "apple.com.",
|
|
"type": 1
|
|
}
|
|
],
|
|
"Answer":
|
|
[
|
|
{
|
|
"name": "apple.com.",
|
|
"type": 1,
|
|
"TTL": 3599,
|
|
"data": "17.178.96.59"
|
|
},
|
|
{
|
|
"name": "apple.com.",
|
|
"type": 1,
|
|
"TTL": 3599,
|
|
"data": "17.172.224.47"
|
|
},
|
|
{
|
|
"name": "apple.com.",
|
|
"type": 1,
|
|
"TTL": 3599,
|
|
"data": "17.142.160.59"
|
|
}
|
|
],
|
|
"Additional": [ ],
|
|
"edns_client_subnet": "12.34.56.78/0"
|
|
}',
|
|
2,
|
|
],
|
|
[
|
|
'xd{"Status": 0,"TC": false,"RD": true, "RA": true, "AD": true,"CD": false,"Question":[{"name": "example.com.", "type": 28}],"Answer":[{"name": "example.com.", "type": 28, "TTL": 7092, "data": "2606:2800:220:1:248:1893:25c8:1946"}]}',
|
|
3,
|
|
],
|
|
[
|
|
'whaaa{"Status": 0,"TC": false,"RD": true, "RA": true, "AD": false,"CD": false,"Question":[{"name": "daniil.it.", "type": 1}],"Answer":[{"name": "daniil.it.", "type": 1, "TTL": 300, "data": "104.27.146.166"},{"name": "daniil.it.", "type": 1, "TTL": 300, "data": "104.27.147.166"}]}',
|
|
3,
|
|
],
|
|
[
|
|
'xdxdxxxxx{"Status": 0,"TC": false,"RD": true, "RA": true, "AD": false,"CD": false,"Question":[{"name": "amphp.org.", "type": 15}],"Answer":[{"name": "amphp.org.", "type": 15, "TTL": 86400, "data": "0 mail.negativeion.net."}]}',
|
|
3,
|
|
],
|
|
[
|
|
'{"TC": false,"RD": true, "RA": true, "AD": false,"CD": false,"Question":[{"name": "amphp.org.", "type": 15}],"Answer":[{"name": "amphp.org.", "type": 15, "TTL": 86400, "data": "0 mail.negativeion.net."}]}',
|
|
3,
|
|
],
|
|
[
|
|
'{"Status": 0,"RD": true, "RA": true, "AD": false,"CD": false,"Question":[{"name": "amphp.org.", "type": 15}],"Answer":[{"name": "amphp.org.", "type": 15, "TTL": 86400, "data": "0 mail.negativeion.net."}]}',
|
|
3,
|
|
],
|
|
[
|
|
'{"Status": 0,"TC": false,"RA": true, "AD": false,"CD": false,"Question":[{"name": "amphp.org.", "type": 15}],"Answer":[{"name": "amphp.org.", "type": 15, "TTL": 86400, "data": "0 mail.negativeion.net."}]}',
|
|
3,
|
|
],
|
|
[
|
|
'{"Status": 0,"TC": false,"RD": true, "AD": false,"CD": false,"Question":[{"name": "amphp.org.", "type": 15}],"Answer":[{"name": "amphp.org.", "type": 15, "TTL": 86400, "data": "0 mail.negativeion.net."}]}',
|
|
3,
|
|
],
|
|
[
|
|
'xd',
|
|
0
|
|
],
|
|
];
|
|
}
|
|
}
|