Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorVincent Petry <vincent@nextcloud.com>2021-03-15 19:45:30 +0300
committerGitHub <noreply@github.com>2021-03-15 19:45:30 +0300
commite559afb8d409f75fdf9a216428d858d08aa1ee03 (patch)
treeafea41e1f4cf5f9f25070e819ef9637267c63ec0 /tests
parentf512705f8f3ba7ff676b139bbfc00dcf6d277bd1 (diff)
parent6ecf33bfe7ef719cd979de5b29fc1da02e255632 (diff)
Merge pull request #25136 from nextcloud/cachejail-search-filter
do cachejail search filtering in sql
Diffstat (limited to 'tests')
-rw-r--r--tests/lib/Files/Cache/Wrapper/CacheJailTest.php70
-rw-r--r--tests/lib/Share20/LegacyHooksTest.php19
2 files changed, 86 insertions, 3 deletions
diff --git a/tests/lib/Files/Cache/Wrapper/CacheJailTest.php b/tests/lib/Files/Cache/Wrapper/CacheJailTest.php
index f0943ba5a03..d9f7af1f034 100644
--- a/tests/lib/Files/Cache/Wrapper/CacheJailTest.php
+++ b/tests/lib/Files/Cache/Wrapper/CacheJailTest.php
@@ -9,6 +9,11 @@
namespace Test\Files\Cache\Wrapper;
use OC\Files\Cache\Wrapper\CacheJail;
+use OC\Files\Search\SearchComparison;
+use OC\Files\Search\SearchQuery;
+use OC\User\User;
+use OCP\Files\Search\ISearchComparison;
+use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Test\Files\Cache\CacheTest;
/**
@@ -32,6 +37,7 @@ class CacheJailTest extends CacheTest {
}
public function testSearchOutsideJail() {
+ $this->storage->getScanner()->scan('');
$file1 = 'foo/foobar';
$file2 = 'folder/foobar';
$data1 = ['size' => 100, 'mtime' => 50, 'mimetype' => 'foo/folder'];
@@ -44,6 +50,52 @@ class CacheJailTest extends CacheTest {
$result = $this->cache->search('%foobar%');
$this->assertCount(1, $result);
$this->assertEquals('foobar', $result[0]['path']);
+
+ $result = $this->cache->search('%foo%');
+ $this->assertCount(2, $result);
+ usort($result, function ($a, $b) {
+ return $a['path'] <=> $b['path'];
+ });
+ $this->assertEquals('', $result[0]['path']);
+ $this->assertEquals('foobar', $result[1]['path']);
+ }
+
+ public function testSearchMimeOutsideJail() {
+ $this->storage->getScanner()->scan('');
+ $file1 = 'foo/foobar';
+ $file2 = 'folder/foobar';
+ $data1 = ['size' => 100, 'mtime' => 50, 'mimetype' => 'foo/folder'];
+
+ $this->sourceCache->put($file1, $data1);
+ $this->sourceCache->put($file2, $data1);
+
+ $this->assertCount(2, $this->sourceCache->searchByMime('foo/folder'));
+
+ $result = $this->cache->search('%foobar%');
+ $this->assertCount(1, $result);
+ $this->assertEquals('foobar', $result[0]['path']);
+ }
+
+ public function testSearchQueryOutsideJail() {
+ $this->storage->getScanner()->scan('');
+ $file1 = 'foo/foobar';
+ $file2 = 'folder/foobar';
+ $data1 = ['size' => 100, 'mtime' => 50, 'mimetype' => 'foo/folder'];
+
+ $this->sourceCache->put($file1, $data1);
+ $this->sourceCache->put($file2, $data1);
+
+ $user = new User('foo', null, $this->createMock(EventDispatcherInterface::class));
+ $query = new SearchQuery(new SearchComparison(ISearchComparison::COMPARE_EQUAL, 'name', 'foobar'), 10, 0, [], $user);
+ $result = $this->cache->searchQuery($query);
+
+ $this->assertCount(1, $result);
+ $this->assertEquals('foobar', $result[0]['path']);
+
+ $query = new SearchQuery(new SearchComparison(ISearchComparison::COMPARE_EQUAL, 'name', 'foo'), 10, 0, [], $user);
+ $result = $this->cache->searchQuery($query);
+ $this->assertCount(1, $result);
+ $this->assertEquals('', $result[0]['path']);
}
public function testClearKeepEntriesOutsideJail() {
@@ -130,4 +182,22 @@ class CacheJailTest extends CacheTest {
$this->assertTrue($this->sourceCache->inCache('target/foo'));
$this->assertTrue($this->sourceCache->inCache('target/foo/bar'));
}
+
+ public function testSearchNested() {
+ $this->storage->getScanner()->scan('');
+ $file1 = 'foo';
+ $file2 = 'foo/bar';
+ $file3 = 'foo/bar/asd';
+ $data1 = ['size' => 100, 'mtime' => 50, 'mimetype' => 'foo/folder'];
+
+ $this->sourceCache->put($file1, $data1);
+ $this->sourceCache->put($file2, $data1);
+ $this->sourceCache->put($file3, $data1);
+
+ $nested = new \OC\Files\Cache\Wrapper\CacheJail($this->cache, 'bar');
+
+ $result = $nested->search('%asd%');
+ $this->assertCount(1, $result);
+ $this->assertEquals('asd', $result[0]['path']);
+ }
}
diff --git a/tests/lib/Share20/LegacyHooksTest.php b/tests/lib/Share20/LegacyHooksTest.php
index 66dbafe7691..a615e26afb0 100644
--- a/tests/lib/Share20/LegacyHooksTest.php
+++ b/tests/lib/Share20/LegacyHooksTest.php
@@ -26,6 +26,7 @@ namespace Test\Share20;
use OC\Share20\LegacyHooks;
use OC\Share20\Manager;
use OCP\Constants;
+use OCP\Files\Cache\ICacheEntry;
use OCP\Files\File;
use OCP\Share\IShare;
use Symfony\Component\EventDispatcher\EventDispatcher;
@@ -55,6 +56,9 @@ class LegacyHooksTest extends TestCase {
$path = $this->createMock(File::class);
$path->method('getId')->willReturn(1);
+ $info = $this->createMock(ICacheEntry::class);
+ $info->method('getMimeType')->willReturn('text/plain');
+
$share = $this->manager->newShare();
$share->setId(42)
->setProviderId('prov')
@@ -62,7 +66,8 @@ class LegacyHooksTest extends TestCase {
->setSharedWith('awesomeUser')
->setSharedBy('sharedBy')
->setNode($path)
- ->setTarget('myTarget');
+ ->setTarget('myTarget')
+ ->setNodeCacheEntry($info);
$hookListner = $this->getMockBuilder('Dummy')->setMethods(['pre'])->getMock();
\OCP\Util::connectHook('OCP\Share', 'pre_unshare', $hookListner, 'pre');
@@ -92,6 +97,9 @@ class LegacyHooksTest extends TestCase {
$path = $this->createMock(File::class);
$path->method('getId')->willReturn(1);
+ $info = $this->createMock(ICacheEntry::class);
+ $info->method('getMimeType')->willReturn('text/plain');
+
$share = $this->manager->newShare();
$share->setId(42)
->setProviderId('prov')
@@ -99,7 +107,8 @@ class LegacyHooksTest extends TestCase {
->setSharedWith('awesomeUser')
->setSharedBy('sharedBy')
->setNode($path)
- ->setTarget('myTarget');
+ ->setTarget('myTarget')
+ ->setNodeCacheEntry($info);
$hookListner = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock();
\OCP\Util::connectHook('OCP\Share', 'post_unshare', $hookListner, 'post');
@@ -143,6 +152,9 @@ class LegacyHooksTest extends TestCase {
$path = $this->createMock(File::class);
$path->method('getId')->willReturn(1);
+ $info = $this->createMock(ICacheEntry::class);
+ $info->method('getMimeType')->willReturn('text/plain');
+
$share = $this->manager->newShare();
$share->setId(42)
->setProviderId('prov')
@@ -150,7 +162,8 @@ class LegacyHooksTest extends TestCase {
->setSharedWith('awesomeUser')
->setSharedBy('sharedBy')
->setNode($path)
- ->setTarget('myTarget');
+ ->setTarget('myTarget')
+ ->setNodeCacheEntry($info);
$hookListner = $this->getMockBuilder('Dummy')->setMethods(['postFromSelf'])->getMock();
\OCP\Util::connectHook('OCP\Share', 'post_unshareFromSelf', $hookListner, 'postFromSelf');