1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
<?php
use MediaWiki\Installer\SqliteInstaller;
use MediaWiki\Status\Status;
/**
* @group sqlite
* @group medium
*/
class SqliteInstallerTest extends MediaWikiUnitTestCase {
/**
* @covers \MediaWiki\Installer\SqliteInstaller::checkDataDir
*/
public function testCheckDataDir() {
$method = new ReflectionMethod( SqliteInstaller::class, 'checkDataDir' );
$method->setAccessible( true );
# Test 1: Should return fatal Status if $dir exist and it un-writable
if ( ( isset( $_SERVER['USER'] ) && $_SERVER['USER'] !== 'root' ) && !wfIsWindows() ) {
// We can't simulate this environment under Windows or login as root
$dir = sys_get_temp_dir() . '/' . uniqid( 'MediaWikiTest' );
mkdir( $dir, 0000 );
/** @var Status $status */
$status = $method->invoke( null, $dir );
$this->assertStatusError( 'config-sqlite-dir-unwritable', $status );
rmdir( $dir );
}
# Test 2: Should return fatal Status if $dir not exist and it parent also not exist
$dir = sys_get_temp_dir() . '/' . uniqid( 'MediaWikiTest' ) . '/' . uniqid( 'MediaWikiTest' );
$status = $method->invoke( null, $dir );
$this->assertStatusNotGood( $status );
# Test 3: Should return good Status if $dir not exist and it parent writable
$dir = sys_get_temp_dir() . '/' . uniqid( 'MediaWikiTest' );
/** @var Status $status */
$status = $method->invoke( null, $dir );
$this->assertStatusGood( $status );
}
/**
* @covers \MediaWiki\Installer\SqliteInstaller::createDataDir
*/
public function testCreateDataDir() {
$method = new ReflectionMethod( SqliteInstaller::class, 'createDataDir' );
$method->setAccessible( true );
# Test 1: Should return fatal Status if $dir not exist and it parent un-writable
if ( ( isset( $_SERVER['USER'] ) && $_SERVER['USER'] !== 'root' ) && !wfIsWindows() ) {
// We can't simulate this environment under Windows or login as root
$random = uniqid( 'MediaWikiTest' );
$dir = sys_get_temp_dir() . '/' . $random . '/' . uniqid( 'MediaWikiTest' );
mkdir( sys_get_temp_dir() . "/$random", 0000 );
/** @var Status $status */
$status = $method->invoke( null, $dir );
$this->assertStatusError( 'config-sqlite-mkdir-error', $status );
rmdir( sys_get_temp_dir() . "/$random" );
}
# Test 2: Test .htaccess content after created successfully
$dir = sys_get_temp_dir() . '/' . uniqid( 'MediaWikiTest' );
$status = $method->invoke( null, $dir );
$this->assertStatusGood( $status );
$this->assertSame( "Require all denied\nSatisfy All\n", file_get_contents( "$dir/.htaccess" ) );
unlink( "$dir/.htaccess" );
rmdir( $dir );
}
}
|