1
0
mirror of https://github.com/danog/postgres.git synced 2024-12-02 09:27:54 +01:00
postgres/test/PqPoolTest.php
Aaron Piotrowski dbca58507e
Add Connector interface; make most classes final
Connector added so Pool could be final while adding a way to alter how connections are established. connect() and pool() functions now use the global connector defined by a new function connector().

Some tests were refactored to account for final classes. AbstractPoolTest was removed as the other pool tests covered the same code with similar tests.
2018-03-26 22:08:46 -05:00

68 lines
1.9 KiB
PHP

<?php
namespace Amp\Postgres\Test;
use Amp\Postgres\Connector;
use Amp\Postgres\Link;
use Amp\Postgres\Pool;
use Amp\Postgres\PqConnection;
use Amp\Promise;
use Amp\Success;
/**
* @requires extension pq
*/
class PqPoolTest extends AbstractLinkTest {
const POOL_SIZE = 3;
/** @var \pq\Connection[] */
protected $handles = [];
public function createLink(string $connectionString): Link {
for ($i = 0; $i < self::POOL_SIZE; ++$i) {
$this->handles[] = $handle = new \pq\Connection($connectionString);
$handle->nonblocking = true;
$handle->unbuffered = true;
}
$connector = $this->createMock(Connector::class);
$connector->method('connect')
->will($this->returnCallback(function (): Promise {
static $count = 0;
if (!isset($this->handles[$count])) {
$this->fail("createConnection called too many times");
}
$handle = $this->handles[$count];
++$count;
return new Success(new PqConnection($handle));
}));
$pool = new Pool('connection string', \count($this->handles), $connector);
$handle = \reset($this->handles);
$handle->exec("DROP TABLE IF EXISTS test");
$result = $handle->exec("CREATE TABLE test (domain VARCHAR(63), tld VARCHAR(63), PRIMARY KEY (domain, tld))");
if (!$result) {
$this->fail('Could not create test table.');
}
foreach ($this->getData() as $row) {
$result = $handle->execParams("INSERT INTO test VALUES (\$1, \$2)", $row);
if (!$result) {
$this->fail('Could not insert test data.');
}
}
return $pool;
}
public function tearDown() {
$this->handles[0]->exec("ROLLBACK");
$this->handles[0]->exec("DROP TABLE test");
}
}