diff --git a/apps/files_sharing/lib/External/Storage.php b/apps/files_sharing/lib/External/Storage.php index f074d86d54fd4..ad75a09a56817 100644 --- a/apps/files_sharing/lib/External/Storage.php +++ b/apps/files_sharing/lib/External/Storage.php @@ -62,7 +62,7 @@ public function __construct($options) { $this->manager = $options['manager']; $this->cloudId = $options['cloudId']; $this->logger = Server::get(LoggerInterface::class); - $discoveryService = Server::get(IOCMDiscoveryService::class); + $discoveryService = $options['discoveryService'] ?? Server::get(IOCMDiscoveryService::class); $this->config = Server::get(IConfig::class); $this->appConfig = Server::get(IAppConfig::class); $this->shareManager = Server::get(IShareManager::class); diff --git a/apps/files_sharing/tests/CacheTest.php b/apps/files_sharing/tests/CacheTest.php index 0e4736ff25c2b..3f4ba17c4ace9 100644 --- a/apps/files_sharing/tests/CacheTest.php +++ b/apps/files_sharing/tests/CacheTest.php @@ -33,8 +33,6 @@ class CacheTest extends TestCase { protected Cache $sharedCache; protected Storage $ownerStorage; protected Storage $sharedStorage; - /** @var \OCP\Share\IManager $shareManager */ - protected $shareManager; protected function setUp(): void { parent::setUp(); diff --git a/apps/files_sharing/tests/Controller/ShareControllerTest.php b/apps/files_sharing/tests/Controller/ShareControllerTest.php index 4e724a45a90f3..a117eb36d832e 100644 --- a/apps/files_sharing/tests/Controller/ShareControllerTest.php +++ b/apps/files_sharing/tests/Controller/ShareControllerTest.php @@ -49,12 +49,14 @@ use OCP\Share\IPublicShareTemplateFactory; use OCP\Share\IShare; use PHPUnit\Framework\MockObject\MockObject; +use Test\Traits\UserTrait; /** * @package OCA\Files_Sharing\Controllers */ #[\PHPUnit\Framework\Attributes\Group(name: 'DB')] class ShareControllerTest extends \Test\TestCase { + use UserTrait; private string $user; private string $oldUser; @@ -150,7 +152,7 @@ protected function setUp(): void { // Create a dummy user $this->user = Server::get(ISecureRandom::class)->generate(12, ISecureRandom::CHAR_LOWER); - Server::get(IUserManager::class)->createUser($this->user, $this->user); + $this->createUser($this->user, $this->user); \OC_Util::tearDownFS(); $this->loginAsUser($this->user); } diff --git a/apps/files_sharing/tests/DeleteOrphanedSharesJobTest.php b/apps/files_sharing/tests/DeleteOrphanedSharesJobTest.php index bc67141f88d8e..ec20629f126e0 100644 --- a/apps/files_sharing/tests/DeleteOrphanedSharesJobTest.php +++ b/apps/files_sharing/tests/DeleteOrphanedSharesJobTest.php @@ -16,6 +16,7 @@ use OCP\IUserManager; use OCP\Server; use OCP\Share\IShare; +use Test\Traits\UserTrait; /** * Class DeleteOrphanedSharesJobTest @@ -25,6 +26,8 @@ */ #[\PHPUnit\Framework\Attributes\Group(name: 'DB')] class DeleteOrphanedSharesJobTest extends \Test\TestCase { + use UserTrait; + /** * @var bool */ @@ -75,9 +78,8 @@ protected function setUp(): void { $this->user1 = $this->getUniqueID('user1_'); $this->user2 = $this->getUniqueID('user2_'); - $userManager = Server::get(IUserManager::class); - $userManager->createUser($this->user1, 'pass'); - $userManager->createUser($this->user2, 'pass'); + $this->createUser($this->user1, 'pass'); + $this->createUser($this->user2, 'pass'); \OC::registerShareHooks(Server::get(SystemConfig::class)); diff --git a/apps/files_sharing/tests/EtagPropagationTest.php b/apps/files_sharing/tests/EtagPropagationTest.php index 597e584fa2f9d..551e744f7493e 100644 --- a/apps/files_sharing/tests/EtagPropagationTest.php +++ b/apps/files_sharing/tests/EtagPropagationTest.php @@ -5,6 +5,7 @@ * SPDX-FileCopyrightText: 2016 ownCloud, Inc. * SPDX-License-Identifier: AGPL-3.0-only */ + namespace OCA\Files_Sharing\Tests; use OC\Files\Filesystem; @@ -31,16 +32,15 @@ class EtagPropagationTest extends PropagationTestCase { * "user4" puts the received "inside" folder into "sub1/sub2/inside" (this is to check if it propagates across multiple subfolders) */ protected function setUpShares() { - $this->fileIds[self::TEST_FILES_SHARING_API_USER1] = []; - $this->fileIds[self::TEST_FILES_SHARING_API_USER2] = []; - $this->fileIds[self::TEST_FILES_SHARING_API_USER3] = []; - $this->fileIds[self::TEST_FILES_SHARING_API_USER4] = []; + $this->fileInfos[self::TEST_FILES_SHARING_API_USER1] = []; + $this->fileInfos[self::TEST_FILES_SHARING_API_USER2] = []; + $this->fileInfos[self::TEST_FILES_SHARING_API_USER3] = []; + $this->fileInfos[self::TEST_FILES_SHARING_API_USER4] = []; $rootFolder = Server::get(IRootFolder::class); $shareManager = Server::get(\OCP\Share\IManager::class); $this->rootView = new View(''); - $this->loginAsUser(self::TEST_FILES_SHARING_API_USER1); $view1 = new View('/' . self::TEST_FILES_SHARING_API_USER1 . '/files'); $view1->mkdir('/sub1/sub2/folder/inside'); $view1->mkdir('/directReshare'); @@ -98,9 +98,9 @@ protected function setUpShares() { $share = $shareManager->createShare($share); $this->shareManager->acceptShare($share, self::TEST_FILES_SHARING_API_USER2); - $this->fileIds[self::TEST_FILES_SHARING_API_USER1][''] = $view1->getFileInfo('')->getId(); - $this->fileIds[self::TEST_FILES_SHARING_API_USER1]['sub1'] = $view1->getFileInfo('sub1')->getId(); - $this->fileIds[self::TEST_FILES_SHARING_API_USER1]['sub1/sub2'] = $view1->getFileInfo('sub1/sub2')->getId(); + $this->fileInfos[self::TEST_FILES_SHARING_API_USER1][''] = $view1->getFileInfo(''); + $this->fileInfos[self::TEST_FILES_SHARING_API_USER1]['sub1'] = $view1->getFileInfo('sub1'); + $this->fileInfos[self::TEST_FILES_SHARING_API_USER1]['sub1/sub2'] = $view1->getFileInfo('sub1/sub2'); /* * User 2 @@ -109,7 +109,6 @@ protected function setUpShares() { $view2 = new View('/' . self::TEST_FILES_SHARING_API_USER2 . '/files'); $view2->mkdir('/sub1/sub2'); $view2->rename('/folder', '/sub1/sub2/folder'); - $this->loginAsUser(self::TEST_FILES_SHARING_API_USER2); $insideInfo = $view2->getFileInfo('/sub1/sub2/folder/inside'); $this->assertInstanceOf('\OC\Files\FileInfo', $insideInfo); @@ -139,9 +138,9 @@ protected function setUpShares() { $share = $shareManager->createShare($share); $this->shareManager->acceptShare($share, self::TEST_FILES_SHARING_API_USER4); - $this->fileIds[self::TEST_FILES_SHARING_API_USER2][''] = $view2->getFileInfo('')->getId(); - $this->fileIds[self::TEST_FILES_SHARING_API_USER2]['sub1'] = $view2->getFileInfo('sub1')->getId(); - $this->fileIds[self::TEST_FILES_SHARING_API_USER2]['sub1/sub2'] = $view2->getFileInfo('sub1/sub2')->getId(); + $this->fileInfos[self::TEST_FILES_SHARING_API_USER2][''] = $view2->getFileInfo(''); + $this->fileInfos[self::TEST_FILES_SHARING_API_USER2]['sub1'] = $view2->getFileInfo('sub1'); + $this->fileInfos[self::TEST_FILES_SHARING_API_USER2]['sub1/sub2'] = $view2->getFileInfo('sub1/sub2'); /* * User 3 @@ -150,9 +149,9 @@ protected function setUpShares() { $view3 = new View('/' . self::TEST_FILES_SHARING_API_USER3 . '/files'); $view3->mkdir('/sub1/sub2'); $view3->rename('/folder', '/sub1/sub2/folder'); - $this->fileIds[self::TEST_FILES_SHARING_API_USER3][''] = $view3->getFileInfo('')->getId(); - $this->fileIds[self::TEST_FILES_SHARING_API_USER3]['sub1'] = $view3->getFileInfo('sub1')->getId(); - $this->fileIds[self::TEST_FILES_SHARING_API_USER3]['sub1/sub2'] = $view3->getFileInfo('sub1/sub2')->getId(); + $this->fileInfos[self::TEST_FILES_SHARING_API_USER3][''] = $view3->getFileInfo(''); + $this->fileInfos[self::TEST_FILES_SHARING_API_USER3]['sub1'] = $view3->getFileInfo('sub1'); + $this->fileInfos[self::TEST_FILES_SHARING_API_USER3]['sub1/sub2'] = $view3->getFileInfo('sub1/sub2'); /* * User 4 @@ -161,18 +160,9 @@ protected function setUpShares() { $view4 = new View('/' . self::TEST_FILES_SHARING_API_USER4 . '/files'); $view4->mkdir('/sub1/sub2'); $view4->rename('/inside', '/sub1/sub2/inside'); - $this->fileIds[self::TEST_FILES_SHARING_API_USER4][''] = $view4->getFileInfo('')->getId(); - $this->fileIds[self::TEST_FILES_SHARING_API_USER4]['sub1'] = $view4->getFileInfo('sub1')->getId(); - $this->fileIds[self::TEST_FILES_SHARING_API_USER4]['sub1/sub2'] = $view4->getFileInfo('sub1/sub2')->getId(); - - foreach ($this->fileIds as $user => $ids) { - $this->loginAsUser($user); - foreach ($ids as $id) { - $path = $this->rootView->getPath($id); - $ls = $this->rootView->getDirectoryContent($path); - $this->fileEtags[$id] = $this->rootView->getFileInfo($path)->getEtag(); - } - } + $this->fileInfos[self::TEST_FILES_SHARING_API_USER4][''] = $view4->getFileInfo(''); + $this->fileInfos[self::TEST_FILES_SHARING_API_USER4]['sub1'] = $view4->getFileInfo('sub1'); + $this->fileInfos[self::TEST_FILES_SHARING_API_USER4]['sub1/sub2'] = $view4->getFileInfo('sub1/sub2'); } public function testOwnerWritesToShare(): void { diff --git a/apps/files_sharing/tests/ExpireSharesJobTest.php b/apps/files_sharing/tests/ExpireSharesJobTest.php index 50c490a7cea60..3783733d4065e 100644 --- a/apps/files_sharing/tests/ExpireSharesJobTest.php +++ b/apps/files_sharing/tests/ExpireSharesJobTest.php @@ -14,11 +14,11 @@ use OCP\Files\IRootFolder; use OCP\IDBConnection; use OCP\IUser; -use OCP\IUserManager; use OCP\Server; use OCP\Share\IManager; use OCP\Share\IShare; use PHPUnit\Framework\Attributes\DataProvider; +use Test\Traits\UserTrait; /** * Class ExpireSharesJobTest @@ -28,6 +28,7 @@ */ #[\PHPUnit\Framework\Attributes\Group(name: 'DB')] class ExpireSharesJobTest extends \Test\TestCase { + use UserTrait; private ExpireSharesJob $job; @@ -50,9 +51,8 @@ protected function setUp(): void { $user1 = $this->getUniqueID('user1_'); $user2 = $this->getUniqueID('user2_'); - $userManager = Server::get(IUserManager::class); - $this->user1 = $userManager->createUser($user1, 'longrandompassword'); - $this->user2 = $userManager->createUser($user2, 'longrandompassword'); + $this->user1 = $this->createUser($user1, 'longrandompassword'); + $this->user2 = $this->createUser($user2, 'longrandompassword'); \OC::registerShareHooks(Server::get(SystemConfig::class)); diff --git a/apps/files_sharing/tests/External/ManagerTest.php b/apps/files_sharing/tests/External/ManagerTest.php index 31ce7155704ce..34f53fe3e7ffb 100644 --- a/apps/files_sharing/tests/External/ManagerTest.php +++ b/apps/files_sharing/tests/External/ManagerTest.php @@ -69,7 +69,7 @@ class ManagerTest extends TestCase { protected ICloudFederationFactory&MockObject $cloudFederationFactory; protected IGroupManager&MockObject $groupManager; protected IUserManager&MockObject $userManager; - protected ISetupManager&MockObject $setupManager; + protected ISetupManager&MockObject $setupManagerEncTrait; protected ICertificateManager&MockObject $certificateManager; private ExternalShareMapper $externalShareMapper; private IConfig $config; @@ -87,7 +87,7 @@ protected function setUp(): void { $this->groupManager = $this->createMock(IGroupManager::class); $this->userManager = $this->createMock(IUserManager::class); $this->eventDispatcher = $this->createMock(IEventDispatcher::class); - $this->setupManager = $this->createMock(ISetupManager::class); + $this->setupManagerEncTrait = $this->createMock(ISetupManager::class); $this->rootFolder = $this->createMock(IRootFolder::class); $this->rootFolder->method('getUserFolder') ->willReturnCallback(function (string $userId): Folder { @@ -169,7 +169,7 @@ private function createManagerForUser(IUser $user): Manager&MockObject { $this->eventDispatcher, $this->logger, $this->rootFolder, - $this->setupManager, + $this->setupManagerEncTrait, $this->certificateManager, $this->externalShareMapper, $this->config, diff --git a/apps/files_sharing/tests/ExternalStorageTest.php b/apps/files_sharing/tests/ExternalStorageTest.php index 781961e55f7a8..4a2e5ad535b03 100644 --- a/apps/files_sharing/tests/ExternalStorageTest.php +++ b/apps/files_sharing/tests/ExternalStorageTest.php @@ -14,6 +14,8 @@ use OCP\Http\Client\IClientService; use OCP\Http\Client\IResponse; use OCP\ICertificateManager; +use OCP\OCM\IOCMDiscoveryService; +use OCP\OCM\IOCMProvider; use OCP\Server; /** @@ -61,6 +63,9 @@ private function getTestStorage($uri) { $manager = $this->createMock(ExternalShareManager::class); $client = $this->createMock(IClient::class); $response = $this->createMock(IResponse::class); + $discoveryService = $this->createMock(IOCMDiscoveryService::class); + $ocmProvider = $this->createMock(IOCMProvider::class); + $client ->expects($this->any()) ->method('get') @@ -73,6 +78,12 @@ private function getTestStorage($uri) { ->expects($this->any()) ->method('newClient') ->willReturn($client); + $discoveryService->method('discover') + ->willReturn($ocmProvider); + $ocmProvider->method('extractProtocolEntry') + ->willReturn('/public.php/webdav'); + $ocmProvider->method('getEndPoint') + ->willReturn($uri); return new TestSharingExternalStorage( [ @@ -85,6 +96,7 @@ private function getTestStorage($uri) { 'manager' => $manager, 'certificateManager' => $certificateManager, 'HttpClientService' => $httpClientService, + 'discoveryService' => $discoveryService, ] ); } diff --git a/apps/files_sharing/tests/GroupEtagPropagationTest.php b/apps/files_sharing/tests/GroupEtagPropagationTest.php index 9cabc52e14b84..680180ea6a54c 100644 --- a/apps/files_sharing/tests/GroupEtagPropagationTest.php +++ b/apps/files_sharing/tests/GroupEtagPropagationTest.php @@ -24,10 +24,10 @@ class GroupEtagPropagationTest extends PropagationTestCase { * "user4" (in group 3) */ protected function setUpShares() { - $this->fileIds[self::TEST_FILES_SHARING_API_USER1] = []; - $this->fileIds[self::TEST_FILES_SHARING_API_USER2] = []; - $this->fileIds[self::TEST_FILES_SHARING_API_USER3] = []; - $this->fileIds[self::TEST_FILES_SHARING_API_USER4] = []; + $this->fileInfos[self::TEST_FILES_SHARING_API_USER1] = []; + $this->fileInfos[self::TEST_FILES_SHARING_API_USER2] = []; + $this->fileInfos[self::TEST_FILES_SHARING_API_USER3] = []; + $this->fileInfos[self::TEST_FILES_SHARING_API_USER4] = []; $this->rootView = new View(''); $this->loginAsUser(self::TEST_FILES_SHARING_API_USER1); @@ -42,9 +42,9 @@ protected function setUpShares() { Constants::PERMISSION_ALL ); $this->shareManager->acceptShare($share, self::TEST_FILES_SHARING_API_USER2); - $this->fileIds[self::TEST_FILES_SHARING_API_USER1][''] = $view1->getFileInfo('')->getId(); - $this->fileIds[self::TEST_FILES_SHARING_API_USER1]['test'] = $view1->getFileInfo('test')->getId(); - $this->fileIds[self::TEST_FILES_SHARING_API_USER1]['test/sub'] = $view1->getFileInfo('test/sub')->getId(); + $this->fileInfos[self::TEST_FILES_SHARING_API_USER1][''] = $view1->getFileInfo(''); + $this->fileInfos[self::TEST_FILES_SHARING_API_USER1]['test'] = $view1->getFileInfo('test'); + $this->fileInfos[self::TEST_FILES_SHARING_API_USER1]['test/sub'] = $view1->getFileInfo('test/sub'); $this->loginAsUser(self::TEST_FILES_SHARING_API_USER2); $view2 = new View('/' . self::TEST_FILES_SHARING_API_USER2 . '/files'); @@ -66,28 +66,20 @@ protected function setUpShares() { ); $this->shareManager->acceptShare($share, self::TEST_FILES_SHARING_API_USER4); - $this->fileIds[self::TEST_FILES_SHARING_API_USER2][''] = $view2->getFileInfo('')->getId(); - $this->fileIds[self::TEST_FILES_SHARING_API_USER2]['test'] = $view2->getFileInfo('test')->getId(); - $this->fileIds[self::TEST_FILES_SHARING_API_USER2]['test/sub'] = $view2->getFileInfo('test/sub')->getId(); + $this->fileInfos[self::TEST_FILES_SHARING_API_USER2][''] = $view2->getFileInfo(''); + $this->fileInfos[self::TEST_FILES_SHARING_API_USER2]['test'] = $view2->getFileInfo('test'); + $this->fileInfos[self::TEST_FILES_SHARING_API_USER2]['test/sub'] = $view2->getFileInfo('test/sub'); $this->loginAsUser(self::TEST_FILES_SHARING_API_USER3); $view3 = new View('/' . self::TEST_FILES_SHARING_API_USER3 . '/files'); - $this->fileIds[self::TEST_FILES_SHARING_API_USER3][''] = $view3->getFileInfo('')->getId(); - $this->fileIds[self::TEST_FILES_SHARING_API_USER3]['test'] = $view3->getFileInfo('test')->getId(); - $this->fileIds[self::TEST_FILES_SHARING_API_USER3]['test/sub'] = $view3->getFileInfo('test/sub')->getId(); + $this->fileInfos[self::TEST_FILES_SHARING_API_USER3][''] = $view3->getFileInfo(''); + $this->fileInfos[self::TEST_FILES_SHARING_API_USER3]['test'] = $view3->getFileInfo('test'); + $this->fileInfos[self::TEST_FILES_SHARING_API_USER3]['test/sub'] = $view3->getFileInfo('test/sub'); $this->loginAsUser(self::TEST_FILES_SHARING_API_USER4); $view4 = new View('/' . self::TEST_FILES_SHARING_API_USER4 . '/files'); - $this->fileIds[self::TEST_FILES_SHARING_API_USER4][''] = $view4->getFileInfo('')->getId(); - $this->fileIds[self::TEST_FILES_SHARING_API_USER4]['sub'] = $view4->getFileInfo('sub')->getId(); - - foreach ($this->fileIds as $user => $ids) { - $this->loginAsUser($user); - foreach ($ids as $id) { - $path = $this->rootView->getPath($id); - $this->fileEtags[$id] = $this->rootView->getFileInfo($path)->getEtag(); - } - } + $this->fileInfos[self::TEST_FILES_SHARING_API_USER4][''] = $view4->getFileInfo(''); + $this->fileInfos[self::TEST_FILES_SHARING_API_USER4]['sub'] = $view4->getFileInfo('sub'); } public function testGroupReShareRecipientWrites(): void { diff --git a/apps/files_sharing/tests/LockingTest.php b/apps/files_sharing/tests/LockingTest.php index 0377812679b9d..029b4be8892cf 100644 --- a/apps/files_sharing/tests/LockingTest.php +++ b/apps/files_sharing/tests/LockingTest.php @@ -10,11 +10,10 @@ use OC\Files\Filesystem; use OC\Files\View; use OCP\Constants; -use OCP\IUserManager; use OCP\Lock\ILockingProvider; use OCP\Lock\LockedException; -use OCP\Server; use OCP\Share\IShare; +use Test\Traits\UserTrait; /** * Class LockingTest @@ -24,10 +23,7 @@ */ #[\PHPUnit\Framework\Attributes\Group(name: 'DB')] class LockingTest extends TestCase { - /** - * @var \Test\Util\User\Dummy - */ - private $userBackend; + use UserTrait; private $ownerUid; private $recipientUid; @@ -35,13 +31,10 @@ class LockingTest extends TestCase { protected function setUp(): void { parent::setUp(); - $this->userBackend = new \Test\Util\User\Dummy(); - Server::get(IUserManager::class)->registerBackend($this->userBackend); - $this->ownerUid = $this->getUniqueID('owner_'); $this->recipientUid = $this->getUniqueID('recipient_'); - $this->userBackend->createUser($this->ownerUid, ''); - $this->userBackend->createUser($this->recipientUid, ''); + $this->createUser($this->ownerUid, ''); + $this->createUser($this->recipientUid, ''); $this->loginAsUser($this->ownerUid); Filesystem::mkdir('/foo'); @@ -60,11 +53,6 @@ protected function setUp(): void { $this->assertTrue(Filesystem::file_exists('bar.txt')); } - protected function tearDown(): void { - Server::get(IUserManager::class)->removeBackend($this->userBackend); - parent::tearDown(); - } - public function testLockAsRecipient(): void { $this->expectException(LockedException::class); diff --git a/apps/files_sharing/tests/PropagationTestCase.php b/apps/files_sharing/tests/PropagationTestCase.php index 98bf5ad92fd62..b267929be01ca 100644 --- a/apps/files_sharing/tests/PropagationTestCase.php +++ b/apps/files_sharing/tests/PropagationTestCase.php @@ -9,6 +9,7 @@ use OC\Files\View; use OCA\Files_Sharing\Helper; +use OCP\Files\FileInfo; use OCP\IUserSession; use OCP\Server; @@ -17,7 +18,8 @@ abstract class PropagationTestCase extends TestCase { * @var View */ protected $rootView; - protected $fileIds = []; // [$user=>[$path=>$id]] + /** @var array */ + protected array $fileInfos = []; // [$user=>[$path=>$info]] protected $fileEtags = []; // [$id=>$etag] public static function setUpBeforeClass(): void { @@ -28,6 +30,13 @@ public static function setUpBeforeClass(): void { protected function setUp(): void { parent::setUp(); $this->setUpShares(); + + foreach ($this->fileInfos as $infos) { + /** @var FileInfo $info */ + foreach ($infos as $info) { + $this->fileEtags[$info->getId()] = $info->getEtag(); + } + } } protected function tearDown(): void { @@ -48,7 +57,7 @@ protected function assertEtagsChanged($users, $subPath = '') { $oldUser = Server::get(IUserSession::class)->getUser(); foreach ($users as $user) { $this->loginAsUser($user); - $id = $this->fileIds[$user][$subPath]; + $id = $this->fileInfos[$user][$subPath]->getId(); $path = $this->rootView->getPath($id); $etag = $this->rootView->getFileInfo($path)->getEtag(); $this->assertNotEquals($this->fileEtags[$id], $etag, 'Failed asserting that the etag for "' . $subPath . '" of user ' . $user . ' has changed'); @@ -65,7 +74,7 @@ protected function assertEtagsNotChanged($users, $subPath = '') { $oldUser = Server::get(IUserSession::class)->getUser(); foreach ($users as $user) { $this->loginAsUser($user); - $id = $this->fileIds[$user][$subPath]; + $id = $this->fileInfos[$user][$subPath]->getId(); $path = $this->rootView->getPath($id); $etag = $this->rootView->getFileInfo($path)->getEtag(); $this->assertEquals($this->fileEtags[$id], $etag, 'Failed asserting that the etag for "' . $subPath . '" of user ' . $user . ' has not changed'); diff --git a/apps/files_sharing/tests/SharesReminderJobTest.php b/apps/files_sharing/tests/SharesReminderJobTest.php index 641d9a5295fca..6af21b24579de 100644 --- a/apps/files_sharing/tests/SharesReminderJobTest.php +++ b/apps/files_sharing/tests/SharesReminderJobTest.php @@ -25,6 +25,7 @@ use OCP\Share\IShare; use PHPUnit\Framework\MockObject\MockObject; use Psr\Log\LoggerInterface; +use Test\Traits\UserTrait; /** * Class SharesReminderJobTest @@ -34,6 +35,8 @@ */ #[\PHPUnit\Framework\Attributes\Group(name: 'DB')] class SharesReminderJobTest extends \Test\TestCase { + use UserTrait; + private SharesReminderJob $job; private IDBConnection $db; private IManager $shareManager; @@ -56,8 +59,8 @@ protected function setUp(): void { $this->user1 = $this->getUniqueID('user1_'); $this->user2 = $this->getUniqueID('user2_'); - $user1 = $this->userManager->createUser($this->user1, 'longrandompassword'); - $user2 = $this->userManager->createUser($this->user2, 'longrandompassword'); + $user1 = $this->createUser($this->user1, 'longrandompassword'); + $user2 = $this->createUser($this->user2, 'longrandompassword'); $user1->setSystemEMailAddress('user1@test.com'); $user2->setSystemEMailAddress('user2@test.com'); @@ -80,16 +83,6 @@ protected function setUp(): void { protected function tearDown(): void { $this->db->executeUpdate('DELETE FROM `*PREFIX*share`'); - $userManager = Server::get(IUserManager::class); - $user1 = $userManager->get($this->user1); - if ($user1) { - $user1->delete(); - } - $user2 = $userManager->get($this->user2); - if ($user2) { - $user2->delete(); - } - $this->logout(); parent::tearDown(); diff --git a/apps/files_sharing/tests/TestCase.php b/apps/files_sharing/tests/TestCase.php index 02ee66d096118..b042e8f062780 100644 --- a/apps/files_sharing/tests/TestCase.php +++ b/apps/files_sharing/tests/TestCase.php @@ -7,25 +7,26 @@ */ namespace OCA\Files_Sharing\Tests; -use OC\Files\Cache\Storage; -use OC\Files\Filesystem; use OC\Files\View; -use OC\Group\Database; use OC\SystemConfig; use OC\User\DisplayNameCache; +use OC\User\Session; use OCA\Files_Sharing\AppInfo\Application; use OCA\Files_Sharing\External\MountProvider as ExternalMountProvider; use OCA\Files_Sharing\Listener\SharesUpdatedListener; use OCA\Files_Sharing\MountProvider; use OCP\Files\Config\IMountProviderCollection; use OCP\Files\IRootFolder; +use OCP\Files\ISetupManager; use OCP\IDBConnection; -use OCP\IGroupManager; use OCP\IUserManager; use OCP\IUserSession; use OCP\Server; +use OCP\Share\IManager; use OCP\Share\IShare; +use Test\Traits\GroupTrait; use Test\Traits\MountProviderTrait; +use Test\Traits\UserTrait; /** * Base class for sharing tests. @@ -33,6 +34,8 @@ #[\PHPUnit\Framework\Attributes\Group(name: 'DB')] abstract class TestCase extends \Test\TestCase { use MountProviderTrait; + use UserTrait; + use GroupTrait; public const TEST_FILES_SHARING_API_USER1 = 'test-share-user1'; public const TEST_FILES_SHARING_API_USER2 = 'test-share-user2'; @@ -54,13 +57,21 @@ abstract class TestCase extends \Test\TestCase { public $folder; public $subfolder; - /** @var \OCP\Share\IManager */ + /** @var IManager */ protected $shareManager; /** @var IRootFolder */ protected $rootFolder; + protected Session $userSession; + protected ISetupManager $setupManager; - public static function setUpBeforeClass(): void { - parent::setUpBeforeClass(); + protected function setUp(): void { + parent::setUp(); + + $this->shareManager = Server::get(IManager::class); + $this->rootFolder = Server::get(IRootFolder::class); + + $this->setupManager = Server::get(ISetupManager::class); + $this->userSession = Server::get(IUserSession::class); $app = new Application(); $app->registerMountProviders( @@ -69,54 +80,43 @@ public static function setUpBeforeClass(): void { Server::get(ExternalMountProvider::class), ); - // reset backend - Server::get(IUserManager::class)->clearBackends(); - Server::get(IGroupManager::class)->clearBackends(); - // clear share hooks \OC_Hook::clear('OCP\\Share'); \OC::registerShareHooks(Server::get(SystemConfig::class)); - // create users - $backend = new \Test\Util\User\Dummy(); - Server::get(IUserManager::class)->registerBackend($backend); - $backend->createUser(self::TEST_FILES_SHARING_API_USER1, self::TEST_FILES_SHARING_API_USER1); - $backend->createUser(self::TEST_FILES_SHARING_API_USER2, self::TEST_FILES_SHARING_API_USER2); - $backend->createUser(self::TEST_FILES_SHARING_API_USER3, self::TEST_FILES_SHARING_API_USER3); - $backend->createUser(self::TEST_FILES_SHARING_API_USER4, self::TEST_FILES_SHARING_API_USER4); - - // create group - $groupBackend = new \Test\Util\Group\Dummy(); - $groupBackend->createGroup(self::TEST_FILES_SHARING_API_GROUP1); - $groupBackend->createGroup('group'); - $groupBackend->createGroup('group1'); - $groupBackend->createGroup('group2'); - $groupBackend->createGroup('group3'); - $groupBackend->addToGroup(self::TEST_FILES_SHARING_API_USER1, 'group'); - $groupBackend->addToGroup(self::TEST_FILES_SHARING_API_USER2, 'group'); - $groupBackend->addToGroup(self::TEST_FILES_SHARING_API_USER3, 'group'); - $groupBackend->addToGroup(self::TEST_FILES_SHARING_API_USER2, 'group1'); - $groupBackend->addToGroup(self::TEST_FILES_SHARING_API_USER3, 'group2'); - $groupBackend->addToGroup(self::TEST_FILES_SHARING_API_USER4, 'group3'); - $groupBackend->addToGroup(self::TEST_FILES_SHARING_API_USER2, self::TEST_FILES_SHARING_API_GROUP1); - Server::get(IGroupManager::class)->addBackend($groupBackend); - Server::get(SharesUpdatedListener::class)->setCutOffMarkTime(-1); - } - protected function setUp(): void { - parent::setUp(); Server::get(DisplayNameCache::class)->clear(); + $this->createUser(self::TEST_FILES_SHARING_API_USER1, self::TEST_FILES_SHARING_API_USER1); + $this->createUser(self::TEST_FILES_SHARING_API_USER2, self::TEST_FILES_SHARING_API_USER2); + $this->createUser(self::TEST_FILES_SHARING_API_USER3, self::TEST_FILES_SHARING_API_USER3); + $this->createUser(self::TEST_FILES_SHARING_API_USER4, self::TEST_FILES_SHARING_API_USER4); + + $this->createGroup(self::TEST_FILES_SHARING_API_GROUP1, [ + self::TEST_FILES_SHARING_API_USER2, + ]); + $this->createGroup('group', [ + self::TEST_FILES_SHARING_API_USER1, + self::TEST_FILES_SHARING_API_USER2, + self::TEST_FILES_SHARING_API_USER3, + ]); + $this->createGroup('group1', [ + self::TEST_FILES_SHARING_API_USER2, + ]); + $this->createGroup('group2', [ + self::TEST_FILES_SHARING_API_USER3, + ]); + $this->createGroup('group3', [ + self::TEST_FILES_SHARING_API_USER4, + ]); + //login as user1 $this->loginHelper(self::TEST_FILES_SHARING_API_USER1); $this->data = 'foobar'; $this->view = new View('/' . self::TEST_FILES_SHARING_API_USER1 . '/files'); $this->view2 = new View('/' . self::TEST_FILES_SHARING_API_USER2 . '/files'); - - $this->shareManager = Server::get(\OCP\Share\IManager::class); - $this->rootFolder = Server::get(IRootFolder::class); } protected function tearDown(): void { @@ -132,73 +132,18 @@ protected function tearDown(): void { $qb->delete('filecache')->runAcrossAllShards(); $qb->executeStatement(); + $this->userSession->setUser(null); + $this->setupManager->tearDown(); + parent::tearDown(); } - public static function tearDownAfterClass(): void { - // cleanup users - $user = Server::get(IUserManager::class)->get(self::TEST_FILES_SHARING_API_USER1); - if ($user !== null) { - $user->delete(); - } - $user = Server::get(IUserManager::class)->get(self::TEST_FILES_SHARING_API_USER2); - if ($user !== null) { - $user->delete(); - } - $user = Server::get(IUserManager::class)->get(self::TEST_FILES_SHARING_API_USER3); - if ($user !== null) { - $user->delete(); - } - - // delete group - $group = Server::get(IGroupManager::class)->get(self::TEST_FILES_SHARING_API_GROUP1); - if ($group) { - $group->delete(); - } - - \OC_Util::tearDownFS(); - \OC_User::setUserId(''); - Filesystem::tearDown(); - - // reset backend - Server::get(IUserManager::class)->clearBackends(); - Server::get(IUserManager::class)->registerBackend(new \OC\User\Database()); - Server::get(IGroupManager::class)->clearBackends(); - Server::get(IGroupManager::class)->addBackend(new Database()); - - parent::tearDownAfterClass(); - } + protected function loginHelper(string $uid) { + $this->setupManager->tearDown(); + $user = Server::get(IUserManager::class)->get($uid); + $this->userSession->completeLogin($user, ['loginName' => $uid, 'password' => $uid], false); - /** - * @param string $user - * @param bool $create - * @param bool $password - */ - protected function loginHelper($user, $create = false, $password = false) { - if ($password === false) { - $password = $user; - } - - if ($create) { - $userManager = Server::get(IUserManager::class); - $groupManager = Server::get(IGroupManager::class); - - $userObject = $userManager->createUser($user, $password); - $group = $groupManager->createGroup('group'); - - if ($group && $userObject) { - $group->addUser($userObject); - } - } - - \OC_Util::tearDownFS(); - Storage::getGlobalCache()->clearCache(); - Server::get(IUserSession::class)->setUser(null); - Filesystem::tearDown(); - Server::get(IUserSession::class)->login($user, $password); - \OC::$server->getUserFolder($user); - - \OC_Util::setupFS($user); + $this->rootFolder->newFolder('/' . $uid . '/files'); } /** diff --git a/lib/base.php b/lib/base.php index b945ba3ee1d33..08000ee5c7cd9 100644 --- a/lib/base.php +++ b/lib/base.php @@ -980,23 +980,23 @@ public static function registerCleanupHooks(\OC\SystemConfig $systemConfig): voi $request = Server::get(IRequest::class); $throttler = Server::get(IThrottler::class); $throttler->resetDelay($request->getRemoteAddress(), 'login', ['user' => $uid]); - } - try { - $cache = new \OC\Cache\File(); - $cache->gc(); - } catch (\OC\ServerNotAvailableException $e) { - // not a GC exception, pass it on - throw $e; - } catch (\OC\ForbiddenException $e) { - // filesystem blocked for this request, ignore - } catch (\Exception $e) { - // a GC exception should not prevent users from using OC, - // so log the exception - Server::get(LoggerInterface::class)->warning('Exception when running cache gc.', [ - 'app' => 'core', - 'exception' => $e, - ]); + try { + $cache = new \OC\Cache\File(); + $cache->gc(); + } catch (\OC\ServerNotAvailableException $e) { + // not a GC exception, pass it on + throw $e; + } catch (\OC\ForbiddenException $e) { + // filesystem blocked for this request, ignore + } catch (\Exception $e) { + // a GC exception should not prevent users from using OC, + // so log the exception + Server::get(LoggerInterface::class)->warning('Exception when running cache gc.', [ + 'app' => 'core', + 'exception' => $e, + ]); + } } }); } diff --git a/lib/private/Group/Manager.php b/lib/private/Group/Manager.php index 028dffd227391..7916e6998d2e8 100644 --- a/lib/private/Group/Manager.php +++ b/lib/private/Group/Manager.php @@ -103,6 +103,14 @@ public function addBackend($backend) { $this->clearCaches(); } + #[\Override] + public function removeBackend(GroupInterface $backend): void { + $this->clearCaches(); + if (($i = array_search($backend, $this->backends)) !== false) { + unset($this->backends[$i]); + } + } + #[\Override] public function clearBackends() { $this->backends = []; diff --git a/lib/public/IGroupManager.php b/lib/public/IGroupManager.php index 93013e72891b0..74231f838cba3 100644 --- a/lib/public/IGroupManager.php +++ b/lib/public/IGroupManager.php @@ -38,6 +38,11 @@ public function isBackendUsed($backendClass); */ public function addBackend($backend); + /** + * @since 34.0.0 + */ + public function removeBackend(GroupInterface $backend): void; + /** * @since 8.0.0 */ diff --git a/tests/lib/Traits/EncryptionTrait.php b/tests/lib/Traits/EncryptionTrait.php index 2dc9213ff2431..7a553120beac7 100644 --- a/tests/lib/Traits/EncryptionTrait.php +++ b/tests/lib/Traits/EncryptionTrait.php @@ -17,6 +17,7 @@ use OCA\Encryption\Users\Setup; use OCP\App\IAppManager; use OCP\Encryption\IManager; +use OCP\Files\ISetupManager; use OCP\IConfig; use OCP\IUserManager; use OCP\IUserSession; @@ -38,10 +39,8 @@ abstract protected static function assertTrue($condition, string $message = ''): private $originalEncryptionModule; - /** @var IUserManager */ - private $userManager; - /** @var SetupManager */ - private $setupManager; + private IUserManager $userManagerEncTrait; + private ISetupManager $setupManagerEncTrait; /** * @var IConfig @@ -59,19 +58,19 @@ protected function loginWithEncryption($user = '') { // needed for fully logout Server::get(IUserSession::class)->setUser(null); - $this->setupManager->tearDown(); + $this->setupManagerEncTrait->tearDown(); \OC_User::setUserId($user); $this->postLogin(); \OC_Util::setupFS($user); - if ($this->userManager->userExists($user)) { + if ($this->userManagerEncTrait->userExists($user)) { \OC::$server->getUserFolder($user); } } protected function setupForUser($name, $password) { - $this->setupManager->tearDown(); - $this->setupManager->setupForUser($this->userManager->get($name)); + $this->setupManagerEncTrait->tearDown(); + $this->setupManagerEncTrait->setupForUser($this->userManagerEncTrait->get($name)); $container = $this->encryptionApp->getContainer(); /** @var KeyManager $keyManager */ @@ -101,8 +100,8 @@ protected function setUpEncryptionTrait() { $this->markTestSkipped('Encryption not ready'); } - $this->userManager = Server::get(IUserManager::class); - $this->setupManager = Server::get(SetupManager::class); + $this->userManagerEncTrait = Server::get(IUserManager::class); + $this->setupManagerEncTrait = Server::get(SetupManager::class); Server::get(IAppManager::class)->loadApp('encryption'); diff --git a/tests/lib/Traits/GroupTrait.php b/tests/lib/Traits/GroupTrait.php new file mode 100644 index 0000000000000..e3ccdefbd07a1 --- /dev/null +++ b/tests/lib/Traits/GroupTrait.php @@ -0,0 +1,63 @@ +gid, + [], + Server::get(IEventDispatcher::class), + Server::get(IUserManager::class), + ); + } + + #[\Override] + public function getGID(): string { + return $this->gid; + } +} + +/** + * Allow creating users in a temporary backend + */ +trait GroupTrait { + protected Dummy $groupBackend; + + protected function createGroup(string $name, array $users = []): IGroup { + $this->groupBackend->createGroup($name); + foreach ($users as $user) { + $this->groupBackend->addToGroup($user, $name); + } + return new DummyGroup($name); + } + + protected function addToGroup(string $user, string $group): void { + $this->groupBackend->addToGroup($user, $group); + } + + protected function setUpGroupTrait() { + $this->groupBackend = new Dummy(); + Server::get(IGroupManager::class)->addBackend($this->groupBackend); + } + + protected function tearDownGroupTrait() { + Server::get(IGroupManager::class)->removeBackend($this->groupBackend); + } +} diff --git a/tests/lib/Traits/UserTrait.php b/tests/lib/Traits/UserTrait.php index 67db6b18e5208..43b1219677bb0 100644 --- a/tests/lib/Traits/UserTrait.php +++ b/tests/lib/Traits/UserTrait.php @@ -13,7 +13,7 @@ use OCP\IUser; use OCP\IUserManager; use OCP\Server; -use OCP\UserInterface; +use Test\Util\User\Dummy; class DummyUser extends User { public function __construct( @@ -32,10 +32,7 @@ public function getUID(): string { * Allow creating users in a temporary backend */ trait UserTrait { - /** - * @var \Test\Util\User\Dummy|UserInterface - */ - protected $userBackend; + protected Dummy $userBackend; protected function createUser($name, $password): IUser { $this->userBackend->createUser($name, $password); @@ -43,7 +40,7 @@ protected function createUser($name, $password): IUser { } protected function setUpUserTrait() { - $this->userBackend = new \Test\Util\User\Dummy(); + $this->userBackend = new Dummy(); Server::get(IUserManager::class)->registerBackend($this->userBackend); }