]> git.mxchange.org Git - friendica.git/blobdiff - tests/src/Core/Cache/CacheTest.php
Merge pull request #10446 from MrPetovan/bug/10439-addon-settings-forms
[friendica.git] / tests / src / Core / Cache / CacheTest.php
index 86bf5e7f01fa2a1e115db8aaee1aa9a15dba6dc4..5e5d1c17d5bb3e04818a459f535c073134b40df6 100644 (file)
 <?php
+/**
+ * @copyright Copyright (C) 2010-2021, the Friendica project
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program 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 program.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ */
 
 namespace Friendica\Test\src\Core\Cache;
 
-use Friendica\Core\Cache\MemcachedCacheDriver;
-use Friendica\Core\Config;
-use Friendica\Test\DatabaseTest;
-use Friendica\Util\DateTimeFormat;
+use Friendica\Core\Cache\ICache;
+use Friendica\Core\Cache\IMemoryCache;
+use Friendica\Test\MockedTest;
+use Friendica\Util\PidFile;
 
-abstract class CacheTest extends DatabaseTest
+abstract class CacheTest extends MockedTest
 {
        /**
-        * @var \Friendica\Core\Cache\ICacheDriver
+        * @var int Start time of the mock (used for time operations)
+        */
+       protected $startTime = 1417011228;
+
+       /**
+        * @var ICache
         */
        protected $instance;
 
        /**
-        * @var \Friendica\Core\Cache\IMemoryCacheDriver
+        * @var IMemoryCache
         */
        protected $cache;
 
+       /**
+        * Dataset for test setting different types in the cache
+        *
+        * @return array
+        */
+       public function dataTypesInCache()
+       {
+               return [
+                       'string'    => ['data' => 'foobar'],
+                       'integer'   => ['data' => 1],
+                       'boolTrue'  => ['data' => true],
+                       'boolFalse' => ['data' => false],
+                       'float'     => ['data' => 4.6634234],
+                       'array'     => ['data' => ['1', '2', '3', '4', '5']],
+                       'object'    => ['data' => new PidFile()],
+                       'null'      => ['data' => null],
+               ];
+       }
+
+       /**
+        * Dataset for simple value sets/gets
+        *
+        * @return array
+        */
+       public function dataSimple()
+       {
+               return [
+                       'string' => [
+                               'value1' => 'foobar',
+                               'value2' => 'ipsum lorum',
+                               'value3' => 'test',
+                               'value4' => 'lasttest',
+                       ],
+               ];
+       }
 
        abstract protected function getInstance();
 
-       protected function setUp()
+       protected function setUp(): void
        {
                parent::setUp();
-               $this->instance = $this->getInstance();
-
-               // Reusable App object
-               $this->app = \Friendica\BaseObject::getApp();
 
-               // Default config
-               Config::set('config', 'hostname', 'localhost');
-               Config::set('system', 'throttle_limit_day', 100);
-               Config::set('system', 'throttle_limit_week', 100);
-               Config::set('system', 'throttle_limit_month', 100);
-               Config::set('system', 'theme', 'system_theme');
+               $this->instance = $this->getInstance();
 
                $this->instance->clear(false);
        }
 
        /**
         * @small
+        * @dataProvider dataSimple
+        *
+        * @param mixed $value1 a first
+        * @param mixed $value2 a second
         */
-       function testSimple() {
-               $this->assertNull($this->instance->get('value1'));
+       public function testSimple($value1, $value2)
+       {
+               self::assertNull($this->instance->get('value1'));
 
-               $value = 'foobar';
-               $this->instance->set('value1', $value);
+               $this->instance->set('value1', $value1);
                $received = $this->instance->get('value1');
-               $this->assertEquals($value, $received, 'Value received from cache not equal to the original');
+               self::assertEquals($value1, $received, 'Value received from cache not equal to the original');
 
-               $value = 'ipsum lorum';
-               $this->instance->set('value1', $value);
+               $this->instance->set('value1', $value2);
                $received = $this->instance->get('value1');
-               $this->assertEquals($value, $received, 'Value not overwritten by second set');
+               self::assertEquals($value2, $received, 'Value not overwritten by second set');
 
-               $value2 = 'foobar';
-               $this->instance->set('value2', $value2);
+               $this->instance->set('value2', $value1);
                $received2 = $this->instance->get('value2');
-               $this->assertEquals($value, $received, 'Value changed while setting other variable');
-               $this->assertEquals($value2, $received2, 'Second value not equal to original');
+               self::assertEquals($value2, $received, 'Value changed while setting other variable');
+               self::assertEquals($value1, $received2, 'Second value not equal to original');
 
-               $this->assertNull($this->instance->get('not_set'), 'Unset value not equal to null');
+               self::assertNull($this->instance->get('not_set'), 'Unset value not equal to null');
 
-               $this->assertTrue($this->instance->delete('value1'));
-               $this->assertNull($this->instance->get('value1'));
+               self::assertTrue($this->instance->delete('value1'));
+               self::assertNull($this->instance->get('value1'));
        }
 
        /**
         * @small
+        * @dataProvider dataSimple
+        *
+        * @param mixed $value1 a first
+        * @param mixed $value2 a second
+        * @param mixed $value3 a third
+        * @param mixed $value4 a fourth
         */
-       function testClear() {
-               $value = 'ipsum lorum';
-               $this->instance->set('1_value1', $value . '1');
-               $this->instance->set('1_value2', $value . '2');
-               $this->instance->set('2_value1', $value . '3');
-               $this->instance->set('3_value1', $value . '4');
-
-               $this->assertEquals([
-                       '1_value1' => 'ipsum lorum1',
-                       '1_value2' => 'ipsum lorum2',
-                       '2_value1' => 'ipsum lorum3',
-                       '3_value1' => 'ipsum lorum4',
+       public function testClear($value1, $value2, $value3, $value4)
+       {
+               $this->instance->set('1_value1', $value1);
+               $this->instance->set('1_value2', $value2);
+               $this->instance->set('2_value1', $value3);
+               $this->instance->set('3_value1', $value4);
+
+               self::assertEquals([
+                       '1_value1' => $value1,
+                       '1_value2' => $value2,
+                       '2_value1' => $value3,
+                       '3_value1' => $value4,
                ], [
                        '1_value1' => $this->instance->get('1_value1'),
                        '1_value2' => $this->instance->get('1_value2'),
@@ -90,13 +148,13 @@ abstract class CacheTest extends DatabaseTest
                        '3_value1' => $this->instance->get('3_value1'),
                ]);
 
-               $this->assertTrue($this->instance->clear());
+               self::assertTrue($this->instance->clear());
 
-               $this->assertEquals([
-                       '1_value1' => 'ipsum lorum1',
-                       '1_value2' => 'ipsum lorum2',
-                       '2_value1' => 'ipsum lorum3',
-                       '3_value1' => 'ipsum lorum4',
+               self::assertEquals([
+                       '1_value1' => $value1,
+                       '1_value2' => $value2,
+                       '2_value1' => $value3,
+                       '3_value1' => $value4,
                ], [
                        '1_value1' => $this->instance->get('1_value1'),
                        '1_value2' => $this->instance->get('1_value2'),
@@ -104,9 +162,9 @@ abstract class CacheTest extends DatabaseTest
                        '3_value1' => $this->instance->get('3_value1'),
                ]);
 
-               $this->assertTrue($this->instance->clear(false));
+               self::assertTrue($this->instance->clear(false));
 
-               $this->assertEquals([
+               self::assertEquals([
                        '1_value1' => null,
                        '1_value2' => null,
                        '2_value3' => null,
@@ -122,91 +180,61 @@ abstract class CacheTest extends DatabaseTest
        /**
         * @medium
         */
-       function testTTL() {
-               $this->assertNull($this->instance->get('value1'));
+       public function testTTL()
+       {
+               static::markTestSkipped('taking too much time without mocking');
+
+               self::assertNull($this->instance->get('value1'));
 
                $value = 'foobar';
                $this->instance->set('value1', $value, 1);
                $received = $this->instance->get('value1');
-               $this->assertEquals($value, $received, 'Value received from cache not equal to the original');
+               self::assertEquals($value, $received, 'Value received from cache not equal to the original');
 
                sleep(2);
 
-               $this->assertNull($this->instance->get('value1'));
+               self::assertNull($this->instance->get('value1'));
        }
 
        /**
         * @small
+        *
+        * @param mixed $data the data to store in the cache
+        *
+        * @dataProvider dataTypesInCache
         */
-       function testDifferentTypesInCache() {
-               // String test
-               $value = "foobar";
-               $this->instance->set('stringVal', $value);
-               $received = $this->instance->get('stringVal');
-               $this->assertEquals($value, $received, 'Value type changed from ' . gettype($value) . ' to ' . gettype($received));
-
-               // Integer test
-               $value = 1;
-               $this->instance->set('intVal', $value);
-               $received = $this->instance->get('intVal');
-               $this->assertEquals($value, $received, 'Value type changed from ' . gettype($value) . ' to ' . gettype($received));
-
-               // Boolean test
-               $value = true;
-               $this->instance->set('boolValTrue', $value);
-               $received = $this->instance->get('boolValTrue');
-               $this->assertEquals($value, $received, 'Value type changed from ' . gettype($value) . ' to ' . gettype($received));
-
-               $value = false;
-               $this->instance->set('boolValFalse', $value);
-               $received = $this->instance->get('boolValFalse');
-               $this->assertEquals($value, $received, 'Value type changed from ' . gettype($value) . ' to ' . gettype($received));
-
-               // float
-               $value = 4.6634234;
-               $this->instance->set('decVal', $value);
-               $received = $this->instance->get('decVal');
-               $this->assertEquals($value, $received, 'Value type changed from ' . gettype($value) . ' to ' . gettype($received));
-
-               // array
-               $value = array('1', '2', '3', '4', '5');
-               $this->instance->set('arrayVal', $value);
-               $received = $this->instance->get('arrayVal');
-               $this->assertEquals($value, $received, 'Value type changed from ' . gettype($value) . ' to ' . gettype($received));
-
-               // object
-               $value = new DateTimeFormat();
-               $this->instance->set('objVal', $value);
-               $received = $this->instance->get('objVal');
-               $this->assertEquals($value, $received, 'Value type changed from ' . gettype($value) . ' to ' . gettype($received));
-
-               // null
-               $value = null;
-               $this->instance->set('objVal', $value);
-               $received = $this->instance->get('objVal');
-               $this->assertEquals($value, $received, 'Value type changed from ' . gettype($value) . ' to ' . gettype($received));
+       public function testDifferentTypesInCache($data)
+       {
+               $this->instance->set('val', $data);
+               $received = $this->instance->get('val');
+               self::assertEquals($data, $received, 'Value type changed from ' . gettype($data) . ' to ' . gettype($received));
        }
 
        /**
         * @small
+        *
+        * @param mixed $value1 a first
+        * @param mixed $value2 a second
+        * @param mixed $value3 a third
+        *
+        * @dataProvider dataSimple
         */
-       public function testGetAllKeys() {
-               if ($this->cache instanceof MemcachedCacheDriver) {
-                       $this->markTestSkipped('Memcached doesn\'t support getAllKeys anymore');
-               }
-
-               $this->assertTrue($this->instance->set('value1', 'test'));
-               $this->assertTrue($this->instance->set('value2', 'test'));
-               $this->assertTrue($this->instance->set('test_value3', 'test'));
+       public function testGetAllKeys($value1, $value2, $value3)
+       {
+               self::assertTrue($this->instance->set('value1', $value1));
+               self::assertTrue($this->instance->set('value2', $value2));
+               self::assertTrue($this->instance->set('test_value3', $value3));
 
                $list = $this->instance->getAllKeys();
 
-               $this->assertContains('value1', $list);
-               $this->assertContains('value2', $list);
-               $this->assertContains('test_value3', $list);
+               self::assertContains('value1', $list);
+               self::assertContains('value2', $list);
+               self::assertContains('test_value3', $list);
 
                $list = $this->instance->getAllKeys('test');
 
-               $this->assertContains('test_value3', $list);
+               self::assertContains('test_value3', $list);
+               self::assertNotContains('value1', $list);
+               self::assertNotContains('value2', $list);
        }
 }