예제 #1
0
 public function test_get_next_scheduled_time()
 {
     global $CFG;
     $this->resetAfterTest();
     $this->setTimezone('Europe/London');
     // Test job run at 1 am.
     $testclass = new \core\task\scheduled_test_task();
     // All fields default to '*'.
     $testclass->set_hour('1');
     $testclass->set_minute('0');
     // Next valid time should be 1am of the next day.
     $nexttime = $testclass->get_next_scheduled_time();
     $oneamdate = new DateTime('now', new DateTimeZone('Europe/London'));
     $oneamdate->setTime(1, 0, 0);
     // Make it 1 am tomorrow if the time is after 1am.
     if ($oneamdate->getTimestamp() < time()) {
         $oneamdate->add(new DateInterval('P1D'));
     }
     $oneam = $oneamdate->getTimestamp();
     $this->assertEquals($oneam, $nexttime, 'Next scheduled time is 1am.');
     // Disabled flag does not affect next time.
     $testclass->set_disabled(true);
     $nexttime = $testclass->get_next_scheduled_time();
     $this->assertEquals($oneam, $nexttime, 'Next scheduled time is 1am.');
     // Now test for job run every 10 minutes.
     $testclass = new \core\task\scheduled_test_task();
     // All fields default to '*'.
     $testclass->set_minute('*/10');
     // Next valid time should be next 10 minute boundary.
     $nexttime = $testclass->get_next_scheduled_time();
     $minutes = (intval(date('i') / 10) + 1) * 10;
     $nexttenminutes = mktime(date('H'), $minutes, 0);
     $this->assertEquals($nexttenminutes, $nexttime, 'Next scheduled time is in 10 minutes.');
     // Disabled flag does not affect next time.
     $testclass->set_disabled(true);
     $nexttime = $testclass->get_next_scheduled_time();
     $this->assertEquals($nexttenminutes, $nexttime, 'Next scheduled time is in 10 minutes.');
     // Test hourly job executed on Sundays only.
     $testclass = new \core\task\scheduled_test_task();
     $testclass->set_minute('0');
     $testclass->set_day_of_week('7');
     $nexttime = $testclass->get_next_scheduled_time();
     $this->assertEquals(7, date('N', $nexttime));
     $this->assertEquals(0, date('i', $nexttime));
     // Test monthly job
     $testclass = new \core\task\scheduled_test_task();
     $testclass->set_minute('32');
     $testclass->set_hour('0');
     $testclass->set_day('1');
     $nexttime = $testclass->get_next_scheduled_time();
     $this->assertEquals(32, date('i', $nexttime));
     $this->assertEquals(0, date('G', $nexttime));
     $this->assertEquals(1, date('j', $nexttime));
 }