From 301a14dcd6502f3eaaa621476c1fd788727f60ec Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Tue, 5 Jun 2012 19:58:30 +0200 Subject: [PATCH] add XCache backend and testcases for OC_Cache --- lib/cache/xcache.php | 37 +++++++++++++++++++++++++++++++++ tests/lib/cache.php | 42 ++++++++++++++++++++++++++++++++++++++ tests/lib/cache/file.php | 27 ++++++++++++++++++++++++ tests/lib/cache/xcache.php | 27 ++++++++++++++++++++++++ 4 files changed, 133 insertions(+) create mode 100644 lib/cache/xcache.php create mode 100644 tests/lib/cache.php create mode 100644 tests/lib/cache/file.php create mode 100644 tests/lib/cache/xcache.php diff --git a/lib/cache/xcache.php b/lib/cache/xcache.php new file mode 100644 index 0000000000..a1f4d905b8 --- /dev/null +++ b/lib/cache/xcache.php @@ -0,0 +1,37 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + + +class OC_Cache_XCache{ + /** + * entries in XCache gets namespaced to prevent collisions between owncloud instaces and users + */ + protected function getNameSpace() { + return OC_Util::getInstanceId().'/'.OC_User::getUser().'/'; + } + + public function get($key) { + return xcache_get($this->getNamespace().$key); + } + + public function set($key, $value, $ttl=0) { + if($ttl>0){ + return xcache_set($this->getNamespace().$key,$value,$ttl); + }else{ + return xcache_set($this->getNamespace().$key,$value); + } + } + + public function remove($key) { + return xcache_unset($this->getNamespace().$key); + } + + public function clear(){ + return xcache_unset_by_prefix($this->getNamespace()); + } +} diff --git a/tests/lib/cache.php b/tests/lib/cache.php new file mode 100644 index 0000000000..35e83a9ddc --- /dev/null +++ b/tests/lib/cache.php @@ -0,0 +1,42 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +abstract class Test_Cache extends UnitTestCase { + /** + * @var OC_Cache cache; + */ + protected $instance; + + public function tearDown(){ + $this->instance->clear(); + } + + function testSimple(){ + $this->assertNull($this->instance->get('value1')); + + $value='foobar'; + $this->instance->set('value1',$value); + $received=$this->instance->get('value1'); + $this->assertEqual($value,$received,'Value recieved from cache not equal to the original'); + $value='ipsum lorum'; + $this->instance->set('value1',$value); + $received=$this->instance->get('value1'); + $this->assertEqual($value,$received,'Value not overwritten by seccond set'); + + $value2='foobar'; + $this->instance->set('value2',$value2); + $received2=$this->instance->get('value2'); + $this->assertEqual($value,$received,'Value changed while setting other variable'); + $this->assertEqual($value2,$received2,'Seccond value not equal to original'); + + $this->assertNull($this->instance->get('not_set'),'Unset value not equal to null'); + } + + function testTTL(){ + } +} \ No newline at end of file diff --git a/tests/lib/cache/file.php b/tests/lib/cache/file.php new file mode 100644 index 0000000000..226e5068c4 --- /dev/null +++ b/tests/lib/cache/file.php @@ -0,0 +1,27 @@ +. +* +*/ + +class Test_Cache_File extends Test_Cache { + public function setUp(){ + $this->instance=new OC_Cache_File(); + } +} diff --git a/tests/lib/cache/xcache.php b/tests/lib/cache/xcache.php new file mode 100644 index 0000000000..9ec80ff83c --- /dev/null +++ b/tests/lib/cache/xcache.php @@ -0,0 +1,27 @@ +. +* +*/ + +class Test_Cache_XCache extends Test_Cache { + public function setUp(){ + $this->instance=new OC_Cache_XCache(); + } +}