2014-07-07 14:32:24 +04:00
|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* Copyright (c) 2014 Thomas Müller <deepdiver@owncloud.com>
|
|
|
|
* This file is licensed under the Affero General Public License version 3 or
|
|
|
|
* later.
|
|
|
|
* See the COPYING-README file.
|
|
|
|
*/
|
2015-03-27 01:19:27 +03:00
|
|
|
namespace Test\Repair;
|
2016-04-22 16:35:39 +03:00
|
|
|
use OCP\Migration\IOutput;
|
|
|
|
use OCP\Migration\IRepairStep;
|
2014-07-07 14:32:24 +04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Tests for the converting of MySQL tables to InnoDB engine
|
|
|
|
*
|
2015-11-03 03:52:41 +03:00
|
|
|
* @group DB
|
|
|
|
*
|
2014-07-07 14:32:24 +04:00
|
|
|
* @see \OC\Repair\RepairMimeTypes
|
|
|
|
*/
|
2015-03-27 01:19:27 +03:00
|
|
|
class RepairInnoDB extends \Test\TestCase {
|
2014-07-07 14:32:24 +04:00
|
|
|
|
2016-04-22 16:35:39 +03:00
|
|
|
/** @var IRepairStep */
|
2014-07-07 14:32:24 +04:00
|
|
|
private $repair;
|
|
|
|
|
|
|
|
/** @var \Doctrine\DBAL\Connection */
|
|
|
|
private $connection;
|
|
|
|
|
|
|
|
/** @var string */
|
|
|
|
private $tableName;
|
|
|
|
|
2014-11-11 01:30:38 +03:00
|
|
|
protected function setUp() {
|
|
|
|
parent::setUp();
|
|
|
|
|
2016-01-07 12:26:00 +03:00
|
|
|
$this->connection = \OC::$server->getDatabaseConnection();
|
2014-07-07 14:32:24 +04:00
|
|
|
if (!$this->connection->getDatabasePlatform() instanceof \Doctrine\DBAL\Platforms\MySqlPlatform) {
|
|
|
|
$this->markTestSkipped("Test only relevant on MySql");
|
|
|
|
}
|
|
|
|
|
|
|
|
$dbPrefix = \OC::$server->getConfig()->getSystemValue("dbtableprefix");
|
2014-12-02 15:51:36 +03:00
|
|
|
$this->tableName = $this->getUniqueID($dbPrefix . "_innodb_test");
|
2014-07-07 14:32:24 +04:00
|
|
|
$this->connection->exec("CREATE TABLE $this->tableName(id INT) ENGINE MyISAM");
|
|
|
|
|
|
|
|
$this->repair = new \OC\Repair\InnoDB();
|
|
|
|
}
|
|
|
|
|
2014-11-11 01:30:38 +03:00
|
|
|
protected function tearDown() {
|
2014-07-07 14:32:24 +04:00
|
|
|
$this->connection->getSchemaManager()->dropTable($this->tableName);
|
2014-11-11 01:30:38 +03:00
|
|
|
parent::tearDown();
|
2014-07-07 14:32:24 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
public function testInnoDBConvert() {
|
|
|
|
$result = $this->countMyIsamTables();
|
|
|
|
$this->assertEquals(1, $result);
|
|
|
|
|
2016-04-22 16:35:39 +03:00
|
|
|
/** @var IOutput | \PHPUnit_Framework_MockObject_MockObject $outputMock */
|
|
|
|
$outputMock = $this->getMockBuilder('\OCP\Migration\IOutput')
|
|
|
|
->disableOriginalConstructor()
|
|
|
|
->getMock();
|
|
|
|
|
|
|
|
$this->repair->run($outputMock);
|
2014-07-07 14:32:24 +04:00
|
|
|
|
|
|
|
$result = $this->countMyIsamTables();
|
|
|
|
$this->assertEquals(0, $result);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param $dbName
|
|
|
|
* @return mixed
|
|
|
|
*/
|
|
|
|
private function countMyIsamTables() {
|
|
|
|
$dbName = \OC::$server->getConfig()->getSystemValue("dbname");
|
|
|
|
|
|
|
|
$result = $this->connection->fetchColumn(
|
|
|
|
"SELECT count(*) FROM information_schema.tables WHERE table_schema = ? and table_name = ? AND engine = 'MyISAM'",
|
|
|
|
array($dbName, $this->tableName)
|
|
|
|
);
|
|
|
|
return $result;
|
|
|
|
}
|
|
|
|
}
|