Merge "Provide command to adjust phpunit.xml for code coverage"
[lhc/web/wiklou.git] / tests / phpunit / unit / includes / installer / SqliteInstallerTest.php
1 <?php
2
3 /**
4 * @group sqlite
5 * @group Database
6 * @group medium
7 */
8 class SqliteInstallerTest extends \MediaWikiUnitTestCase {
9 /**
10 * @covers SqliteInstaller::checkDataDir
11 */
12 public function testCheckDataDir() {
13 $method = new ReflectionMethod( SqliteInstaller::class, 'checkDataDir' );
14 $method->setAccessible( true );
15
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' );
20 mkdir( $dir, 0000 );
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'] );
25 rmdir( $dir );
26 }
27
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() );
32
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() );
38 }
39
40 /**
41 * @covers SqliteInstaller::createDataDir
42 */
43 public function testCreateDataDir() {
44 $method = new ReflectionMethod( SqliteInstaller::class, 'createDataDir' );
45 $method->setAccessible( true );
46
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" );
58 }
59
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" );
66 rmdir( $dir );
67 }
68 }