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);
|
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) {
|
static function saveDaemon($daemon) {
|
||||||
$daemon['updated_at'] = time();
|
$daemon['updated_at'] = time();
|
||||||
return Setting::setValue(
|
return Setting::setValue(
|
||||||
|
@ -61,12 +61,10 @@ class Daemon {
|
|||||||
$this->executePremiumKeyCheckWorker();
|
$this->executePremiumKeyCheckWorker();
|
||||||
$this->executeBounceWorker();
|
$this->executeBounceWorker();
|
||||||
} catch(\Exception $e) {
|
} catch(\Exception $e) {
|
||||||
$daemon['last_error'] = $e->getMessage();
|
CronHelper::saveDaemonLastError($e->getMessage());
|
||||||
CronHelper::saveDaemon($daemon);
|
|
||||||
}
|
}
|
||||||
// Log successful execution
|
// Log successful execution
|
||||||
$daemon['run_completed_at'] = time();
|
CronHelper::saveDaemonRunCompleted(time());
|
||||||
CronHelper::saveDaemon($daemon);
|
|
||||||
// if workers took less time to execute than the daemon execution limit,
|
// 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
|
// pause daemon execution to ensure that daemon runs only once every X seconds
|
||||||
$elapsed_time = microtime(true) - $this->timer;
|
$elapsed_time = microtime(true) - $this->timer;
|
||||||
|
@ -62,15 +62,7 @@ class CronHelperTest extends \MailPoetTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function testItLoadsDaemon() {
|
function testItLoadsDaemon() {
|
||||||
$daemon = array(
|
$daemon = $this->getDeamonTestData();
|
||||||
'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,
|
|
||||||
);
|
|
||||||
Setting::setValue(
|
Setting::setValue(
|
||||||
CronHelper::DAEMON_SETTING,
|
CronHelper::DAEMON_SETTING,
|
||||||
$daemon
|
$daemon
|
||||||
@ -80,15 +72,7 @@ class CronHelperTest extends \MailPoetTest {
|
|||||||
|
|
||||||
function testItSavesDaemon() {
|
function testItSavesDaemon() {
|
||||||
// when saving daemon, 'updated_at' value should change
|
// when saving daemon, 'updated_at' value should change
|
||||||
$daemon = array(
|
$daemon = $this->getDeamonTestData();
|
||||||
'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,
|
|
||||||
);
|
|
||||||
Setting::setValue(
|
Setting::setValue(
|
||||||
CronHelper::DAEMON_SETTING,
|
CronHelper::DAEMON_SETTING,
|
||||||
$daemon
|
$daemon
|
||||||
@ -100,15 +84,7 @@ class CronHelperTest extends \MailPoetTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function testItUpdatesDaemonAccessedAt() {
|
function testItUpdatesDaemonAccessedAt() {
|
||||||
$daemon = [
|
$daemon = $this->getDeamonTestData();
|
||||||
'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,
|
|
||||||
];
|
|
||||||
Setting::setValue(
|
Setting::setValue(
|
||||||
CronHelper::DAEMON_SETTING,
|
CronHelper::DAEMON_SETTING,
|
||||||
$daemon
|
$daemon
|
||||||
@ -134,15 +110,9 @@ class CronHelperTest extends \MailPoetTest {
|
|||||||
$time = time();
|
$time = time();
|
||||||
$run_start_values = [null, $time - 20];
|
$run_start_values = [null, $time - 20];
|
||||||
foreach($run_start_values as $run_start) {
|
foreach($run_start_values as $run_start) {
|
||||||
$daemon = [
|
$daemon = $this->getDeamonTestData();
|
||||||
'token' => 'some_token',
|
$daemon['run_accessed_at'] = $time - 10;
|
||||||
'status' => CronHelper::DAEMON_STATUS_ACTIVE,
|
$daemon['run_started_at'] = $run_start;
|
||||||
'updated_at' => 12345678,
|
|
||||||
'run_accessed_at' => $time - 10,
|
|
||||||
'run_started_at' => $run_start,
|
|
||||||
'run_completed_at' => null,
|
|
||||||
'last_error' => null,
|
|
||||||
];
|
|
||||||
Setting::setValue(
|
Setting::setValue(
|
||||||
CronHelper::DAEMON_SETTING,
|
CronHelper::DAEMON_SETTING,
|
||||||
$daemon
|
$daemon
|
||||||
@ -153,15 +123,9 @@ class CronHelperTest extends \MailPoetTest {
|
|||||||
|
|
||||||
function testItDetectsAccessibleDaemon() {
|
function testItDetectsAccessibleDaemon() {
|
||||||
$time = time();
|
$time = time();
|
||||||
$daemon = [
|
$daemon = $this->getDeamonTestData();
|
||||||
'token' => 'some_token',
|
$daemon['run_accessed_at'] = $time - 5;
|
||||||
'status' => CronHelper::DAEMON_STATUS_ACTIVE,
|
$daemon['run_started_at'] = $time - 4;
|
||||||
'updated_at' => 12345678,
|
|
||||||
'run_accessed_at' => $time - 5,
|
|
||||||
'run_started_at' => $time - 4,
|
|
||||||
'run_completed_at' => null,
|
|
||||||
'last_error' => null,
|
|
||||||
];
|
|
||||||
Setting::setValue(
|
Setting::setValue(
|
||||||
CronHelper::DAEMON_SETTING,
|
CronHelper::DAEMON_SETTING,
|
||||||
$daemon
|
$daemon
|
||||||
@ -187,15 +151,9 @@ class CronHelperTest extends \MailPoetTest {
|
|||||||
null,
|
null,
|
||||||
];
|
];
|
||||||
foreach($test_inputs as $test_input) {
|
foreach($test_inputs as $test_input) {
|
||||||
$daemon = [
|
$daemon = $this->getDeamonTestData();
|
||||||
'token' => 'some_token',
|
$daemon['run_accessed_at'] = $test_input['run_access'];
|
||||||
'status' => CronHelper::DAEMON_STATUS_ACTIVE,
|
$daemon['run_started_at'] = $test_input['run_start'];
|
||||||
'updated_at' => 12345678,
|
|
||||||
'run_accessed_at' => $test_input['run_access'],
|
|
||||||
'run_started_at' => $test_input['run_start'],
|
|
||||||
'run_completed_at' => null,
|
|
||||||
'last_error' => null,
|
|
||||||
];
|
|
||||||
Setting::setValue(
|
Setting::setValue(
|
||||||
CronHelper::DAEMON_SETTING,
|
CronHelper::DAEMON_SETTING,
|
||||||
$daemon
|
$daemon
|
||||||
@ -205,15 +163,7 @@ class CronHelperTest extends \MailPoetTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function testItDeactivatesDaemon() {
|
function testItDeactivatesDaemon() {
|
||||||
$daemon = [
|
$daemon = $this->getDeamonTestData();
|
||||||
'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,
|
|
||||||
];
|
|
||||||
Setting::setValue(
|
Setting::setValue(
|
||||||
CronHelper::DAEMON_SETTING,
|
CronHelper::DAEMON_SETTING,
|
||||||
$daemon
|
$daemon
|
||||||
@ -224,6 +174,31 @@ class CronHelperTest extends \MailPoetTest {
|
|||||||
expect($daemon['status'])->equals(CronHelper::DAEMON_STATUS_INACTIVE);
|
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() {
|
function testItCreatesRandomToken() {
|
||||||
// random token is a string of 5 characters
|
// random token is a string of 5 characters
|
||||||
$token1 = CronHelper::createToken();
|
$token1 = CronHelper::createToken();
|
||||||
@ -329,4 +304,16 @@ class CronHelperTest extends \MailPoetTest {
|
|||||||
Mock::clean();
|
Mock::clean();
|
||||||
\ORM::raw_execute('TRUNCATE ' . Setting::$_table);
|
\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();
|
$daemon->run();
|
||||||
}
|
}
|
||||||
|
|
||||||
function testItTerminatesExecutionWhenDaemonTokenChanges() {
|
function testItTerminatesExecutionWhenDaemonTokenChangesAndKeepsChangedToken() {
|
||||||
$daemon = Stub::make(new Daemon(true), array(
|
$daemon = Stub::make(new Daemon(true), array(
|
||||||
'executeScheduleWorker' => function() {
|
'executeScheduleWorker' => function() {
|
||||||
Setting::setValue(
|
Setting::setValue(
|
||||||
@ -155,6 +155,8 @@ class DaemonTest extends \MailPoetTest {
|
|||||||
Setting::setValue(CronHelper::DAEMON_SETTING, $data);
|
Setting::setValue(CronHelper::DAEMON_SETTING, $data);
|
||||||
$daemon->__construct($data);
|
$daemon->__construct($data);
|
||||||
$daemon->run();
|
$daemon->run();
|
||||||
|
$data_after_run = Setting::getValue(CronHelper::DAEMON_SETTING);
|
||||||
|
expect($data_after_run['token'], 567);
|
||||||
}
|
}
|
||||||
|
|
||||||
function testItTerminatesExecutionWhenDaemonIsDeactivated() {
|
function testItTerminatesExecutionWhenDaemonIsDeactivated() {
|
||||||
|
Reference in New Issue
Block a user