52 if (!extension_loaded(
'redis')) {
53 $this->markTestSkipped(
'redis extension was not available');
56 if (!@fsockopen(
'127.0.0.1', 6379)) {
57 $this->markTestSkipped(
'redis server not reachable');
60 $this->markTestSkipped(
'redis server not reachable');
70 $mockCache = $this->getMock(
'TYPO3\\CMS\\Core\\Cache\\Frontend\\FrontendInterface', array(), array(),
'', FALSE);
71 $mockCache->expects($this->any())->method(
'getIdentifier')->will($this->returnValue(
'TestCache'));
72 $this->backend = new \TYPO3\CMS\Core\Cache\Backend\RedisBackend(
'Testing', $backendOptions);
73 $this->backend->setCache($mockCache);
74 $this->backend->initializeObject();
81 $this->redis = new \Redis();
82 $this->redis->connect(
'127.0.0.1', 6379);
89 if ($this->backend instanceof \
TYPO3\CMS\Core\Cache\Backend\RedisBackend) {
90 $this->backend->flush();
135 $this->
setUpBackend(array(
'compressionLevel' =>
'foo'));
152 $this->backend->set(array(),
'data');
161 $this->backend->set($this->
getUniqueId(
'identifier'), array());
170 $this->backend->set($this->
getUniqueId(
'identifier'),
'data', array(), -42);
179 $this->backend->set($this->
getUniqueId(
'identifier'),
'data', array(), array());
187 $this->redis->select(1);
190 $this->backend->set($identifier,
'data');
191 $this->assertTrue($this->redis->exists(
'identData:' . $identifier));
201 $this->backend->set($identifier,
'data');
202 $this->assertSame(\Redis::REDIS_STRING, $this->redis->type(
'identData:' . $identifier));
212 $defaultLifetime = 42;
213 $this->backend->setDefaultLifetime($defaultLifetime);
214 $this->backend->set($identifier,
'data');
215 $lifetimeRegisteredInBackend = $this->redis->ttl(
'identData:' . $identifier);
216 $this->assertSame($defaultLifetime, $lifetimeRegisteredInBackend);
227 $this->backend->set($identifier,
'data', array(), $lifetime);
228 $lifetimeRegisteredInBackend = $this->redis->ttl(
'identData:' . $identifier);
229 $this->assertSame($lifetime, $lifetimeRegisteredInBackend);
239 $this->backend->set($identifier,
'data', array(), 0);
240 $lifetimeRegisteredInBackend = $this->redis->ttl(
'identData:' . $identifier);
241 $this->assertSame(31536000, $lifetimeRegisteredInBackend);
251 $this->backend->set($identifier, $data);
252 $otherData =
'data 2';
253 $this->backend->set($identifier, $otherData);
254 $fetchedData = $this->backend->get($identifier);
255 $this->assertSame($otherData, $fetchedData);
266 $this->backend->set($identifier, $data);
268 $this->backend->set($identifier, $data, array(), $lifetime);
269 $lifetimeRegisteredInBackend = $this->redis->ttl(
'identData:' . $identifier);
270 $this->assertSame($lifetime, $lifetimeRegisteredInBackend);
282 $this->backend->set($identifier, $data, array(), $lifetime);
283 $newDefaultLifetime = 43;
284 $this->backend->setDefaultLifetime($newDefaultLifetime);
285 $this->backend->set($identifier, $data, array(), $newDefaultLifetime);
286 $lifetimeRegisteredInBackend = $this->redis->ttl(
'identData:' . $identifier);
287 $this->assertSame($newDefaultLifetime, $lifetimeRegisteredInBackend);
299 $this->backend->set($identifier, $data, array(), $lifetime);
300 $this->backend->set($identifier, $data, array(), 0);
301 $lifetimeRegisteredInBackend = $this->redis->ttl(
'identData:' . $identifier);
302 $this->assertSame(31536000, $lifetimeRegisteredInBackend);
312 $this->backend->set($identifier,
'data', array(
'tag'));
313 $this->assertSame(\Redis::REDIS_SET, $this->redis->type(
'identTags:' . $identifier));
323 $tags = array(
'thatTag',
'thisTag');
324 $this->backend->set($identifier,
'data', $tags);
325 $savedTags = $this->redis->sMembers(
'identTags:' . $identifier);
327 $this->assertSame($tags, $savedTags);
337 $tags = array(
'fooTag',
'barTag');
338 $this->backend->set($identifier,
'data', $tags);
339 $this->backend->set($identifier,
'data', array());
340 $this->assertSame(array(), $this->redis->sMembers(
'identTags:' . $identifier));
350 $firstTagSet = array(
'tag1',
'tag2',
'tag3',
'tag4');
351 $this->backend->set($identifier,
'data', $firstTagSet);
352 $secondTagSet = array(
'tag1',
'tag3');
353 $this->backend->set($identifier,
'data', $secondTagSet);
354 $actualTagSet = $this->redis->sMembers(
'identTags:' . $identifier);
356 $this->assertSame($secondTagSet, $actualTagSet);
367 $this->backend->set($identifier,
'data', array($tag));
368 $this->assertSame(\Redis::REDIS_SET, $this->redis->type(
'tagIdents:' . $tag));
379 $this->backend->set($identifier,
'data', array($tag));
380 $savedTagToIdentifiersMemberArray = $this->redis->sMembers(
'tagIdents:' . $tag);
381 $this->assertSame(array($identifier), $savedTagToIdentifiersMemberArray);
390 $firstIdentifier = $this->
getUniqueId(
'identifier1-');
392 $this->backend->set($firstIdentifier,
'data', array($tag));
393 $secondIdentifier = $this->
getUniqueId(
'identifier2-');
394 $this->backend->set($secondIdentifier,
'data', array($tag));
395 $savedTagToIdentifiersMemberArray = $this->redis->sMembers(
'tagIdents:' . $tag);
396 sort($savedTagToIdentifiersMemberArray);
397 $identifierArray = array($firstIdentifier, $secondIdentifier);
398 sort($identifierArray);
399 $this->assertSame(array($firstIdentifier, $secondIdentifier), $savedTagToIdentifiersMemberArray);
410 $this->backend->set($identifier,
'data', array($tag));
411 $this->backend->set($identifier,
'data', array());
412 $savedTagToIdentifiersMemberArray = $this->redis->sMembers(
'tagIdents:' . $tag);
413 $this->assertSame(array(), $savedTagToIdentifiersMemberArray);
423 $this->backend->set($identifier,
'data');
425 $this->backend->set($identifier,
'data', array($tag));
426 $savedTagToIdentifiersMemberArray = $this->redis->sMembers(
'tagIdents:' . $tag);
427 $this->assertSame(array($identifier), $savedTagToIdentifiersMemberArray);
435 'compression' => TRUE
439 $data =
'some data ' . microtime();
440 $this->backend->set($identifier, $data);
441 $uncompresedStoredData =
'';
443 $uncompresedStoredData = @gzuncompress($this->redis->get((
'identData:' . $identifier)));
447 $this->assertEquals($data, $uncompresedStoredData,
'Original and compressed data don\'t match');
455 'compression' => TRUE,
456 'compressionLevel' => 0
460 $data =
'some data ' . microtime();
461 $this->backend->set($identifier, $data);
462 $this->assertGreaterThan(0, substr_count($this->redis->get(
'identData:' . $identifier), $data),
'Plaintext data not found');
471 $this->backend->has(array());
480 $this->assertFalse($this->backend->has($identifier));
489 $this->backend->set($identifier,
'data');
490 $this->assertTrue($this->backend->has($identifier));
499 $this->backend->get(array());
507 'compression' => TRUE
511 $this->backend->set($identifier, $data);
512 $fetchedData = $this->backend->get($identifier);
513 $this->assertSame($data, $fetchedData);
523 $this->backend->set($identifier, $data);
524 $fetchedData = $this->backend->get($identifier);
525 $this->assertSame($data, $fetchedData);
534 $this->backend->remove(array());
542 $this->assertFalse($this->backend->remove($this->getUniqueId(
'identifier')));
551 $this->backend->set($identifier,
'data');
552 $this->assertTrue($this->backend->remove($identifier));
561 $this->backend->set($identifier,
'data');
562 $this->backend->remove($identifier);
563 $this->assertFalse($this->backend->has($identifier));
574 $this->backend->set($identifier,
'data', array($tag));
575 $this->backend->remove($identifier);
576 $this->assertFalse($this->redis->exists(
'identTags:' . $identifier));
587 $this->backend->set($identifier,
'data', array($tag));
588 $this->backend->remove($identifier);
589 $tagToIdentifiersMemberArray = $this->redis->sMembers(
'tagIdents:' . $tag);
590 $this->assertSame(array(), $tagToIdentifiersMemberArray);
599 $firstIdentifier = $this->
getUniqueId(
'identifier');
600 $secondIdentifier = $this->
getUniqueId(
'identifier');
602 $this->backend->set($firstIdentifier,
'data', array($tag));
603 $this->backend->set($secondIdentifier,
'data', array($tag));
604 $this->backend->remove($firstIdentifier);
605 $tagToIdentifiersMemberArray = $this->redis->sMembers(
'tagIdents:' . $tag);
606 $this->assertSame(array($secondIdentifier), $tagToIdentifiersMemberArray);
615 $this->backend->findIdentifiersByTag(array());
623 $this->assertSame(array(), $this->backend->findIdentifiersByTag(
'thisTag'));
631 $firstIdentifier = $this->
getUniqueId(
'identifier1-');
632 $secondIdentifier = $this->
getUniqueId(
'identifier2-');
633 $thirdIdentifier = $this->
getUniqueId(
'identifier3-');
634 $tagsForFirstIdentifier = array(
'thisTag');
635 $tagsForSecondIdentifier = array(
'thatTag');
636 $tagsForThirdIdentifier = array(
'thisTag',
'thatTag');
637 $this->backend->set($firstIdentifier,
'data', $tagsForFirstIdentifier);
638 $this->backend->set($secondIdentifier,
'data', $tagsForSecondIdentifier);
639 $this->backend->set($thirdIdentifier,
'data', $tagsForThirdIdentifier);
640 $expectedResult = array($firstIdentifier, $thirdIdentifier);
641 $actualResult = $this->backend->findIdentifiersByTag(
'thisTag');
643 $this->assertSame($expectedResult, $actualResult);
653 $this->backend->set($identifier,
'data');
654 $this->backend->flush();
655 $this->assertSame(array(), $this->redis->getKeys(
'*'));
664 $this->backend->flushByTag(array());
673 $this->backend->set($identifier .
'A',
'data', array(
'tag1'));
674 $this->backend->set($identifier .
'B',
'data', array(
'tag2'));
675 $this->backend->set($identifier .
'C',
'data', array(
'tag1',
'tag2'));
676 $this->backend->flushByTag(
'tag1');
677 $expectedResult = array(FALSE, TRUE, FALSE);
678 $actualResult = array(
679 $this->backend->has($identifier .
'A'),
680 $this->backend->has($identifier .
'B'),
681 $this->backend->has($identifier .
'C')
683 $this->assertSame($expectedResult, $actualResult);
693 $this->backend->set($identifier .
'A',
'data', array(
'tag1'));
694 $this->backend->set($identifier .
'C',
'data', array(
'tag1',
'tag2'));
695 $this->backend->flushByTag(
'tag1');
696 $this->assertSame(array(), $this->redis->getKeys(
'temp*'));
707 $this->backend->set($identifier,
'data', array($tag));
708 $this->backend->flushByTag($tag);
709 $this->assertFalse($this->redis->exists(
'identTags:' . $identifier));
718 $identifierToBeRemoved = $this->
getUniqueId(
'identifier');
719 $tagToRemove =
'tag1';
720 $this->backend->set($identifierToBeRemoved,
'data', array($tagToRemove));
721 $identifierNotToBeRemoved = $this->
getUniqueId(
'identifier');
722 $tagNotToRemove =
'tag2';
723 $this->backend->set($identifierNotToBeRemoved,
'data', array($tagNotToRemove));
724 $this->backend->flushByTag($tagToRemove);
725 $this->assertSame(array($tagNotToRemove), $this->redis->sMembers(
'identTags:' . $identifierNotToBeRemoved));
736 $this->backend->set($identifier,
'data', array($tag));
737 $this->backend->flushByTag($tag);
738 $this->assertFalse($this->redis->exists(
'tagIdents:' . $tag));
748 $this->backend->set($identifier .
'A',
'data', array(
'tag1',
'tag2'));
749 $this->backend->set($identifier .
'B',
'data', array(
'tag1',
'tag2'));
750 $this->backend->set($identifier .
'C',
'data', array(
'tag2'));
751 $this->backend->flushByTag(
'tag1');
752 $this->assertSame(array($identifier .
'C'), $this->redis->sMembers(
'tagIdents:tag2'));
762 $this->backend->set($identifier .
'A',
'data', array(
'tag'));
763 $this->backend->set($identifier .
'B',
'data', array(
'tag'));
764 $this->redis->delete(
'identData:' . $identifier .
'A');
765 $this->backend->collectGarbage();
766 $this->assertTrue($this->redis->exists(
'identData:' . $identifier .
'B'));
776 $this->backend->set($identifier .
'A',
'data', array(
'tag'));
777 $this->backend->set($identifier .
'B',
'data', array(
'tag'));
778 $this->redis->delete(
'identData:' . $identifier .
'A');
779 $this->backend->collectGarbage();
780 $expectedResult = array(FALSE, TRUE);
781 $actualResult = array(
782 $this->redis->exists(
'identTags:' . $identifier .
'A'),
783 $this->redis->exists(
'identTags:' . $identifier .
'B')
785 $this->assertSame($expectedResult, $actualResult);
795 $this->backend->set($identifier .
'A',
'data', array(
'tag1',
'tag2'));
796 $this->backend->set($identifier .
'B',
'data', array(
'tag2'));
797 $this->redis->delete(
'identData:' . $identifier .
'A');
798 $this->backend->collectGarbage();
799 $expectedResult = array(
801 array($identifier .
'B')
803 $actualResult = array(
804 $this->redis->sMembers(
'tagIdents:tag1'),
805 $this->redis->sMembers(
'tagIdents:tag2')
807 $this->assertSame($expectedResult, $actualResult);
collectGarbageRemovesLeftOverIdentifierToTagsSet()
hasReturnsFalseForNotExistingEntry()
removeDeletesIdentifierToTagEntry()
setSavesEntryWithUnlimitedLifeTime()
setOverwritesExistingEntryWithNewData()
setOverwritesExistingEntryWithNewDefaultLifetime()
setThrowsExceptionIfDataIsNotAString()
flushRemovesAllEntriesFromCache()
setStoresEntriesInSelectedDatabase()
setThrowsExceptionIfLifetimeIsNegative()
setSavesEntryWithSpecifiedLifeTime()
removeThrowsExceptionIfIdentifierIsNotAString()
removeDeletesIdentifierFromTagToIdentifiersSet()
collectGarbageDoesNotRemoveNotExpiredIdentifierToDataEntry()
setRemovesMultiplePreviouslySetTagsFromIdentifierToTagsSet()
hasReturnsTrueForPreviouslySetEntry()
setSavesStringDataTypeForIdentifierToDataEntry()
getReturnsPreviouslySetEntry()
setAddsIdentifierInTagToIdentifiersEntryIfTagIsAddedOnConsecutiveSet()
setAppendsSecondIdentifierInTagToIdentifiersEntry()
collectGarbageRemovesExpiredIdentifierFromTagsToIdentifierSet()
setSavesSetDataTypeForIdentifierToTagsSet()
hasThrowsExceptionIfIdentifierIsNotAString()
setDatabaseThrowsExceptionIfGivenDatabaseNumberIsNotAnInteger()
setCompressionThrowsExceptionIfCompressionParameterIsNotOfTypeBoolean()
getThrowsExceptionIfIdentifierIsNotAString()
flushByTagRemovesTemporarySet()
flushByTagRemovesIdentifiersTaggedWithGivenTagFromTagToIdentifiersSets()
findIdentifiersByTagReturnsEmptyArrayForNotExistingTag()
removeDeletesEntryFromCache()
setSavesCompressedDataWithEnabledCompression()
removeReturnsFalseIfNoEntryWasDeleted()
setRemovesIdentifierFromTagToIdentifiersEntryIfTagIsOmittedOnConsecutiveSet()
setDatabaseThrowsExceptionIfGivenDatabaseNumberIsNegative()
setThrowsExceptionIfIdentifierIsNotAString()
setThrowsExceptionIfLifetimeIsNotNullOrAnInteger()
getReturnsPreviouslyCompressedSetEntry()
setCompressionLevelThrowsExceptionIfCompressionLevelIsNotBetweenMinusOneAndNine()
setSavesEntryWithDefaultLifeTime()
findIdentifiersByTagThrowsExceptionIfTagIsNotAString()
removeReturnsTrueIfAnEntryWasDeleted()
flushByTagThrowsExceptionIfTagIsNotAString()
setSavesPlaintextDataWithEnabledCompressionAndCompressionLevel0()
setCompressionLevelThrowsExceptionIfCompressionLevelIsNotInteger()
setOverwritesExistingEntryWithNewUnlimitedLifetime()
setSavesIdentifierInTagToIdentifiersSetOfSpecifiedTag()
findIdentifiersByTagReturnsAllIdentifiersTagedWithSpecifiedTag()
setUpBackend(array $backendOptions=array())
setOverwritesExistingEntryWithSpecifiedLifetime()
flushByTagDoesNotRemoveIdentifierToTagsSetOfUnrelatedEntry()
setSavesSetDataTypeForTagToIdentifiersSet()
removeDeletesIdentifierFromTagToIdentifiersSetWithMultipleEntries()
setRemovesAllPreviouslySetTagsFromIdentifierToTagsSet()
flushByTagRemovesEntriesTaggedWithSpecifiedTag()
flushByTagRemovesIdentifierToTagsSetOfEntryTaggedWithGivenTag()
flushByTagRemovesTagToIdentifiersSetOfGivenTag()
setSavesSpecifiedTagsInIdentifierToTagsSet()
initializeObjectThrowsNoExceptionIfGivenDatabaseWasSuccessfullySelected()