diff options
author | Morris Jobke <hey@morrisjobke.de> | 2015-03-26 19:36:18 +0100 |
---|---|---|
committer | Morris Jobke <hey@morrisjobke.de> | 2015-03-26 19:36:18 +0100 |
commit | 70e64822b985763c2029681b870c023c16598412 (patch) | |
tree | c84f081a44fe10d2952cc6b3fc499047e0eb27b3 /tests/lib | |
parent | 9c6649f4f181bb1c3a452d0fe1f210430e955f03 (diff) | |
parent | f056558b72db3a2eac72ac4e1b2889f7f7940b6a (diff) | |
download | nextcloud-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.php | 13 | ||||
-rw-r--r-- | tests/lib/repair/repairsqliteautoincrement.php | 81 |
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()); + } +} |