|
| 1 | +<?php |
| 2 | + |
| 3 | +/* |
| 4 | + * This file is part of the Symfony package. |
| 5 | + * |
| 6 | + * (c) Fabien Potencier <[email protected]> |
| 7 | + * |
| 8 | + * For the full copyright and license information, please view the LICENSE |
| 9 | + * file that was distributed with this source code. |
| 10 | + */ |
| 11 | + |
| 12 | +namespace Symfony\Component\HttpKernel\Tests\DataCollector\Util; |
| 13 | + |
| 14 | +use PHPUnit\Framework\TestCase; |
| 15 | +use Symfony\Component\HttpKernel\DataCollector\Util\BootstrappingLoggerLoader; |
| 16 | + |
| 17 | +class BootstrappingLoggerLoaderTest extends TestCase |
| 18 | +{ |
| 19 | + /** |
| 20 | + * @var BootstrappingLoggerLoader |
| 21 | + */ |
| 22 | + private $bootstrappingLoggerLoaderFqcn; |
| 23 | + |
| 24 | + protected function setUp() |
| 25 | + { |
| 26 | + $this->bootstrappingLoggerLoaderFqcn = BootstrappingLoggerLoader::class; |
| 27 | + } |
| 28 | + |
| 29 | + protected function tearDown() |
| 30 | + { |
| 31 | + $this->removePersitedAppBootstrappingLogs(); |
| 32 | + } |
| 33 | + |
| 34 | + private function getCacheDir() |
| 35 | + { |
| 36 | + $cacheDir = sys_get_temp_dir().'/http_cache_bootstrapping'; |
| 37 | + |
| 38 | + if (!is_dir($cacheDir) && false === @mkdir($cacheDir, 0777, true) && !is_dir($cacheDir)) { |
| 39 | + throw new \RuntimeException(sprintf('Unable to create the storage directory (%s).', $cacheDir)); |
| 40 | + } |
| 41 | + |
| 42 | + return $cacheDir; |
| 43 | + } |
| 44 | + |
| 45 | + private function removePersitedAppBootstrappingLogs() |
| 46 | + { |
| 47 | + @unlink($this->getCacheDir().'/appBootstrapping.log'); |
| 48 | + } |
| 49 | + |
| 50 | + private function createProjectContainerFixture() |
| 51 | + { |
| 52 | + file_put_contents($this->getCacheDir().'/FixturesBootstrappingLogDebugProjectContainer.php.meta', 'a:37:{i:0;C:50:"Symfony\Component\Config\Resource\ComposerResource":1751:{a:2:{i:0;a:68:{s:4:"Core";s:6:"5.6.29";s:4:"date";s:6:"5.6.29";s:4:"ereg";b:0;s:6:"libxml";b:0;s:7:"openssl";b:0;s:4:"pcre";b:0;s:7:"sqlite3";s:7:"0.7-dev";s:4:"zlib";s:3:"2.0";s:6:"bcmath";b:0;s:3:"bz2";b:0;s:8:"calendar";b:0;s:5:"ctype";b:0;s:4:"curl";b:0;s:3:"dba";b:0;s:3:"dom";s:8:"20031129";s:4:"hash";s:3:"1.0";s:8:"fileinfo";s:5:"1.0.5";s:6:"filter";s:6:"0.11.0";s:3:"ftp";b:0;s:2:"gd";b:0;s:7:"gettext";b:0;s:3:"SPL";s:3:"0.2";s:5:"iconv";b:0;s:4:"json";s:5:"1.2.1";s:4:"ldap";b:0;s:8:"mbstring";b:0;s:7:"session";b:0;s:8:"standard";s:6:"5.6.29";s:7:"mysqlnd";s:79:"mysqlnd 5.0.11-dev - 20120503 - $Id: 76b08b24596e12d4553bd41fc93cccd5bac2fe7a $";s:4:"odbc";s:3:"1.0";s:5:"pcntl";b:0;s:6:"mysqli";s:3:"0.1";s:3:"PDO";s:8:"1.0.4dev";s:9:"pdo_mysql";s:5:"1.0.2";s:8:"PDO_ODBC";s:5:"1.0.1";s:10:"pdo_sqlite";s:5:"1.0.1";s:4:"Phar";s:5:"2.0.2";s:5:"posix";b:0;s:8:"readline";s:6:"5.6.29";s:10:"Reflection";s:47:"$Id: 5f15287237d5f78d75b19c26915aa7bd83dee8b8 $";s:5:"mysql";s:3:"1.0";s:5:"shmop";b:0;s:9:"SimpleXML";s:3:"0.1";s:4:"soap";b:0;s:7:"sockets";b:0;s:4:"exif";s:51:"1.4 $Id: 8b0e34c10dc8a04b8e81d9d79985b2566141b03d $";s:7:"sysvmsg";b:0;s:7:"sysvsem";b:0;s:7:"sysvshm";b:0;s:9:"tokenizer";s:3:"0.1";s:4:"wddx";b:0;s:3:"xml";b:0;s:9:"xmlreader";s:3:"0.1";s:6:"xmlrpc";s:4:"0.51";s:9:"xmlwriter";s:3:"0.1";s:3:"xsl";s:3:"0.1";s:3:"zip";s:6:"1.12.5";s:4:"apcu";s:6:"4.0.11";s:8:"igbinary";s:5:"2.0.1";s:4:"intl";s:5:"1.1.0";s:6:"mcrypt";b:0;s:9:"memcached";s:5:"2.1.0";s:9:"pdo_pgsql";s:5:"1.0.2";s:5:"redis";s:5:"2.2.8";s:4:"ssh2";s:4:"0.12";s:5:"mhash";b:0;s:3:"apc";s:6:"4.0.11";s:6:"xdebug";s:5:"2.5.0";}i:1;a:2:{s:50:"/private/tmp/container/.phpunit/phpunit-5.7/vendor";i:1491257819;s:29:"/private/tmp/container/vendor";i:1491258091;}}}i:1;C:46:"Symfony\Component\Config\Resource\FileResource":87:{s:79:"/private/tmp/container/src/Symfony/Component/HttpKernel/TerminableInterface.php";}i:2;C:46:"Symfony\Component\Config\Resource\FileResource":87:{s:79:"/private/tmp/container/src/Symfony/Component/HttpKernel/HttpKernelInterface.php";}i:3;C:46:"Symfony\Component\Config\Resource\FileResource":83:{s:75:"/private/tmp/container/src/Symfony/Component/HttpKernel/KernelInterface.php";}i:4;C:46:"Symfony\Component\Config\Resource\FileResource":103:{s:95:"/private/tmp/container/src/Symfony/Component/HttpKernel/Tests/Fixtures/KernelWithoutBundles.php";}i:5;C:46:"Symfony\Component\Config\Resource\FileResource":74:{s:66:"/private/tmp/container/src/Symfony/Component/HttpKernel/Kernel.php";}i:6;C:46:"Symfony\Component\Config\Resource\FileResource":107:{s:99:"/private/tmp/container/src/Symfony/Component/DependencyInjection/Compiler/CompilerPassInterface.php";}i:7;C:46:"Symfony\Component\Config\Resource\FileResource":110:{s:101:"/private/tmp/container/src/Symfony/Component/HttpKernel/DependencyInjection/AddClassesToCachePass.php";}i:8;C:57:"Symfony\Component\HttpKernel\Config\EnvParametersResource":57:{a:2:{s:6:"prefix";s:9:"SYMFONY__";s:9:"variables";a:0:{}}}i:9;C:46:"Symfony\Component\Config\Resource\FileResource":120:{s:111:"/private/tmp/container/src/Symfony/Component/HttpKernel/DependencyInjection/MergeExtensionConfigurationPass.php";}i:10;C:46:"Symfony\Component\Config\Resource\FileResource":118:{s:109:"/private/tmp/container/src/Symfony/Component/DependencyInjection/Compiler/MergeExtensionConfigurationPass.php";}i:11;C:46:"Symfony\Component\Config\Resource\FileResource":102:{s:94:"/private/tmp/container/src/Symfony/Component/DependencyInjection/Compiler/ResolveClassPass.php";}i:12;C:46:"Symfony\Component\Config\Resource\FileResource":119:{s:110:"/private/tmp/container/src/Symfony/Component/DependencyInjection/Compiler/ResolveDefinitionInheritancePass.php";}i:13;C:46:"Symfony\Component\Config\Resource\FileResource":107:{s:99:"/private/tmp/container/src/Symfony/Component/DependencyInjection/Compiler/AbstractRecursivePass.php";}i:14;C:46:"Symfony\Component\Config\Resource\FileResource":107:{s:99:"/private/tmp/container/src/Symfony/Component/DependencyInjection/Compiler/ExtensionCompilerPass.php";}i:15;C:46:"Symfony\Component\Config\Resource\FileResource":117:{s:108:"/private/tmp/container/src/Symfony/Component/DependencyInjection/Compiler/ResolveDefinitionTemplatesPass.php";}i:16;C:46:"Symfony\Component\Config\Resource\FileResource":107:{s:99:"/private/tmp/container/src/Symfony/Component/DependencyInjection/Compiler/ServiceLocatorTagPass.php";}i:17;C:46:"Symfony\Component\Config\Resource\FileResource":106:{s:98:"/private/tmp/container/src/Symfony/Component/DependencyInjection/Compiler/DecoratorServicePass.php";}i:18;C:46:"Symfony\Component\Config\Resource\FileResource":119:{s:110:"/private/tmp/container/src/Symfony/Component/DependencyInjection/Compiler/ResolveParameterPlaceHoldersPass.php";}i:19;C:46:"Symfony\Component\Config\Resource\FileResource":110:{s:101:"/private/tmp/container/src/Symfony/Component/DependencyInjection/Compiler/ResolveFactoryClassPass.php";}i:20;C:46:"Symfony\Component\Config\Resource\FileResource":107:{s:99:"/private/tmp/container/src/Symfony/Component/DependencyInjection/Compiler/FactoryReturnTypePass.php";}i:21;C:46:"Symfony\Component\Config\Resource\FileResource":114:{s:105:"/private/tmp/container/src/Symfony/Component/DependencyInjection/Compiler/CheckDefinitionValidityPass.php";}i:22;C:46:"Symfony\Component\Config\Resource\FileResource":112:{s:103:"/private/tmp/container/src/Symfony/Component/DependencyInjection/Compiler/ResolveNamedArgumentsPass.php";}i:23;C:46:"Symfony\Component\Config\Resource\FileResource":98:{s:90:"/private/tmp/container/src/Symfony/Component/DependencyInjection/Compiler/AutowirePass.php";}i:24;C:46:"Symfony\Component\Config\Resource\FileResource":117:{s:108:"/private/tmp/container/src/Symfony/Component/DependencyInjection/Compiler/ResolveReferencesToAliasesPass.php";}i:25;C:46:"Symfony\Component\Config\Resource\FileResource":115:{s:106:"/private/tmp/container/src/Symfony/Component/DependencyInjection/Compiler/ResolveInvalidReferencesPass.php";}i:26;C:46:"Symfony\Component\Config\Resource\FileResource":110:{s:101:"/private/tmp/container/src/Symfony/Component/DependencyInjection/Compiler/RepeatablePassInterface.php";}i:27;C:46:"Symfony\Component\Config\Resource\FileResource":115:{s:106:"/private/tmp/container/src/Symfony/Component/DependencyInjection/Compiler/AnalyzeServiceReferencesPass.php";}i:28;C:46:"Symfony\Component\Config\Resource\FileResource":114:{s:105:"/private/tmp/container/src/Symfony/Component/DependencyInjection/Compiler/CheckCircularReferencesPass.php";}i:29;C:46:"Symfony\Component\Config\Resource\FileResource":113:{s:104:"/private/tmp/container/src/Symfony/Component/DependencyInjection/Compiler/CheckReferenceValidityPass.php";}i:30;C:46:"Symfony\Component\Config\Resource\FileResource":113:{s:104:"/private/tmp/container/src/Symfony/Component/DependencyInjection/Compiler/CheckArgumentsValidityPass.php";}i:31;C:46:"Symfony\Component\Config\Resource\FileResource":111:{s:102:"/private/tmp/container/src/Symfony/Component/DependencyInjection/Compiler/RemovePrivateAliasesPass.php";}i:32;C:46:"Symfony\Component\Config\Resource\FileResource":121:{s:112:"/private/tmp/container/src/Symfony/Component/DependencyInjection/Compiler/ReplaceAliasByActualDefinitionPass.php";}i:33;C:46:"Symfony\Component\Config\Resource\FileResource":116:{s:107:"/private/tmp/container/src/Symfony/Component/DependencyInjection/Compiler/RemoveAbstractDefinitionsPass.php";}i:34;C:46:"Symfony\Component\Config\Resource\FileResource":98:{s:90:"/private/tmp/container/src/Symfony/Component/DependencyInjection/Compiler/RepeatedPass.php";}i:35;C:46:"Symfony\Component\Config\Resource\FileResource":131:{s:122:"/private/tmp/container/src/Symfony/Component/DependencyInjection/Compiler/CheckExceptionOnInvalidReferenceBehaviorPass.php";}i:36;C:56:"Symfony\Component\Config\Resource\ClassExistenceResource":34:{a:2:{i:0;s:9:"Container";i:1;i:0;}}}'); |
| 53 | + } |
| 54 | + |
| 55 | + private function getLogsFixtures() |
| 56 | + { |
| 57 | + return array( |
| 58 | + array(100, 'test', array('is_bootstraping' => true)), |
| 59 | + array(100, 'second test', array('is_bootstraping' => true)), |
| 60 | + ); |
| 61 | + } |
| 62 | + |
| 63 | + public function testIsNewBootstrapping() |
| 64 | + { |
| 65 | + $bootstrappingLoggerLoader = new $this->bootstrappingLoggerLoaderFqcn($this->getCacheDir()); |
| 66 | + $this->assertTrue($bootstrappingLoggerLoader->isNewBootstrapping()); |
| 67 | + |
| 68 | + $this->createProjectContainerFixture(); |
| 69 | + $this->assertFileExists($this->getCacheDir().'/FixturesBootstrappingLogDebugProjectContainer.php.meta'); |
| 70 | + $this->assertTrue($bootstrappingLoggerLoader->isNewBootstrapping()); |
| 71 | + |
| 72 | + $bootstrappingLoggerLoader->persistAppBootstrappingLogs($this->getLogsFixtures()); |
| 73 | + $this->assertFalse($bootstrappingLoggerLoader->isNewBootstrapping()); |
| 74 | + |
| 75 | + $this->removePersitedAppBootstrappingLogs(); |
| 76 | + } |
| 77 | + |
| 78 | + public function testPersistAppBootstrappingLogs() |
| 79 | + { |
| 80 | + $bootstrappingLoggerLoader = new $this->bootstrappingLoggerLoaderFqcn($this->getCacheDir()); |
| 81 | + $bootstrappingLoggerLoader->persistAppBootstrappingLogs($this->getLogsFixtures()); |
| 82 | + |
| 83 | + $this->assertFileExists($this->getCacheDir().'/appBootstrapping.log'); |
| 84 | + $this->assertEquals(md5_file($this->getCacheDir().'/appBootstrapping.log'), '4ffe252fb621c105f357e2a2c6c9b5c0'); |
| 85 | + |
| 86 | + $this->removePersitedAppBootstrappingLogs(); |
| 87 | + } |
| 88 | + |
| 89 | + public function testLoadBootsrappingLogs() |
| 90 | + { |
| 91 | + $bootstrappingLoggerLoader = new $this->bootstrappingLoggerLoaderFqcn($this->getCacheDir()); |
| 92 | + $bootstrappingLoggerLoader->persistAppBootstrappingLogs($this->getLogsFixtures()); |
| 93 | + |
| 94 | + $data = $bootstrappingLoggerLoader->loadBootsrappingLogs(); |
| 95 | + |
| 96 | + $this->assertArrayHasKey('hash', $data); |
| 97 | + $this->assertArrayHasKey('app_bootstrapping', $data); |
| 98 | + $this->assertArrayHasKey('logs', $data); |
| 99 | + |
| 100 | + $this->assertCount(2, $data['logs']); |
| 101 | + |
| 102 | + $this->assertEquals(md5_file($this->getCacheDir().'/FixturesBootstrappingLogDebugProjectContainer.php.meta'), $data['hash']); |
| 103 | + |
| 104 | + $this->removePersitedAppBootstrappingLogs(); |
| 105 | + } |
| 106 | +} |
0 commit comments