function CronQueueTest::testDelayException
Same name in other branches
- 9 core/modules/system/tests/src/Kernel/System/CronQueueTest.php \Drupal\Tests\system\Kernel\System\CronQueueTest::testDelayException()
- 11.x core/modules/system/tests/src/Kernel/System/CronQueueTest.php \Drupal\Tests\system\Kernel\System\CronQueueTest::testDelayException()
Tests that DelayedRequeueException behaves as expected when running cron.
File
-
core/
modules/ system/ tests/ src/ Kernel/ System/ CronQueueTest.php, line 99
Class
- CronQueueTest
- Tests the Cron Queue runner.
Namespace
Drupal\Tests\system\Kernel\SystemCode
public function testDelayException() : void {
$database = $this->container
->get('queue')
->get('cron_queue_test_database_delay_exception');
$memory = $this->container
->get('queue')
->get('cron_queue_test_memory_delay_exception');
// Ensure that the queues are of the correct type for this test.
$this->assertInstanceOf('Drupal\\Core\\Queue\\DelayableQueueInterface', $database);
$this->assertNotInstanceOf('Drupal\\Core\\Queue\\DelayableQueueInterface', $memory);
// Get the queue worker plugin manager.
$manager = $this->container
->get('plugin.manager.queue_worker');
$definitions = $manager->getDefinitions();
$this->assertNotEmpty($database_lease_time = $definitions['cron_queue_test_database_delay_exception']['cron']['time']);
$this->assertNotEmpty($memory_lease_time = $definitions['cron_queue_test_memory_delay_exception']['cron']['time']);
// Create the necessary test data and run cron.
$database->createItem('test');
$memory->createItem('test');
$this->cron
->run();
// Fetch the expiry time for the database queue.
$query = $this->connection
->select('queue');
$query->condition('name', 'cron_queue_test_database_delay_exception');
$query->addField('queue', 'expire');
$query->range(0, 1);
$expire = $query->execute()
->fetchField();
// Assert that the delay interval is greater than the lease interval. This
// allows us to assume that (if updated) the new expiry time will be greater
// than the initial expiry time. We can then also assume that the new expiry
// time offset will be identical to the delay interval.
$this->assertGreaterThan($database_lease_time, CronQueueTestDatabaseDelayException::DELAY_INTERVAL);
$this->assertGreaterThan($this->currentTime + $database_lease_time, $expire);
$this->assertEquals(CronQueueTestDatabaseDelayException::DELAY_INTERVAL, $expire - $this->currentTime);
// Ensure that the memory queue expiry time is unchanged after the
// DelayedRequeueException has been thrown.
$property = (new \ReflectionClass($memory))->getProperty('queue');
$memory_queue_internal = $property->getValue($memory);
$this->assertEquals($this->currentTime + $memory_lease_time, reset($memory_queue_internal)->expire);
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.