CronQueueTest.php in Drupal 8
File
core/modules/system/tests/src/Kernel/System/CronQueueTest.php
View source
<?php
namespace Drupal\Tests\system\Kernel\System;
use Drupal\Core\Database\Database;
use Drupal\KernelTests\KernelTestBase;
class CronQueueTest extends KernelTestBase {
public static $modules = [
'system',
'cron_queue_test',
];
protected $connection;
protected $cron;
protected function setUp() {
parent::setUp();
$this
->installSchema('system', [
'key_value_expire',
]);
$this->connection = Database::getConnection();
$this->cron = \Drupal::service('cron');
}
public function testExceptions() {
$queue = $this->container
->get('queue')
->get('cron_queue_test_exception');
$queue
->createItem([
$this
->randomMachineName() => $this
->randomMachineName(),
]);
$this->cron
->run();
$this
->assertEqual(\Drupal::state()
->get('cron_queue_test_exception'), 1);
$this
->assertEqual($queue
->numberOfItems(), 1, 'Failing item still in the queue after throwing an exception.');
$this->connection
->update('queue')
->condition('name', 'cron_queue_test_exception')
->fields([
'expire' => REQUEST_TIME - 1,
])
->execute();
$this->cron
->run();
$this
->assertEqual(\Drupal::state()
->get('cron_queue_test_exception'), 2);
$this
->assertEqual($queue
->numberOfItems(), 0, 'Item was processed and removed from the queue.');
$queue = $this->container
->get('queue')
->get('cron_queue_test_broken_queue');
$queue
->createItem('process');
$queue
->createItem('crash');
$queue
->createItem('ignored');
$this->cron
->run();
$this
->assertEqual($queue
->numberOfItems(), 2, 'Failing queue stopped processing at the failing item.');
$item = $queue
->claimItem();
$this
->assertEqual($item->data, 'crash', 'Failing item remains in the queue.');
$item = $queue
->claimItem();
$this
->assertEqual($item->data, 'ignored', 'Item beyond the failing item remains in the queue.');
$queue = $this->container
->get('queue')
->get('cron_queue_test_requeue_exception');
$queue
->createItem([]);
$this->cron
->run();
$this
->assertEquals(2, \Drupal::state()
->get('cron_queue_test_requeue_exception'));
$this
->assertEquals(0, $queue
->numberOfItems());
}
}