aboutsummaryrefslogtreecommitdiffstats
path: root/tests/lib/Files/Cache
diff options
context:
space:
mode:
Diffstat (limited to 'tests/lib/Files/Cache')
-rw-r--r--tests/lib/Files/Cache/CacheTest.php109
-rw-r--r--tests/lib/Files/Cache/FileAccessTest.php438
-rw-r--r--tests/lib/Files/Cache/HomeCacheTest.php29
-rw-r--r--tests/lib/Files/Cache/LocalRootScannerTest.php4
-rw-r--r--tests/lib/Files/Cache/MoveFromCacheTraitTest.php9
-rw-r--r--tests/lib/Files/Cache/PropagatorTest.php1
-rw-r--r--tests/lib/Files/Cache/ScannerTest.php13
-rw-r--r--tests/lib/Files/Cache/SearchBuilderTest.php13
-rw-r--r--tests/lib/Files/Cache/UpdaterLegacyTest.php27
-rw-r--r--tests/lib/Files/Cache/UpdaterTest.php16
-rw-r--r--tests/lib/Files/Cache/WatcherTest.php23
-rw-r--r--tests/lib/Files/Cache/Wrapper/CacheJailTest.php23
-rw-r--r--tests/lib/Files/Cache/Wrapper/CachePermissionsMaskTest.php15
13 files changed, 599 insertions, 121 deletions
diff --git a/tests/lib/Files/Cache/CacheTest.php b/tests/lib/Files/Cache/CacheTest.php
index 204f87d6a18..383962b7224 100644
--- a/tests/lib/Files/Cache/CacheTest.php
+++ b/tests/lib/Files/Cache/CacheTest.php
@@ -1,4 +1,5 @@
<?php
+
/**
* SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
@@ -11,13 +12,18 @@ use OC\Files\Cache\Cache;
use OC\Files\Cache\CacheEntry;
use OC\Files\Search\SearchComparison;
use OC\Files\Search\SearchQuery;
+use OC\Files\Storage\Temporary;
+use OC\User\User;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\Files\Cache\ICacheEntry;
use OCP\Files\Search\ISearchComparison;
use OCP\IDBConnection;
+use OCP\ITagManager;
use OCP\IUser;
+use OCP\IUserManager;
+use OCP\Server;
-class LongId extends \OC\Files\Storage\Temporary {
+class LongId extends Temporary {
public function getId(): string {
return 'long:' . str_repeat('foo', 50) . parent::getId();
}
@@ -32,23 +38,42 @@ class LongId extends \OC\Files\Storage\Temporary {
*/
class CacheTest extends \Test\TestCase {
/**
- * @var \OC\Files\Storage\Temporary $storage ;
+ * @var Temporary $storage ;
*/
protected $storage;
/**
- * @var \OC\Files\Storage\Temporary $storage2 ;
+ * @var Temporary $storage2 ;
*/
protected $storage2;
/**
- * @var \OC\Files\Cache\Cache $cache
+ * @var Cache $cache
*/
protected $cache;
/**
- * @var \OC\Files\Cache\Cache $cache2
+ * @var Cache $cache2
*/
protected $cache2;
+ protected function setUp(): void {
+ parent::setUp();
+
+ $this->storage = new Temporary([]);
+ $this->storage2 = new Temporary([]);
+ $this->cache = new Cache($this->storage);
+ $this->cache2 = new Cache($this->storage2);
+ $this->cache->insert('', ['size' => 0, 'mtime' => 0, 'mimetype' => ICacheEntry::DIRECTORY_MIMETYPE]);
+ $this->cache2->insert('', ['size' => 0, 'mtime' => 0, 'mimetype' => ICacheEntry::DIRECTORY_MIMETYPE]);
+ }
+
+ protected function tearDown(): void {
+ if ($this->cache) {
+ $this->cache->clear();
+ }
+
+ parent::tearDown();
+ }
+
public function testGetNumericId(): void {
$this->assertNotNull($this->cache->getNumericStorageId());
}
@@ -137,14 +162,12 @@ class CacheTest extends \Test\TestCase {
$this->assertEquals(new CacheEntry(['size' => 12, 'mtime' => 15]), $this->cache->get($file1));
}
- /**
- * @dataProvider folderDataProvider
- */
+ #[\PHPUnit\Framework\Attributes\DataProvider('folderDataProvider')]
public function testFolder($folder): void {
if (strpos($folder, 'F09F9890')) {
// 4 byte UTF doesn't work on mysql
- $params = \OC::$server->get(\OC\DB\Connection::class)->getParams();
- if (\OC::$server->getDatabaseConnection()->getDatabaseProvider() === IDBConnection::PLATFORM_MYSQL && $params['charset'] !== 'utf8mb4') {
+ $params = Server::get(\OC\DB\Connection::class)->getParams();
+ if (Server::get(IDBConnection::class)->getDatabaseProvider() === IDBConnection::PLATFORM_MYSQL && $params['charset'] !== 'utf8mb4') {
$this->markTestSkipped('MySQL doesn\'t support 4 byte UTF-8');
}
}
@@ -208,7 +231,7 @@ class CacheTest extends \Test\TestCase {
}
}
- public function folderDataProvider() {
+ public static function folderDataProvider(): array {
return [
['folder'],
// that was too easy, try something harder
@@ -292,16 +315,16 @@ class CacheTest extends \Test\TestCase {
}
public function testStatus(): void {
- $this->assertEquals(\OC\Files\Cache\Cache::NOT_FOUND, $this->cache->getStatus('foo'));
+ $this->assertEquals(Cache::NOT_FOUND, $this->cache->getStatus('foo'));
$this->cache->put('foo', ['size' => -1]);
- $this->assertEquals(\OC\Files\Cache\Cache::PARTIAL, $this->cache->getStatus('foo'));
+ $this->assertEquals(Cache::PARTIAL, $this->cache->getStatus('foo'));
$this->cache->put('foo', ['size' => -1, 'mtime' => 20, 'mimetype' => 'foo/file']);
- $this->assertEquals(\OC\Files\Cache\Cache::SHALLOW, $this->cache->getStatus('foo'));
+ $this->assertEquals(Cache::SHALLOW, $this->cache->getStatus('foo'));
$this->cache->put('foo', ['size' => 10]);
- $this->assertEquals(\OC\Files\Cache\Cache::COMPLETE, $this->cache->getStatus('foo'));
+ $this->assertEquals(Cache::COMPLETE, $this->cache->getStatus('foo'));
}
- public function putWithAllKindOfQuotesData() {
+ public static function putWithAllKindOfQuotesData(): array {
return [
['`backtick`'],
['´forward´'],
@@ -310,11 +333,11 @@ class CacheTest extends \Test\TestCase {
}
/**
- * @dataProvider putWithAllKindOfQuotesData
* @param $fileName
*/
+ #[\PHPUnit\Framework\Attributes\DataProvider('putWithAllKindOfQuotesData')]
public function testPutWithAllKindOfQuotes($fileName): void {
- $this->assertEquals(\OC\Files\Cache\Cache::NOT_FOUND, $this->cache->get($fileName));
+ $this->assertEquals(Cache::NOT_FOUND, $this->cache->get($fileName));
$this->cache->put($fileName, ['size' => 20, 'mtime' => 25, 'mimetype' => 'foo/file', 'etag' => $fileName]);
$cacheEntry = $this->cache->get($fileName);
@@ -352,9 +375,9 @@ class CacheTest extends \Test\TestCase {
public function testSearchQueryByTag(): void {
$userId = static::getUniqueID('user');
- \OC::$server->getUserManager()->createUser($userId, $userId);
+ Server::get(IUserManager::class)->createUser($userId, $userId);
static::loginAsUser($userId);
- $user = new \OC\User\User($userId, null, \OC::$server->get(IEventDispatcher::class));
+ $user = new User($userId, null, Server::get(IEventDispatcher::class));
$file1 = 'folder';
$file2 = 'folder/foobar';
@@ -374,7 +397,7 @@ class CacheTest extends \Test\TestCase {
$id4 = $this->cache->put($file4, $fileData['foo2']);
$id5 = $this->cache->put($file5, $fileData['foo3']);
- $tagManager = \OC::$server->getTagManager()->load('files', [], false, $userId);
+ $tagManager = Server::get(ITagManager::class)->load('files', [], false, $userId);
$this->assertTrue($tagManager->tagAs($id1, 'tag1'));
$this->assertTrue($tagManager->tagAs($id1, 'tag2'));
$this->assertTrue($tagManager->tagAs($id2, 'tag2'));
@@ -399,7 +422,7 @@ class CacheTest extends \Test\TestCase {
$tagManager->delete('tag2');
static::logout();
- $user = \OC::$server->getUserManager()->get($userId);
+ $user = Server::get(IUserManager::class)->get($userId);
if ($user !== null) {
try {
$user->delete();
@@ -437,7 +460,7 @@ class CacheTest extends \Test\TestCase {
new SearchComparison(ISearchComparison::COMPARE_GREATER_THAN_EQUAL, 'size', 100), 10, 0, [], $user)));
}
- public function movePathProvider() {
+ public static function movePathProvider(): array {
return [
['folder/foo', 'folder/foobar', ['1', '2']],
['folder/foo', 'foo', ['1', '2']],
@@ -445,9 +468,7 @@ class CacheTest extends \Test\TestCase {
];
}
- /**
- * @dataProvider movePathProvider
- */
+ #[\PHPUnit\Framework\Attributes\DataProvider('movePathProvider')]
public function testMove($sourceFolder, $targetFolder, $children): void {
$data = ['size' => 100, 'mtime' => 50, 'mimetype' => 'foo/bar'];
$folderData = ['size' => 100, 'mtime' => 50, 'mimetype' => ICacheEntry::DIRECTORY_MIMETYPE];
@@ -531,7 +552,7 @@ class CacheTest extends \Test\TestCase {
if (strlen($storageId) > 64) {
$storageId = md5($storageId);
}
- $this->assertEquals([$storageId, 'foo'], \OC\Files\Cache\Cache::getById($id));
+ $this->assertEquals([$storageId, 'foo'], Cache::getById($id));
}
public function testStorageMTime(): void {
@@ -558,7 +579,7 @@ class CacheTest extends \Test\TestCase {
$storageId = $storage->getId();
$data = ['size' => 1000, 'mtime' => 20, 'mimetype' => 'foo/file'];
$id = $cache->put('foo', $data);
- $this->assertEquals([md5($storageId), 'foo'], \OC\Files\Cache\Cache::getById($id));
+ $this->assertEquals([md5($storageId), 'foo'], Cache::getById($id));
}
/**
@@ -572,10 +593,10 @@ class CacheTest extends \Test\TestCase {
$folderWith0308 = "\x53\x63\x68\x6f\xcc\x88\x6e";
/**
- * @var \OC\Files\Cache\Cache | \PHPUnit\Framework\MockObject\MockObject $cacheMock
+ * @var Cache|\PHPUnit\Framework\MockObject\MockObject $cacheMock
*/
$cacheMock = $this->getMockBuilder(Cache::class)
- ->setMethods(['normalize'])
+ ->onlyMethods(['normalize'])
->setConstructorArgs([$this->storage])
->getMock();
@@ -646,7 +667,7 @@ class CacheTest extends \Test\TestCase {
$this->assertEquals(1, count($this->cache->getFolderContents('folder')));
}
- public function bogusPathNamesProvider() {
+ public static function bogusPathNamesProvider(): array {
return [
['/bogus.txt', 'bogus.txt'],
['//bogus.txt', 'bogus.txt'],
@@ -657,9 +678,8 @@ class CacheTest extends \Test\TestCase {
/**
* Test bogus paths with leading or doubled slashes
- *
- * @dataProvider bogusPathNamesProvider
*/
+ #[\PHPUnit\Framework\Attributes\DataProvider('bogusPathNamesProvider')]
public function testBogusPaths($bogusPath, $fixedBogusPath): void {
$data = ['size' => 100, 'mtime' => 50, 'mimetype' => ICacheEntry::DIRECTORY_MIMETYPE];
$parentId = $this->cache->getId('');
@@ -691,7 +711,7 @@ class CacheTest extends \Test\TestCase {
$this->assertNotEquals($fileId, $fileId2);
}
- public function escapingProvider() {
+ public static function escapingProvider(): array {
return [
['foo'],
['o%'],
@@ -701,8 +721,8 @@ class CacheTest extends \Test\TestCase {
/**
* @param string $name
- * @dataProvider escapingProvider
*/
+ #[\PHPUnit\Framework\Attributes\DataProvider('escapingProvider')]
public function testEscaping($name): void {
$data = ['size' => 100, 'mtime' => 50, 'mimetype' => 'text/plain'];
$this->cache->put($name, $data);
@@ -807,23 +827,4 @@ class CacheTest extends \Test\TestCase {
$this->cache->remove('sub');
}
-
- protected function tearDown(): void {
- if ($this->cache) {
- $this->cache->clear();
- }
-
- parent::tearDown();
- }
-
- protected function setUp(): void {
- parent::setUp();
-
- $this->storage = new \OC\Files\Storage\Temporary([]);
- $this->storage2 = new \OC\Files\Storage\Temporary([]);
- $this->cache = new \OC\Files\Cache\Cache($this->storage);
- $this->cache2 = new \OC\Files\Cache\Cache($this->storage2);
- $this->cache->insert('', ['size' => 0, 'mtime' => 0, 'mimetype' => ICacheEntry::DIRECTORY_MIMETYPE]);
- $this->cache2->insert('', ['size' => 0, 'mtime' => 0, 'mimetype' => ICacheEntry::DIRECTORY_MIMETYPE]);
- }
}
diff --git a/tests/lib/Files/Cache/FileAccessTest.php b/tests/lib/Files/Cache/FileAccessTest.php
new file mode 100644
index 00000000000..59fa2494ea8
--- /dev/null
+++ b/tests/lib/Files/Cache/FileAccessTest.php
@@ -0,0 +1,438 @@
+<?php
+
+/**
+ * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+namespace Test\Files\Cache;
+
+use OC\Files\Cache\CacheEntry;
+use OC\Files\Cache\FileAccess;
+use OCP\DB\QueryBuilder\IQueryBuilder;
+use OCP\IDBConnection;
+use Psr\Log\LoggerInterface;
+use Test\TestCase;
+
+/**
+ * @group DB
+ */
+class FileAccessTest extends TestCase {
+ private IDBConnection $dbConnection;
+ private FileAccess $fileAccess;
+
+ protected function setUp(): void {
+ parent::setUp();
+
+ // Setup the actual database connection (assume the database is configured properly in PHPUnit setup)
+ $this->dbConnection = \OCP\Server::get(IDBConnection::class);
+
+ // Ensure FileAccess is instantiated with the real connection
+ $this->fileAccess = new FileAccess(
+ $this->dbConnection,
+ \OCP\Server::get(\OC\SystemConfig::class),
+ \OCP\Server::get(LoggerInterface::class),
+ \OCP\Server::get(\OC\FilesMetadata\FilesMetadataManager::class),
+ \OCP\Server::get(\OCP\Files\IMimeTypeLoader::class)
+ );
+
+ // Clear and prepare `filecache` table for tests
+ $queryBuilder = $this->dbConnection->getQueryBuilder()->runAcrossAllShards();
+ $queryBuilder->delete('filecache')->executeStatement();
+
+ // Clean up potential leftovers from other tests
+ $queryBuilder = $this->dbConnection->getQueryBuilder();
+ $queryBuilder->delete('mounts')->executeStatement();
+
+
+ $this->setUpTestDatabaseForGetDistinctMounts();
+ $this->setUpTestDatabaseForGetByAncestorInStorage();
+ }
+
+ private function setUpTestDatabaseForGetDistinctMounts(): void {
+ $queryBuilder = $this->dbConnection->getQueryBuilder();
+
+ // Insert test data
+ $queryBuilder->insert('mounts')
+ ->values([
+ 'storage_id' => $queryBuilder->createNamedParameter(1, IQueryBuilder::PARAM_INT),
+ 'root_id' => $queryBuilder->createNamedParameter(10, IQueryBuilder::PARAM_INT),
+ 'mount_provider_class' => $queryBuilder->createNamedParameter('TestProviderClass1'),
+ 'mount_point' => $queryBuilder->createNamedParameter('/files'),
+ 'user_id' => $queryBuilder->createNamedParameter('test'),
+ ])
+ ->executeStatement();
+
+ $queryBuilder->insert('mounts')
+ ->values([
+ 'storage_id' => $queryBuilder->createNamedParameter(3, IQueryBuilder::PARAM_INT),
+ 'root_id' => $queryBuilder->createNamedParameter(30, IQueryBuilder::PARAM_INT),
+ 'mount_provider_class' => $queryBuilder->createNamedParameter('TestProviderClass1'),
+ 'mount_point' => $queryBuilder->createNamedParameter('/documents'),
+ 'user_id' => $queryBuilder->createNamedParameter('test'),
+ ])
+ ->executeStatement();
+
+ $queryBuilder->insert('mounts')
+ ->values([
+ 'storage_id' => $queryBuilder->createNamedParameter(4, IQueryBuilder::PARAM_INT),
+ 'root_id' => $queryBuilder->createNamedParameter(31, IQueryBuilder::PARAM_INT),
+ 'mount_provider_class' => $queryBuilder->createNamedParameter('TestProviderClass2'),
+ 'mount_point' => $queryBuilder->createNamedParameter('/foobar'),
+ 'user_id' => $queryBuilder->createNamedParameter('test'),
+ ])
+ ->executeStatement();
+ }
+
+ /**
+ * Test that getDistinctMounts returns all mounts without filters
+ */
+ public function testGetDistinctMountsWithoutFilters(): void {
+ $result = iterator_to_array($this->fileAccess->getDistinctMounts([], false));
+
+ $this->assertCount(3, $result);
+
+ $this->assertEquals([
+ 'storage_id' => 1,
+ 'root_id' => 10,
+ 'overridden_root' => 10,
+ ], $result[0]);
+
+ $this->assertEquals([
+ 'storage_id' => 3,
+ 'root_id' => 30,
+ 'overridden_root' => 30,
+ ], $result[1]);
+
+ $this->assertEquals([
+ 'storage_id' => 4,
+ 'root_id' => 31,
+ 'overridden_root' => 31,
+ ], $result[2]);
+ }
+
+ /**
+ * Test that getDistinctMounts applies filtering by mount providers
+ */
+ public function testGetDistinctMountsWithMountProviderFilter(): void {
+ $result = iterator_to_array($this->fileAccess->getDistinctMounts(['TestProviderClass1'], false));
+
+ $this->assertCount(2, $result);
+
+ $this->assertEquals([
+ 'storage_id' => 1,
+ 'root_id' => 10,
+ 'overridden_root' => 10,
+ ], $result[0]);
+
+ $this->assertEquals([
+ 'storage_id' => 3,
+ 'root_id' => 30,
+ 'overridden_root' => 30,
+ ], $result[1]);
+ }
+
+ /**
+ * Test that getDistinctMounts rewrites home directory paths
+ */
+ public function testGetDistinctMountsWithRewriteHomeDirectories(): void {
+ // Add additional test data for a home directory mount
+ $queryBuilder = $this->dbConnection->getQueryBuilder();
+ $queryBuilder->insert('mounts')
+ ->values([
+ 'storage_id' => $queryBuilder->createNamedParameter(4, IQueryBuilder::PARAM_INT),
+ 'root_id' => $queryBuilder->createNamedParameter(40, IQueryBuilder::PARAM_INT),
+ 'mount_provider_class' => $queryBuilder->createNamedParameter(\OC\Files\Mount\LocalHomeMountProvider::class),
+ 'mount_point' => $queryBuilder->createNamedParameter('/home/user'),
+ 'user_id' => $queryBuilder->createNamedParameter('test'),
+ ])
+ ->executeStatement();
+
+ // Add a mount that is mounted in the home directory
+ $queryBuilder = $this->dbConnection->getQueryBuilder();
+ $queryBuilder->insert('mounts')
+ ->values([
+ 'storage_id' => $queryBuilder->createNamedParameter(5, IQueryBuilder::PARAM_INT),
+ 'root_id' => $queryBuilder->createNamedParameter(41, IQueryBuilder::PARAM_INT),
+ 'mount_provider_class' => $queryBuilder->createNamedParameter('TestMountProvider3'),
+ 'mount_point' => $queryBuilder->createNamedParameter('/test/files/foobar'),
+ 'user_id' => $queryBuilder->createNamedParameter('test'),
+ ])
+ ->executeStatement();
+
+ // Simulate adding a "files" directory to the filecache table
+ $queryBuilder = $this->dbConnection->getQueryBuilder()->runAcrossAllShards();
+ $queryBuilder->delete('filecache')->executeStatement();
+ $queryBuilder = $this->dbConnection->getQueryBuilder();
+ $queryBuilder->insert('filecache')
+ ->values([
+ 'fileid' => $queryBuilder->createNamedParameter(99, IQueryBuilder::PARAM_INT),
+ 'storage' => $queryBuilder->createNamedParameter(4, IQueryBuilder::PARAM_INT),
+ 'parent' => $queryBuilder->createNamedParameter(40),
+ 'name' => $queryBuilder->createNamedParameter('files'),
+ 'path' => $queryBuilder->createNamedParameter('files'),
+ 'path_hash' => $queryBuilder->createNamedParameter(md5('files')),
+ ])
+ ->executeStatement();
+
+ $result = iterator_to_array($this->fileAccess->getDistinctMounts());
+
+ $this->assertCount(2, $result);
+
+ $this->assertEquals([
+ 'storage_id' => 4,
+ 'root_id' => 40,
+ 'overridden_root' => 99,
+ ], $result[0]);
+
+ $this->assertEquals([
+ 'storage_id' => 5,
+ 'root_id' => 41,
+ 'overridden_root' => 41,
+ ], $result[1]);
+ }
+
+ private function setUpTestDatabaseForGetByAncestorInStorage(): void {
+ // prepare `filecache` table for tests
+ $queryBuilder = $this->dbConnection->getQueryBuilder();
+
+ $queryBuilder->insert('filecache')
+ ->values([
+ 'fileid' => 1,
+ 'parent' => 0,
+ 'path' => $queryBuilder->createNamedParameter('files'),
+ 'path_hash' => $queryBuilder->createNamedParameter(md5('files')),
+ 'storage' => $queryBuilder->createNamedParameter(1),
+ 'name' => $queryBuilder->createNamedParameter('files'),
+ 'mimetype' => 1,
+ 'encrypted' => 0,
+ ])
+ ->executeStatement();
+
+ $queryBuilder->insert('filecache')
+ ->values([
+ 'fileid' => 2,
+ 'parent' => 1,
+ 'path' => $queryBuilder->createNamedParameter('files/documents'),
+ 'path_hash' => $queryBuilder->createNamedParameter(md5('files/documents')),
+ 'storage' => $queryBuilder->createNamedParameter(1),
+ 'name' => $queryBuilder->createNamedParameter('documents'),
+ 'mimetype' => 2,
+ 'encrypted' => 1,
+ ])
+ ->executeStatement();
+
+ $queryBuilder->insert('filecache')
+ ->values([
+ 'fileid' => 3,
+ 'parent' => 1,
+ 'path' => $queryBuilder->createNamedParameter('files/photos'),
+ 'path_hash' => $queryBuilder->createNamedParameter(md5('files/photos')),
+ 'storage' => $queryBuilder->createNamedParameter(1),
+ 'name' => $queryBuilder->createNamedParameter('photos'),
+ 'mimetype' => 3,
+ 'encrypted' => 1,
+ ])
+ ->executeStatement();
+
+ $queryBuilder->insert('filecache')
+ ->values([
+ 'fileid' => 4,
+ 'parent' => 3,
+ 'path' => $queryBuilder->createNamedParameter('files/photos/endtoendencrypted'),
+ 'path_hash' => $queryBuilder->createNamedParameter(md5('files/photos/endtoendencrypted')),
+ 'storage' => $queryBuilder->createNamedParameter(1),
+ 'name' => $queryBuilder->createNamedParameter('endtoendencrypted'),
+ 'mimetype' => 4,
+ 'encrypted' => 0,
+ ])
+ ->executeStatement();
+
+ $queryBuilder->insert('filecache')
+ ->values([
+ 'fileid' => 5,
+ 'parent' => 1,
+ 'path' => $queryBuilder->createNamedParameter('files/serversideencrypted'),
+ 'path_hash' => $queryBuilder->createNamedParameter(md5('files/serversideencrypted')),
+ 'storage' => $queryBuilder->createNamedParameter(1),
+ 'name' => $queryBuilder->createNamedParameter('serversideencrypted'),
+ 'mimetype' => 4,
+ 'encrypted' => 1,
+ ])
+ ->executeStatement();
+
+ $queryBuilder->insert('filecache')
+ ->values([
+ 'fileid' => 6,
+ 'parent' => 0,
+ 'path' => $queryBuilder->createNamedParameter('files/storage2'),
+ 'path_hash' => $queryBuilder->createNamedParameter(md5('files/storage2')),
+ 'storage' => $queryBuilder->createNamedParameter(2),
+ 'name' => $queryBuilder->createNamedParameter('storage2'),
+ 'mimetype' => 5,
+ 'encrypted' => 0,
+ ])
+ ->executeStatement();
+
+ $queryBuilder->insert('filecache')
+ ->values([
+ 'fileid' => 7,
+ 'parent' => 6,
+ 'path' => $queryBuilder->createNamedParameter('files/storage2/file'),
+ 'path_hash' => $queryBuilder->createNamedParameter(md5('files/storage2/file')),
+ 'storage' => $queryBuilder->createNamedParameter(2),
+ 'name' => $queryBuilder->createNamedParameter('file'),
+ 'mimetype' => 6,
+ 'encrypted' => 0,
+ ])
+ ->executeStatement();
+ }
+
+ /**
+ * Test fetching files by ancestor in storage.
+ */
+ public function testGetByAncestorInStorage(): void {
+ $generator = $this->fileAccess->getByAncestorInStorage(
+ 1, // storageId
+ 1, // rootId
+ 0, // lastFileId
+ 10, // maxResults
+ [], // mimeTypes
+ true, // include end-to-end encrypted files
+ true, // include server-side encrypted files
+ );
+
+ $result = iterator_to_array($generator);
+
+ $this->assertCount(4, $result);
+
+ $paths = array_map(fn (CacheEntry $entry) => $entry->getPath(), $result);
+ $this->assertEquals([
+ 'files/documents',
+ 'files/photos',
+ 'files/photos/endtoendencrypted',
+ 'files/serversideencrypted',
+ ], $paths);
+ }
+
+ /**
+ * Test filtering by mime types.
+ */
+ public function testGetByAncestorInStorageWithMimeTypes(): void {
+ $generator = $this->fileAccess->getByAncestorInStorage(
+ 1,
+ 1,
+ 0,
+ 10,
+ [2], // Only include documents (mimetype=2)
+ true,
+ true,
+ );
+
+ $result = iterator_to_array($generator);
+
+ $this->assertCount(1, $result);
+ $this->assertEquals('files/documents', $result[0]->getPath());
+ }
+
+ /**
+ * Test excluding end-to-end encrypted files.
+ */
+ public function testGetByAncestorInStorageWithoutEndToEndEncrypted(): void {
+ $generator = $this->fileAccess->getByAncestorInStorage(
+ 1,
+ 1,
+ 0,
+ 10,
+ [],
+ false, // exclude end-to-end encrypted files
+ true,
+ );
+
+ $result = iterator_to_array($generator);
+
+ $this->assertCount(3, $result);
+ $paths = array_map(fn (CacheEntry $entry) => $entry->getPath(), $result);
+ $this->assertEquals(['files/documents', 'files/photos', 'files/serversideencrypted'], $paths);
+ }
+
+ /**
+ * Test excluding server-side encrypted files.
+ */
+ public function testGetByAncestorInStorageWithoutServerSideEncrypted(): void {
+ $generator = $this->fileAccess->getByAncestorInStorage(
+ 1,
+ 1,
+ 0,
+ 10,
+ [],
+ true,
+ false, // exclude server-side encrypted files
+ );
+
+ $result = iterator_to_array($generator);
+
+ $this->assertCount(1, $result);
+ $this->assertEquals('files/photos/endtoendencrypted', $result[0]->getPath());
+ }
+
+ /**
+ * Test max result limits.
+ */
+ public function testGetByAncestorInStorageWithMaxResults(): void {
+ $generator = $this->fileAccess->getByAncestorInStorage(
+ 1,
+ 1,
+ 0,
+ 1, // Limit to 1 result
+ [],
+ true,
+ true,
+ );
+
+ $result = iterator_to_array($generator);
+
+ $this->assertCount(1, $result);
+ $this->assertEquals('files/documents', $result[0]->getPath());
+ }
+
+ /**
+ * Test rootId filter
+ */
+ public function testGetByAncestorInStorageWithRootIdFilter(): void {
+ $generator = $this->fileAccess->getByAncestorInStorage(
+ 1,
+ 3, // Filter by rootId
+ 0,
+ 10,
+ [],
+ true,
+ true,
+ );
+
+ $result = iterator_to_array($generator);
+
+ $this->assertCount(1, $result);
+ $this->assertEquals('files/photos/endtoendencrypted', $result[0]->getPath());
+ }
+
+ /**
+ * Test rootId filter
+ */
+ public function testGetByAncestorInStorageWithStorageFilter(): void {
+ $generator = $this->fileAccess->getByAncestorInStorage(
+ 2, // Filter by storage
+ 6, // and by rootId
+ 0,
+ 10,
+ [],
+ true,
+ true,
+ );
+
+ $result = iterator_to_array($generator);
+
+ $this->assertCount(1, $result);
+ $this->assertEquals('files/storage2/file', $result[0]->getPath());
+ }
+}
diff --git a/tests/lib/Files/Cache/HomeCacheTest.php b/tests/lib/Files/Cache/HomeCacheTest.php
index ad069de1fef..86fda615fd7 100644
--- a/tests/lib/Files/Cache/HomeCacheTest.php
+++ b/tests/lib/Files/Cache/HomeCacheTest.php
@@ -1,4 +1,5 @@
<?php
+
/**
* SPDX-FileCopyrightText: 2019-2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
@@ -7,24 +8,20 @@
namespace Test\Files\Cache;
-class DummyUser extends \OC\User\User {
- /**
- * @var string $home
- */
- private $home;
-
- /**
- * @var string $uid
- */
- private $uid;
+use OC\Files\Storage\Home;
+use OC\User\User;
+use OCP\ITempManager;
+use OCP\Server;
+class DummyUser extends User {
/**
* @param string $uid
* @param string $home
*/
- public function __construct($uid, $home) {
- $this->home = $home;
- $this->uid = $uid;
+ public function __construct(
+ private $uid,
+ private $home,
+ ) {
}
/**
@@ -61,15 +58,15 @@ class HomeCacheTest extends \Test\TestCase {
private $cache;
/**
- * @var \OC\User\User $user
+ * @var User $user
*/
private $user;
protected function setUp(): void {
parent::setUp();
- $this->user = new DummyUser('foo', \OC::$server->getTempManager()->getTemporaryFolder());
- $this->storage = new \OC\Files\Storage\Home(['user' => $this->user]);
+ $this->user = new DummyUser('foo', Server::get(ITempManager::class)->getTemporaryFolder());
+ $this->storage = new Home(['user' => $this->user]);
$this->cache = $this->storage->getCache();
}
diff --git a/tests/lib/Files/Cache/LocalRootScannerTest.php b/tests/lib/Files/Cache/LocalRootScannerTest.php
index e683283b7e1..727da2ed698 100644
--- a/tests/lib/Files/Cache/LocalRootScannerTest.php
+++ b/tests/lib/Files/Cache/LocalRootScannerTest.php
@@ -9,6 +9,8 @@ declare(strict_types=1);
namespace Test\Files\Cache;
use OC\Files\Storage\LocalRootStorage;
+use OCP\ITempManager;
+use OCP\Server;
use Test\TestCase;
/**
@@ -21,7 +23,7 @@ class LocalRootScannerTest extends TestCase {
protected function setUp(): void {
parent::setUp();
- $folder = \OC::$server->getTempManager()->getTemporaryFolder();
+ $folder = Server::get(ITempManager::class)->getTemporaryFolder();
$this->storage = new LocalRootStorage(['datadir' => $folder]);
}
diff --git a/tests/lib/Files/Cache/MoveFromCacheTraitTest.php b/tests/lib/Files/Cache/MoveFromCacheTraitTest.php
index e8a6c8acf32..d580cdca4b9 100644
--- a/tests/lib/Files/Cache/MoveFromCacheTraitTest.php
+++ b/tests/lib/Files/Cache/MoveFromCacheTraitTest.php
@@ -1,4 +1,5 @@
<?php
+
/**
* SPDX-FileCopyrightText: 2019-2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
@@ -7,10 +8,12 @@
namespace Test\Files\Cache;
+use OC\Files\Cache\Cache;
use OC\Files\Cache\MoveFromCacheTrait;
+use OC\Files\Storage\Temporary;
use OCP\Files\Cache\ICacheEntry;
-class FallBackCrossCacheMoveCache extends \OC\Files\Cache\Cache {
+class FallBackCrossCacheMoveCache extends Cache {
use MoveFromCacheTrait;
}
@@ -23,8 +26,8 @@ class MoveFromCacheTraitTest extends CacheTest {
protected function setUp(): void {
parent::setUp();
- $this->storage = new \OC\Files\Storage\Temporary([]);
- $this->storage2 = new \OC\Files\Storage\Temporary([]);
+ $this->storage = new Temporary([]);
+ $this->storage2 = new Temporary([]);
$this->cache = new FallBackCrossCacheMoveCache($this->storage);
$this->cache2 = new FallBackCrossCacheMoveCache($this->storage2);
diff --git a/tests/lib/Files/Cache/PropagatorTest.php b/tests/lib/Files/Cache/PropagatorTest.php
index e88816dfccc..2ab213e9567 100644
--- a/tests/lib/Files/Cache/PropagatorTest.php
+++ b/tests/lib/Files/Cache/PropagatorTest.php
@@ -1,4 +1,5 @@
<?php
+
/**
* SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
diff --git a/tests/lib/Files/Cache/ScannerTest.php b/tests/lib/Files/Cache/ScannerTest.php
index d78b7100d43..123c13893f7 100644
--- a/tests/lib/Files/Cache/ScannerTest.php
+++ b/tests/lib/Files/Cache/ScannerTest.php
@@ -1,4 +1,5 @@
<?php
+
/**
* SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
@@ -14,6 +15,8 @@ use OC\Files\Cache\Scanner;
use OC\Files\Storage\Storage;
use OC\Files\Storage\Temporary;
use OCP\Files\Cache\IScanner;
+use OCP\IDBConnection;
+use OCP\Server;
use Test\TestCase;
/**
@@ -67,7 +70,7 @@ class ScannerTest extends TestCase {
$data = "dummy file data\n";
$this->storage->file_put_contents('foo🙈.txt', $data);
- if (OC::$server->getDatabaseConnection()->supports4ByteText()) {
+ if (Server::get(IDBConnection::class)->supports4ByteText()) {
$this->assertNotNull($this->scanner->scanFile('foo🙈.txt'));
$this->assertTrue($this->cache->inCache('foo🙈.txt'), true);
@@ -337,7 +340,7 @@ class ScannerTest extends TestCase {
$oldFolderId = $this->cache->getId('folder');
// delete the folder without removing the children
- $query = OC::$server->getDatabaseConnection()->getQueryBuilder();
+ $query = Server::get(IDBConnection::class)->getQueryBuilder();
$query->delete('filecache')
->where($query->expr()->eq('fileid', $query->createNamedParameter($oldFolderId)));
$query->execute();
@@ -363,7 +366,7 @@ class ScannerTest extends TestCase {
$oldFolderId = $this->cache->getId('folder');
// delete the folder without removing the children
- $query = OC::$server->getDatabaseConnection()->getQueryBuilder();
+ $query = Server::get(IDBConnection::class)->getQueryBuilder();
$query->delete('filecache')
->where($query->expr()->eq('fileid', $query->createNamedParameter($oldFolderId)));
$query->execute();
@@ -383,18 +386,18 @@ class ScannerTest extends TestCase {
}
/**
- * @dataProvider dataTestIsPartialFile
*
* @param string $path
* @param bool $expected
*/
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataTestIsPartialFile')]
public function testIsPartialFile($path, $expected): void {
$this->assertSame($expected,
$this->scanner->isPartialFile($path)
);
}
- public function dataTestIsPartialFile() {
+ public static function dataTestIsPartialFile(): array {
return [
['foo.txt.part', true],
['/sub/folder/foo.txt.part', true],
diff --git a/tests/lib/Files/Cache/SearchBuilderTest.php b/tests/lib/Files/Cache/SearchBuilderTest.php
index 17285d44209..ee097044e3b 100644
--- a/tests/lib/Files/Cache/SearchBuilderTest.php
+++ b/tests/lib/Files/Cache/SearchBuilderTest.php
@@ -1,4 +1,5 @@
<?php
+
/**
* SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
@@ -16,6 +17,8 @@ use OCP\Files\Search\ISearchBinaryOperator;
use OCP\Files\Search\ISearchComparison;
use OCP\Files\Search\ISearchOperator;
use OCP\FilesMetadata\IFilesMetadataManager;
+use OCP\IDBConnection;
+use OCP\Server;
use Test\TestCase;
/**
@@ -39,7 +42,7 @@ class SearchBuilderTest extends TestCase {
protected function setUp(): void {
parent::setUp();
- $this->builder = \OC::$server->getDatabaseConnection()->getQueryBuilder();
+ $this->builder = Server::get(IDBConnection::class)->getQueryBuilder();
$this->mimetypeLoader = $this->createMock(IMimeTypeLoader::class);
$this->filesMetadataManager = $this->createMock(IFilesMetadataManager::class);
@@ -76,7 +79,7 @@ class SearchBuilderTest extends TestCase {
protected function tearDown(): void {
parent::tearDown();
- $builder = \OC::$server->getDatabaseConnection()->getQueryBuilder();
+ $builder = Server::get(IDBConnection::class)->getQueryBuilder();
$builder->delete('filecache')
->where($builder->expr()->eq('storage', $builder->createNamedParameter($this->numericStorageId, IQueryBuilder::PARAM_INT)));
@@ -109,7 +112,7 @@ class SearchBuilderTest extends TestCase {
$data['mimetype'] = 1;
}
- $builder = \OC::$server->getDatabaseConnection()->getQueryBuilder();
+ $builder = Server::get(IDBConnection::class)->getQueryBuilder();
$values = [];
foreach ($data as $key => $value) {
@@ -134,7 +137,7 @@ class SearchBuilderTest extends TestCase {
return $rows;
}
- public function comparisonProvider() {
+ public static function comparisonProvider(): array {
return [
[new SearchComparison(ISearchComparison::COMPARE_GREATER_THAN, 'mtime', 125), [1]],
[new SearchComparison(ISearchComparison::COMPARE_LESS_THAN, 'mtime', 125), [0]],
@@ -175,11 +178,11 @@ class SearchBuilderTest extends TestCase {
}
/**
- * @dataProvider comparisonProvider
*
* @param ISearchOperator $operator
* @param array $fileIds
*/
+ #[\PHPUnit\Framework\Attributes\DataProvider('comparisonProvider')]
public function testComparison(ISearchOperator $operator, array $fileIds): void {
$fileId = [];
$fileId[] = $this->addCacheEntry([
diff --git a/tests/lib/Files/Cache/UpdaterLegacyTest.php b/tests/lib/Files/Cache/UpdaterLegacyTest.php
index 0f7e9d78d77..c71fac2d2dc 100644
--- a/tests/lib/Files/Cache/UpdaterLegacyTest.php
+++ b/tests/lib/Files/Cache/UpdaterLegacyTest.php
@@ -1,4 +1,5 @@
<?php
+
/**
* SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
@@ -7,9 +8,15 @@
namespace Test\Files\Cache;
+use OC\Files\Cache\Cache;
+use OC\Files\Cache\Scanner;
use OC\Files\Filesystem as Filesystem;
+use OC\Files\Storage\Storage;
+use OC\Files\Storage\Temporary;
use OC\Files\View;
use OCP\Files\Mount\IMountManager;
+use OCP\IUserManager;
+use OCP\Server;
/**
* Class UpdaterLegacyTest
@@ -20,17 +27,17 @@ use OCP\Files\Mount\IMountManager;
*/
class UpdaterLegacyTest extends \Test\TestCase {
/**
- * @var \OC\Files\Storage\Storage $storage
+ * @var Storage $storage
*/
private $storage;
/**
- * @var \OC\Files\Cache\Scanner $scanner
+ * @var Scanner $scanner
*/
private $scanner;
/**
- * @var \OC\Files\Cache\Cache $cache
+ * @var Cache $cache
*/
private $cache;
@@ -39,7 +46,7 @@ class UpdaterLegacyTest extends \Test\TestCase {
protected function setUp(): void {
parent::setUp();
- $this->storage = new \OC\Files\Storage\Temporary([]);
+ $this->storage = new Temporary([]);
$textData = "dummy file data\n";
$imgData = file_get_contents(\OC::$SERVERROOT . '/core/img/logo/logo.png');
$this->storage->mkdir('folder');
@@ -56,13 +63,13 @@ class UpdaterLegacyTest extends \Test\TestCase {
self::$user = $this->getUniqueID();
}
- \OC::$server->getUserManager()->createUser(self::$user, 'NotAnEasyPassword123456+');
+ Server::get(IUserManager::class)->createUser(self::$user, 'NotAnEasyPassword123456+');
$this->loginAsUser(self::$user);
Filesystem::init(self::$user, '/' . self::$user . '/files');
/** @var IMountManager $manager */
- $manager = \OC::$server->get(IMountManager::class);
+ $manager = Server::get(IMountManager::class);
$manager->removeMount('/' . self::$user);
Filesystem::mount($this->storage, [], '/' . self::$user . '/files');
@@ -76,7 +83,7 @@ class UpdaterLegacyTest extends \Test\TestCase {
}
$result = false;
- $user = \OC::$server->getUserManager()->get(self::$user);
+ $user = Server::get(IUserManager::class)->get(self::$user);
if ($user !== null) {
$result = $user->delete();
}
@@ -122,7 +129,7 @@ class UpdaterLegacyTest extends \Test\TestCase {
}
public function testWriteWithMountPoints(): void {
- $storage2 = new \OC\Files\Storage\Temporary([]);
+ $storage2 = new Temporary([]);
$storage2->getScanner()->scan(''); //initialize etags
$cache2 = $storage2->getCache();
Filesystem::mount($storage2, [], '/' . self::$user . '/files/folder/substorage');
@@ -183,7 +190,7 @@ class UpdaterLegacyTest extends \Test\TestCase {
}
public function testDeleteWithMountPoints(): void {
- $storage2 = new \OC\Files\Storage\Temporary([]);
+ $storage2 = new Temporary([]);
$cache2 = $storage2->getCache();
Filesystem::mount($storage2, [], '/' . self::$user . '/files/folder/substorage');
Filesystem::file_put_contents('folder/substorage/foo.txt', 'asd');
@@ -239,7 +246,7 @@ class UpdaterLegacyTest extends \Test\TestCase {
}
public function testRenameWithMountPoints(): void {
- $storage2 = new \OC\Files\Storage\Temporary([]);
+ $storage2 = new Temporary([]);
$cache2 = $storage2->getCache();
Filesystem::mount($storage2, [], '/' . self::$user . '/files/folder/substorage');
Filesystem::file_put_contents('folder/substorage/foo.txt', 'asd');
diff --git a/tests/lib/Files/Cache/UpdaterTest.php b/tests/lib/Files/Cache/UpdaterTest.php
index ab46bdd4141..65c47cb9ae6 100644
--- a/tests/lib/Files/Cache/UpdaterTest.php
+++ b/tests/lib/Files/Cache/UpdaterTest.php
@@ -1,4 +1,5 @@
<?php
+
/**
* SPDX-FileCopyrightText: 2019-2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
@@ -7,10 +8,13 @@
namespace Test\Files\Cache;
+use OC\Files\Cache\Cache;
use OC\Files\Filesystem;
use OC\Files\ObjectStore\ObjectStoreStorage;
use OC\Files\ObjectStore\StorageObjectStore;
+use OC\Files\Storage\Storage;
use OC\Files\Storage\Temporary;
+use OC\Files\View;
use OCP\Files\Storage\IStorage;
/**
@@ -22,17 +26,17 @@ use OCP\Files\Storage\IStorage;
*/
class UpdaterTest extends \Test\TestCase {
/**
- * @var \OC\Files\Storage\Storage
+ * @var Storage
*/
protected $storage;
/**
- * @var \OC\Files\Cache\Cache
+ * @var Cache
*/
protected $cache;
/**
- * @var \OC\Files\View
+ * @var View
*/
protected $view;
@@ -305,16 +309,14 @@ class UpdaterTest extends \Test\TestCase {
}
}
- public function changeExtensionProvider(): array {
+ public static function changeExtensionProvider(): array {
return [
[new Temporary()],
[new ObjectStoreStorage(['objectstore' => new StorageObjectStore(new Temporary())])]
];
}
- /**
- * @dataProvider changeExtensionProvider
- */
+ #[\PHPUnit\Framework\Attributes\DataProvider('changeExtensionProvider')]
public function testChangeExtension(IStorage $storage) {
$updater = $storage->getUpdater();
$cache = $storage->getCache();
diff --git a/tests/lib/Files/Cache/WatcherTest.php b/tests/lib/Files/Cache/WatcherTest.php
index 7319aa9b68d..6d0a8e0886b 100644
--- a/tests/lib/Files/Cache/WatcherTest.php
+++ b/tests/lib/Files/Cache/WatcherTest.php
@@ -1,4 +1,5 @@
<?php
+
/**
* SPDX-FileCopyrightText: 2018-2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
@@ -7,6 +8,10 @@
namespace Test\Files\Cache;
+use OC\Files\Cache\Watcher;
+use OC\Files\Storage\Storage;
+use OC\Files\Storage\Temporary;
+
/**
* Class WatcherTest
*
@@ -16,7 +21,7 @@ namespace Test\Files\Cache;
*/
class WatcherTest extends \Test\TestCase {
/**
- * @var \OC\Files\Storage\Storage[] $storages
+ * @var Storage[] $storages
*/
private $storages = [];
@@ -44,7 +49,7 @@ class WatcherTest extends \Test\TestCase {
$storage = $this->getTestStorage();
$cache = $storage->getCache();
$updater = $storage->getWatcher();
- $updater->setPolicy(\OC\Files\Cache\Watcher::CHECK_ONCE);
+ $updater->setPolicy(Watcher::CHECK_ONCE);
//set the mtime to the past so it can detect an mtime change
$cache->put('', ['storage_mtime' => 10]);
@@ -85,7 +90,7 @@ class WatcherTest extends \Test\TestCase {
$storage = $this->getTestStorage();
$cache = $storage->getCache();
$updater = $storage->getWatcher();
- $updater->setPolicy(\OC\Files\Cache\Watcher::CHECK_ONCE);
+ $updater->setPolicy(Watcher::CHECK_ONCE);
//set the mtime to the past so it can detect an mtime change
$cache->put('', ['storage_mtime' => 10]);
@@ -102,7 +107,7 @@ class WatcherTest extends \Test\TestCase {
$storage = $this->getTestStorage();
$cache = $storage->getCache();
$updater = $storage->getWatcher();
- $updater->setPolicy(\OC\Files\Cache\Watcher::CHECK_ONCE);
+ $updater->setPolicy(Watcher::CHECK_ONCE);
//set the mtime to the past so it can detect an mtime change
$cache->put('foo.txt', ['storage_mtime' => 10]);
@@ -124,7 +129,7 @@ class WatcherTest extends \Test\TestCase {
//set the mtime to the past so it can detect an mtime change
$cache->put('foo.txt', ['storage_mtime' => 10]);
- $updater->setPolicy(\OC\Files\Cache\Watcher::CHECK_NEVER);
+ $updater->setPolicy(Watcher::CHECK_NEVER);
$storage->file_put_contents('foo.txt', 'q');
$this->assertFalse($updater->checkUpdate('foo.txt'));
@@ -142,7 +147,7 @@ class WatcherTest extends \Test\TestCase {
//set the mtime to the past so it can detect an mtime change
$cache->put('foo.txt', ['storage_mtime' => 10]);
- $updater->setPolicy(\OC\Files\Cache\Watcher::CHECK_ONCE);
+ $updater->setPolicy(Watcher::CHECK_ONCE);
$storage->file_put_contents('foo.txt', 'q');
$this->assertTrue($updater->checkUpdate('foo.txt'));
@@ -160,7 +165,7 @@ class WatcherTest extends \Test\TestCase {
//set the mtime to the past so it can detect an mtime change
$cache->put('foo.txt', ['storage_mtime' => 10]);
- $updater->setPolicy(\OC\Files\Cache\Watcher::CHECK_ALWAYS);
+ $updater->setPolicy(Watcher::CHECK_ALWAYS);
$storage->file_put_contents('foo.txt', 'q');
$this->assertTrue($updater->checkUpdate('foo.txt'));
@@ -172,10 +177,10 @@ class WatcherTest extends \Test\TestCase {
/**
* @param bool $scan
- * @return \OC\Files\Storage\Storage
+ * @return Storage
*/
private function getTestStorage($scan = true) {
- $storage = new \OC\Files\Storage\Temporary([]);
+ $storage = new Temporary([]);
$textData = "dummy file data\n";
$imgData = file_get_contents(\OC::$SERVERROOT . '/core/img/logo/logo.png');
$storage->mkdir('folder');
diff --git a/tests/lib/Files/Cache/Wrapper/CacheJailTest.php b/tests/lib/Files/Cache/Wrapper/CacheJailTest.php
index aed13c41ac0..8ac3492fbd2 100644
--- a/tests/lib/Files/Cache/Wrapper/CacheJailTest.php
+++ b/tests/lib/Files/Cache/Wrapper/CacheJailTest.php
@@ -1,4 +1,5 @@
<?php
+
/**
* SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
@@ -7,7 +8,9 @@
namespace Test\Files\Cache\Wrapper;
+use OC\Files\Cache\Cache;
use OC\Files\Cache\Wrapper\CacheJail;
+use OC\Files\Cache\Wrapper\CacheWrapper;
use OC\Files\Search\SearchComparison;
use OC\Files\Search\SearchQuery;
use OC\Files\Storage\Wrapper\Jail;
@@ -26,7 +29,7 @@ use Test\Files\Cache\CacheTest;
*/
class CacheJailTest extends CacheTest {
/**
- * @var \OC\Files\Cache\Cache $sourceCache
+ * @var Cache $sourceCache
*/
protected $sourceCache;
@@ -34,7 +37,7 @@ class CacheJailTest extends CacheTest {
parent::setUp();
$this->storage->mkdir('jail');
$this->sourceCache = $this->cache;
- $this->cache = new \OC\Files\Cache\Wrapper\CacheJail($this->sourceCache, 'jail');
+ $this->cache = new CacheJail($this->sourceCache, 'jail');
$this->cache->insert('', ['size' => 0, 'mtime' => 0, 'mimetype' => ICacheEntry::DIRECTORY_MIMETYPE]);
}
@@ -129,7 +132,7 @@ class CacheJailTest extends CacheTest {
$this->assertEquals('bar', $path);
// path from jailed '' of foo/bar is foo/bar
- $this->cache = new \OC\Files\Cache\Wrapper\CacheJail($this->sourceCache, '');
+ $this->cache = new CacheJail($this->sourceCache, '');
$path = $this->cache->getPathById($id);
$this->assertEquals('jail/bar', $path);
}
@@ -199,7 +202,7 @@ class CacheJailTest extends CacheTest {
$this->sourceCache->put($file2, $data1);
$this->sourceCache->put($file3, $data1);
- $nested = new \OC\Files\Cache\Wrapper\CacheJail($this->cache, 'bar');
+ $nested = new CacheJail($this->cache, 'bar');
$result = $nested->search('%asd%');
$this->assertCount(1, $result);
@@ -217,7 +220,7 @@ class CacheJailTest extends CacheTest {
$this->sourceCache->put($file2, $data1);
$this->sourceCache->put($file3, $data1);
- $nested = new \OC\Files\Cache\Wrapper\CacheJail($this->sourceCache, '');
+ $nested = new CacheJail($this->sourceCache, '');
$result = $nested->search('%asd%');
$this->assertCount(1, $result);
@@ -252,4 +255,14 @@ class CacheJailTest extends CacheTest {
$storage->getWatcher()->update('bar', ['mimetype' => 'text/plain']);
$this->assertTrue($this->cache->inCache('bar'));
}
+
+ public function testUnJailedRoot(): void {
+ $jail1 = new CacheJail($this->sourceCache, 'foo');
+ $jail2 = new CacheJail($jail1, 'bar');
+ $this->assertEquals('foo/bar', $jail2->getGetUnjailedRoot());
+
+ $middleWrapper = new CacheWrapper($jail1);
+ $jail3 = new CacheJail($middleWrapper, 'bar');
+ $this->assertEquals('foo/bar', $jail3->getGetUnjailedRoot());
+ }
}
diff --git a/tests/lib/Files/Cache/Wrapper/CachePermissionsMaskTest.php b/tests/lib/Files/Cache/Wrapper/CachePermissionsMaskTest.php
index afb5c6a5d4d..4fbeafc9270 100644
--- a/tests/lib/Files/Cache/Wrapper/CachePermissionsMaskTest.php
+++ b/tests/lib/Files/Cache/Wrapper/CachePermissionsMaskTest.php
@@ -1,4 +1,5 @@
<?php
+
/**
* SPDX-FileCopyrightText: 2019-2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
@@ -7,6 +8,8 @@
namespace Test\Files\Cache\Wrapper;
+use OC\Files\Cache\Cache;
+use OC\Files\Cache\Wrapper\CachePermissionsMask;
use OCP\Constants;
use Test\Files\Cache\CacheTest;
@@ -19,7 +22,7 @@ use Test\Files\Cache\CacheTest;
*/
class CachePermissionsMaskTest extends CacheTest {
/**
- * @var \OC\Files\Cache\Cache $sourceCache
+ * @var Cache $sourceCache
*/
protected $sourceCache;
@@ -31,10 +34,10 @@ class CachePermissionsMaskTest extends CacheTest {
}
protected function getMaskedCached($mask) {
- return new \OC\Files\Cache\Wrapper\CachePermissionsMask($this->sourceCache, $mask);
+ return new CachePermissionsMask($this->sourceCache, $mask);
}
- public function maskProvider() {
+ public static function maskProvider(): array {
return [
[Constants::PERMISSION_ALL],
[Constants::PERMISSION_ALL - Constants::PERMISSION_SHARE],
@@ -44,9 +47,9 @@ class CachePermissionsMaskTest extends CacheTest {
}
/**
- * @dataProvider maskProvider
* @param int $mask
*/
+ #[\PHPUnit\Framework\Attributes\DataProvider('maskProvider')]
public function testGetMasked($mask): void {
$cache = $this->getMaskedCached($mask);
$data = ['size' => 100, 'mtime' => 50, 'mimetype' => 'text/plain', 'permissions' => Constants::PERMISSION_ALL];
@@ -61,9 +64,9 @@ class CachePermissionsMaskTest extends CacheTest {
}
/**
- * @dataProvider maskProvider
* @param int $mask
*/
+ #[\PHPUnit\Framework\Attributes\DataProvider('maskProvider')]
public function testGetFolderContentMasked($mask): void {
$this->storage->mkdir('foo');
$this->storage->file_put_contents('foo/bar', 'asd');
@@ -80,9 +83,9 @@ class CachePermissionsMaskTest extends CacheTest {
}
/**
- * @dataProvider maskProvider
* @param int $mask
*/
+ #[\PHPUnit\Framework\Attributes\DataProvider('maskProvider')]
public function testSearchMasked($mask): void {
$this->storage->mkdir('foo');
$this->storage->file_put_contents('foo/bar', 'asd');