<?php require_once(dirname(__FILE__).'/BaseTest.php'); /** * @package System.DataAccess.SQLMap */ class CacheTest extends BaseTest { function __construct() { parent::__construct(); $this->initSqlMap(); //force autoload new Account; } function resetDatabase() { $this->initScript('account-init.sql'); } /** * Test for JIRA 29 */ function testJIRA28() { $account = $this->sqlmap->queryForObject("GetNoAccountWithCache",-99); $this->assertNull($account); } /** * Test Cache query */ function testQueryWithCache() { $this->resetDatabase(); $list1 = $this->sqlmap->queryForList("GetCachedAccountsViaResultMap"); $list2 = $this->sqlmap->queryForList("GetCachedAccountsViaResultMap"); $this->assertTrue($list1 === $list2); $account = $list1[1]; $account->setEmailAddress("somebody@cache.com"); //this will cause the cache to flush $this->sqlmap->update("UpdateAccountViaInlineParameters", $account); $list3 = $this->sqlmap->queryForList("GetCachedAccountsViaResultMap"); $this->assertTrue($list1 !== $list3); $this->resetDatabase(); } /** * Test flush Cache */ function testFlushDataCache() { $list1 = $this->sqlmap->queryForList("GetCachedAccountsViaResultMap"); $list2 = $this->sqlmap->queryForList("GetCachedAccountsViaResultMap"); $this->assertTrue($list1 === $list2); $this->sqlmap->flushCaches(); $list3 = $this->sqlmap->queryForList("GetCachedAccountsViaResultMap"); $this->assertTrue($list1 !== $list3); } /** * */ function testFlushDataCacheOnExecute() { $list1 = $this->sqlmap->queryForList("GetCachedAccountsViaResultMap"); $list2 = $this->sqlmap->queryForList("GetCachedAccountsViaResultMap"); $this->assertTrue($list1 === $list2); $this->sqlmap->update("UpdateAccountViaInlineParameters", $list1[0]); $list3 = $this->sqlmap->queryForList("GetCachedAccountsViaResultMap"); $this->assertTrue($list1 !== $list3); } /** */ protected function getCacheModel() { $cache = new TSqlMapCacheModel(); // $cache->setFlushInterval(5*60); $cache->setImplementation('LRU'); $cache->initialize($this->sqlmap); return $cache; } /** * Test CacheHit */ function testCacheHit() { $cache = $this->getCacheModel(); $key = new TSqlMapCacheKey('testkey'); $cache->set($key, 'a'); $returnedObject = $cache->get($key); $this->assertEquals('a', $returnedObject); $this->assertEquals(1, $cache->getHitRatio()); } /** * Test CacheMiss */ function testCacheMiss() { $cache = $this->getCacheModel(); $key = new TSqlMapCacheKey('testKey'); $value = 'testValue'; $cache->set($key, $value); $wrongKey = new TSqlMapCacheKey('wrongKey'); $returnedObject = $cache->get($wrongKey); $this->assertNotEquals($value, $returnedObject); $this->assertNull($returnedObject) ; $this->assertEquals(0, $cache->getHitRatio()); } /** * Test CacheHitMiss */ function testCacheHitMiss() { $cache = $this->getCacheModel(); $key = new TSqlMapCacheKey('testKey'); $value = "testValue"; $cache->set($key, $value); $returnedObject = $cache->get($key); $this->assertEquals($value, $returnedObject); $wrongKey = new TSqlMapCacheKey('wrongKey'); $returnedObject = $cache->get($wrongKey); $this->assertNotEquals($value, $returnedObject); $this->assertNull($returnedObject) ; $this->assertEquals(0.5, $cache->getHitRatio()); } } ?>