Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
HhvmCompatibilityTest.php
Go to the documentation of this file.
1 <?php
9 namespace Magento\Test\Integrity;
10 
12 
13 class HhvmCompatibilityTest extends \PHPUnit\Framework\TestCase
14 {
18  protected $allowedDirectives = [
19  'session.cookie_secure',
20  'session.cookie_httponly',
21  'session.use_cookies',
22  'session.use_only_cookies',
23  'session.referer_check',
24  'session.save_path',
25  'session.save_handler',
26  'session.cookie_lifetime',
27  'session.cookie_secure',
28  'date.timezone',
29  'memory_limit',
30  'max_execution_time',
31  'short_open_tag',
32  'disable_functions',
33  'asp_tags',
34  'apc.enabled',
35  'eaccelerator.enable',
36  'mime_magic.magicfile',
37  'display_errors',
38  'default_socket_timeout',
39  'pcre.recursion_limit',
40  'default_charset',
41 
42  /*
43  There is not way to specify calculation/serialization precision in hhvm.
44  Adding to whitelist in order to align precisions in php.
45  */
46  'precision',
47  'serialize_precision',
48  ];
49 
55  private $whitelistVarsInFiles = [
56  'max_input_vars' => [
57  'integration/testsuite/Magento/Swatches/Controller/Adminhtml/Product/AttributeTest.php',
58  'integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/AttributeTest.php',
59  ]
60  ];
61 
69  {
70  $deniedDirectives = [];
71  foreach ($this->getFiles() as $file) {
72  $fileDirectives = $this->parseDirectives($file);
73  if ($fileDirectives) {
74  $fileDeniedDirectives = array_diff($fileDirectives, $this->allowedDirectives);
75  if ($fileDeniedDirectives) {
76  $deniedDirectivesInFile = array_unique($fileDeniedDirectives);
77  foreach ($deniedDirectivesInFile as $key => $deniedDirective) {
78  if (isset($this->whitelistVarsInFiles[$deniedDirective])) {
79  foreach ($this->whitelistVarsInFiles[$deniedDirective] as $whitelistFile) {
80  if (strpos($file, $whitelistFile) !== false) {
81  unset($deniedDirectivesInFile[$key]);
82  }
83  }
84  }
85  }
86  if ($deniedDirectivesInFile) {
87  $deniedDirectives[$file] = $deniedDirectivesInFile;
88  }
89  }
90  }
91  }
92  if ($deniedDirectives) {
93  $this->fail($this->createMessage($deniedDirectives));
94  }
95  }
96 
100  protected function getFiles()
101  {
102  return \array_merge(
103  Files::init()->getPhpFiles(
110  ),
111  Files::init()->getPhtmlFiles(false, false),
112  Files::init()->getFiles([BP . '/dev/'], '*.php')
113  );
114  }
115 
120  protected function parseDirectives($file)
121  {
122  $content = file_get_contents($file);
123  $pattern = '/ini_[g|s]et\(\s*[\'|"]([\w\._]+?)[\'|"][\s\w,\'"]*\)/';
124  preg_match_all($pattern, $content, $matches);
125 
126  return $matches ? $matches[1] : null;
127  }
128 
133  protected function createMessage($deniedDirectives)
134  {
135  $message = 'HHVM-incompatible ini_get/ini_set options were found:';
136  foreach ($deniedDirectives as $file => $fileDeniedDirectives) {
137  $message .= "\n" . $file . ': [' . implode(', ', $fileDeniedDirectives) . ']';
138  }
139  return $message;
140  }
141 }
$pattern
Definition: website.php:22
$message
const BP
Definition: autoload.php:14