summaryrefslogtreecommitdiffstats
path: root/tests/lib
diff options
context:
space:
mode:
authorMorris Jobke <hey@morrisjobke.de>2015-03-26 19:36:18 +0100
committerMorris Jobke <hey@morrisjobke.de>2015-03-26 19:36:18 +0100
commit70e64822b985763c2029681b870c023c16598412 (patch)
treec84f081a44fe10d2952cc6b3fc499047e0eb27b3 /tests/lib
parent9c6649f4f181bb1c3a452d0fe1f210430e955f03 (diff)
parentf056558b72db3a2eac72ac4e1b2889f7f7940b6a (diff)
downloadnextcloud-server-70e64822b985763c2029681b870c023c16598412.tar.gz
nextcloud-server-70e64822b985763c2029681b870c023c16598412.zip
Merge pull request #14665 from owncloud/fileid-increment
SQLite autoincrement test
Diffstat (limited to 'tests/lib')
-rw-r--r--tests/lib/files/cache/cache.php13
-rw-r--r--tests/lib/repair/repairsqliteautoincrement.php81
2 files changed, 94 insertions, 0 deletions
diff --git a/tests/lib/files/cache/cache.php b/tests/lib/files/cache/cache.php
index 1bf838351b6..f0ad6cf3ab1 100644
--- a/tests/lib/files/cache/cache.php
+++ b/tests/lib/files/cache/cache.php
@@ -594,6 +594,19 @@ class Cache extends \Test\TestCase {
$this->assertEquals($newData, $newDataFromBogus);
}
+ public function testNoReuseOfFileId() {
+ $data1 = array('size' => 100, 'mtime' => 50, 'mimetype' => 'text/plain');
+ $this->cache->put('somefile.txt', $data1);
+ $info = $this->cache->get('somefile.txt');
+ $fileId = $info['fileid'];
+ $this->cache->remove('somefile.txt');
+ $data2 = array('size' => 200, 'mtime' => 100, 'mimetype' => 'text/plain');
+ $this->cache->put('anotherfile.txt', $data2);
+ $info2 = $this->cache->get('anotherfile.txt');
+ $fileId2 = $info2['fileid'];
+ $this->assertNotEquals($fileId, $fileId2);
+ }
+
protected function tearDown() {
if ($this->cache) {
$this->cache->clear();
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());
+ }
+}