parent
9a35bd76fb
commit
35442e5474
@ -0,0 +1,90 @@ |
||||
<?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. |
||||
*/ |
||||
|
||||
class Test_DB extends UnitTestCase { |
||||
protected static $schema_file = 'static://test_db_scheme'; |
||||
protected $test_prefix; |
||||
|
||||
public function setUp() { |
||||
$dbfile = OC::$SERVERROOT.'/tests/data/db_structure.xml'; |
||||
|
||||
$r = '_'.OC_Util::generate_random_bytes('4').'_'; |
||||
$content = file_get_contents( $dbfile ); |
||||
$content = str_replace( '*dbprefix*', '*dbprefix*'.$r, $content ); |
||||
file_put_contents( self::$schema_file, $content ); |
||||
|
||||
$this->test_prefix = $r; |
||||
$this->table1 = $this->test_prefix.'contacts_addressbooks'; |
||||
$this->table2 = $this->test_prefix.'contacts_cards'; |
||||
} |
||||
|
||||
public function tearDown() { |
||||
unlink(self::$schema_file); |
||||
} |
||||
|
||||
protected function setUpDB() { |
||||
OC_DB::disconnect(); |
||||
OC_DB::createDbFromStructure(self::$schema_file); |
||||
} |
||||
protected function tearDownDB() { |
||||
OC_DB::removeDBStructure(self::$schema_file); |
||||
} |
||||
|
||||
// every thing in one test, phpunit messes with MDB2 |
||||
// also setUpDB and tearDownDB only once, otherwise sqlite doesn't finish |
||||
public function testDBCompatibility() { |
||||
$this->setUpDB(); |
||||
$this->doTestQuotes(); |
||||
$this->doTestNOW(); |
||||
$this->doTestUNIX_TIMESTAMP(); |
||||
$this->tearDownDB(); |
||||
} |
||||
|
||||
public function doTestQuotes() { |
||||
//$this->setUpDB(); |
||||
$query = OC_DB::prepare('SELECT `fullname` FROM *PREFIX*'.$this->table2.' WHERE `uri` = ?'); |
||||
$result = $query->execute(array('uri_1')); |
||||
$this->assertTrue($result); |
||||
$row = $result->fetchRow(); |
||||
$this->assertFalse($row); |
||||
$query = OC_DB::prepare('INSERT INTO *PREFIX*'.$this->table2.' (`fullname`,`uri`) VALUES (?,?)'); |
||||
$result = $query->execute(array('fullname test', 'uri_1')); |
||||
$this->assertTrue($result); |
||||
$query = OC_DB::prepare('SELECT `fullname`,`uri` FROM *PREFIX*'.$this->table2.' WHERE `uri` = ?'); |
||||
$result = $query->execute(array('uri_1')); |
||||
$this->assertTrue($result); |
||||
$row = $result->fetchRow(); |
||||
$this->assertArrayHasKey('fullname', $row); |
||||
$this->assertEqual($row['fullname'], 'fullname test'); |
||||
$row = $result->fetchRow(); |
||||
$this->assertFalse($row); |
||||
//$this->tearDownDB(); |
||||
} |
||||
|
||||
public function doTestNOW() { |
||||
//$this->setUpDB(); |
||||
$query = OC_DB::prepare('INSERT INTO *PREFIX*'.$this->table2.' (`fullname`,`uri`) VALUES (NOW(),?)'); |
||||
$result = $query->execute(array('uri_2')); |
||||
$this->assertTrue($result); |
||||
$query = OC_DB::prepare('SELECT `fullname`,`uri` FROM *PREFIX*'.$this->table2.' WHERE `uri` = ?'); |
||||
$result = $query->execute(array('uri_2')); |
||||
$this->assertTrue($result); |
||||
//$this->tearDownDB(); |
||||
} |
||||
|
||||
public function doTestUNIX_TIMESTAMP() { |
||||
//$this->setUpDB(); |
||||
$query = OC_DB::prepare('INSERT INTO *PREFIX*'.$this->table2.' (`fullname`,`uri`) VALUES (UNIX_TIMESTAMP(),?)'); |
||||
$result = $query->execute(array('uri_3')); |
||||
$this->assertTrue($result); |
||||
$query = OC_DB::prepare('SELECT `fullname`,`uri` FROM *PREFIX*'.$this->table2.' WHERE `uri` = ?'); |
||||
$result = $query->execute(array('uri_3')); |
||||
$this->assertTrue($result); |
||||
//$this->tearDownDB(); |
||||
} |
||||
} |
||||
@ -0,0 +1,118 @@ |
||||
<?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. |
||||
*/ |
||||
|
||||
class Test_DBSchema extends UnitTestCase { |
||||
protected static $schema_file = 'static://test_db_scheme'; |
||||
protected static $schema_file2 = 'static://test_db_scheme2'; |
||||
protected $test_prefix; |
||||
protected $table1; |
||||
protected $table2; |
||||
|
||||
public function setUp() { |
||||
$dbfile = OC::$SERVERROOT.'/tests/data/db_structure.xml'; |
||||
$dbfile2 = OC::$SERVERROOT.'/tests/data/db_structure2.xml'; |
||||
|
||||
$r = '_'.OC_Util::generate_random_bytes('4').'_'; |
||||
$content = file_get_contents( $dbfile ); |
||||
$content = str_replace( '*dbprefix*', '*dbprefix*'.$r, $content ); |
||||
file_put_contents( self::$schema_file, $content ); |
||||
$content = file_get_contents( $dbfile2 ); |
||||
$content = str_replace( '*dbprefix*', '*dbprefix*'.$r, $content ); |
||||
file_put_contents( self::$schema_file2, $content ); |
||||
|
||||
$this->test_prefix = $r; |
||||
$this->table1 = $this->test_prefix.'contacts_addressbooks'; |
||||
$this->table2 = $this->test_prefix.'contacts_cards'; |
||||
} |
||||
|
||||
public function tearDown() { |
||||
unlink(self::$schema_file); |
||||
unlink(self::$schema_file2); |
||||
} |
||||
|
||||
// every thing in one test, phpunit messes with MDB2 |
||||
public function testSchema() { |
||||
$this->doTestSchemaCreating(); |
||||
$this->doTestSchemaChanging(); |
||||
$this->doTestSchemaDumping(); |
||||
$this->doTestSchemaRemoving(); |
||||
} |
||||
|
||||
public function doTestSchemaCreating() { |
||||
OC_DB::createDbFromStructure(self::$schema_file); |
||||
$this->assertTableExist($this->table1); |
||||
$this->assertTableExist($this->table2); |
||||
} |
||||
|
||||
public function doTestSchemaChanging() { |
||||
OC_DB::updateDbFromStructure(self::$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(self::$schema_file); |
||||
$this->assertTableNotExist($this->table1); |
||||
$this->assertTableNotExist($this->table2); |
||||
} |
||||
|
||||
public function tableExist($table) { |
||||
$table = '*PREFIX*' . $table; |
||||
|
||||
switch (OC_Config::getValue( 'dbtype', 'sqlite' )) { |
||||
case 'sqlite': |
||||
case 'sqlite3': |
||||
$sql = "SELECT name FROM sqlite_master " |
||||
. "WHERE type = 'table' AND name != 'sqlite_sequence' " |
||||
. "AND name != 'geometry_columns' AND name != 'spatial_ref_sys' " |
||||
. "UNION ALL SELECT name FROM sqlite_temp_master " |
||||
. "WHERE type = 'table' AND name = '".$table."'"; |
||||
$query = OC_DB::prepare($sql); |
||||
$result = $query->execute(array()); |
||||
$exists = $result && $result->fetchOne(); |
||||
break; |
||||
case 'mysql': |
||||
$sql = 'SHOW TABLES LIKE "'.$table.'"'; |
||||
$query = OC_DB::prepare($sql); |
||||
$result = $query->execute(array()); |
||||
$exists = $result && $result->fetchOne(); |
||||
break; |
||||
case 'pgsql': |
||||
$sql = "SELECT tablename AS table_name, schemaname AS schema_name " |
||||
. "FROM pg_tables WHERE schemaname NOT LIKE 'pg_%' " |
||||
. "AND schemaname != 'information_schema' " |
||||
. "AND tablename == '".$table."'"; |
||||
$query = OC_DB::prepare($sql); |
||||
$result = $query->execute(array()); |
||||
$exists = $result && $result->fetchOne(); |
||||
break; |
||||
} |
||||
return $exists; |
||||
} |
||||
|
||||
public function assertTableExist($table) { |
||||
$this->assertTrue($this->tableExist($table)); |
||||
} |
||||
|
||||
public function assertTableNotExist($table) { |
||||
$type=OC_Config::getValue( "dbtype", "sqlite" ); |
||||
if( $type == 'sqlite' || $type == 'sqlite3' ) { |
||||
// sqlite removes the tables after closing the DB |
||||
} |
||||
else { |
||||
$this->assertFalse($this->tableExist($table)); |
||||
} |
||||
} |
||||
} |
||||
Loading…
Reference in new issue