Files
piratepoet/tests/unit/Cron/SupervisorTest.php
Rostislav Wolny 3184b43b3b Add status flag for cron deactivation
Cron daemon, which was triggered by WordPress method, was deactivated
by deletion from DB and it caused the lost of all log data about it.
This commit changes the implementation so that the daemon is deactivated by changing status flag.

[MAILPOET-1457]
2018-07-25 13:23:21 +02:00

68 lines
2.5 KiB
PHP

<?php
namespace MailPoet\Test\Cron;
use MailPoet\Cron\CronHelper;
use MailPoet\Cron\Supervisor;
use MailPoet\Models\Setting;
class SupervisorTest extends \MailPoetTest {
function _before() {
// cron trigger is by default set to 'WordPress'; when it runs and does not
// detect any queues to process, it deletes the daemon setting, so Supervisor and
// CronHelper's getDaemon() methods do not work. for that matter, we need to set
// the trigger setting to anything but 'WordPress'.
Setting::setValue('cron_trigger', array(
'method' => 'none'
));
}
function testItCanConstruct() {
if(getenv('WP_TEST_ENABLE_NETWORK_TESTS') !== 'true') return;
$supervisor = new Supervisor();
expect($supervisor->token)->notEmpty();
expect($supervisor->daemon)->notEmpty();
}
function testItCreatesDaemonWhenOneDoesNotExist() {
if(getenv('WP_TEST_ENABLE_NETWORK_TESTS') !== 'true') return;
expect(Setting::getValue(CronHelper::DAEMON_SETTING))->null();
$supervisor = new Supervisor();
expect($supervisor->getDaemon())->notEmpty();
}
function testItReturnsDaemonWhenOneExists() {
if(getenv('WP_TEST_ENABLE_NETWORK_TESTS') !== 'true') return;
$supervisor = new Supervisor();
expect($supervisor->getDaemon())->equals($supervisor->daemon);
}
function testItDoesNothingWhenDaemonExecutionDurationIsBelowLimit() {
if(getenv('WP_TEST_ENABLE_NETWORK_TESTS') !== 'true') return;
$supervisor = new Supervisor();
expect($supervisor->checkDaemon())
->equals($supervisor->daemon);
}
function testRestartsDaemonWhenExecutionDurationIsAboveLimit() {
if(getenv('WP_TEST_ENABLE_NETWORK_TESTS') !== 'true') return;
$supervisor = new Supervisor();
$supervisor->daemon['updated_at'] = time() - CronHelper::DAEMON_EXECUTION_TIMEOUT;
$daemon = $supervisor->checkDaemon();
expect(is_int($daemon['updated_at']))->true();
expect($daemon['updated_at'])->notEquals($supervisor->daemon['updated_at']);
expect($daemon['status'])->equals(CronHelper::DAEMON_STATUS_ACTIVE);
}
function testRestartsDaemonWhenItIsInactive() {
if(getenv('WP_TEST_ENABLE_NETWORK_TESTS') !== 'true') return;
$supervisor = new Supervisor();
$supervisor->daemon['updated_at'] = time();
$supervisor->daemon['status'] = CronHelper::DAEMON_STATUS_INACTIVE;
$daemon = $supervisor->checkDaemon();
expect($daemon['status'])->equals(CronHelper::DAEMON_STATUS_ACTIVE);
}
function _after() {
\ORM::raw_execute('TRUNCATE ' . Setting::$_table);
}
}