Fix overriding cron token
This commit is contained in:
committed by
Rostislav Wolny
parent
38d078df5e
commit
a3b79a6907
@ -40,6 +40,22 @@ class CronHelper {
|
||||
return Setting::getValue(self::DAEMON_SETTING);
|
||||
}
|
||||
|
||||
static function saveDaemonLastError($error) {
|
||||
$daemon = self::getDaemon();
|
||||
if($daemon) {
|
||||
$daemon['last_error'] = $error;
|
||||
self::saveDaemon($daemon);
|
||||
}
|
||||
}
|
||||
|
||||
static function saveDaemonRunCompleted($run_completed_at) {
|
||||
$daemon = self::getDaemon();
|
||||
if($daemon) {
|
||||
$daemon['run_completed_at'] = $run_completed_at;
|
||||
self::saveDaemon($daemon);
|
||||
}
|
||||
}
|
||||
|
||||
static function saveDaemon($daemon) {
|
||||
$daemon['updated_at'] = time();
|
||||
return Setting::setValue(
|
||||
@ -165,4 +181,4 @@ class CronHelper {
|
||||
throw new \Exception(__('Maximum execution time has been reached.', 'mailpoet'));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -61,12 +61,10 @@ class Daemon {
|
||||
$this->executePremiumKeyCheckWorker();
|
||||
$this->executeBounceWorker();
|
||||
} catch(\Exception $e) {
|
||||
$daemon['last_error'] = $e->getMessage();
|
||||
CronHelper::saveDaemon($daemon);
|
||||
CronHelper::saveDaemonLastError($e->getMessage());
|
||||
}
|
||||
// Log successful execution
|
||||
$daemon['run_completed_at'] = time();
|
||||
CronHelper::saveDaemon($daemon);
|
||||
CronHelper::saveDaemonRunCompleted(time());
|
||||
// if workers took less time to execute than the daemon execution limit,
|
||||
// pause daemon execution to ensure that daemon runs only once every X seconds
|
||||
$elapsed_time = microtime(true) - $this->timer;
|
||||
@ -137,4 +135,4 @@ class Daemon {
|
||||
$daemon['token'] !== $this->token ||
|
||||
(isset($daemon['status']) && $daemon['status'] !== CronHelper::DAEMON_STATUS_ACTIVE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -62,15 +62,7 @@ class CronHelperTest extends \MailPoetTest {
|
||||
}
|
||||
|
||||
function testItLoadsDaemon() {
|
||||
$daemon = array(
|
||||
'token' => 'some_token',
|
||||
'status' => CronHelper::DAEMON_STATUS_ACTIVE,
|
||||
'updated_at' => '12345678',
|
||||
'run_accessed_at' => null,
|
||||
'run_started_at' => null,
|
||||
'run_completed_at' => null,
|
||||
'last_error' => null,
|
||||
);
|
||||
$daemon = $this->getDeamonTestData();
|
||||
Setting::setValue(
|
||||
CronHelper::DAEMON_SETTING,
|
||||
$daemon
|
||||
@ -80,15 +72,7 @@ class CronHelperTest extends \MailPoetTest {
|
||||
|
||||
function testItSavesDaemon() {
|
||||
// when saving daemon, 'updated_at' value should change
|
||||
$daemon = array(
|
||||
'token' => 'some_token',
|
||||
'status' => CronHelper::DAEMON_STATUS_ACTIVE,
|
||||
'updated_at' => '12345678',
|
||||
'run_accessed_at' => null,
|
||||
'run_started_at' => null,
|
||||
'run_completed_at' => null,
|
||||
'last_error' => null,
|
||||
);
|
||||
$daemon = $this->getDeamonTestData();
|
||||
Setting::setValue(
|
||||
CronHelper::DAEMON_SETTING,
|
||||
$daemon
|
||||
@ -100,15 +84,7 @@ class CronHelperTest extends \MailPoetTest {
|
||||
}
|
||||
|
||||
function testItUpdatesDaemonAccessedAt() {
|
||||
$daemon = [
|
||||
'token' => 'some_token',
|
||||
'status' => CronHelper::DAEMON_STATUS_ACTIVE,
|
||||
'updated_at' => 12345678,
|
||||
'run_accessed_at' => null,
|
||||
'run_started_at' => null,
|
||||
'run_completed_at' => null,
|
||||
'last_error' => null,
|
||||
];
|
||||
$daemon = $this->getDeamonTestData();
|
||||
Setting::setValue(
|
||||
CronHelper::DAEMON_SETTING,
|
||||
$daemon
|
||||
@ -134,15 +110,9 @@ class CronHelperTest extends \MailPoetTest {
|
||||
$time = time();
|
||||
$run_start_values = [null, $time - 20];
|
||||
foreach($run_start_values as $run_start) {
|
||||
$daemon = [
|
||||
'token' => 'some_token',
|
||||
'status' => CronHelper::DAEMON_STATUS_ACTIVE,
|
||||
'updated_at' => 12345678,
|
||||
'run_accessed_at' => $time - 10,
|
||||
'run_started_at' => $run_start,
|
||||
'run_completed_at' => null,
|
||||
'last_error' => null,
|
||||
];
|
||||
$daemon = $this->getDeamonTestData();
|
||||
$daemon['run_accessed_at'] = $time - 10;
|
||||
$daemon['run_started_at'] = $run_start;
|
||||
Setting::setValue(
|
||||
CronHelper::DAEMON_SETTING,
|
||||
$daemon
|
||||
@ -153,15 +123,9 @@ class CronHelperTest extends \MailPoetTest {
|
||||
|
||||
function testItDetectsAccessibleDaemon() {
|
||||
$time = time();
|
||||
$daemon = [
|
||||
'token' => 'some_token',
|
||||
'status' => CronHelper::DAEMON_STATUS_ACTIVE,
|
||||
'updated_at' => 12345678,
|
||||
'run_accessed_at' => $time - 5,
|
||||
'run_started_at' => $time - 4,
|
||||
'run_completed_at' => null,
|
||||
'last_error' => null,
|
||||
];
|
||||
$daemon = $this->getDeamonTestData();
|
||||
$daemon['run_accessed_at'] = $time - 5;
|
||||
$daemon['run_started_at'] = $time - 4;
|
||||
Setting::setValue(
|
||||
CronHelper::DAEMON_SETTING,
|
||||
$daemon
|
||||
@ -187,15 +151,9 @@ class CronHelperTest extends \MailPoetTest {
|
||||
null,
|
||||
];
|
||||
foreach($test_inputs as $test_input) {
|
||||
$daemon = [
|
||||
'token' => 'some_token',
|
||||
'status' => CronHelper::DAEMON_STATUS_ACTIVE,
|
||||
'updated_at' => 12345678,
|
||||
'run_accessed_at' => $test_input['run_access'],
|
||||
'run_started_at' => $test_input['run_start'],
|
||||
'run_completed_at' => null,
|
||||
'last_error' => null,
|
||||
];
|
||||
$daemon = $this->getDeamonTestData();
|
||||
$daemon['run_accessed_at'] = $test_input['run_access'];
|
||||
$daemon['run_started_at'] = $test_input['run_start'];
|
||||
Setting::setValue(
|
||||
CronHelper::DAEMON_SETTING,
|
||||
$daemon
|
||||
@ -205,15 +163,7 @@ class CronHelperTest extends \MailPoetTest {
|
||||
}
|
||||
|
||||
function testItDeactivatesDaemon() {
|
||||
$daemon = [
|
||||
'token' => 'some_token',
|
||||
'status' => CronHelper::DAEMON_STATUS_ACTIVE,
|
||||
'updated_at' => '12345678',
|
||||
'run_accessed_at' => null,
|
||||
'run_started_at' => null,
|
||||
'run_completed_at' => null,
|
||||
'last_error' => null,
|
||||
];
|
||||
$daemon = $this->getDeamonTestData();
|
||||
Setting::setValue(
|
||||
CronHelper::DAEMON_SETTING,
|
||||
$daemon
|
||||
@ -224,6 +174,31 @@ class CronHelperTest extends \MailPoetTest {
|
||||
expect($daemon['status'])->equals(CronHelper::DAEMON_STATUS_INACTIVE);
|
||||
}
|
||||
|
||||
function testItSavesLastError() {
|
||||
$daemon = $this->getDeamonTestData();
|
||||
Setting::setValue(
|
||||
CronHelper::DAEMON_SETTING,
|
||||
$daemon
|
||||
);
|
||||
|
||||
CronHelper::saveDaemonLastError('error');
|
||||
$daemon = CronHelper::getDaemon();
|
||||
expect($daemon['last_error'])->equals('error');
|
||||
}
|
||||
|
||||
|
||||
function testItSavesRunCompletedAt() {
|
||||
$daemon = $this->getDeamonTestData();
|
||||
Setting::setValue(
|
||||
CronHelper::DAEMON_SETTING,
|
||||
$daemon
|
||||
);
|
||||
|
||||
CronHelper::saveDaemonRunCompleted(123);
|
||||
$daemon = CronHelper::getDaemon();
|
||||
expect($daemon['run_completed_at'])->equals(123);
|
||||
}
|
||||
|
||||
function testItCreatesRandomToken() {
|
||||
// random token is a string of 5 characters
|
||||
$token1 = CronHelper::createToken();
|
||||
@ -329,4 +304,16 @@ class CronHelperTest extends \MailPoetTest {
|
||||
Mock::clean();
|
||||
\ORM::raw_execute('TRUNCATE ' . Setting::$_table);
|
||||
}
|
||||
}
|
||||
|
||||
private function getDeamonTestData() {
|
||||
return [
|
||||
'token' => 'some_token',
|
||||
'status' => CronHelper::DAEMON_STATUS_ACTIVE,
|
||||
'updated_at' => 12345678,
|
||||
'run_accessed_at' => null,
|
||||
'run_started_at' => null,
|
||||
'run_completed_at' => null,
|
||||
'last_error' => null,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
@ -137,7 +137,7 @@ class DaemonTest extends \MailPoetTest {
|
||||
$daemon->run();
|
||||
}
|
||||
|
||||
function testItTerminatesExecutionWhenDaemonTokenChanges() {
|
||||
function testItTerminatesExecutionWhenDaemonTokenChangesAndKeepsChangedToken() {
|
||||
$daemon = Stub::make(new Daemon(true), array(
|
||||
'executeScheduleWorker' => function() {
|
||||
Setting::setValue(
|
||||
@ -155,6 +155,8 @@ class DaemonTest extends \MailPoetTest {
|
||||
Setting::setValue(CronHelper::DAEMON_SETTING, $data);
|
||||
$daemon->__construct($data);
|
||||
$daemon->run();
|
||||
$data_after_run = Setting::getValue(CronHelper::DAEMON_SETTING);
|
||||
expect($data_after_run['token'], 567);
|
||||
}
|
||||
|
||||
function testItTerminatesExecutionWhenDaemonIsDeactivated() {
|
||||
@ -245,4 +247,4 @@ class DaemonTest extends \MailPoetTest {
|
||||
function _after() {
|
||||
\ORM::raw_execute('TRUNCATE ' . Setting::$_table);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user