Skip to content

Commit

Permalink
MDL-35109 Improve unittests for cron based fetching of available updates
Browse files Browse the repository at this point in the history
The expected behaviour is as follows:

* If the recently fetched data is older than 48 hours, it is considered
  as outdated and the new fetch is executed
* else, if the recently fetched data is younger than 24 hours, it is
  considered as fresh enough and no fetch is executed
* else, if the current time is after 01:00 AM plus a certain offset
  (which is randomly generated for each site), the fetch is
  executed.
  • Loading branch information
mudrd8mz committed Aug 28, 2012
1 parent bac15e5 commit b0e5b3b
Showing 1 changed file with 38 additions and 9 deletions.
47 changes: 38 additions & 9 deletions lib/tests/pluginlib_test.php
Expand Up @@ -103,7 +103,7 @@ public function test_cron_initial_fetch() {
*/ */
public function test_cron_has_fresh_fetch() { public function test_cron_has_fresh_fetch() {
$provider = testable_available_update_checker::instance(); $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->fakecurrenttimestamp = -1;
$provider->cron(); $provider->cron();
$this->assertTrue(true); // we should get here with no exception thrown $this->assertTrue(true); // we should get here with no exception thrown
Expand All @@ -127,23 +127,52 @@ public function test_cron_has_outdated_fetch() {
*/ */
public function test_cron_offset_execution_not_yet() { public function test_cron_offset_execution_not_yet() {
$provider = testable_available_update_checker::instance(); $provider = testable_available_update_checker::instance();
$provider->fakerecentfetch = time() - 24 * HOURSECS; $provider->fakecurrenttimestamp = mktime(1, 40, 02); // 01:40:02 AM today
$provider->fakecurrenttimestamp = mktime(1, 40, 02); // 01:40:02 AM $provider->fakerecentfetch = $provider->fakecurrenttimestamp - 24 * HOURSECS;
$provider->cron(); $provider->cron();
$this->assertTrue(true); // we should get here with no exception thrown $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() * @see testable_available_update_checker::cron_execution_offset()
*/ */
public function test_cron_offset_execution() { public function test_cron_offset_execution() {
$provider = testable_available_update_checker::instance(); $provider = testable_available_update_checker::instance();
$provider->fakerecentfetch = time() - 24 * HOURSECS;
$provider->fakecurrenttimestamp = mktime(1, 45, 02); // 01:45:02 AM // the cron at 01:45 should fetch the data
$this->setExpectedException('testable_available_update_checker_cron_executed'); $provider->fakecurrenttimestamp = mktime(1, 45, 02); // 01:45:02 AM today
$provider->cron(); $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() { public function test_compare_responses_both_empty() {
Expand Down Expand Up @@ -503,7 +532,7 @@ protected function cron_execution_offset() {
} }


protected function cron_execute() { 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!');
} }
} }


Expand Down

0 comments on commit b0e5b3b

Please sign in to comment.