summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVincent Petry <pvince81@owncloud.com>2015-06-30 17:34:10 +0200
committerVincent Petry <pvince81@owncloud.com>2015-07-01 15:19:43 +0200
commite48afaf33436857bc7efe255f72e58733819a1c8 (patch)
treebbc138dc7341c54888e0c147d42d42a9cd72805b
parent18e4fe7add6003e91d91b5fe11c60f360b0f47a2 (diff)
downloadnextcloud-server-e48afaf33436857bc7efe255f72e58733819a1c8.tar.gz
nextcloud-server-e48afaf33436857bc7efe255f72e58733819a1c8.zip
Test for chunk cache garbage collection
-rw-r--r--tests/lib/cache/file.php94
1 files changed, 89 insertions, 5 deletions
diff --git a/tests/lib/cache/file.php b/tests/lib/cache/file.php
index e31f84ee6f1..94001291d86 100644
--- a/tests/lib/cache/file.php
+++ b/tests/lib/cache/file.php
@@ -23,12 +23,22 @@
namespace Test\Cache;
class FileCache extends \Test_Cache {
- /** @var string */
+ /**
+ * @var string
+ * */
private $user;
- /** @var string */
+ /**
+ * @var string
+ * */
private $datadir;
- /** @var \OC\Files\Storage\Storage */
+ /**
+ * @var \OC\Files\Storage\Storage
+ * */
private $storage;
+ /**
+ * @var \OC\Files\View
+ * */
+ private $rootView;
function skip() {
//$this->skipUnless(OC_User::isLoggedIn());
@@ -59,13 +69,18 @@ class FileCache extends \Test_Cache {
\OC_User::setUserId('test');
//set up the users dir
- $rootView = new \OC\Files\View('');
- $rootView->mkdir('/test');
+ $this->rootView = new \OC\Files\View('');
+ $this->rootView->mkdir('/test');
$this->instance=new \OC\Cache\File();
+
+ // forces creation of cache folder for subsequent tests
+ $this->instance->set('hack', 'hack');
}
protected function tearDown() {
+ $this->instance->remove('hack', 'hack');
+
\OC_User::setUserId($this->user);
\OC_Config::setValue('cachedirectory', $this->datadir);
@@ -75,4 +90,73 @@ class FileCache extends \Test_Cache {
parent::tearDown();
}
+
+ private function setupMockStorage() {
+ $mockStorage = $this->getMock(
+ '\OC\Files\Storage\Local',
+ ['filemtime', 'unlink'],
+ [['datadir' => \OC::$server->getTempManager()->getTemporaryFolder()]]
+ );
+
+ \OC\Files\Filesystem::mount($mockStorage, array(), '/test/cache');
+
+ return $mockStorage;
+ }
+
+ public function testGarbageCollectOldKeys() {
+ $mockStorage = $this->setupMockStorage();
+
+ $mockStorage->expects($this->atLeastOnce())
+ ->method('filemtime')
+ ->will($this->returnValue(100));
+ $mockStorage->expects($this->once())
+ ->method('unlink')
+ ->with('key1')
+ ->will($this->returnValue(true));
+
+ $this->instance->set('key1', 'value1');
+ $this->instance->gc();
+ }
+
+ public function testGarbageCollectLeaveRecentKeys() {
+ $mockStorage = $this->setupMockStorage();
+
+ $mockStorage->expects($this->atLeastOnce())
+ ->method('filemtime')
+ ->will($this->returnValue(time() + 3600));
+ $mockStorage->expects($this->never())
+ ->method('unlink')
+ ->with('key1');
+ $this->instance->set('key1', 'value1');
+ $this->instance->gc();
+ }
+
+ public function lockExceptionProvider() {
+ return [
+ [new \OCP\Lock\LockedException('key1')],
+ [new \OCP\Files\LockNotAcquiredException('key1', 1)],
+ ];
+ }
+
+ /**
+ * @dataProvider lockExceptionProvider
+ */
+ public function testGarbageCollectIgnoreLockedKeys($testException) {
+ $mockStorage = $this->setupMockStorage();
+
+ $mockStorage->expects($this->atLeastOnce())
+ ->method('filemtime')
+ ->will($this->returnValue(100));
+ $mockStorage->expects($this->atLeastOnce())
+ ->method('unlink')
+ ->will($this->onConsecutiveCalls(
+ $this->throwException($testException),
+ $this->returnValue(true)
+ ));
+
+ $this->instance->set('key1', 'value1');
+ $this->instance->set('key2', 'value2');
+
+ $this->instance->gc();
+ }
}