init
This commit is contained in:
100
vendor/react/dns/tests/Query/CachedExecutorTest.php
vendored
Executable file
100
vendor/react/dns/tests/Query/CachedExecutorTest.php
vendored
Executable file
@@ -0,0 +1,100 @@
|
||||
<?php
|
||||
|
||||
namespace React\Tests\Dns\Query;
|
||||
|
||||
use React\Tests\Dns\TestCase;
|
||||
use React\Dns\Query\CachedExecutor;
|
||||
use React\Dns\Query\Query;
|
||||
use React\Dns\Model\Message;
|
||||
use React\Dns\Model\Record;
|
||||
use React\Promise;
|
||||
|
||||
class CachedExecutorTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @covers React\Dns\Query\CachedExecutor
|
||||
* @test
|
||||
*/
|
||||
public function queryShouldDelegateToDecoratedExecutor()
|
||||
{
|
||||
$executor = $this->createExecutorMock();
|
||||
$executor
|
||||
->expects($this->once())
|
||||
->method('query')
|
||||
->with('8.8.8.8', $this->isInstanceOf('React\Dns\Query\Query'))
|
||||
->will($this->returnValue($this->createPromiseMock()));
|
||||
|
||||
$cache = $this->getMockBuilder('React\Dns\Query\RecordCache')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$cache
|
||||
->expects($this->once())
|
||||
->method('lookup')
|
||||
->will($this->returnValue(Promise\reject()));
|
||||
$cachedExecutor = new CachedExecutor($executor, $cache);
|
||||
|
||||
$query = new Query('igor.io', Message::TYPE_A, Message::CLASS_IN, 1345656451);
|
||||
$cachedExecutor->query('8.8.8.8', $query);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers React\Dns\Query\CachedExecutor
|
||||
* @test
|
||||
*/
|
||||
public function callingQueryTwiceShouldUseCachedResult()
|
||||
{
|
||||
$cachedRecords = array(new Record('igor.io', Message::TYPE_A, Message::CLASS_IN));
|
||||
|
||||
$executor = $this->createExecutorMock();
|
||||
$executor
|
||||
->expects($this->once())
|
||||
->method('query')
|
||||
->will($this->callQueryCallbackWithAddress('178.79.169.131'));
|
||||
|
||||
$cache = $this->getMockBuilder('React\Dns\Query\RecordCache')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$cache
|
||||
->expects($this->at(0))
|
||||
->method('lookup')
|
||||
->with($this->isInstanceOf('React\Dns\Query\Query'))
|
||||
->will($this->returnValue(Promise\reject()));
|
||||
$cache
|
||||
->expects($this->at(1))
|
||||
->method('storeResponseMessage')
|
||||
->with($this->isType('integer'), $this->isInstanceOf('React\Dns\Model\Message'));
|
||||
$cache
|
||||
->expects($this->at(2))
|
||||
->method('lookup')
|
||||
->with($this->isInstanceOf('React\Dns\Query\Query'))
|
||||
->will($this->returnValue(Promise\resolve($cachedRecords)));
|
||||
|
||||
$cachedExecutor = new CachedExecutor($executor, $cache);
|
||||
|
||||
$query = new Query('igor.io', Message::TYPE_A, Message::CLASS_IN, 1345656451);
|
||||
$cachedExecutor->query('8.8.8.8', $query, function () {}, function () {});
|
||||
$cachedExecutor->query('8.8.8.8', $query, function () {}, function () {});
|
||||
}
|
||||
|
||||
private function callQueryCallbackWithAddress($address)
|
||||
{
|
||||
return $this->returnCallback(function ($nameserver, $query) use ($address) {
|
||||
$response = new Message();
|
||||
$response->header->set('qr', 1);
|
||||
$response->questions[] = new Record($query->name, $query->type, $query->class);
|
||||
$response->answers[] = new Record($query->name, $query->type, $query->class, 3600, $address);
|
||||
|
||||
return Promise\resolve($response);
|
||||
});
|
||||
}
|
||||
|
||||
private function createExecutorMock()
|
||||
{
|
||||
return $this->getMockBuilder('React\Dns\Query\ExecutorInterface')->getMock();
|
||||
}
|
||||
|
||||
private function createPromiseMock()
|
||||
{
|
||||
return $this->getMockBuilder('React\Promise\PromiseInterface')->getMock();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user