diff --git a/lib/tests/pluginlib_test.php b/lib/tests/pluginlib_test.php index eb29268a55b..2ec4d0dd2f8 100644 --- a/lib/tests/pluginlib_test.php +++ b/lib/tests/pluginlib_test.php @@ -103,7 +103,7 @@ class available_update_checker_test extends advanced_testcase { */ public function test_cron_has_fresh_fetch() { $provider = testable_available_update_checker::instance(); - $provider->fakerecentfetch = time() - 59 * MINSECS; // fetched an hour ago + $provider->fakerecentfetch = time() - 23 * HOURSECS; // fetched 23 hours ago $provider->fakecurrenttimestamp = -1; $provider->cron(); $this->assertTrue(true); // we should get here with no exception thrown @@ -127,23 +127,52 @@ class available_update_checker_test extends advanced_testcase { */ public function test_cron_offset_execution_not_yet() { $provider = testable_available_update_checker::instance(); - $provider->fakerecentfetch = time() - 24 * HOURSECS; - $provider->fakecurrenttimestamp = mktime(1, 40, 02); // 01:40:02 AM + $provider->fakecurrenttimestamp = mktime(1, 40, 02); // 01:40:02 AM today + $provider->fakerecentfetch = $provider->fakecurrenttimestamp - 24 * HOURSECS; $provider->cron(); $this->assertTrue(true); // we should get here with no exception thrown } /** - * The first cron after 01:42 AM today should fetch the data + * The first cron after 01:42 AM today should fetch the data and then + * it is supposed to wait next 24 hours. * * @see testable_available_update_checker::cron_execution_offset() */ public function test_cron_offset_execution() { $provider = testable_available_update_checker::instance(); - $provider->fakerecentfetch = time() - 24 * HOURSECS; - $provider->fakecurrenttimestamp = mktime(1, 45, 02); // 01:45:02 AM - $this->setExpectedException('testable_available_update_checker_cron_executed'); - $provider->cron(); + + // the cron at 01:45 should fetch the data + $provider->fakecurrenttimestamp = mktime(1, 45, 02); // 01:45:02 AM today + $provider->fakerecentfetch = $provider->fakecurrenttimestamp - 24 * HOURSECS - 1; + $executed = false; + try { + $provider->cron(); + } catch (testable_available_update_checker_cron_executed $e) { + $executed = true; + } + $this->assertTrue($executed, 'Cron should be executed at 01:45:02 but it was not.'); + + // another cron at 06:45 should still consider data as fresh enough + $provider->fakerecentfetch = $provider->fakecurrenttimestamp; + $provider->fakecurrenttimestamp = mktime(6, 45, 03); // 06:45:03 AM + $executed = false; + try { + $provider->cron(); + } catch (testable_available_update_checker_cron_executed $e) { + $executed = true; + } + $this->assertFalse($executed, 'Cron should not be executed at 06:45:03 but it was.'); + + // the next scheduled execution should happen the next day + $provider->fakecurrenttimestamp = $provider->fakerecentfetch + 24 * HOURSECS + 1; + $executed = false; + try { + $provider->cron(); + } catch (testable_available_update_checker_cron_executed $e) { + $executed = true; + } + $this->assertTrue($executed, 'Cron should be executed the next night but it was not.'); } public function test_compare_responses_both_empty() { @@ -503,7 +532,7 @@ class testable_available_update_checker extends available_update_checker { } protected function cron_execute() { - throw new testable_available_update_checker_cron_executed('Cron executed but it should not!'); + throw new testable_available_update_checker_cron_executed('Cron executed!'); } }