diff options
author | Vincent Petry <pvince81@owncloud.com> | 2015-03-25 18:31:49 +0100 |
---|---|---|
committer | Vincent Petry <pvince81@owncloud.com> | 2015-03-26 11:00:22 +0100 |
commit | f056558b72db3a2eac72ac4e1b2889f7f7940b6a (patch) | |
tree | 3fecb94fb157e96b42db0a584f6d6dade4a65146 /tests/lib/repair | |
parent | ac8254de6a4adc60733de1eec242893004bfcc5a (diff) | |
download | nextcloud-server-f056558b72db3a2eac72ac4e1b2889f7f7940b6a.tar.gz nextcloud-server-f056558b72db3a2eac72ac4e1b2889f7f7940b6a.zip |
Add repair step to fix SQLite autoincrement
Force Doctrine to generate alter table SQL statements for SQLite to make
sure the code from OCSqlitePlatform is triggered.
Diffstat (limited to 'tests/lib/repair')
-rw-r--r-- | tests/lib/repair/repairsqliteautoincrement.php | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/tests/lib/repair/repairsqliteautoincrement.php b/tests/lib/repair/repairsqliteautoincrement.php new file mode 100644 index 00000000000..f81e08ba78e --- /dev/null +++ b/tests/lib/repair/repairsqliteautoincrement.php @@ -0,0 +1,81 @@ +<?php +/** + * Copyright (c) 2015 Vincent Petry <pvince81@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace Test\Repair; + +/** + * Tests for fixing the SQLite id recycling + */ +class TestRepairSqliteAutoincrement extends \Test\TestCase { + + /** + * @var \OC\Repair\SqliteAutoincrement + */ + private $repair; + + /** + * @var \Doctrine\DBAL\Connection + */ + private $connection; + + /** + * @var string + */ + private $tableName; + + /** + * @var \OCP\IConfig + */ + private $config; + + protected function setUp() { + parent::setUp(); + + $this->connection = \OC_DB::getConnection(); + $this->config = \OC::$server->getConfig(); + if (!$this->connection->getDatabasePlatform() instanceof \Doctrine\DBAL\Platforms\SqlitePlatform) { + $this->markTestSkipped("Test only relevant on Sqlite"); + } + + $dbPrefix = $this->config->getSystemValue('dbtableprefix', 'oc_'); + $this->tableName = $this->getUniqueID($dbPrefix . 'autoinc_test'); + $this->connection->exec('CREATE TABLE ' . $this->tableName . '("someid" INTEGER NOT NULL, "text" VARCHAR(16), PRIMARY KEY("someid"))'); + + $this->repair = new \OC\Repair\SqliteAutoincrement($this->connection); + } + + protected function tearDown() { + $this->connection->getSchemaManager()->dropTable($this->tableName); + parent::tearDown(); + } + + /** + * Tests whether autoincrement works + * + * @return boolean true if autoincrement works, false otherwise + */ + protected function checkAutoincrement() { + $this->connection->executeUpdate('INSERT INTO ' . $this->tableName . ' ("text") VALUES ("test")'); + $insertId = $this->connection->lastInsertId(); + $this->connection->executeUpdate('DELETE FROM ' . $this->tableName . ' WHERE "someid" = ?', array($insertId)); + + // insert again + $this->connection->executeUpdate('INSERT INTO ' . $this->tableName . ' ("text") VALUES ("test2")'); + $newInsertId = $this->connection->lastInsertId(); + + return ($insertId !== $newInsertId); + } + + public function testConvertIdColumn() { + $this->assertFalse($this->checkAutoincrement()); + + $this->repair->run(); + + $this->assertTrue($this->checkAutoincrement()); + } +} |