![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/module-indexer/Test/Unit/Model/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Indexer\Test\Unit\Model; use Magento\Framework\App\ResourceConnection; use Magento\Indexer\Model\ProcessManager; use PHPUnit\Framework\TestCase; /** * Class covers process manager execution test logic * * @requires function pcntl_fork * @see \Magento\Indexer\Model\ProcessManager::isCanBeParalleled */ class ProcessManagerTest extends TestCase { /** * @dataProvider functionsWithErrorProvider * @param array $userFunctions * @param int $threadsCount * @return void */ public function testFailureInChildProcessHandleMultiThread(array $userFunctions, int $threadsCount): void { $connectionMock = $this->createMock(ResourceConnection::class); $processManager = new ProcessManager( $connectionMock, null, $threadsCount ); try { $processManager->execute($userFunctions); $this->fail('Exception was not handled'); } catch (\RuntimeException $exception) { $this->assertEquals('Fail in child process', $exception->getMessage()); } } /** * Closure functions data provider for multi thread execution * * @return array * @SuppressWarnings(PHPMD.ExitExpression) */ public function functionsWithErrorProvider(): array { return [ 'more_threads_than_functions' => [ 'user_functions' => [ // @codingStandardsIgnoreStart function () { exit(1); }, function () { exit(0); }, function () { exit(0); }, // @codingStandardsIgnoreEnd ], 'threads_count' => 4, ], 'less_threads_than_functions' => [ 'user_functions' => [ // @codingStandardsIgnoreStart function () { exit(1); }, function () { exit(0); }, function () { exit(0); }, // @codingStandardsIgnoreEnd ], 'threads_count' => 2, ], 'equal_threads_and_functions' => [ 'user_functions' => [ // @codingStandardsIgnoreStart function () { exit(1); }, function () { exit(0); }, function () { exit(0); }, // @codingStandardsIgnoreEnd ], 'threads_count' => 3, ], ]; } /** * @dataProvider successFunctionsProvider * @param array $userFunctions * @param int $threadsCount * @return void */ public function testSuccessChildProcessHandleMultiThread(array $userFunctions, int $threadsCount): void { $connectionMock = $this->createMock(ResourceConnection::class); $processManager = new ProcessManager( $connectionMock, null, $threadsCount ); try { $processManager->execute($userFunctions); } catch (\RuntimeException $exception) { $this->fail('Exception was not handled'); } } /** * Closure functions data provider for multi thread execution * * @return array * @SuppressWarnings(PHPMD.ExitExpression) */ public function successFunctionsProvider(): array { return [ 'more_threads_than_functions' => [ 'user_functions' => [ // @codingStandardsIgnoreStart function () { exit(0); }, function () { exit(0); }, function () { exit(0); }, // @codingStandardsIgnoreEnd ], 'threads_count' => 4, ], 'less_threads_than_functions' => [ 'user_functions' => [ // @codingStandardsIgnoreStart function () { exit(0); }, function () { exit(0); }, function () { exit(0); }, // @codingStandardsIgnoreEnd ], 'threads_count' => 2, ], 'equal_threads_and_functions' => [ 'user_functions' => [ // @codingStandardsIgnoreStart function () { exit(0); }, function () { exit(0); }, function () { exit(0); }, // @codingStandardsIgnoreEnd ], 'threads_count' => 3, ], ]; } }