File: FileBackendGroupTest.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 (97 lines) | stat: -rw-r--r-- 3,292 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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<?php

use MediaWiki\Config\ServiceOptions;
use MediaWiki\FileBackend\FSFile\TempFSFileFactory;
use MediaWiki\FileBackend\LockManager\LockManagerGroupFactory;
use Wikimedia\ObjectFactory;

/**
 * @coversDefaultClass FileBackendGroup
 */
class FileBackendGroupTest extends MediaWikiUnitTestCase {
	use FileBackendGroupTestTrait;

	protected function setUp() : void {
		parent::setUp();
		// This config var is not yet dependency-injected.
		// FileBackendGroup has a default option 'profiler', that holds a closure
		// that calls Profiler::instance(), which doesn't use service wiring yet.
		// Without this, the variable would be undefined there.
		// TODO: Remove this once Profiler uses service wiring and is injected
		// into FileBackendGroup.
		$GLOBALS['wgProfiler'] = [];
	}

	private static function getWikiID() {
		return 'mywiki';
	}

	private function getNoOpMock( $class ) {
		$mock = $this->createMock( $class );
		$mock->expects( $this->never() )->method( $this->anything() );
		return $mock;
	}

	private function getLocalServerCache() : BagOStuff {
		if ( !$this->srvCache ) {
			$this->srvCache = new EmptyBagOStuff;
		}
		return $this->srvCache;
	}

	private function getWANObjectCache() : WANObjectCache {
		if ( !$this->wanCache ) {
			$this->wanCache = $this->getNoOpMock( WANObjectCache::class );
		}
		return $this->wanCache;
	}

	/**
	 * @param string $domain Expected argument that LockManagerGroupFactory::getLockManagerGroup
	 *   will receive
	 */
	private function getLockManagerGroupFactory( $domain = 'mywiki' ) : LockManagerGroupFactory {
		if ( !$this->lmgFactory ) {
			$mockLmg = $this->createMock( LockManagerGroup::class );
			$mockLmg->method( 'get' )->with( 'fsLockManager' )->willReturn( 'string lock manager' );
			$mockLmg->expects( $this->never() )->method( $this->anythingBut( 'get' ) );

			$this->lmgFactory = $this->createMock( LockManagerGroupFactory::class );
			$this->lmgFactory->method( 'getLockManagerGroup' )->with( $domain )
				->willReturn( $mockLmg );
			$this->lmgFactory->expects( $this->never() )
				->method( $this->anythingBut( 'getLockManagerGroup' ) );
		}
		return $this->lmgFactory;
	}

	private function getTempFSFileFactory() : TempFSFileFactory {
		if ( !$this->tmpFileFactory ) {
			$this->tmpFileFactory = $this->getNoOpMock( TempFSFileFactory::class );
		}
		return $this->tmpFileFactory;
	}

	/**
	 * @param array $options Dictionary to use as a source for ServiceOptions before defaults, plus
	 *   the following options are available to override other arguments:
	 *     * 'configuredROMode'
	 *     * 'lmgFactory'
	 *     * 'mimeAnalyzer'
	 *     * 'tmpFileFactory'
	 */
	private function newObj( array $options = [] ) : FileBackendGroup {
		return new FileBackendGroup(
			new ServiceOptions(
				FileBackendGroup::CONSTRUCTOR_OPTIONS, $options, self::getDefaultOptions() ),
			$options['configuredROMode'] ?? new ConfiguredReadOnlyMode( false ),
			$this->getLocalServerCache(),
			$this->getWANObjectCache(),
			$options['mimeAnalyzer'] ?? $this->getNoOpMock( MimeAnalyzer::class ),
			$options['lmgFactory'] ?? $this->getLockManagerGroupFactory(),
			$options['tmpFileFactory'] ?? $this->getTempFSFileFactory(),
			new ObjectFactory( $this->getNoOpMock( Psr\Container\ContainerInterface::class ) )
		);
	}

}