mirror of
https://github.com/nextcloud/server.git
synced 2026-02-11 14:54:02 -05:00
- Follow-up of #51600 The original PR introduced the possibility to continue an `ExpireTrash` job by saving the offset. This was to prevent having to start over the whole user list when the job crashed or was killed. But on big instances, one process is not enough to go through all the users in a timely manner. Supporting parallel run allows covering more ground faster. This PR introduced this possibility. We are now storing the offset right away to allow another parallel job to pick up the task at that point. We are arbitrarily cutting the user list in chunk of 10 to not drastically overflow the 30 minutes time limit. Signed-off-by: Louis Chemineau <louis@chmn.me>
94 lines
2.8 KiB
PHP
94 lines
2.8 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
/**
|
|
* SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
|
|
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
|
|
* SPDX-License-Identifier: AGPL-3.0-only
|
|
*/
|
|
|
|
namespace OCA\Files_Trashbin\Tests\BackgroundJob;
|
|
|
|
use OC\Files\SetupManager;
|
|
use OCA\Files_Trashbin\AppInfo\Application;
|
|
use OCA\Files_Trashbin\BackgroundJob\ExpireTrash;
|
|
use OCA\Files_Trashbin\Expiration;
|
|
use OCP\AppFramework\Utility\ITimeFactory;
|
|
use OCP\BackgroundJob\IJobList;
|
|
use OCP\IAppConfig;
|
|
use OCP\IUserManager;
|
|
use OCP\Lock\ILockingProvider;
|
|
use PHPUnit\Framework\MockObject\MockObject;
|
|
use Psr\Log\LoggerInterface;
|
|
use Test\TestCase;
|
|
|
|
class ExpireTrashTest extends TestCase {
|
|
private IAppConfig&MockObject $appConfig;
|
|
private IUserManager&MockObject $userManager;
|
|
private Expiration&MockObject $expiration;
|
|
private IJobList&MockObject $jobList;
|
|
private LoggerInterface&MockObject $logger;
|
|
private ITimeFactory&MockObject $time;
|
|
private SetupManager&MockObject $setupManager;
|
|
private ILockingProvider&MockObject $lockingProvider;
|
|
|
|
protected function setUp(): void {
|
|
parent::setUp();
|
|
|
|
$this->appConfig = $this->createMock(IAppConfig::class);
|
|
$this->userManager = $this->createMock(IUserManager::class);
|
|
$this->expiration = $this->createMock(Expiration::class);
|
|
$this->jobList = $this->createMock(IJobList::class);
|
|
$this->logger = $this->createMock(LoggerInterface::class);
|
|
$this->setupManager = $this->createMock(SetupManager::class);
|
|
$this->lockingProvider = $this->createMock(ILockingProvider::class);
|
|
|
|
$this->time = $this->createMock(ITimeFactory::class);
|
|
$this->time->method('getTime')
|
|
->willReturn(999999999);
|
|
|
|
$this->jobList->expects($this->once())
|
|
->method('setLastRun');
|
|
$this->jobList->expects($this->once())
|
|
->method('setExecutionTime');
|
|
}
|
|
|
|
public function testConstructAndRun(): void {
|
|
$this->appConfig->method('getValueBool')
|
|
->with(Application::APP_ID, ExpireTrash::TOGGLE_CONFIG_KEY_NAME, true)
|
|
->willReturn(true);
|
|
$this->appConfig->method('getValueInt')
|
|
->with(Application::APP_ID, ExpireTrash::OFFSET_CONFIG_KEY_NAME, 0)
|
|
->willReturn(0);
|
|
|
|
$job = new ExpireTrash(
|
|
$this->appConfig,
|
|
$this->userManager,
|
|
$this->expiration,
|
|
$this->logger,
|
|
$this->setupManager,
|
|
$this->lockingProvider,
|
|
$this->time,
|
|
);
|
|
$job->start($this->jobList);
|
|
}
|
|
|
|
public function testBackgroundJobDeactivated(): void {
|
|
$this->appConfig->method('getValueBool')
|
|
->with(Application::APP_ID, ExpireTrash::TOGGLE_CONFIG_KEY_NAME, true)
|
|
->willReturn(false);
|
|
$this->expiration->expects($this->never())
|
|
->method('getMaxAgeAsTimestamp');
|
|
|
|
$job = new ExpireTrash(
|
|
$this->appConfig,
|
|
$this->userManager,
|
|
$this->expiration,
|
|
$this->logger,
|
|
$this->setupManager,
|
|
$this->lockingProvider,
|
|
$this->time,
|
|
);
|
|
$job->start($this->jobList);
|
|
}
|
|
}
|