8 class SqliteInstallerTest
extends \MediaWikiUnitTestCase
{
10 * @covers SqliteInstaller::checkDataDir
12 public function testCheckDataDir() {
13 $method = new ReflectionMethod( SqliteInstaller
::class, 'checkDataDir' );
14 $method->setAccessible( true );
16 # Test 1: Should return fatal Status if $dir exist and it un-writable
17 if ( ( isset( $_SERVER['USER'] ) && $_SERVER['USER'] !== 'root' ) && !wfIsWindows() ) {
18 // We can't simulate this environment under Windows or login as root
19 $dir = sys_get_temp_dir() . '/' . uniqid( 'MediaWikiTest' );
21 /** @var Status $status */
22 $status = $method->invoke( null, $dir );
23 $this->assertFalse( $status->isGood() );
24 $this->assertSame( 'config-sqlite-dir-unwritable', $status->getErrors()[0]['message'] );
28 # Test 2: Should return fatal Status if $dir not exist and it parent also not exist
29 $dir = sys_get_temp_dir() . '/' . uniqid( 'MediaWikiTest' ) . '/' . uniqid( 'MediaWikiTest' );
30 $status = $method->invoke( null, $dir );
31 $this->assertFalse( $status->isGood() );
33 # Test 3: Should return good Status if $dir not exist and it parent writable
34 $dir = sys_get_temp_dir() . '/' . uniqid( 'MediaWikiTest' );
35 /** @var Status $status */
36 $status = $method->invoke( null, $dir );
37 $this->assertTrue( $status->isGood() );
41 * @covers SqliteInstaller::createDataDir
43 public function testCreateDataDir() {
44 $method = new ReflectionMethod( SqliteInstaller
::class, 'createDataDir' );
45 $method->setAccessible( true );
47 # Test 1: Should return fatal Status if $dir not exist and it parent un-writable
48 if ( ( isset( $_SERVER['USER'] ) && $_SERVER['USER'] !== 'root' ) && !wfIsWindows() ) {
49 // We can't simulate this environment under Windows or login as root
50 $random = uniqid( 'MediaWikiTest' );
51 $dir = sys_get_temp_dir() . '/' . $random . '/' . uniqid( 'MediaWikiTest' );
52 mkdir( sys_get_temp_dir() . "/$random", 0000 );
53 /** @var Status $status */
54 $status = $method->invoke( null, $dir );
55 $this->assertFalse( $status->isGood() );
56 $this->assertSame( 'config-sqlite-mkdir-error', $status->getErrors()[0]['message'] );
57 rmdir( sys_get_temp_dir() . "/$random" );
60 # Test 2: Test .htaccess content after created successfully
61 $dir = sys_get_temp_dir() . '/' . uniqid( 'MediaWikiTest' );
62 $status = $method->invoke( null, $dir );
63 $this->assertTrue( $status->isGood() );
64 $this->assertSame( "Deny from all\n", file_get_contents( "$dir/.htaccess" ) );
65 unlink( "$dir/.htaccess" );