diff options
-rw-r--r-- | lib/cache/apc.php | 46 | ||||
-rw-r--r-- | tests/lib/cache.php | 2 | ||||
-rw-r--r-- | tests/lib/cache/apc.php | 36 |
3 files changed, 84 insertions, 0 deletions
diff --git a/lib/cache/apc.php b/lib/cache/apc.php new file mode 100644 index 00000000000..f814afbe494 --- /dev/null +++ b/lib/cache/apc.php @@ -0,0 +1,46 @@ +<?php +/** + * Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +class OC_Cache_APC { + /** + * entries in APC gets namespaced to prevent collisions between owncloud instances and users + */ + protected function getNameSpace() { + return OC_Util::getInstanceId().'/'.OC_User::getUser().'/'; + } + + public function get($key) { + $result = apc_fetch($this->getNamespace().$key, $success); + if (!$success) { + return null; + } + return $result; + } + + public function set($key, $value, $ttl=0) { + return apc_store($this->getNamespace().$key, $value, $ttl); + } + + public function hasKey($key) { + return apc_exists($this->getNamespace().$key); + } + + public function remove($key) { + return apc_delete($this->getNamespace().$key); + } + + public function clear(){ + $ns = $this->getNamespace(); + $cache = apc_cache_info('user'); + foreach($cache['cache_list'] as $entry) { + if (strpos($entry['info'], $ns) === 0) { + apc_delete($entry['info']); + } + } + } +} diff --git a/tests/lib/cache.php b/tests/lib/cache.php index e90826b85f2..bb5cfc6ee19 100644 --- a/tests/lib/cache.php +++ b/tests/lib/cache.php @@ -40,6 +40,8 @@ abstract class Test_Cache extends UnitTestCase { $this->assertFalse($this->instance->hasKey('not_set')); $this->assertNull($this->instance->get('not_set'),'Unset value not equal to null'); + + $this->assertTrue($this->instance->remove('value1')); } function testTTL(){ diff --git a/tests/lib/cache/apc.php b/tests/lib/cache/apc.php new file mode 100644 index 00000000000..ab8eb188664 --- /dev/null +++ b/tests/lib/cache/apc.php @@ -0,0 +1,36 @@ +<?php +/** +* ownCloud +* +* @author Robin Appelman +* @copyright 2012 Robin Appelman icewind@owncloud.com +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU AFFERO GENERAL PUBLIC LICENSE for more details. +* +* You should have received a copy of the GNU Affero General Public +* License along with this library. If not, see <http://www.gnu.org/licenses/>. +* +*/ + +class Test_Cache_APC extends Test_Cache { + function skip() { + $this->skipUnless(function_exists('apc_store')); + } + + public function setUp(){ + $this->instance=new OC_Cache_APC(); + } + + function testTTL(){ + // ttl doesn't work correctly in the same request + // see https://bugs.php.net/bug.php?id=58084 + } +} |