minor #30857 [Messenger] test DoctrineTransport on travis and appveyor (vincenttouzet)
This PR was merged into the 4.3-dev branch.
Discussion
----------
[Messenger] test DoctrineTransport on travis and appveyor
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | no
| New feature? | no
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes ? WIP
| Fixed tickets |
| License | MIT
| Doc PR |
Currently tests on the `Symfony\Component\Messenger\Tests\Transport\Doctrine\DoctrineIntegrationTest` are skipped because there is no `MESSENGER_DOCTRINE_DSN` environment variable is not defined.
This PR update the travis and AppVeyor configuration to run these tests.
This is a WIP. I'm not a Travis/AppVeyor user so this clearly need more work
Commits
-------
8f81f55a46
[Messenger] test DoctrineTransport on travis and appveyor
This commit is contained in:
commit
550a569725
@ -17,22 +17,31 @@ use Symfony\Component\Messenger\Tests\Fixtures\DummyMessage;
|
|||||||
use Symfony\Component\Messenger\Transport\Doctrine\Connection;
|
use Symfony\Component\Messenger\Transport\Doctrine\Connection;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @requires pdo_mysql
|
* @requires extension pdo_sqlite
|
||||||
*/
|
*/
|
||||||
class DoctrineIntegrationTest extends TestCase
|
class DoctrineIntegrationTest extends TestCase
|
||||||
{
|
{
|
||||||
private $driverConnection;
|
private $driverConnection;
|
||||||
private $connection;
|
private $connection;
|
||||||
|
|
||||||
protected function setUp()
|
/**
|
||||||
|
* @after
|
||||||
|
*/
|
||||||
|
public function cleanup()
|
||||||
{
|
{
|
||||||
parent::setUp();
|
@unlink(sys_get_temp_dir().'/symfony.messenger.sqlite');
|
||||||
|
|
||||||
if (!getenv('MESSENGER_DOCTRINE_DSN')) {
|
|
||||||
$this->markTestSkipped('The "MESSENGER_DOCTRINE_DSN" environment variable is required.');
|
|
||||||
}
|
}
|
||||||
$dsn = getenv('MESSENGER_DOCTRINE_DSN');
|
|
||||||
|
/**
|
||||||
|
* @before
|
||||||
|
*/
|
||||||
|
public function createConnection()
|
||||||
|
{
|
||||||
|
if ($dsn = getenv('MESSENGER_DOCTRINE_DSN')) {
|
||||||
$this->driverConnection = DriverManager::getConnection(['url' => $dsn]);
|
$this->driverConnection = DriverManager::getConnection(['url' => $dsn]);
|
||||||
|
} else {
|
||||||
|
$this->driverConnection = DriverManager::getConnection(['pdo' => new \PDO('sqlite:'.sys_get_temp_dir().'/symfony.messenger.sqlite')]);
|
||||||
|
}
|
||||||
$this->connection = new Connection([], $this->driverConnection);
|
$this->connection = new Connection([], $this->driverConnection);
|
||||||
// call send to auto-setup the table
|
// call send to auto-setup the table
|
||||||
$this->connection->setup();
|
$this->connection->setup();
|
||||||
@ -62,7 +71,7 @@ class DoctrineIntegrationTest extends TestCase
|
|||||||
|
|
||||||
$available_at = new \DateTime($available_at);
|
$available_at = new \DateTime($available_at);
|
||||||
|
|
||||||
$now = \DateTime::createFromFormat('U.u', microtime(true));
|
$now = new \DateTime();
|
||||||
$now->modify('+60 seconds');
|
$now->modify('+60 seconds');
|
||||||
$this->assertGreaterThan($now, $available_at);
|
$this->assertGreaterThan($now, $available_at);
|
||||||
}
|
}
|
||||||
@ -77,7 +86,7 @@ class DoctrineIntegrationTest extends TestCase
|
|||||||
'queue_name' => 'default',
|
'queue_name' => 'default',
|
||||||
'created_at' => Connection::formatDateTime(new \DateTime('2019-03-15 12:00:00')),
|
'created_at' => Connection::formatDateTime(new \DateTime('2019-03-15 12:00:00')),
|
||||||
'available_at' => Connection::formatDateTime(new \DateTime('2019-03-15 12:00:00')),
|
'available_at' => Connection::formatDateTime(new \DateTime('2019-03-15 12:00:00')),
|
||||||
'delivered_at' => Connection::formatDateTime(\DateTime::createFromFormat('U.u', microtime(true))),
|
'delivered_at' => Connection::formatDateTime(new \DateTime()),
|
||||||
]);
|
]);
|
||||||
// one available later
|
// one available later
|
||||||
$this->driverConnection->insert('messenger_messages', [
|
$this->driverConnection->insert('messenger_messages', [
|
||||||
@ -110,7 +119,7 @@ class DoctrineIntegrationTest extends TestCase
|
|||||||
'queue_name' => 'default',
|
'queue_name' => 'default',
|
||||||
'created_at' => Connection::formatDateTime(new \DateTime('2019-03-15 12:00:00')),
|
'created_at' => Connection::formatDateTime(new \DateTime('2019-03-15 12:00:00')),
|
||||||
'available_at' => Connection::formatDateTime(new \DateTime('2019-03-15 12:00:00')),
|
'available_at' => Connection::formatDateTime(new \DateTime('2019-03-15 12:00:00')),
|
||||||
'delivered_at' => Connection::formatDateTime(\DateTime::createFromFormat('U.u', microtime(true))),
|
'delivered_at' => Connection::formatDateTime(new \DateTime()),
|
||||||
]);
|
]);
|
||||||
// one available later
|
// one available later
|
||||||
$this->driverConnection->insert('messenger_messages', [
|
$this->driverConnection->insert('messenger_messages', [
|
||||||
|
@ -106,7 +106,7 @@ class Connection
|
|||||||
*/
|
*/
|
||||||
public function send(string $body, array $headers, int $delay = 0): void
|
public function send(string $body, array $headers, int $delay = 0): void
|
||||||
{
|
{
|
||||||
$now = (\DateTime::createFromFormat('U.u', microtime(true)));
|
$now = new \DateTime();
|
||||||
$availableAt = (clone $now)->modify(sprintf('+%d seconds', $delay / 1000));
|
$availableAt = (clone $now)->modify(sprintf('+%d seconds', $delay / 1000));
|
||||||
|
|
||||||
$queryBuilder = $this->driverConnection->createQueryBuilder()
|
$queryBuilder = $this->driverConnection->createQueryBuilder()
|
||||||
@ -157,7 +157,7 @@ class Connection
|
|||||||
->update($this->configuration['table_name'])
|
->update($this->configuration['table_name'])
|
||||||
->set('delivered_at', ':delivered_at')
|
->set('delivered_at', ':delivered_at')
|
||||||
->where('id = :id');
|
->where('id = :id');
|
||||||
$now = \DateTime::createFromFormat('U.u', microtime(true));
|
$now = new \DateTime();
|
||||||
$this->executeQuery($queryBuilder->getSQL(), [
|
$this->executeQuery($queryBuilder->getSQL(), [
|
||||||
':id' => $doctrineEnvelope['id'],
|
':id' => $doctrineEnvelope['id'],
|
||||||
':delivered_at' => self::formatDateTime($now),
|
':delivered_at' => self::formatDateTime($now),
|
||||||
@ -207,7 +207,7 @@ class Connection
|
|||||||
|
|
||||||
private function createAvailableMessagesQueryBuilder(): QueryBuilder
|
private function createAvailableMessagesQueryBuilder(): QueryBuilder
|
||||||
{
|
{
|
||||||
$now = \DateTime::createFromFormat('U.u', microtime(true));
|
$now = new \DateTime();
|
||||||
$redeliverLimit = (clone $now)->modify(sprintf('-%d seconds', $this->configuration['redeliver_timeout']));
|
$redeliverLimit = (clone $now)->modify(sprintf('-%d seconds', $this->configuration['redeliver_timeout']));
|
||||||
|
|
||||||
return $this->driverConnection->createQueryBuilder()
|
return $this->driverConnection->createQueryBuilder()
|
||||||
@ -273,6 +273,6 @@ class Connection
|
|||||||
|
|
||||||
public static function formatDateTime(\DateTimeInterface $dateTime)
|
public static function formatDateTime(\DateTimeInterface $dateTime)
|
||||||
{
|
{
|
||||||
return $dateTime->format('Y-m-d\TH:i:s.uZ');
|
return $dateTime->format('Y-m-d\TH:i:s');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
"psr/log": "~1.0"
|
"psr/log": "~1.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"doctrine/dbal": "~2.4",
|
"doctrine/dbal": "^2.5",
|
||||||
"psr/cache": "~1.0",
|
"psr/cache": "~1.0",
|
||||||
"symfony/console": "~3.4|~4.0",
|
"symfony/console": "~3.4|~4.0",
|
||||||
"symfony/dependency-injection": "~3.4.19|^4.1.8",
|
"symfony/dependency-injection": "~3.4.19|^4.1.8",
|
||||||
|
Reference in New Issue
Block a user