Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
111 changes: 79 additions & 32 deletions tests/lib/Files/Cache/Wrapper/CachePermissionsMaskTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,31 +13,24 @@
use OCP\Constants;
use Test\Files\Cache\CacheTest;

/**
* Class CachePermissionsMask
*
*
* @package Test\Files\Cache\Wrapper
*/
#[\PHPUnit\Framework\Attributes\Group('DB')]
class CachePermissionsMaskTest extends CacheTest {
/**
* @var Cache $sourceCache
*/
protected $sourceCache;
protected Cache $sourceCache;

#[\Override]
protected function setUp(): void {
parent::setUp();
$this->storage->mkdir('foo');
$this->sourceCache = $this->cache;
$this->cache = $this->getMaskedCached(Constants::PERMISSION_ALL);
$this->cache = $this->getMaskedCache(Constants::PERMISSION_ALL);
}

protected function getMaskedCached($mask) {
protected function getMaskedCache(int $mask): CachePermissionsMask {
return new CachePermissionsMask($this->sourceCache, $mask);
}

/**
* @return list<array{0: int}>
*/
public static function maskProvider(): array {
return [
[Constants::PERMISSION_ALL],
Expand All @@ -47,58 +40,112 @@ public static function maskProvider(): array {
];
}

/**
* @param int $mask
*/
#[\PHPUnit\Framework\Attributes\DataProvider('maskProvider')]
public function testGetMasked($mask): void {
$cache = $this->getMaskedCached($mask);
public function testGetMasked(int $mask): void {
$cache = $this->getMaskedCache($mask);
$data = ['size' => 100, 'mtime' => 50, 'mimetype' => 'text/plain', 'permissions' => Constants::PERMISSION_ALL];
$this->sourceCache->put('foo', $data);
$result = $cache->get('foo');
$this->assertEquals($mask, $result['permissions']);
$this->assertSame($mask, $result['permissions']);

$data = ['size' => 100, 'mtime' => 50, 'mimetype' => 'text/plain', 'permissions' => Constants::PERMISSION_ALL - Constants::PERMISSION_DELETE];
$this->sourceCache->put('bar', $data);
$result = $cache->get('bar');
$this->assertEquals($mask & ~Constants::PERMISSION_DELETE, $result['permissions']);
$this->assertSame($mask & ~Constants::PERMISSION_DELETE, $result['permissions']);
}

/**
* @param int $mask
*/
#[\PHPUnit\Framework\Attributes\DataProvider('maskProvider')]
public function testGetFolderContentMasked($mask): void {
public function testGetFolderContentMasked(int $mask): void {
$this->storage->mkdir('foo');
$this->storage->file_put_contents('foo/bar', 'asd');
$this->storage->file_put_contents('foo/asd', 'bar');
$this->storage->getScanner()->scan('');

$cache = $this->getMaskedCached($mask);
$cache = $this->getMaskedCache($mask);
$files = $cache->getFolderContents('foo');
$this->assertCount(2, $files);

foreach ($files as $file) {
$this->assertEquals($mask & ~Constants::PERMISSION_CREATE, $file['permissions']);
$this->assertSame($mask & ~Constants::PERMISSION_CREATE, $file['permissions']);
}
}

/**
* @param int $mask
*/
#[\PHPUnit\Framework\Attributes\DataProvider('maskProvider')]
public function testSearchMasked($mask): void {
public function testSearchMasked(int $mask): void {
$this->storage->mkdir('foo');
$this->storage->file_put_contents('foo/bar', 'asd');
$this->storage->file_put_contents('foo/foobar', 'bar');
$this->storage->getScanner()->scan('');

$cache = $this->getMaskedCached($mask);
$cache = $this->getMaskedCache($mask);
$files = $cache->search('%bar');
$this->assertCount(2, $files);

foreach ($files as $file) {
$this->assertEquals($mask & ~Constants::PERMISSION_CREATE, $file['permissions']);
$this->assertSame($mask & ~Constants::PERMISSION_CREATE, $file['permissions']);
}
}

#[\PHPUnit\Framework\Attributes\DataProvider('maskProvider')]
public function testGetScannedFileMasked(int $mask): void {
$this->storage->mkdir('foo');
$this->storage->file_put_contents('foo/bar', 'asd');
$this->storage->getScanner()->scan('');

$cache = $this->getMaskedCache($mask);
$file = $cache->get('foo/bar');

$this->assertNotFalse($file);
$this->assertSame($mask & ~Constants::PERMISSION_CREATE, $file['permissions']);
}

#[\PHPUnit\Framework\Attributes\DataProvider('maskProvider')]
public function testGetScannedFolderMasked(int $mask): void {
$this->storage->mkdir('foo');
$this->storage->file_put_contents('foo/bar', 'asd');
$this->storage->getScanner()->scan('');

$cache = $this->getMaskedCache($mask);
$folder = $cache->get('foo');

$this->assertNotFalse($folder);
$this->assertSame($mask, $folder['permissions']);
}

public function testGetSetsScanPermissionsFromOriginalPermissions(): void {
$mask = Constants::PERMISSION_READ;
$cache = $this->getMaskedCache($mask);

$data = [
'size' => 100,
'mtime' => 50,
'mimetype' => 'text/plain',
'permissions' => Constants::PERMISSION_ALL,
];
$this->sourceCache->put('foo', $data);

$result = $cache->get('foo');

$this->assertSame(Constants::PERMISSION_ALL, $result['scan_permissions']);
$this->assertSame(Constants::PERMISSION_ALL & $mask, $result['permissions']);
}

public function testGetDoesNotOverwriteExistingScanPermissions(): void {
$mask = Constants::PERMISSION_READ;
$cache = $this->getMaskedCache($mask);

$data = [
'size' => 100,
'mtime' => 50,
'mimetype' => 'text/plain',
'permissions' => Constants::PERMISSION_ALL,
'scan_permissions' => Constants::PERMISSION_READ,
];
$this->sourceCache->put('foo', $data);

$result = $cache->get('foo');

$this->assertSame(Constants::PERMISSION_READ, $result['scan_permissions']);
$this->assertSame(Constants::PERMISSION_ALL & $mask, $result['permissions']);
}
}
Loading