From 3cde7a3e4b8f43d3bcb1abf8d6dbe2978027da75 Mon Sep 17 00:00:00 2001
From: Philipp Holzer <admin@philipp.info>
Date: Sat, 7 Jul 2018 20:35:42 +0200
Subject: [PATCH] Fixed & added unittests

---
 tests/src/Core/Cache/ArrayCacheDriverTest.php |  4 +-
 .../Core/Cache/DatabaseCacheDriverTest.php    |  2 +-
 .../Core/Cache/MemcacheCacheDriverTest.php    |  4 +-
 .../Core/Cache/MemcachedCacheDriverTest.php   |  4 +-
 tests/src/Core/Cache/MemoryCacheTest.php      | 92 +++++++++++++++++++
 tests/src/Core/Cache/RedisCacheDriverTest.php |  4 +-
 6 files changed, 101 insertions(+), 9 deletions(-)
 create mode 100644 tests/src/Core/Cache/MemoryCacheTest.php

diff --git a/tests/src/Core/Cache/ArrayCacheDriverTest.php b/tests/src/Core/Cache/ArrayCacheDriverTest.php
index 860e566d88..0cad6e9c7f 100644
--- a/tests/src/Core/Cache/ArrayCacheDriverTest.php
+++ b/tests/src/Core/Cache/ArrayCacheDriverTest.php
@@ -5,7 +5,7 @@ namespace Friendica\Test\src\Core\Cache;
 
 use Friendica\Core\Cache\ArrayCache;
 
-class ArrayCacheDriverTest extends CacheTest
+class ArrayCacheDriverTest extends MemoryCacheTest
 {
 	/**
 	 * @var \Friendica\Core\Cache\IMemoryCacheDriver
@@ -20,7 +20,7 @@ class ArrayCacheDriverTest extends CacheTest
 
 	public function tearDown()
 	{
-		$this->cache->clear();
+		$this->cache->clear(false);
 		parent::tearDown();
 	}
 
diff --git a/tests/src/Core/Cache/DatabaseCacheDriverTest.php b/tests/src/Core/Cache/DatabaseCacheDriverTest.php
index ed2e47fb47..5df00fc913 100644
--- a/tests/src/Core/Cache/DatabaseCacheDriverTest.php
+++ b/tests/src/Core/Cache/DatabaseCacheDriverTest.php
@@ -19,7 +19,7 @@ class DatabaseCacheDriverTest extends CacheTest
 
 	public function tearDown()
 	{
-		$this->cache->clear();
+		$this->cache->clear(false);
 		parent::tearDown();
 	}
 }
diff --git a/tests/src/Core/Cache/MemcacheCacheDriverTest.php b/tests/src/Core/Cache/MemcacheCacheDriverTest.php
index 4dbd10289e..d2078236e2 100644
--- a/tests/src/Core/Cache/MemcacheCacheDriverTest.php
+++ b/tests/src/Core/Cache/MemcacheCacheDriverTest.php
@@ -6,7 +6,7 @@ namespace Friendica\Test\src\Core\Cache;
 
 use Friendica\Core\Cache\CacheDriverFactory;
 
-class MemcachedCacheDriverTest extends CacheTest
+class MemcacheCacheDriverTest extends MemoryCacheTest
 {
 	/**
 	 * @var \Friendica\Core\Cache\IMemoryCacheDriver
@@ -32,7 +32,7 @@ class MemcachedCacheDriverTest extends CacheTest
 	public function tearDown()
 	{
 		if (class_exists('Memcache')) {
-			$this->cache->clear();
+			$this->cache->clear(false);
 		}
 		parent::tearDown();
 	}
diff --git a/tests/src/Core/Cache/MemcachedCacheDriverTest.php b/tests/src/Core/Cache/MemcachedCacheDriverTest.php
index ff76ddefc4..2484517424 100644
--- a/tests/src/Core/Cache/MemcachedCacheDriverTest.php
+++ b/tests/src/Core/Cache/MemcachedCacheDriverTest.php
@@ -6,7 +6,7 @@ namespace Friendica\Test\src\Core\Cache;
 
 use Friendica\Core\Cache\CacheDriverFactory;
 
-class MemcachedCacheDriverTest extends CacheTest
+class MemcachedCacheDriverTest extends MemoryCacheTest
 {
 	/**
 	 * @var \Friendica\Core\Cache\IMemoryCacheDriver
@@ -32,7 +32,7 @@ class MemcachedCacheDriverTest extends CacheTest
 	public function tearDown()
 	{
 		if (class_exists('Memcached')) {
-			$this->cache->clear();
+			$this->cache->clear(false);
 		}
 		parent::tearDown();
 	}
diff --git a/tests/src/Core/Cache/MemoryCacheTest.php b/tests/src/Core/Cache/MemoryCacheTest.php
new file mode 100644
index 0000000000..3f7af71f6d
--- /dev/null
+++ b/tests/src/Core/Cache/MemoryCacheTest.php
@@ -0,0 +1,92 @@
+<?php
+
+namespace Friendica\Test\src\Core\Cache;
+
+use Friendica\Core\Cache\IMemoryCacheDriver;
+
+abstract class MemoryCacheTest extends CacheTest
+{
+	/**
+	 * @var \Friendica\Core\Cache\IMemoryCacheDriver
+	 */
+	protected $instance;
+
+	function setUp()
+	{
+		parent::setUp();
+		if (!($this->instance instanceof IMemoryCacheDriver)) {
+			throw new \Exception('MemoryCacheTest unsupported');
+		}
+	}
+
+	function testCompareSet() {
+		$this->assertNull($this->instance->get('value1'));
+
+		$value='foobar';
+		$this->instance->add('value1', $value);
+		$received=$this->instance->get('value1');
+		$this->assertEquals($value, $received, 'Value received from cache not equal to the original');
+		$newValue='ipsum lorum';
+		$this->instance->compareSet('value1', $value, $newValue);
+		$received=$this->instance->get('value1');
+		$this->assertEquals($newValue, $received, 'Value not overwritten by compareSet');
+	}
+
+	function testNegativeCompareSet() {
+		$this->assertNull($this->instance->get('value1'));
+
+		$value='foobar';
+		$this->instance->add('value1', $value);
+		$received=$this->instance->get('value1');
+		$this->assertEquals($value, $received, 'Value received from cache not equal to the original');
+		$newValue='ipsum lorum';
+		$this->instance->compareSet('value1', 'wrong', $newValue);
+		$received=$this->instance->get('value1');
+		$this->assertNotEquals($newValue, $received, 'Value was wrongly overwritten by compareSet');
+		$this->assertEquals($value, $received, 'Value was wrongly overwritten by any other value');
+	}
+
+	function testCompareDelete() {
+		$this->assertNull($this->instance->get('value1'));
+
+		$value='foobar';
+		$this->instance->add('value1', $value);
+		$received=$this->instance->get('value1');
+		$this->assertEquals($value, $received, 'Value received from cache not equal to the original');
+		$this->instance->compareDelete('value1', $value);
+		$this->assertNull($this->instance->get('value1'), 'Value was not deleted by compareDelete');
+	}
+
+	function testNegativeCompareDelete() {
+		$this->assertNull($this->instance->get('value1'));
+
+		$value='foobar';
+		$this->instance->add('value1', $value);
+		$received=$this->instance->get('value1');
+		$this->assertEquals($value, $received, 'Value received from cache not equal to the original');
+		$this->instance->compareDelete('value1', 'wrong');
+		$this->assertNotNull($this->instance->get('value1'), 'Value was wrongly compareDeleted');
+
+		$this->instance->compareDelete('value1', $value);
+		$this->assertNull($this->instance->get('value1'), 'Value was wrongly NOT deleted by compareDelete');
+	}
+
+	function testAdd() {
+		$this->assertNull($this->instance->get('value1'));
+
+		$value='foobar';
+		$this->instance->add('value1', $value);
+
+		$newValue='ipsum lorum';
+		$this->instance->add('value1', $newValue);
+		$received=$this->instance->get('value1');
+		$this->assertNotEquals($newValue, $received, 'Value was wrongly overwritten by add');
+		$this->assertEquals($value, $received, 'Value was wrongly overwritten by any other value');
+
+		$this->instance->delete('value1');
+		$this->instance->add('value1', $newValue);
+		$received=$this->instance->get('value1');
+		$this->assertEquals($newValue, $received, 'Value was not overwritten by add');
+		$this->assertNotEquals($value, $received, 'Value was not overwritten by any other value');
+	}
+}
\ No newline at end of file
diff --git a/tests/src/Core/Cache/RedisCacheDriverTest.php b/tests/src/Core/Cache/RedisCacheDriverTest.php
index 44ff0d42b1..e13d95df4d 100644
--- a/tests/src/Core/Cache/RedisCacheDriverTest.php
+++ b/tests/src/Core/Cache/RedisCacheDriverTest.php
@@ -6,7 +6,7 @@ namespace Friendica\Test\src\Core\Cache;
 
 use Friendica\Core\Cache\CacheDriverFactory;
 
-class RedisCacheDriverTest extends CacheTest
+class RedisCacheDriverTest extends MemoryCacheTest
 {
 	/**
 	 * @var \Friendica\Core\Cache\IMemoryCacheDriver
@@ -32,7 +32,7 @@ class RedisCacheDriverTest extends CacheTest
 	public function tearDown()
 	{
 		if (class_exists('Redis')) {
-			$this->cache->clear();
+			$this->cache->clear(false);
 		}
 		parent::tearDown();
 	}
-- 
2.39.5