function CronQueueTest::testDelayException

Same name in other branches
  1. 10 core/modules/system/tests/src/Kernel/System/CronQueueTest.php \Drupal\Tests\system\Kernel\System\CronQueueTest::testDelayException()
  2. 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 82

Class

CronQueueTest
Tests the Cron Queue runner.

Namespace

Drupal\Tests\system\Kernel\System

Code

public function testDelayException() {
    $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');
    $property->setAccessible(TRUE);
    $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.