* * @author Arthur Schiwon * @author Johannes Ernst * * @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 OC\Log\Systemdlog; use OC\SystemConfig; 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; /** @var SystemConfig|\PHPUnit\Framework\MockObject\MockObject */ protected $systemConfig; protected function setUp(): void { parent::setUp(); $this->c = $this->createMock(IServerContainer::class); $this->systemConfig = $this->createMock(SystemConfig::class); $this->factory = new LogFactory($this->c, $this->systemConfig); } 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'; $this->systemConfig->expects($this->exactly(3)) ->method('getValue') ->withConsecutive(['datadirectory', $datadir], ['logfile', $defaultLog], ['logfilemode', 0640]) ->willReturnOnConsecutiveCalls($datadir, $defaultLog, 0640); $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'; $this->systemConfig->expects($this->exactly(3)) ->method('getValue') ->withConsecutive(['datadirectory', $datadir], ['logfile', $defaultLog], ['logfilemode', 0640]) ->willReturnOnConsecutiveCalls($datadir, $path, 0640); $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); } /** * @throws \OCP\AppFramework\QueryException */ public function testSystemdLog() { $this->c->expects($this->once()) ->method('resolve') ->with(Systemdlog::class) ->willReturn($this->createMock(Systemdlog::class)); $log = $this->factory->get('systemd'); $this->assertInstanceOf(Systemdlog::class, $log); } } 'artonge/chore/increase_log_in_trashbin'>artonge/chore/increase_log_in_trashbin Nextcloud server, a safe home for all your data: https://github.com/nextcloud/serverwww-data
aboutsummaryrefslogtreecommitdiffstats
blob: 9f867eb811a332c427723e08b7d9c763f62a938d (plain)
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
<?php
/**
 * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
 * SPDX-License-Identifier: AGPL-3.0-or-later
 */
namespace OCP\WorkflowEngine;

use OCP\EventDispatcher\Event;

/**
 * Interface IOperation
 *
 * @since 9.1
 */
interface IOperation {
	/**
	 * returns a translated name to be presented in the web interface
	 *
	 * Example: "Automated tagging" (en), "AĆ­tomata etikedado" (eo)
	 *
	 * @since 18.0.0
	 */
	public function getDisplayName(): string;

	/**
	 * returns a translated, descriptive text to be presented in the web interface.
	 *
	 * It should be short and precise.
	 *
	 * Example: "Tag based automatic deletion of files after a given time." (en)
	 *
	 * @since 18.0.0
	 */
	public function getDescription(): string;

	/**
	 * returns the URL to the icon of the operator for display in the web interface.
	 *
	 * Usually, the implementation would utilize the `imagePath()` method of the
	 * `\OCP\IURLGenerator` instance and simply return its result.
	 *
	 * Example implementation: return $this->urlGenerator->imagePath('myApp', 'cat.svg');
	 *
	 * @since 18.0.0
	 */
	public function getIcon(): string;

	/**
	 * returns whether the operation can be used in the requested scope.
	 *
	 * Scope IDs are defined as constants in OCP\WorkflowEngine\IManager. At
	 * time of writing these are SCOPE_ADMIN and SCOPE_USER.
	 *
	 * For possibly unknown future scopes the recommended behaviour is: if
	 * user scope is permitted, the default behaviour should return `true`,
	 * otherwise `false`.
	 *
	 * @param int $scope
	 * @psalm-param IManager::SCOPE_* $scope
	 *
	 * @since 18.0.0
	 */
	public function isAvailableForScope(int $scope): bool;

	/**
	 * Validates whether a configured workflow rule is valid. If it is not,
	 * an `\UnexpectedValueException` is supposed to be thrown.
	 *
	 * @throws \UnexpectedValueException
	 * @since 9.1
	 */
	public function validateOperation(string $name, array $checks, string $operation): void;

	/**
	 * Is being called by the workflow engine when an event was triggered that
	 * is configured for this operation. An evaluation whether the event
	 * qualifies for this operation to run has still to be done by the
	 * implementor by calling the RuleMatchers getMatchingOperations method
	 * and evaluating the results.
	 *
	 * If the implementor is an IComplexOperation, this method will not be
	 * called automatically. It can be used or left as no-op by the implementor.
	 *
	 * @since 18.0.0
	 */
	public function onEvent(string $eventName, Event $event, IRuleMatcher $ruleMatcher): void;
}