From 84dc48daec7badbca835f9c783ba3cc6911d58cb Mon Sep 17 00:00:00 2001 From: Pavel Dohnal Date: Tue, 19 Sep 2017 18:30:39 +0100 Subject: [PATCH] Allow passing cron timeouts [MAILPOET-1114] --- lib/Cron/CronHelper.php | 11 +++++++++-- tests/unit/Cron/CronHelperTest.php | 17 +++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/lib/Cron/CronHelper.php b/lib/Cron/CronHelper.php index 518a940eea..6751aac905 100644 --- a/lib/Cron/CronHelper.php +++ b/lib/Cron/CronHelper.php @@ -48,7 +48,7 @@ class CronHelper { return Security::generateRandomString(); } - static function pingDaemon($timeout = self::DAEMON_REQUEST_TIMEOUT) { + static function pingDaemon($timeout = null) { $url = self::getCronUrl( CronDaemonEndpoint::ACTION_PING_RESPONSE ); @@ -58,7 +58,7 @@ class CronHelper { wp_remote_retrieve_body($result); } - static function accessDaemon($token, $timeout = self::DAEMON_REQUEST_TIMEOUT) { + static function accessDaemon($token, $timeout = null) { $data = array('token' => $token); $url = self::getCronUrl( CronDaemonEndpoint::ACTION_RUN, @@ -78,6 +78,13 @@ class CronHelper { return wp_remote_get($url, $args); } + static function getCronTimeout($timeout = null) { + if($timeout) return $timeout; + $custom_timeout = WPHooks::applyFilters('mailpoet_cron_request_timeout', $timeout); + if(!$custom_timeout) return self::DAEMON_REQUEST_TIMEOUT; + return $custom_timeout; + } + static function getCronUrl($action, $data = false) { $url = Router::buildRequest( CronDaemonEndpoint::ENDPOINT, diff --git a/tests/unit/Cron/CronHelperTest.php b/tests/unit/Cron/CronHelperTest.php index f17d75734d..7d79c9a2cb 100644 --- a/tests/unit/Cron/CronHelperTest.php +++ b/tests/unit/Cron/CronHelperTest.php @@ -128,6 +128,23 @@ class CronHelperTest extends \MailPoetTest { remove_filter('mailpoet_cron_request_url', $filter); } + function testItAllowsSettingCustomCronTimeout() { + $filterFunction = function() { + return 5; + }; + add_filter('mailpoet_cron_request_timeout', $filterFunction); + expect(CronHelper::getCronTimeout())->equals(5); + remove_filter('mailpoet_cron_request_timeout', $filterFunction); + } + + function testItWorksWithDefaultCronTimeout() { + expect(CronHelper::getCronTimeout())->equals(CronHelper::DAEMON_REQUEST_TIMEOUT); + } + + function testItWorksWithCustomCronTimeout() { + expect(CronHelper::getCronTimeout(12))->equals(12); + } + function testItReturnsErrorMessageAsPingResposneWhenCronUrlCannotBeAccessed() { Mock::double('MailPoet\Cron\CronHelper', [ 'getSiteUrl' => false