DbCacheTest.php 2.69 KB
Newer Older
1
<?php
2

3
namespace yiiunit\framework\caching;
4

5 6 7 8
use yii\caching\DbCache;

/**
 * Class for testing file cache backend
9 10
 * @group db
 * @group caching
11
 */
Alexander Makarov committed
12
class DbCacheTest extends CacheTestCase
13
{
14 15
    private $_cacheInstance;
    private $_connection;
16

17 18 19 20 21
    protected function setUp()
    {
        if (!extension_loaded('pdo') || !extension_loaded('pdo_mysql')) {
            $this->markTestSkipped('pdo and pdo_mysql extensions are required.');
        }
22

23
        parent::setUp();
24

25
        $this->getConnection()->createCommand("
26
            CREATE TABLE IF NOT EXISTS cache (
27 28 29 30 31 32 33 34
                id char(128) NOT NULL,
                expire int(11) DEFAULT NULL,
                data LONGBLOB,
                PRIMARY KEY (id),
                KEY expire (expire)
            );
        ")->execute();
    }
35

36 37 38 39 40 41 42
    /**
     * @param  boolean            $reset whether to clean up the test database
     * @return \yii\db\Connection
     */
    public function getConnection($reset = true)
    {
        if ($this->_connection === null) {
43
            $databases = self::getParam('databases');
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
            $params = $databases['mysql'];
            $db = new \yii\db\Connection;
            $db->dsn = $params['dsn'];
            $db->username = $params['username'];
            $db->password = $params['password'];
            if ($reset) {
                $db->open();
                $lines = explode(';', file_get_contents($params['fixture']));
                foreach ($lines as $line) {
                    if (trim($line) !== '') {
                        $db->pdo->exec($line);
                    }
                }
            }
            $this->_connection = $db;
        }
60

61 62
        return $this->_connection;
    }
63

64 65 66 67 68 69 70 71
    /**
     * @return DbCache
     */
    protected function getCacheInstance()
    {
        if ($this->_cacheInstance === null) {
            $this->_cacheInstance = new DbCache(['db' => $this->getConnection()]);
        }
72

73 74
        return $this->_cacheInstance;
    }
75

76 77 78
    public function testExpire()
    {
        $cache = $this->getCacheInstance();
79

80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
        static::$time = \time();
        $this->assertTrue($cache->set('expire_test', 'expire_test', 2));
        static::$time++;
        $this->assertEquals('expire_test', $cache->get('expire_test'));
        static::$time++;
        $this->assertFalse($cache->get('expire_test'));
    }

    public function testExpireAdd()
    {
        $cache = $this->getCacheInstance();

        static::$time = \time();
        $this->assertTrue($cache->add('expire_testa', 'expire_testa', 2));
        static::$time++;
        $this->assertEquals('expire_testa', $cache->get('expire_testa'));
        static::$time++;
        $this->assertFalse($cache->get('expire_testa'));
    }
Zander Baldwin committed
99
}