File: SqliteInstallerTest.php

package info (click to toggle)
mediawiki 1%3A1.35.13-1%2Bdeb11u2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 274,932 kB
  • sloc: php: 677,563; javascript: 572,709; sql: 11,565; python: 4,447; xml: 3,145; sh: 892; perl: 788; ruby: 496; pascal: 365; makefile: 128
file content (68 lines) | stat: -rw-r--r-- 2,633 bytes parent folder | download
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

/**
 * @group sqlite
 * @group Database
 * @group medium
 */
class SqliteInstallerTest extends \MediaWikiUnitTestCase {
	/**
	 * @covers 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->assertFalse( $status->isGood() );
			$this->assertSame( 'config-sqlite-dir-unwritable', $status->getErrors()[0]['message'] );
			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->assertFalse( $status->isGood() );

		# 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->assertTrue( $status->isGood() );
	}

	/**
	 * @covers 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->assertFalse( $status->isGood() );
			$this->assertSame( 'config-sqlite-mkdir-error', $status->getErrors()[0]['message'] );
			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->assertTrue( $status->isGood() );
		$this->assertSame( "Deny from all\n", file_get_contents( "$dir/.htaccess" ) );
		unlink( "$dir/.htaccess" );
		rmdir( $dir );
	}
}