* * @author Arthur Schiwon * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ namespace Test\Log; use OC\Log\Errorlog; use OC\Log\File; use OC\Log\LogFactory; use OC\Log\Syslog; use OCP\IConfig; use OCP\IServerContainer; use Test\TestCase; /** * Class LogFactoryTest * * @package Test\Log */ class LogFactoryTest extends TestCase { /** @var IServerContainer|\PHPUnit_Framework_MockObject_MockObject */ protected $c; /** @var LogFactory */ protected $factory; protected function setUp() { parent::setUp(); $this->c = $this->createMock(IServerContainer::class); $this->factory = new LogFactory($this->c); } public function fileTypeProvider(): array { return [ [ 'file' ], [ 'nextcloud' ], [ 'owncloud' ], [ 'krzxkyr_default' ] ]; } /** * @param string $type * @dataProvider fileTypeProvider * @throws \OCP\AppFramework\QueryException */ public function testFile(string $type) { $datadir = \OC::$SERVERROOT.'/data'; $defaultLog = $datadir . '/nextcloud.log'; $config = $this->createMock(IConfig::class); $config->expects($this->exactly(2)) ->method('getSystemValue') ->withConsecutive(['datadirectory', $datadir], ['logfile', $defaultLog]) ->willReturnOnConsecutiveCalls($datadir, $defaultLog); $this->c->expects($this->any()) ->method('getConfig') ->willReturn($config); $log = $this->factory->get($type); $this->assertInstanceOf(File::class, $log); } public function logFilePathProvider():array { return [ [ '/dev/null', '/dev/null' ], [ '/xdev/youshallfallback', \OC::$SERVERROOT.'/data/nextcloud.log' ] ]; } /** * @dataProvider logFilePathProvider * @throws \OCP\AppFramework\QueryException */ public function testFileCustomPath($path, $expected) { $datadir = \OC::$SERVERROOT.'/data'; $defaultLog = $datadir . '/nextcloud.log'; $config = $this->createMock(IConfig::class); $config->expects($this->exactly(2)) ->method('getSystemValue') ->withConsecutive(['datadirectory', $datadir], ['logfile', $defaultLog]) ->willReturnOnConsecutiveCalls($datadir, $path); $this->c->expects($this->any()) ->method('getConfig') ->willReturn($config); $log = $this->factory->get('file'); $this->assertInstanceOf(File::class, $log); $this->assertSame($expected, $log->getLogFilePath()); } /** * @throws \OCP\AppFramework\QueryException */ public function testErrorLog() { $log = $this->factory->get('errorlog'); $this->assertInstanceOf(Errorlog::class, $log); } /** * @throws \OCP\AppFramework\QueryException */ public function testSystemLog() { $this->c->expects($this->once()) ->method('resolve') ->with(Syslog::class) ->willReturn($this->createMock(Syslog::class)); $log = $this->factory->get('syslog'); $this->assertInstanceOf(Syslog::class, $log); } }