diff options
author | Robin Appelman <icewind@owncloud.com> | 2013-12-05 15:23:34 +0100 |
---|---|---|
committer | Vincent Petry <pvince81@owncloud.com> | 2013-12-08 00:15:50 +0100 |
commit | 605fa4a444cf2de5deee22e6e298e095eab4c20a (patch) | |
tree | 037a251357572519e7305b078610fb21f5d30333 | |
parent | b6ecff93e1b1e79205d30fc471e9d56997861596 (diff) | |
download | nextcloud-server-605fa4a444cf2de5deee22e6e298e095eab4c20a.tar.gz nextcloud-server-605fa4a444cf2de5deee22e6e298e095eab4c20a.zip |
reuse etags when doing a background scan
-rw-r--r-- | lib/files/cache/scanner.php | 2 | ||||
-rw-r--r-- | tests/lib/files/etagtest.php | 79 |
2 files changed, 80 insertions, 1 deletions
diff --git a/lib/files/cache/scanner.php b/lib/files/cache/scanner.php index 429685ce794..23d40fd699d 100644 --- a/lib/files/cache/scanner.php +++ b/lib/files/cache/scanner.php @@ -255,7 +255,7 @@ class Scanner extends BasicEmitter { public function backgroundScan() { $lastPath = null; while (($path = $this->cache->getIncomplete()) !== false && $path !== $lastPath) { - $this->scan($path); + $this->scan($path, self::SCAN_RECURSIVE, self::REUSE_ETAG); $this->cache->correctFolderSize($path); $lastPath = $path; } diff --git a/tests/lib/files/etagtest.php b/tests/lib/files/etagtest.php new file mode 100644 index 00000000000..b50a96ab5bb --- /dev/null +++ b/tests/lib/files/etagtest.php @@ -0,0 +1,79 @@ +<?php +/** + * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace Test\Files; + +use OC\Files\Filesystem; +use OCP\Share; + +class EtagTest extends \PHPUnit_Framework_TestCase { + private $datadir; + + private $tmpDir; + + private $uid; + + /** + * @var \OC_User_Dummy $userBackend + */ + private $userBackend; + + public function setUp() { + \OC_Hook::clear('OC_Filesystem', 'setup'); + \OCP\Util::connectHook('OC_Filesystem', 'setup', '\OC\Files\Storage\Shared', 'setup'); + \OCP\Share::registerBackend('file', 'OC_Share_Backend_File'); + \OCP\Share::registerBackend('folder', 'OC_Share_Backend_Folder', 'file'); + + $this->datadir = \OC_Config::getValue('datadirectory'); + $this->tmpDir = \OC_Helper::tmpFolder(); + \OC_Config::setValue('datadirectory', $this->tmpDir); + $this->uid = \OC_User::getUser(); + \OC_User::setUserId(null); + + $this->userBackend = new \OC_User_Dummy(); + \OC_User::useBackend($this->userBackend); + \OC_Util::tearDownFS(); + } + + public function tearDown() { + \OC_Config::setValue('datadirectory', $this->datadir); + \OC_User::setUserId($this->uid); + \OC_Util::setupFS($this->uid); + } + + public function testWithSharing() { + $user1 = uniqid('user_'); + $this->userBackend->createUser($user1, ''); + + \OC_Util::tearDownFS(); + \OC_User::setUserId($user1); + \OC_Util::setupFS($user1); + Filesystem::mkdir('/folder'); + Filesystem::mkdir('/folder/subfolder'); + Filesystem::file_put_contents('/foo.txt', 'asd'); + Filesystem::file_put_contents('/folder/bar.txt', 'fgh'); + Filesystem::file_put_contents('/folder/subfolder/qwerty.txt', 'jkl'); + + $files = array('/folder', '/foo.txt', '/folder/bar.txt', '/folder/subfolder', '/folder/subfolder/qwerty.txt'); + $originalEtags = $this->getEtags($files); + + $scanner = new \OC\Files\Utils\Scanner($user1); + $scanner->backgroundScan('/'); + + $this->assertEquals($originalEtags, $this->getEtags($files)); + } + + private function getEtags($files) { + $etags = array(); + foreach ($files as $file) { + $info = Filesystem::getFileInfo($file); + $etags[$file] = $info['etag']; + } + return $etags; + } +} |