summaryrefslogtreecommitdiffstats
path: root/tests/lib/db/DBSchemaTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'tests/lib/db/DBSchemaTest.php')
-rw-r--r--tests/lib/db/DBSchemaTest.php107
1 files changed, 107 insertions, 0 deletions
diff --git a/tests/lib/db/DBSchemaTest.php b/tests/lib/db/DBSchemaTest.php
new file mode 100644
index 00000000000..284fc532c2a
--- /dev/null
+++ b/tests/lib/db/DBSchemaTest.php
@@ -0,0 +1,107 @@
+<?php
+/**
+ * Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test\DB;
+
+use OC_DB;
+use OCP\Security\ISecureRandom;
+
+/**
+ * Class DBSchemaTest
+ *
+ * @group DB
+ */
+class DBSchemaTest extends \Test\TestCase {
+ protected $schema_file = 'static://test_db_scheme';
+ protected $schema_file2 = 'static://test_db_scheme2';
+ protected $table1;
+ protected $table2;
+
+ protected function setUp() {
+ parent::setUp();
+
+ $dbfile = \OC::$SERVERROOT.'/tests/data/db_structure.xml';
+ $dbfile2 = \OC::$SERVERROOT.'/tests/data/db_structure2.xml';
+
+ $r = '_' . \OC::$server->getSecureRandom()->
+ generate(4, ISecureRandom::CHAR_LOWER . ISecureRandom::CHAR_DIGITS) . '_';
+ $content = file_get_contents( $dbfile );
+ $content = str_replace( '*dbprefix*', '*dbprefix*'.$r, $content );
+ file_put_contents( $this->schema_file, $content );
+ $content = file_get_contents( $dbfile2 );
+ $content = str_replace( '*dbprefix*', '*dbprefix*'.$r, $content );
+ file_put_contents( $this->schema_file2, $content );
+
+ $this->table1 = $r.'cntcts_addrsbks';
+ $this->table2 = $r.'cntcts_cards';
+ }
+
+ protected function tearDown() {
+ unlink($this->schema_file);
+ unlink($this->schema_file2);
+
+ parent::tearDown();
+ }
+
+ // everything in one test, they depend on each other
+ /**
+ * @medium
+ */
+ public function testSchema() {
+ $platform = \OC::$server->getDatabaseConnection()->getDatabasePlatform();
+ $this->doTestSchemaCreating();
+ $this->doTestSchemaChanging();
+ $this->doTestSchemaDumping();
+ $this->doTestSchemaRemoving();
+ }
+
+ public function doTestSchemaCreating() {
+ OC_DB::createDbFromStructure($this->schema_file);
+ $this->assertTableExist($this->table1);
+ $this->assertTableExist($this->table2);
+ }
+
+ public function doTestSchemaChanging() {
+ OC_DB::updateDbFromStructure($this->schema_file2);
+ $this->assertTableExist($this->table2);
+ }
+
+ public function doTestSchemaDumping() {
+ $outfile = 'static://db_out.xml';
+ OC_DB::getDbStructure($outfile);
+ $content = file_get_contents($outfile);
+ $this->assertContains($this->table1, $content);
+ $this->assertContains($this->table2, $content);
+ }
+
+ public function doTestSchemaRemoving() {
+ OC_DB::removeDBStructure($this->schema_file);
+ $this->assertTableNotExist($this->table1);
+ $this->assertTableNotExist($this->table2);
+ }
+
+ /**
+ * @param string $table
+ */
+ public function assertTableExist($table) {
+ $this->assertTrue(OC_DB::tableExists($table), 'Table ' . $table . ' does not exist');
+ }
+
+ /**
+ * @param string $table
+ */
+ public function assertTableNotExist($table) {
+ $platform = \OC::$server->getDatabaseConnection()->getDatabasePlatform();
+ if ($platform instanceof \Doctrine\DBAL\Platforms\SqlitePlatform) {
+ // sqlite removes the tables after closing the DB
+ $this->assertTrue(true);
+ } else {
+ $this->assertFalse(OC_DB::tableExists($table), 'Table ' . $table . ' exists.');
+ }
+ }
+}