diff --git a/src/Symfony/Component/Cache/Tests/DataCollector/CacheDataCollectorTest.php b/src/Symfony/Component/Cache/Tests/DataCollector/CacheDataCollectorTest.php new file mode 100644 index 0000000000..f704bbfe0e --- /dev/null +++ b/src/Symfony/Component/Cache/Tests/DataCollector/CacheDataCollectorTest.php @@ -0,0 +1,98 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Cache\Tests\Marshaller; + +use PHPUnit\Framework\TestCase; +use Symfony\Component\Cache\Adapter\TraceableAdapter; +use Symfony\Component\Cache\DataCollector\CacheDataCollector; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; + +class CacheDataCollectorTest extends TestCase +{ + private const INSTANCE_NAME = 'test'; + + public function testEmptyDataCollector() + { + $statistics = $this->getCacheDataCollectorStatisticsFromEvents([]); + + $this->assertEquals($statistics[self::INSTANCE_NAME]['calls'], 0, 'calls'); + $this->assertEquals($statistics[self::INSTANCE_NAME]['reads'], 0, 'reads'); + $this->assertEquals($statistics[self::INSTANCE_NAME]['hits'], 0, 'hits'); + $this->assertEquals($statistics[self::INSTANCE_NAME]['misses'], 0, 'misses'); + $this->assertEquals($statistics[self::INSTANCE_NAME]['writes'], 0, 'writes'); + } + + public function testOneEventDataCollector() + { + $traceableAdapterEvent = new \stdClass(); + $traceableAdapterEvent->name = 'getItem'; + $traceableAdapterEvent->start = 0; + $traceableAdapterEvent->end = 0; + $traceableAdapterEvent->hits = 0; + + $statistics = $this->getCacheDataCollectorStatisticsFromEvents([$traceableAdapterEvent]); + + $this->assertEquals($statistics[self::INSTANCE_NAME]['calls'], 1, 'calls'); + $this->assertEquals($statistics[self::INSTANCE_NAME]['reads'], 1, 'reads'); + $this->assertEquals($statistics[self::INSTANCE_NAME]['hits'], 0, 'hits'); + $this->assertEquals($statistics[self::INSTANCE_NAME]['misses'], 1, 'misses'); + $this->assertEquals($statistics[self::INSTANCE_NAME]['writes'], 0, 'writes'); + } + + public function testHitedEventDataCollector() + { + $traceableAdapterEvent = new \stdClass(); + $traceableAdapterEvent->name = 'hasItem'; + $traceableAdapterEvent->start = 0; + $traceableAdapterEvent->end = 0; + $traceableAdapterEvent->hits = 1; + $traceableAdapterEvent->misses = 0; + $traceableAdapterEvent->result = ['foo' => false]; + + $statistics = $this->getCacheDataCollectorStatisticsFromEvents([$traceableAdapterEvent]); + + $this->assertEquals($statistics[self::INSTANCE_NAME]['calls'], 1, 'calls'); + $this->assertEquals($statistics[self::INSTANCE_NAME]['reads'], 1, 'reads'); + $this->assertEquals($statistics[self::INSTANCE_NAME]['hits'], 1, 'hits'); + $this->assertEquals($statistics[self::INSTANCE_NAME]['misses'], 0, 'misses'); + $this->assertEquals($statistics[self::INSTANCE_NAME]['writes'], 0, 'writes'); + } + + public function testSavedEventDataCollector() + { + $traceableAdapterEvent = new \stdClass(); + $traceableAdapterEvent->name = 'save'; + $traceableAdapterEvent->start = 0; + $traceableAdapterEvent->end = 0; + + $statistics = $this->getCacheDataCollectorStatisticsFromEvents([$traceableAdapterEvent]); + + $this->assertEquals($statistics[self::INSTANCE_NAME]['calls'], 1, 'calls'); + $this->assertEquals($statistics[self::INSTANCE_NAME]['reads'], 0, 'reads'); + $this->assertEquals($statistics[self::INSTANCE_NAME]['hits'], 0, 'hits'); + $this->assertEquals($statistics[self::INSTANCE_NAME]['misses'], 0, 'misses'); + $this->assertEquals($statistics[self::INSTANCE_NAME]['writes'], 1, 'writes'); + } + + private function getCacheDataCollectorStatisticsFromEvents(array $traceableAdapterEvents) + { + $traceableAdapterMock = $this->createMock(TraceableAdapter::class); + $traceableAdapterMock->method('getCalls')->willReturn($traceableAdapterEvents); + + $cacheDataCollector = new CacheDataCollector(); + $cacheDataCollector->addInstance(self::INSTANCE_NAME, $traceableAdapterMock); + $cacheDataCollector->collect(new Request(), new Response()); + + return $cacheDataCollector->getStatistics(); + } +} diff --git a/src/Symfony/Component/Cache/composer.json b/src/Symfony/Component/Cache/composer.json index 49f634b372..44bcd6c997 100644 --- a/src/Symfony/Component/Cache/composer.json +++ b/src/Symfony/Component/Cache/composer.json @@ -37,6 +37,7 @@ "symfony/config": "^4.2|^5.0", "symfony/dependency-injection": "^3.4|^4.1|^5.0", "symfony/filesystem": "^4.4|^5.0", + "symfony/http-kernel": "^4.4|^5.0", "symfony/var-dumper": "^4.4|^5.0" }, "conflict": {