Validates ping response when displaying cron URL status

This commit is contained in:
Vlad
2017-12-18 20:28:09 -05:00
parent f616ef4d6c
commit 0e2a67c203
4 changed files with 15 additions and 7 deletions

View File

@ -438,7 +438,7 @@ class Menu {
$system_status_data = array(
'cron' => array(
'url' => CronHelper::getCronUrl(CronDaemon::ACTION_PING),
'isReachable' => CronHelper::pingDaemon()
'isReachable' => CronHelper::pingDaemon(true)
),
'mss' => array(
'enabled' => (Bridge::isMPSendingServiceEnabled()) ?

View File

@ -48,14 +48,16 @@ class CronHelper {
return Security::generateRandomString();
}
static function pingDaemon() {
static function pingDaemon($validate_response = false) {
$url = self::getCronUrl(
CronDaemonEndpoint::ACTION_PING_RESPONSE
);
$result = self::queryCronUrl($url);
return (is_wp_error($result)) ?
$result->get_error_message() :
wp_remote_retrieve_body($result);
if (is_wp_error($result)) return $result->get_error_message();
$response = wp_remote_retrieve_body($result);
return (!$validate_response) ?
$response :
$response === Daemon::PING_SUCCESS_RESPONSE;
}
static function accessDaemon($token) {

View File

@ -14,6 +14,8 @@ class Daemon {
public $request_data;
public $timer;
const PING_SUCCESS_RESPONSE = 'pong';
function __construct($request_data = false) {
$this->request_data = $request_data;
$this->daemon = CronHelper::getDaemon();
@ -22,7 +24,7 @@ class Daemon {
}
function ping() {
$this->terminateRequest('pong');
$this->terminateRequest(self::PING_SUCCESS_RESPONSE);
}
function run() {

View File

@ -4,6 +4,7 @@ namespace MailPoet\Test\Cron;
use AspectMock\Test as Mock;
use MailPoet\Cron\CronHelper;
use MailPoet\Cron\Daemon;
use MailPoet\Models\Setting;
class CronHelperTest extends \MailPoetTest {
@ -162,7 +163,10 @@ class CronHelperTest extends \MailPoetTest {
function testItPingsDaemon() {
if(getenv('WP_TEST_ENABLE_NETWORK_TESTS') !== 'true') return;
expect(CronHelper::pingDaemon())->equals('pong');
// raw response is returned
expect(CronHelper::pingDaemon())->equals(Daemon::PING_SUCCESS_RESPONSE);
// response is validated
expect(CronHelper::pingDaemon(true))->true();
}
function _after() {