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