1<?php
2
3use MediaWiki\Shell\Command;
4use MediaWiki\Shell\CommandFactory;
5use MediaWiki\Shell\FirejailCommand;
6use Psr\Log\NullLogger;
7use Wikimedia\TestingAccessWrapper;
8
9/**
10 * @group Shell
11 */
12class CommandFactoryTest extends MediaWikiUnitTestCase {
13
14	/**
15	 * @covers MediaWiki\Shell\CommandFactory::create
16	 */
17	public function testCreate() {
18		$logger = new NullLogger();
19		$cgroup = '/sys/fs/cgroup/memory/mygroup';
20		$limits = [
21			'filesize' => 1000,
22			'memory' => 1000,
23			'time' => 30,
24			'walltime' => 40,
25		];
26
27		$factory = new CommandFactory( $limits, $cgroup, false );
28		$factory->setLogger( $logger );
29		$factory->logStderr();
30		$command = $factory->create();
31		$this->assertInstanceOf( Command::class, $command );
32
33		$wrapper = TestingAccessWrapper::newFromObject( $command );
34		$this->assertSame( $logger, $wrapper->logger );
35		$this->assertSame( $cgroup, $wrapper->cgroup );
36		$this->assertSame( $limits, $wrapper->limits );
37		$this->assertTrue( $wrapper->doLogStderr );
38	}
39
40	/**
41	 * @covers MediaWiki\Shell\CommandFactory::create
42	 */
43	public function testFirejailCreate() {
44		$mock = $this->getMockBuilder( CommandFactory::class )
45			->setConstructorArgs( [ [], false, 'firejail' ] )
46			->setMethods( [ 'findFirejail' ] )
47			->getMock();
48		$mock->method( 'findFirejail' )->willReturn( '/usr/bin/firejail' );
49		$this->assertInstanceOf( FirejailCommand::class, $mock->create() );
50	}
51}
52