37 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			37 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
<?php
 | 
						|
/**
 | 
						|
 * Copyright © Magento, Inc. All rights reserved.
 | 
						|
 * See COPYING.txt for license details.
 | 
						|
 */
 | 
						|
 | 
						|
namespace Magento\Test\Integrity;
 | 
						|
 | 
						|
use Magento\TestFramework\Helper\Bootstrap;
 | 
						|
 | 
						|
class DatabaseTest extends \PHPUnit\Framework\TestCase
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * Assure that there are no redundant indexes declared in database
 | 
						|
     */
 | 
						|
    public function testDuplicateKeys()
 | 
						|
    {
 | 
						|
        if (!defined('PERCONA_TOOLKIT_BIN_DIR')) {
 | 
						|
            $this->markTestSkipped('Path to Percona Toolkit is not specified.');
 | 
						|
        }
 | 
						|
        $checkerPath = PERCONA_TOOLKIT_BIN_DIR . '/pt-duplicate-key-checker';
 | 
						|
 | 
						|
        $db = Bootstrap::getInstance()->getBootstrap()->getApplication()->getDbInstance();
 | 
						|
        $command = $checkerPath . ' -d ' . $db->getSchema()
 | 
						|
            . ' h=' . $db->getHost()['db-host'] . ',u=' . $db->getUser() . ',p=' . $db->getPassword();
 | 
						|
 | 
						|
        // exec() have to be here since this is test.
 | 
						|
        // phpcs:ignore Magento2.Security.InsecureFunction
 | 
						|
        exec($command, $output, $exitCode);
 | 
						|
        $this->assertEquals(0, $exitCode);
 | 
						|
        $output = implode(PHP_EOL, $output);
 | 
						|
        if (preg_match('/Total Duplicate Indexes\s+(\d+)/', $output, $matches)) {
 | 
						|
            $this->fail($matches[1] . ' duplicate indexes found.' . PHP_EOL . PHP_EOL . $output);
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |