summaryrefslogtreecommitdiffstats
path: root/tests/lib/db
diff options
context:
space:
mode:
authorRobin Appelman <icewind@owncloud.com>2014-03-27 14:44:19 +0100
committerRobin Appelman <icewind@owncloud.com>2014-06-03 11:17:21 +0200
commitadeac7aa3925c76dc53fb011c873d25eae520a4e (patch)
tree7256b51db516b8856ad786e13c3babd0fb7a00cb /tests/lib/db
parent35550e8d9a7239c66457fc1533462fd5949d9d2d (diff)
downloadnextcloud-server-adeac7aa3925c76dc53fb011c873d25eae520a4e.tar.gz
nextcloud-server-adeac7aa3925c76dc53fb011c873d25eae520a4e.zip
Check sqlite migration on a copy of the database file
Diffstat (limited to 'tests/lib/db')
-rw-r--r--tests/lib/db/migrator.php66
1 files changed, 47 insertions, 19 deletions
diff --git a/tests/lib/db/migrator.php b/tests/lib/db/migrator.php
index 88f6d7dcc63..31dc1c4951a 100644
--- a/tests/lib/db/migrator.php
+++ b/tests/lib/db/migrator.php
@@ -9,6 +9,7 @@
namespace Test\DB;
+use \Doctrine\DBAL\DBALException;
use \Doctrine\DBAL\Schema\Schema;
use \Doctrine\DBAL\Schema\SchemaConfig;
@@ -23,31 +24,29 @@ class Migrator extends \PHPUnit_Framework_TestCase {
public function setUp() {
$this->tableName = 'test_' . uniqid();
$this->connection = \OC_DB::getConnection();
- if ($this->connection->getDriver() instanceof \Doctrine\DBAL\Driver\PDOSqlite\Driver) {
- $this->markTestSkipped('Migration tests dont function on sqlite since sqlite doesnt give an error on existing duplicate data');
- }
}
public function tearDown() {
$this->connection->exec('DROP TABLE ' . $this->tableName);
}
- private function getInitialSchema() {
- $schema = new Schema(array(), array(), $this->getSchemaConfig());
- $table = $schema->createTable($this->tableName);
+ /**
+ * @return \Doctrine\DBAL\Schema\Schema[]
+ */
+ private function getDuplicateKeySchemas() {
+ $startSchema = new Schema(array(), array(), $this->getSchemaConfig());
+ $table = $startSchema->createTable($this->tableName);
$table->addColumn('id', 'integer');
$table->addColumn('name', 'string');
$table->addIndex(array('id'), $this->tableName . '_id');
- return $schema;
- }
- private function getNewSchema() {
- $schema = new Schema(array(), array(), $this->getSchemaConfig());
- $table = $schema->createTable($this->tableName);
+ $endSchema = new Schema(array(), array(), $this->getSchemaConfig());
+ $table = $endSchema->createTable($this->tableName);
$table->addColumn('id', 'integer');
$table->addColumn('name', 'string');
$table->addUniqueIndex(array('id'), $this->tableName . '_id');
- return $schema;
+
+ return array($startSchema, $endSchema);
}
private function getSchemaConfig() {
@@ -56,36 +55,65 @@ class Migrator extends \PHPUnit_Framework_TestCase {
return $config;
}
+ private function isSQLite() {
+ return $this->connection->getDriver() instanceof \Doctrine\DBAL\Driver\PDOSqlite\Driver;
+ }
+
private function getMigrator() {
- return new \OC\DB\Migrator($this->connection);
+ if ($this->isSQLite()) {
+ return new \OC\DB\SQLiteMigrator($this->connection);
+ } else {
+ return new \OC\DB\Migrator($this->connection);
+ }
}
/**
* @expectedException \OC\DB\MigrationException
*/
public function testDuplicateKeyUpgrade() {
+ if ($this->isSQLite()) {
+ $this->markTestSkipped('sqlite doesnt throw errors when creating a new key on existing data');
+ }
+ list($startSchema, $endSchema) = $this->getDuplicateKeySchemas();
$migrator = $this->getMigrator();
- $migrator->migrate($this->getInitialSchema());
+ $migrator->migrate($startSchema);
$this->connection->insert($this->tableName, array('id' => 1, 'name' => 'foo'));
$this->connection->insert($this->tableName, array('id' => 2, 'name' => 'bar'));
$this->connection->insert($this->tableName, array('id' => 2, 'name' => 'qwerty'));
- $migrator->checkMigrate($this->getNewSchema());
+ $migrator->checkMigrate($endSchema);
$this->fail('checkMigrate should have failed');
}
public function testUpgrade() {
+ list($startSchema, $endSchema) = $this->getDuplicateKeySchemas();
$migrator = $this->getMigrator();
- $migrator->migrate($this->getInitialSchema());
+ $migrator->migrate($startSchema);
$this->connection->insert($this->tableName, array('id' => 1, 'name' => 'foo'));
$this->connection->insert($this->tableName, array('id' => 2, 'name' => 'bar'));
$this->connection->insert($this->tableName, array('id' => 3, 'name' => 'qwerty'));
- $newSchema = $this->getNewSchema();
- $migrator->checkMigrate($newSchema);
- $migrator->migrate($newSchema);
+ $migrator->checkMigrate($endSchema);
+ $migrator->migrate($endSchema);
$this->assertTrue(true);
}
+
+ public function testInsertAfterUpgrade() {
+ list($startSchema, $endSchema) = $this->getDuplicateKeySchemas();
+ $migrator = $this->getMigrator();
+ $migrator->migrate($startSchema);
+
+ $migrator->migrate($endSchema);
+
+ $this->connection->insert($this->tableName, array('id' => 1, 'name' => 'foo'));
+ $this->connection->insert($this->tableName, array('id' => 2, 'name' => 'bar'));
+ try {
+ $this->connection->insert($this->tableName, array('id' => 2, 'name' => 'qwerty'));
+ $this->fail('Expected duplicate key insert to fail');
+ } catch (DBALException $e) {
+ $this->assertTrue(true);
+ }
+ }
}