rhymix/tests/unit/framework/CacheTest.php
2023-11-30 23:57:34 +09:00

191 lines
7.4 KiB
PHP

<?php
class CacheTest extends \Codeception\Test\Unit
{
public function _before()
{
if (!Rhymix\Framework\Config::get('crypto.authentication_key'))
{
Rhymix\Framework\Config::set('crypto.authentication_key', Rhymix\Framework\Security::getRandom(64, 'alnum'));
}
$driver = Rhymix\Framework\Cache::init(array('dummy'));
}
public function _after()
{
Rhymix\Framework\Cache::clearAll();
Rhymix\Framework\Cache::init(array('dummy'));
}
public function testInit()
{
$driver = Rhymix\Framework\Cache::init(array('type' => 'dummy'));
$this->assertTrue($driver instanceof Rhymix\Framework\Drivers\Cache\Dummy);
$driver = Rhymix\Framework\Cache::init(array('type' => 'sqlite'));
$this->assertTrue($driver instanceof Rhymix\Framework\Drivers\Cache\SQLite);
$driver = Rhymix\Framework\Cache::init(array());
$this->assertTrue($driver instanceof Rhymix\Framework\Drivers\Cache\Dummy);
}
public function testGetSupportedDrivers()
{
$drivers = Rhymix\Framework\Cache::getSupportedDrivers();
$this->assertTrue(is_array($drivers));
$this->assertContains('dummy', $drivers);
$this->assertFalse(in_array('file', $drivers));
$this->assertContains('sqlite', $drivers);
}
public function testGetDriverName()
{
$driver = Rhymix\Framework\Cache::init(array('type' => 'dummy'));
$this->assertEquals('dummy', Rhymix\Framework\Cache::getDriverName());
$driver = Rhymix\Framework\Cache::init(array('type' => 'sqlite'));
$this->assertEquals('sqlite', Rhymix\Framework\Cache::getDriverName());
}
public function testGetDriverInstance()
{
$driver = Rhymix\Framework\Cache::getDriverInstance('dummy');
$this->assertTrue($driver instanceof Rhymix\Framework\Drivers\Cache\Dummy);
$driver = Rhymix\Framework\Cache::getDriverInstance();
$this->assertTrue($driver instanceof Rhymix\Framework\Drivers\Cache\File);
}
public function testGetPrefix()
{
$prefix = Rhymix\Framework\Cache::getPrefix();
$this->assertEquals(\RX_VERSION . ':', $prefix);
}
public function testGetSet()
{
$value = true;
$this->assertTrue(Rhymix\Framework\Cache::set('foobar1', $value));
$this->assertTrue(Rhymix\Framework\Cache::get('foobar1'));
$value = false;
$this->assertTrue(Rhymix\Framework\Cache::set('foobar2', $value));
$this->assertFalse(Rhymix\Framework\Cache::get('foobar2'));
$value = 1756234;
$this->assertTrue(Rhymix\Framework\Cache::set('foobar3', $value));
$this->assertEquals($value, Rhymix\Framework\Cache::get('foobar3'));
$value = 'Rhymix is a PHP CMS.';
$this->assertTrue(Rhymix\Framework\Cache::set('foobar4', $value));
$this->assertEquals($value, Rhymix\Framework\Cache::get('foobar4'));
$value = array('foo' => 'bar', 'rhy' => 'mix');
$this->assertTrue(Rhymix\Framework\Cache::set('foobar:subkey:5', $value));
$this->assertEquals($value, Rhymix\Framework\Cache::get('foobar:subkey:5'));
$value = (object)array('foo' => 'bar', 'rhy' => 'mix');
$this->assertTrue(Rhymix\Framework\Cache::set('foobar:subkey:6', $value));
$this->assertEquals($value, Rhymix\Framework\Cache::get('foobar:subkey:6'));
$this->assertNull(Rhymix\Framework\Cache::get('foobar7'));
$this->assertNull(Rhymix\Framework\Cache::get('foobar:subkey:8'));
}
public function testDeleteAndExists()
{
Rhymix\Framework\Cache::set('foo', 'FOO');
Rhymix\Framework\Cache::set('bar', 'BAR');
$this->assertTrue(Rhymix\Framework\Cache::delete('foo'));
$this->assertFalse(Rhymix\Framework\Cache::delete('foo'));
$this->assertFalse(Rhymix\Framework\Cache::exists('foo'));
$this->assertTrue(Rhymix\Framework\Cache::exists('bar'));
}
public function testIncrDecr()
{
Rhymix\Framework\Cache::init(array('type' => 'sqlite'));
Rhymix\Framework\Cache::set('foo', 'foo');
Rhymix\Framework\Cache::set('bar', 42);
$prefix = Rhymix\Framework\Cache::getPrefix();
$this->assertEquals(1, Rhymix\Framework\Cache::getDriverInstance()->incr($prefix . 'foo', 1));
$this->assertEquals(8, Rhymix\Framework\Cache::getDriverInstance()->incr($prefix . 'foo', 7));
$this->assertEquals(-7, Rhymix\Framework\Cache::decr('foo', 15));
$this->assertEquals(45, Rhymix\Framework\Cache::getDriverInstance()->incr($prefix . 'bar', 3));
$this->assertEquals(60, Rhymix\Framework\Cache::incr('bar', 15));
$this->assertEquals(20, Rhymix\Framework\Cache::getDriverInstance()->incr($prefix . 'bar', -40));
}
public function testClearAll()
{
$this->assertTrue(Rhymix\Framework\Cache::set('foo', 'foo'));
$this->assertTrue(Rhymix\Framework\Cache::exists('foo'));
$this->assertTrue(Rhymix\Framework\Cache::clearAll());
$this->assertFalse(Rhymix\Framework\Cache::exists('foo'));
}
public function testCacheGroups()
{
Rhymix\Framework\Cache::init(array('type' => 'sqlite'));
$prefix = Rhymix\Framework\Cache::getPrefix();
$this->assertTrue(Rhymix\Framework\Cache::set('foobar:subkey:1234', 'rhymix'));
$this->assertTrue(Rhymix\Framework\Cache::exists('foobar:subkey:1234'));
$this->assertEquals('rhymix', Rhymix\Framework\Cache::get('foobar:subkey:1234'));
$this->assertEquals('rhymix', Rhymix\Framework\Cache::getDriverInstance()->get($prefix . 'foobar#0:subkey:1234'));
$this->assertEquals(0, Rhymix\Framework\Cache::getGroupVersion('foobar'));
$this->assertTrue(Rhymix\Framework\Cache::clearGroup('foobar'));
$this->assertFalse(Rhymix\Framework\Cache::exists('foobar:subkey:1234'));
$this->assertTrue(Rhymix\Framework\Cache::set('foobar:subkey:1234', 'rhymix'));
$this->assertEquals('rhymix', Rhymix\Framework\Cache::getDriverInstance()->get($prefix . 'foobar#1:subkey:1234'));
$this->assertEquals(1, Rhymix\Framework\Cache::getGroupVersion('foobar'));
}
public function testGetRealKey()
{
Rhymix\Framework\Cache::init(array('type' => 'sqlite'));
$prefix = Rhymix\Framework\Cache::getPrefix();
$this->assertEquals($prefix . 'foo', Rhymix\Framework\Cache::getRealKey('foo'));
$this->assertEquals($prefix . 'bar#0:2016', Rhymix\Framework\Cache::getRealKey('bar:2016'));
Rhymix\Framework\Cache::clearGroup('bar');
$this->assertEquals($prefix . 'bar#1:2016', Rhymix\Framework\Cache::getRealKey('bar:2016'));
Rhymix\Framework\Cache::clearGroup('bar');
$this->assertEquals($prefix . 'bar#2:2016', Rhymix\Framework\Cache::getRealKey('bar:2016'));
}
public function testCompatibility()
{
Rhymix\Framework\Cache::init(array('type' => 'sqlite'));
$ch = \CacheHandler::getInstance();
$this->assertTrue($ch instanceof \CacheHandler);
$this->assertTrue($ch->isSupport());
$this->assertEquals('rhymix', $ch->getCacheKey('rhymix'));
$this->assertEquals('rhymix:123:456', $ch->getCacheKey('rhymix:123:456'));
$this->assertTrue($ch->put('rhymix', 'foo bar buzz'));
$this->assertEquals('foo bar buzz', $ch->get('rhymix'));
$this->assertTrue($ch->isValid('rhymix'));
$this->assertTrue($ch->delete('rhymix'));
$this->assertFalse($ch->get('rhymix'));
$this->assertFalse($ch->isValid('rhymix'));
$this->assertEquals('rhymix:123:456', $ch->getGroupKey('rhymix', '123:456'));
$this->assertTrue($ch->put('rhymix:123:456', 'rhymix rules!'));
$this->assertEquals('rhymix rules!', $ch->get('rhymix:123:456'));
$this->assertEquals(0, Rhymix\Framework\Cache::getGroupVersion('rhymix'));
$this->assertTrue($ch->invalidateGroupKey('rhymix'));
$this->assertTrue($ch->put('rhymix:123:456', 'rhymix rules!'));
$this->assertEquals('rhymix rules!', $ch->get('rhymix:123:456'));
$this->assertEquals(1, Rhymix\Framework\Cache::getGroupVersion('rhymix'));
$this->assertTrue($ch->truncate());
$this->assertFalse($ch->get('rhymix:123:456'));
}
}