AutorÃa | Ultima modificación | Ver Log |
<?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/>.
/**
* Cli script for testing readfile_accel function.
*
* @package core
* @subpackage fixtures
* @copyright 2025 Catalyst IT
* @author Trisha Milan <trishamilan@catalyst-au.net>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define('CLI_SCRIPT', true);
require_once(__DIR__ . '/../../../config.php');
require_once($CFG->libdir . '/filelib.php');
if (!defined('PHPUNIT_READFILE_ACCEL_TEST')) {
echo 'This script is only intended to be run via PHPUnit.';
exit(1);
}
$testdb = moodle_database::get_driver_instance($CFG->dbtype, $CFG->dblibrary);
$testdb->connect($CFG->dbhost, $CFG->dbuser, $CFG->dbpass, $CFG->dbname, $CFG->phpunit_prefix);
$DB = $testdb;
set_debugging(DEBUG_DEVELOPER, true);
$CFG->tempdir = '/tmp';
/**
* Runs readfile_accel() with a file path or a stored_file to trigger the buffer check.
*
* @param string|stored_file $input
* @param string $mimetype
* @param bool $accelerate
*/
function run_readfile_accel_test(string|stored_file $input, string $mimetype, bool $accelerate): void {
try {
ob_start();
echo "test text";
$_SERVER['REQUEST_METHOD'] = 'GET';
readfile_accel($input, $mimetype, $accelerate);
} catch (Exception $e) {
echo $e->getMessage() . "\n";
}
}
try {
// Prepare test file.
$filename = "readfile_accel.txt";
// Generate temporary local file for testing.
$path = "$CFG->tempdir/$filename";
file_put_contents($path, "\nMoodle test data\n");
// Populate {files} table.
$fs = get_file_storage();
$filerecord = [
'contextid' => context_system::instance()->id,
'component' => 'test',
'filearea' => 'readfile',
'itemid' => 0,
'filepath' => '/',
'filename' => $filename,
];
$storedfile = null;
$filerecord['filename'] = $fs->get_unused_filename(
$filerecord['contextid'],
$filerecord['component'],
$filerecord['filearea'],
$filerecord['itemid'],
$filerecord['filepath'],
$filerecord['filename']
);
$storedfile = $fs->create_file_from_pathname($filerecord, $path);
$mimetype = get_mimetype_for_sending($storedfile->get_filename());
$accelerate = true;
// Run the test with direct path.
run_readfile_accel_test($path, $mimetype, $accelerate);
// Run the test with direct stored_file.
run_readfile_accel_test($storedfile, $mimetype, $accelerate);
} finally {
// Clean up {files} table.
if (!is_null($fs)) {
@$fs->delete_area_files(
$filerecord['contextid'],
$filerecord['component'],
$filerecord['filearea'],
$filerecord['itemid']
);
}
// Clean up testing file.
if ($path !== "") {
@unlink($path);
}
}