34 if (!extension_loaded(
'memcache')) {
35 $this->markTestSkipped(
'memcache extension was not available');
38 if (!@fsockopen(
'localhost', 11211)) {
39 $this->markTestSkipped(
'memcached not reachable');
42 $this->markTestSkipped(
'memcached not reachable');
51 $backendOptions = array(
'servers' => array(
'localhost:11211'));
76 $inCache =
$backend->has($identifier);
77 $this->assertTrue($inCache,
'Memcache failed to set and check entry');
88 $fetchedData =
$backend->get($identifier);
89 $this->assertEquals($data, $fetchedData,
'Memcache failed to set and retrieve data');
101 $inCache =
$backend->has($identifier);
102 $this->assertFalse($inCache,
'Failed to set and remove data from Memcache');
113 $otherData =
'some other data';
114 $backend->set($identifier, $otherData);
115 $fetchedData =
$backend->get($identifier);
116 $this->assertEquals($otherData, $fetchedData,
'Memcache failed to overwrite and retrieve data');
126 $backend->set($identifier, $data, array(
'UnitTestTag%tag1',
'UnitTestTag%tag2'));
127 $retrieved =
$backend->findIdentifiersByTag(
'UnitTestTag%tag1');
128 $this->assertEquals($identifier, $retrieved[0],
'Could not retrieve expected entry by tag.');
129 $retrieved =
$backend->findIdentifiersByTag(
'UnitTestTag%tag2');
130 $this->assertEquals($identifier, $retrieved[0],
'Could not retrieve expected entry by tag.');
140 $backend->set($identifier, $data, array(
'UnitTestTag%tag1',
'UnitTestTag%tag2'));
141 $backend->set($identifier, $data, array(
'UnitTestTag%tag3'));
142 $retrieved =
$backend->findIdentifiersByTag(
'UnitTestTag%tagX');
143 $this->assertEquals(array(), $retrieved,
'Found entry which should no longer exist.');
151 $identifier = $this->
getUniqueId(
'NonExistingIdentifier');
152 $inCache =
$backend->has($identifier);
153 $this->assertFalse($inCache,
'"has" did not return FALSE when checking on non existing identifier');
161 $identifier = $this->
getUniqueId(
'NonExistingIdentifier');
162 $inCache =
$backend->remove($identifier);
163 $this->assertFalse($inCache,
'"remove" did not return FALSE when checking on non existing identifier');
171 $data =
'some data' . microtime();
172 $backend->set(
'BackendMemcacheTest1', $data, array(
'UnitTestTag%test',
'UnitTestTag%boring'));
173 $backend->set(
'BackendMemcacheTest2', $data, array(
'UnitTestTag%test',
'UnitTestTag%special'));
174 $backend->set(
'BackendMemcacheTest3', $data, array(
'UnitTestTag%test'));
175 $backend->flushByTag(
'UnitTestTag%special');
176 $this->assertTrue(
$backend->has(
'BackendMemcacheTest1'),
'BackendMemcacheTest1');
177 $this->assertFalse(
$backend->has(
'BackendMemcacheTest2'),
'BackendMemcacheTest2');
178 $this->assertTrue(
$backend->has(
'BackendMemcacheTest3'),
'BackendMemcacheTest3');
186 $data =
'some data' . microtime();
187 $backend->set(
'BackendMemcacheTest1', $data);
188 $backend->set(
'BackendMemcacheTest2', $data);
189 $backend->set(
'BackendMemcacheTest3', $data);
191 $this->assertFalse(
$backend->has(
'BackendMemcacheTest1'),
'BackendMemcacheTest1');
192 $this->assertFalse(
$backend->has(
'BackendMemcacheTest2'),
'BackendMemcacheTest2');
193 $this->assertFalse(
$backend->has(
'BackendMemcacheTest3'),
'BackendMemcacheTest3');
199 public function flushRemovesOnlyOwnEntries() {
200 $backendOptions = array(
'servers' => array(
'localhost:11211'));
202 $thisCache = $this->getMock(
'TYPO3\\CMS\\Core\\Cache\\Frontend\\AbstractFrontend', array(), array(),
'', FALSE);
203 $thisCache->expects($this->any())->method(
'getIdentifier')->will($this->returnValue(
'thisCache'));
205 $thisBackend->setCache($thisCache);
206 $thisBackend->initializeObject();
209 $thatCache = $this->getMock(
'TYPO3\\CMS\\Core\\Cache\\Frontend\\AbstractFrontend', array(), array(),
'', FALSE);
210 $thatCache->expects($this->any())->method(
'getIdentifier')->will($this->returnValue(
'thatCache'));
212 $thatBackend->setCache($thatCache);
213 $thatBackend->initializeObject();
214 $thisBackend->set(
'thisEntry',
'Hello');
215 $thatBackend->set(
'thatEntry',
'World!');
216 $thatBackend->flush();
217 $this->assertEquals(
'Hello', $thisBackend->get(
'thisEntry'));
218 $this->assertFalse($thatBackend->has(
'thatEntry'));
229 $data = str_repeat(
'abcde', 1024 * 1024);
230 $backend->set(
'tooLargeData', $data);
231 $this->assertTrue(
$backend->has(
'tooLargeData'));
232 $this->assertEquals(
$backend->get(
'tooLargeData'), $data);
239 $backendOptions = array(
'servers' => array(
'localhost:11211'));
241 $tags = array(
'UnitTestTag%test',
'UnitTestTag%boring');
243 $backend = $this->setUpBackend($backendOptions, TRUE);
244 $backend->_call(
'addIdentifierToTags', $identifier, $tags);
247 $backend->_call(
'findTagsByIdentifier', $identifier)
250 $backend->_call(
'addIdentifierToTags', $identifier, $tags);
253 $backend->_call(
'findTagsByIdentifier', $identifier)
264 protected function setUpBackend(array $backendOptions = array(), $accessible = FALSE) {
266 $cache = $this->getMock(
'TYPO3\\CMS\\Core\\Cache\\Frontend\\FrontendInterface', array(), array(),
'', FALSE);
267 if ($backendOptions == array()) {
268 $backendOptions = array(
'servers' => array(
'localhost:11211'));
271 $accessibleClassName = $this->
buildAccessibleProxy(
'\\TYPO3\\CMS\\Core\\Cache\\Backend\\MemcachedBackend');
272 $backend =
new $accessibleClassName(
'Testing', $backendOptions);
setThrowsExceptionIfNoFrontEndHasBeenSet()
removeReturnsFalseIfTheEntryDoesntExist()
flushByTagRemovesCacheEntriesWithSpecifiedTag()
itIsPossibleToSetAndCheckExistenceInCache()
itIsPossibleToSetAndGetEntry()
findIdentifiersByTagFindsCacheEntriesWithSpecifiedTag()
initializeObjectThrowsExceptionIfNoMemcacheServerIsConfigured()
itIsPossibleToRemoveEntryFromCache()
flushRemovesAllCacheEntries()
setRemovesTagsFromPreviousSet()
setTagsOnlyOnceToIdentifier()
buildAccessibleProxy($className)
itIsPossibleToOverwriteAnEntryInTheCache()
hasReturnsFalseIfTheEntryDoesntExist()