Refactor Daemon to use DI
[MAILPOET-1571]
This commit is contained in:
@@ -1,20 +1,19 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace MailPoet\Cron;
|
namespace MailPoet\Cron;
|
||||||
use MailPoet\Cron\Workers\Scheduler as SchedulerWorker;
|
|
||||||
use MailPoet\Cron\Workers\SendingQueue\Migration as MigrationWorker;
|
use MailPoet\Cron\Workers\WorkersFactory;
|
||||||
use MailPoet\Cron\Workers\SendingQueue\SendingErrorHandler;
|
|
||||||
use MailPoet\Cron\Workers\SendingQueue\SendingQueue as SendingQueueWorker;
|
|
||||||
use MailPoet\Cron\Workers\Bounce as BounceWorker;
|
|
||||||
use MailPoet\Cron\Workers\KeyCheck\PremiumKeyCheck as PremiumKeyCheckWorker;
|
|
||||||
use MailPoet\Cron\Workers\KeyCheck\SendingServiceKeyCheck as SendingServiceKeyCheckWorker;
|
|
||||||
|
|
||||||
if(!defined('ABSPATH')) exit;
|
if(!defined('ABSPATH')) exit;
|
||||||
|
|
||||||
class Daemon {
|
class Daemon {
|
||||||
public $timer;
|
public $timer;
|
||||||
|
|
||||||
function __construct() {
|
/** @var WorkersFactory */
|
||||||
|
private $workers_factory;
|
||||||
|
|
||||||
|
function __construct(WorkersFactory $workers_factory) {
|
||||||
$this->timer = microtime(true);
|
$this->timer = microtime(true);
|
||||||
|
$this->workers_factory = $workers_factory;
|
||||||
}
|
}
|
||||||
|
|
||||||
function run($settings_daemon_data) {
|
function run($settings_daemon_data) {
|
||||||
@@ -35,32 +34,32 @@ class Daemon {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function executeScheduleWorker() {
|
function executeScheduleWorker() {
|
||||||
$scheduler = new SchedulerWorker($this->timer);
|
$scheduler = $this->workers_factory->createScheduleWorker($this->timer);
|
||||||
return $scheduler->process();
|
return $scheduler->process();
|
||||||
}
|
}
|
||||||
|
|
||||||
function executeQueueWorker() {
|
function executeQueueWorker() {
|
||||||
$queue = new SendingQueueWorker(new SendingErrorHandler(), $this->timer);
|
$queue = $this->workers_factory->createQueueWorker($this->timer);
|
||||||
return $queue->process();
|
return $queue->process();
|
||||||
}
|
}
|
||||||
|
|
||||||
function executeSendingServiceKeyCheckWorker() {
|
function executeSendingServiceKeyCheckWorker() {
|
||||||
$worker = new SendingServiceKeyCheckWorker($this->timer);
|
$worker = $this->workers_factory->createSendingServiceKeyCheckWorker($this->timer);
|
||||||
return $worker->process();
|
return $worker->process();
|
||||||
}
|
}
|
||||||
|
|
||||||
function executePremiumKeyCheckWorker() {
|
function executePremiumKeyCheckWorker() {
|
||||||
$worker = new PremiumKeyCheckWorker($this->timer);
|
$worker = $this->workers_factory->createPremiumKeyCheckWorker($this->timer);
|
||||||
return $worker->process();
|
return $worker->process();
|
||||||
}
|
}
|
||||||
|
|
||||||
function executeBounceWorker() {
|
function executeBounceWorker() {
|
||||||
$bounce = new BounceWorker($this->timer);
|
$bounce = $this->workers_factory->createBounceWorker($this->timer);
|
||||||
return $bounce->process();
|
return $bounce->process();
|
||||||
}
|
}
|
||||||
|
|
||||||
function executeMigrationWorker() {
|
function executeMigrationWorker() {
|
||||||
$migration = new MigrationWorker($this->timer);
|
$migration = $this->workers_factory->createMigrationWorker($this->timer);
|
||||||
return $migration->process();
|
return $migration->process();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
52
lib/Cron/Workers/WorkersFactory.php
Normal file
52
lib/Cron/Workers/WorkersFactory.php
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace MailPoet\Cron\Workers;
|
||||||
|
|
||||||
|
use MailPoet\Cron\Workers\Scheduler as SchedulerWorker;
|
||||||
|
use MailPoet\Cron\Workers\SendingQueue\SendingQueue as SendingQueueWorker;
|
||||||
|
use MailPoet\Cron\Workers\SendingQueue\Migration as MigrationWorker;
|
||||||
|
use MailPoet\Cron\Workers\Bounce as BounceWorker;
|
||||||
|
use MailPoet\Cron\Workers\KeyCheck\PremiumKeyCheck as PremiumKeyCheckWorker;
|
||||||
|
use MailPoet\Cron\Workers\KeyCheck\SendingServiceKeyCheck as SendingServiceKeyCheckWorker;
|
||||||
|
use MailPoet\Cron\Workers\SendingQueue\SendingErrorHandler;
|
||||||
|
|
||||||
|
class WorkersFactory {
|
||||||
|
|
||||||
|
/** @var SendingErrorHandler */
|
||||||
|
private $sending_error_handler;
|
||||||
|
|
||||||
|
public function __construct(SendingErrorHandler $sending_error_handler) {
|
||||||
|
$this->sending_error_handler = $sending_error_handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @return SchedulerWorker */
|
||||||
|
function createScheduleWorker($timer) {
|
||||||
|
return new SchedulerWorker($timer);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @return SendingQueueWorker */
|
||||||
|
function createQueueWorker($timer) {
|
||||||
|
return new SendingQueueWorker($this->sending_error_handler, $timer);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @return SendingServiceKeyCheckWorker */
|
||||||
|
function createSendingServiceKeyCheckWorker($timer) {
|
||||||
|
return new SendingServiceKeyCheckWorker($timer);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @return PremiumKeyCheckWorker */
|
||||||
|
function createPremiumKeyCheckWorker($timer) {
|
||||||
|
return new PremiumKeyCheckWorker($timer);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @return BounceWorker */
|
||||||
|
function createBounceWorker($timer) {
|
||||||
|
return new BounceWorker($timer);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @return MigrationWorker */
|
||||||
|
function createMigrationWorker($timer) {
|
||||||
|
return new MigrationWorker($timer);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -6,6 +6,8 @@ use Codeception\Stub\Expected;
|
|||||||
use MailPoet\Cron\CronHelper;
|
use MailPoet\Cron\CronHelper;
|
||||||
use MailPoet\Cron\Daemon;
|
use MailPoet\Cron\Daemon;
|
||||||
use MailPoet\Cron\DaemonHttpRunner;
|
use MailPoet\Cron\DaemonHttpRunner;
|
||||||
|
use MailPoet\Cron\Workers\SendingQueue\SendingErrorHandler;
|
||||||
|
use MailPoet\Cron\Workers\WorkersFactory;
|
||||||
use MailPoet\Models\Setting;
|
use MailPoet\Models\Setting;
|
||||||
|
|
||||||
class DaemonHttpRunnerTest extends \MailPoetTest {
|
class DaemonHttpRunnerTest extends \MailPoetTest {
|
||||||
@@ -21,7 +23,7 @@ class DaemonHttpRunnerTest extends \MailPoetTest {
|
|||||||
|
|
||||||
function testItDoesNotRunWithoutRequestData() {
|
function testItDoesNotRunWithoutRequestData() {
|
||||||
$daemon = Stub::construct(
|
$daemon = Stub::construct(
|
||||||
new DaemonHttpRunner(new Daemon()),
|
new DaemonHttpRunner(new Daemon(new WorkersFactory(new SendingErrorHandler()))),
|
||||||
array(),
|
array(),
|
||||||
array(
|
array(
|
||||||
'abortWithError' => function($message) {
|
'abortWithError' => function($message) {
|
||||||
@@ -34,7 +36,7 @@ class DaemonHttpRunnerTest extends \MailPoetTest {
|
|||||||
|
|
||||||
function testItDoesNotRunWhenThereIsInvalidOrMissingToken() {
|
function testItDoesNotRunWhenThereIsInvalidOrMissingToken() {
|
||||||
$daemon = Stub::construct(
|
$daemon = Stub::construct(
|
||||||
new DaemonHttpRunner(new Daemon()),
|
new DaemonHttpRunner(new Daemon(new WorkersFactory(new SendingErrorHandler()))),
|
||||||
array(),
|
array(),
|
||||||
array(
|
array(
|
||||||
'abortWithError' => function($message) {
|
'abortWithError' => function($message) {
|
||||||
@@ -52,7 +54,7 @@ class DaemonHttpRunnerTest extends \MailPoetTest {
|
|||||||
$data = array(
|
$data = array(
|
||||||
'token' => 123
|
'token' => 123
|
||||||
);
|
);
|
||||||
$daemon = Stub::make(new Daemon(), array(
|
$daemon = Stub::construct(Daemon::class, [new WorkersFactory(new SendingErrorHandler())], array(
|
||||||
'executeScheduleWorker' => function() {
|
'executeScheduleWorker' => function() {
|
||||||
throw new \Exception('Message');
|
throw new \Exception('Message');
|
||||||
},
|
},
|
||||||
@@ -72,7 +74,7 @@ class DaemonHttpRunnerTest extends \MailPoetTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function testItCanPauseExecution() {
|
function testItCanPauseExecution() {
|
||||||
$daemon = Stub::make(new Daemon(), array(
|
$daemon = Stub::construct(Daemon::class, [new WorkersFactory(new SendingErrorHandler())], array(
|
||||||
'executeScheduleWorker' => null,
|
'executeScheduleWorker' => null,
|
||||||
'executeQueueWorker' => null,
|
'executeQueueWorker' => null,
|
||||||
), $this);
|
), $this);
|
||||||
@@ -93,7 +95,7 @@ class DaemonHttpRunnerTest extends \MailPoetTest {
|
|||||||
|
|
||||||
|
|
||||||
function testItTerminatesExecutionWhenDaemonIsDeleted() {
|
function testItTerminatesExecutionWhenDaemonIsDeleted() {
|
||||||
$daemon = Stub::make(new DaemonHttpRunner(new Daemon()), array(
|
$daemon = Stub::make(DaemonHttpRunner::class, array(
|
||||||
'executeScheduleWorker' => function() {
|
'executeScheduleWorker' => function() {
|
||||||
Setting::deleteValue(CronHelper::DAEMON_SETTING);
|
Setting::deleteValue(CronHelper::DAEMON_SETTING);
|
||||||
},
|
},
|
||||||
@@ -105,12 +107,12 @@ class DaemonHttpRunnerTest extends \MailPoetTest {
|
|||||||
'token' => 123
|
'token' => 123
|
||||||
);
|
);
|
||||||
Setting::setValue(CronHelper::DAEMON_SETTING, $data);
|
Setting::setValue(CronHelper::DAEMON_SETTING, $data);
|
||||||
$daemon->__construct(new Daemon());
|
$daemon->__construct(new Daemon(new WorkersFactory(new SendingErrorHandler())));
|
||||||
$daemon->run($data);
|
$daemon->run($data);
|
||||||
}
|
}
|
||||||
|
|
||||||
function testItTerminatesExecutionWhenDaemonTokenChangesAndKeepsChangedToken() {
|
function testItTerminatesExecutionWhenDaemonTokenChangesAndKeepsChangedToken() {
|
||||||
$daemon = Stub::make(new DaemonHttpRunner(new Daemon()), array(
|
$daemon = Stub::make(DaemonHttpRunner::class, array(
|
||||||
'executeScheduleWorker' => function() {
|
'executeScheduleWorker' => function() {
|
||||||
Setting::setValue(
|
Setting::setValue(
|
||||||
CronHelper::DAEMON_SETTING,
|
CronHelper::DAEMON_SETTING,
|
||||||
@@ -125,14 +127,14 @@ class DaemonHttpRunnerTest extends \MailPoetTest {
|
|||||||
'token' => 123
|
'token' => 123
|
||||||
);
|
);
|
||||||
Setting::setValue(CronHelper::DAEMON_SETTING, $data);
|
Setting::setValue(CronHelper::DAEMON_SETTING, $data);
|
||||||
$daemon->__construct(new Daemon());
|
$daemon->__construct(new Daemon(new WorkersFactory(new SendingErrorHandler())));
|
||||||
$daemon->run($data);
|
$daemon->run($data);
|
||||||
$data_after_run = Setting::getValue(CronHelper::DAEMON_SETTING);
|
$data_after_run = Setting::getValue(CronHelper::DAEMON_SETTING);
|
||||||
expect($data_after_run['token'], 567);
|
expect($data_after_run['token'], 567);
|
||||||
}
|
}
|
||||||
|
|
||||||
function testItTerminatesExecutionWhenDaemonIsDeactivated() {
|
function testItTerminatesExecutionWhenDaemonIsDeactivated() {
|
||||||
$daemon = Stub::make(new DaemonHttpRunner(new Daemon()), [
|
$daemon = Stub::make(DaemonHttpRunner::class, [
|
||||||
'executeScheduleWorker' => null,
|
'executeScheduleWorker' => null,
|
||||||
'executeQueueWorker' => null,
|
'executeQueueWorker' => null,
|
||||||
'pauseExecution' => null,
|
'pauseExecution' => null,
|
||||||
@@ -143,12 +145,12 @@ class DaemonHttpRunnerTest extends \MailPoetTest {
|
|||||||
'status' => CronHelper::DAEMON_STATUS_INACTIVE,
|
'status' => CronHelper::DAEMON_STATUS_INACTIVE,
|
||||||
];
|
];
|
||||||
Setting::setValue(CronHelper::DAEMON_SETTING, $data);
|
Setting::setValue(CronHelper::DAEMON_SETTING, $data);
|
||||||
$daemon->__construct(new Daemon());
|
$daemon->__construct(new Daemon(new WorkersFactory(new SendingErrorHandler())));
|
||||||
$daemon->run($data);
|
$daemon->run($data);
|
||||||
}
|
}
|
||||||
|
|
||||||
function testItUpdatesDaemonTokenDuringExecution() {
|
function testItUpdatesDaemonTokenDuringExecution() {
|
||||||
$daemon_http_runner = Stub::make(new DaemonHttpRunner(new Daemon()), array(
|
$daemon_http_runner = Stub::make(DaemonHttpRunner::class, array(
|
||||||
'executeScheduleWorker' => null,
|
'executeScheduleWorker' => null,
|
||||||
'executeQueueWorker' => null,
|
'executeQueueWorker' => null,
|
||||||
'pauseExecution' => null,
|
'pauseExecution' => null,
|
||||||
@@ -158,14 +160,14 @@ class DaemonHttpRunnerTest extends \MailPoetTest {
|
|||||||
'token' => 123
|
'token' => 123
|
||||||
);
|
);
|
||||||
Setting::setValue(CronHelper::DAEMON_SETTING, $data);
|
Setting::setValue(CronHelper::DAEMON_SETTING, $data);
|
||||||
$daemon_http_runner->__construct(new Daemon());
|
$daemon_http_runner->__construct(new Daemon(new WorkersFactory(new SendingErrorHandler())));
|
||||||
$daemon_http_runner->run($data);
|
$daemon_http_runner->run($data);
|
||||||
$updated_daemon = Setting::getValue(CronHelper::DAEMON_SETTING);
|
$updated_daemon = Setting::getValue(CronHelper::DAEMON_SETTING);
|
||||||
expect($updated_daemon['token'])->equals($daemon_http_runner->token);
|
expect($updated_daemon['token'])->equals($daemon_http_runner->token);
|
||||||
}
|
}
|
||||||
|
|
||||||
function testItUpdatesTimestampsDuringExecution() {
|
function testItUpdatesTimestampsDuringExecution() {
|
||||||
$daemon = Stub::make(new Daemon(), array(
|
$daemon = Stub::construct(Daemon::class, [new WorkersFactory(new SendingErrorHandler())], array(
|
||||||
'executeScheduleWorker' => function() {
|
'executeScheduleWorker' => function() {
|
||||||
sleep(2);
|
sleep(2);
|
||||||
},
|
},
|
||||||
@@ -192,7 +194,7 @@ class DaemonHttpRunnerTest extends \MailPoetTest {
|
|||||||
function testItCanRun() {
|
function testItCanRun() {
|
||||||
ignore_user_abort(0);
|
ignore_user_abort(0);
|
||||||
expect(ignore_user_abort())->equals(0);
|
expect(ignore_user_abort())->equals(0);
|
||||||
$daemon = Stub::make(new DaemonHttpRunner(new Daemon()), array(
|
$daemon = Stub::make(DaemonHttpRunner::class, array(
|
||||||
'pauseExecution' => null,
|
'pauseExecution' => null,
|
||||||
// workers should be executed
|
// workers should be executed
|
||||||
'executeScheduleWorker' => Expected::exactly(1),
|
'executeScheduleWorker' => Expected::exactly(1),
|
||||||
@@ -204,13 +206,13 @@ class DaemonHttpRunnerTest extends \MailPoetTest {
|
|||||||
'token' => 123
|
'token' => 123
|
||||||
);
|
);
|
||||||
Setting::setValue(CronHelper::DAEMON_SETTING, $data);
|
Setting::setValue(CronHelper::DAEMON_SETTING, $data);
|
||||||
$daemon->__construct(new Daemon());
|
$daemon->__construct(new Daemon(new WorkersFactory(new SendingErrorHandler())));
|
||||||
$daemon->run($data);
|
$daemon->run($data);
|
||||||
expect(ignore_user_abort())->equals(1);
|
expect(ignore_user_abort())->equals(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
function testItRespondsToPingRequest() {
|
function testItRespondsToPingRequest() {
|
||||||
$daemon = Stub::make(new DaemonHttpRunner(new Daemon()), array(
|
$daemon = Stub::make(DaemonHttpRunner::class, array(
|
||||||
'terminateRequest' => Expected::exactly(1, function($message) {
|
'terminateRequest' => Expected::exactly(1, function($message) {
|
||||||
expect($message)->equals('pong');
|
expect($message)->equals('pong');
|
||||||
})
|
})
|
||||||
|
@@ -6,12 +6,14 @@ use Codeception\Stub\Expected;
|
|||||||
use MailPoet\Cron\CronHelper;
|
use MailPoet\Cron\CronHelper;
|
||||||
use MailPoet\Cron\DaemonHttpRunner;
|
use MailPoet\Cron\DaemonHttpRunner;
|
||||||
use MailPoet\Cron\Daemon;
|
use MailPoet\Cron\Daemon;
|
||||||
|
use MailPoet\Cron\Workers\SendingQueue\SendingErrorHandler;
|
||||||
|
use MailPoet\Cron\Workers\WorkersFactory;
|
||||||
use MailPoet\Models\Setting;
|
use MailPoet\Models\Setting;
|
||||||
|
|
||||||
class DaemonTest extends \MailPoetTest {
|
class DaemonTest extends \MailPoetTest {
|
||||||
|
|
||||||
function testItCanExecuteWorkers() {
|
function testItCanExecuteWorkers() {
|
||||||
$daemon = Stub::make(new Daemon(), array(
|
$daemon = Stub::construct(Daemon::class, [new WorkersFactory(new SendingErrorHandler())], array(
|
||||||
'executeScheduleWorker' => Expected::exactly(1),
|
'executeScheduleWorker' => Expected::exactly(1),
|
||||||
'executeQueueWorker' => Expected::exactly(1),
|
'executeQueueWorker' => Expected::exactly(1),
|
||||||
'pauseExecution' => null,
|
'pauseExecution' => null,
|
||||||
@@ -21,12 +23,11 @@ class DaemonTest extends \MailPoetTest {
|
|||||||
'token' => 123
|
'token' => 123
|
||||||
);
|
);
|
||||||
Setting::setValue(CronHelper::DAEMON_SETTING, $data);
|
Setting::setValue(CronHelper::DAEMON_SETTING, $data);
|
||||||
$daemon->__construct($data);
|
|
||||||
$daemon->run([]);
|
$daemon->run([]);
|
||||||
}
|
}
|
||||||
|
|
||||||
function testItCanRun() {
|
function testItCanRun() {
|
||||||
$daemon = Stub::make(new Daemon(), array(
|
$daemon = Stub::construct(Daemon::class, [new WorkersFactory(new SendingErrorHandler())], array(
|
||||||
'pauseExecution' => null,
|
'pauseExecution' => null,
|
||||||
// workers should be executed
|
// workers should be executed
|
||||||
'executeScheduleWorker' => Expected::exactly(1),
|
'executeScheduleWorker' => Expected::exactly(1),
|
||||||
@@ -38,7 +39,6 @@ class DaemonTest extends \MailPoetTest {
|
|||||||
'token' => 123
|
'token' => 123
|
||||||
);
|
);
|
||||||
Setting::setValue(CronHelper::DAEMON_SETTING, $data);
|
Setting::setValue(CronHelper::DAEMON_SETTING, $data);
|
||||||
$daemon->__construct();
|
|
||||||
$daemon->run($data);
|
$daemon->run($data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user