summaryrefslogtreecommitdiffstats
path: root/tests/lib/repair
diff options
context:
space:
mode:
authorVincent Petry <pvince81@owncloud.com>2015-03-25 18:31:49 +0100
committerVincent Petry <pvince81@owncloud.com>2015-03-26 11:00:22 +0100
commitf056558b72db3a2eac72ac4e1b2889f7f7940b6a (patch)
tree3fecb94fb157e96b42db0a584f6d6dade4a65146 /tests/lib/repair
parentac8254de6a4adc60733de1eec242893004bfcc5a (diff)
downloadnextcloud-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.php81
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());
+ }
+}