From 2012437d99ae5b93950959ebe3140f064ae4af8f Mon Sep 17 00:00:00 2001 From: Mark Story Date: Fri, 26 Apr 2013 21:52:44 -0400 Subject: [PATCH] Clean up tests a bit. Fix incorrect namespaces and add destructors to clean up connections. The automatic disconnection helps solve too many connection errors with postgres and help reduce memory usage. --- lib/Cake/Database/Connection.php | 14 ++++++++++ lib/Cake/Database/Schema/Collection.php | 5 ++-- lib/Cake/Database/Schema/Dialect/Mysql.php | 5 ++++ .../Test/TestCase/Database/ConnectionTest.php | 8 ++++-- .../TestCase/Database/Driver/MysqlTest.php | 5 ++-- .../TestCase/Database/Driver/PostgresTest.php | 2 +- .../TestCase/Database/Driver/SqliteTest.php | 2 +- .../Expression/FunctionExpressionTest.php | 2 +- .../TestCase/Database/FunctionsTraitTest.php | 2 +- .../TestCase/Database/Log/LoggedQueryTest.php | 2 +- .../Database/Log/LoggingStatementTest.php | 2 +- .../TestCase/Database/Log/QueryLoggerTest.php | 2 +- lib/Cake/Test/TestCase/Database/QueryTest.php | 11 ++++++-- .../Database/Schema/CollectionTest.php | 26 ++++++++++++++++++- .../Database/Schema/Dialect/PostgresTest.php | 1 + .../TestCase/Database/Type/BinaryTypeTest.php | 2 +- .../Database/Type/DateTimeTypeTest.php | 2 +- .../TestCase/Database/Type/DateTypeTest.php | 2 +- lib/Cake/Test/TestCase/Database/TypeTest.php | 2 +- 19 files changed, 77 insertions(+), 20 deletions(-) diff --git a/lib/Cake/Database/Connection.php b/lib/Cake/Database/Connection.php index 1503e32bd33..38d3850a12c 100644 --- a/lib/Cake/Database/Connection.php +++ b/lib/Cake/Database/Connection.php @@ -113,6 +113,20 @@ public function __construct($config) { } } +/** + * Destructor + * + * Disconnects the driver to release the connection. + * + * @return void + */ + public function __destruct() { + if ($this->_connected) { + $this->_driver->disconnect(); + } + unset($this->_driver); + } + /** * Get the configuration data used to create the connection. * diff --git a/lib/Cake/Database/Schema/Collection.php b/lib/Cake/Database/Schema/Collection.php index 6efd12f16a2..a2e56b092eb 100644 --- a/lib/Cake/Database/Schema/Collection.php +++ b/lib/Cake/Database/Schema/Collection.php @@ -79,8 +79,9 @@ public function describe($name) { $name, $this->_connection->config() ); - $statement = $this->_connection->execute($sql, $params); - if (count($statement) == 0) { + try { + $statement = $this->_connection->execute($sql, $params); + } catch (\PDOException $e) { return null; } diff --git a/lib/Cake/Database/Schema/Dialect/Mysql.php b/lib/Cake/Database/Schema/Dialect/Mysql.php index b0d054a0b14..d004c34c845 100644 --- a/lib/Cake/Database/Schema/Dialect/Mysql.php +++ b/lib/Cake/Database/Schema/Dialect/Mysql.php @@ -25,6 +25,11 @@ class Mysql { */ protected $driver; +/** + * Constructor + * + * @param Cake\Database\Driver $driver The driver to use. + */ public function __construct($driver) { $this->_driver = $driver; } diff --git a/lib/Cake/Test/TestCase/Database/ConnectionTest.php b/lib/Cake/Test/TestCase/Database/ConnectionTest.php index 85c595458d4..345a22ba0c4 100644 --- a/lib/Cake/Test/TestCase/Database/ConnectionTest.php +++ b/lib/Cake/Test/TestCase/Database/ConnectionTest.php @@ -14,23 +14,27 @@ * @since CakePHP(tm) v 3.0.0 * @license MIT License (http://www.opensource.org/licenses/mit-license.php) */ -namespace Cake\Test\TestCase\Model\Datasource\Database; +namespace Cake\Test\TestCase\Database; use Cake\Core\Configure; use Cake\Database\Connection; +use Cake\TestSuite\TestCase; /** * Tests Connection class * **/ -class ConnectionTest extends \Cake\TestSuite\TestCase { +class ConnectionTest extends TestCase { public function setUp() { + parent::setUp(); $this->connection = new Connection(Configure::read('Datasource.test')); } public function tearDown() { + parent::tearDown(); $this->connection->execute('DROP TABLE IF EXISTS things'); + unset($this->connection); } /** diff --git a/lib/Cake/Test/TestCase/Database/Driver/MysqlTest.php b/lib/Cake/Test/TestCase/Database/Driver/MysqlTest.php index 64583535ee0..68b5b3f7570 100644 --- a/lib/Cake/Test/TestCase/Database/Driver/MysqlTest.php +++ b/lib/Cake/Test/TestCase/Database/Driver/MysqlTest.php @@ -15,18 +15,19 @@ * @since CakePHP(tm) v 3.0.0 * @license MIT License (http://www.opensource.org/licenses/mit-license.php) */ -namespace Cake\Test\TestCase\Model\Datasource\Database\Driver; +namespace Cake\Test\TestCase\Database\Driver; use Cake\Core\Configure; use Cake\Database\Connection; use Cake\Database\Driver\Mysql; +use Cake\TestSuite\TestCase; use \PDO; /** * Tests Mysql driver * */ -class MysqlTest extends \Cake\TestSuite\TestCase { +class MysqlTest extends TestCase { /** * Helper method for skipping tests that need a real connection. diff --git a/lib/Cake/Test/TestCase/Database/Driver/PostgresTest.php b/lib/Cake/Test/TestCase/Database/Driver/PostgresTest.php index 5a11f962dcb..04059f45f38 100644 --- a/lib/Cake/Test/TestCase/Database/Driver/PostgresTest.php +++ b/lib/Cake/Test/TestCase/Database/Driver/PostgresTest.php @@ -15,7 +15,7 @@ * @since CakePHP(tm) v 3.0.0 * @license MIT License (http://www.opensource.org/licenses/mit-license.php) */ -namespace Cake\Test\TestCase\Model\Datasource\Database\Driver; +namespace Cake\Test\TestCase\Database\Driver; use Cake\Core\Configure; use Cake\Database\Connection; diff --git a/lib/Cake/Test/TestCase/Database/Driver/SqliteTest.php b/lib/Cake/Test/TestCase/Database/Driver/SqliteTest.php index b3c37019390..440d88d6980 100644 --- a/lib/Cake/Test/TestCase/Database/Driver/SqliteTest.php +++ b/lib/Cake/Test/TestCase/Database/Driver/SqliteTest.php @@ -15,7 +15,7 @@ * @since CakePHP(tm) v 3.0.0 * @license MIT License (http://www.opensource.org/licenses/mit-license.php) */ -namespace Cake\Test\TestCase\Model\Datasource\Database\Driver; +namespace Cake\Test\TestCase\Database\Driver; use Cake\Core\Configure; use Cake\Database\Connection; diff --git a/lib/Cake/Test/TestCase/Database/Expression/FunctionExpressionTest.php b/lib/Cake/Test/TestCase/Database/Expression/FunctionExpressionTest.php index 2b1c8830ef7..c1d5f59e3d6 100644 --- a/lib/Cake/Test/TestCase/Database/Expression/FunctionExpressionTest.php +++ b/lib/Cake/Test/TestCase/Database/Expression/FunctionExpressionTest.php @@ -15,7 +15,7 @@ * @since CakePHP(tm) v 3.0 * @license MIT License (http://www.opensource.org/licenses/mit-license.php) */ -namespace Cake\Test\TestCase\Model\Datasource\Database\Expression; +namespace Cake\Test\TestCase\Database\Expression; use Cake\Database\Expression\FunctionExpression; diff --git a/lib/Cake/Test/TestCase/Database/FunctionsTraitTest.php b/lib/Cake/Test/TestCase/Database/FunctionsTraitTest.php index 7e8af7b3a9b..49966e9bb4a 100644 --- a/lib/Cake/Test/TestCase/Database/FunctionsTraitTest.php +++ b/lib/Cake/Test/TestCase/Database/FunctionsTraitTest.php @@ -15,7 +15,7 @@ * @since CakePHP(tm) v 3.0 * @license MIT License (http://www.opensource.org/licenses/mit-license.php) */ -namespace Cake\Test\TestCase\Model\Datasource\Database; +namespace Cake\Test\TestCase\Database; use Cake\Database\FunctionsTrait; diff --git a/lib/Cake/Test/TestCase/Database/Log/LoggedQueryTest.php b/lib/Cake/Test/TestCase/Database/Log/LoggedQueryTest.php index d5d6b4bab4c..33931543356 100644 --- a/lib/Cake/Test/TestCase/Database/Log/LoggedQueryTest.php +++ b/lib/Cake/Test/TestCase/Database/Log/LoggedQueryTest.php @@ -15,7 +15,7 @@ * @since CakePHP(tm) v 3.0.0 * @license MIT License (http://www.opensource.org/licenses/mit-license.php) */ -namespace Cake\Test\TestCase\Model\Datasource\Database\Log; +namespace Cake\Test\TestCase\Database\Log; use Cake\Database\Log\LoggedQuery; diff --git a/lib/Cake/Test/TestCase/Database/Log/LoggingStatementTest.php b/lib/Cake/Test/TestCase/Database/Log/LoggingStatementTest.php index e6e0c05b203..32bdf7888a1 100644 --- a/lib/Cake/Test/TestCase/Database/Log/LoggingStatementTest.php +++ b/lib/Cake/Test/TestCase/Database/Log/LoggingStatementTest.php @@ -14,7 +14,7 @@ * @since CakePHP(tm) v 3.0.0 * @license MIT License (http://www.opensource.org/licenses/mit-license.php) */ -namespace Cake\Test\TestCase\Model\Datasource\Database\Log; +namespace Cake\Test\TestCase\Database\Log; use Cake\Database\Log\LoggingStatement; use PDOStatement; diff --git a/lib/Cake/Test/TestCase/Database/Log/QueryLoggerTest.php b/lib/Cake/Test/TestCase/Database/Log/QueryLoggerTest.php index 087e59e4c9b..a78053dffd3 100644 --- a/lib/Cake/Test/TestCase/Database/Log/QueryLoggerTest.php +++ b/lib/Cake/Test/TestCase/Database/Log/QueryLoggerTest.php @@ -14,7 +14,7 @@ * @since CakePHP(tm) v 3.0.0 * @license MIT License (http://www.opensource.org/licenses/mit-license.php) */ -namespace Cake\Test\TestCase\Model\Datasource\Database\Log; +namespace Cake\Test\TestCase\Database\Log; use Cake\Database\Log\LoggedQuery; use Cake\Database\Log\QueryLogger; diff --git a/lib/Cake/Test/TestCase/Database/QueryTest.php b/lib/Cake/Test/TestCase/Database/QueryTest.php index 4a501a6eb5d..e4eae79318f 100644 --- a/lib/Cake/Test/TestCase/Database/QueryTest.php +++ b/lib/Cake/Test/TestCase/Database/QueryTest.php @@ -15,25 +15,32 @@ * @since CakePHP(tm) v 3.0.0 * @license MIT License (http://www.opensource.org/licenses/mit-license.php) */ -namespace Cake\Test\TestCase\Model\Datasource\Database; +namespace Cake\Test\TestCase\Database; use Cake\Core\Configure; use Cake\Database\Connection; use Cake\Database\Query; +use Cake\TestSuite\TestCase; /** * Tests Query class * */ -class QueryTest extends \Cake\TestSuite\TestCase { +class QueryTest extends TestCase { public function setUp() { + parent::setUp(); $this->connection = new Connection(Configure::read('Datasource.test')); $this->connection->execute('DROP TABLE IF EXISTS articles'); $this->connection->execute('DROP TABLE IF EXISTS authors'); $this->connection->execute('DROP TABLE IF EXISTS dates'); } + public function tearDown() { + parent::tearDown(); + unset($this->connection); + } + /** * Test helper for creating tables. * diff --git a/lib/Cake/Test/TestCase/Database/Schema/CollectionTest.php b/lib/Cake/Test/TestCase/Database/Schema/CollectionTest.php index 54004729247..c684dd61321 100644 --- a/lib/Cake/Test/TestCase/Database/Schema/CollectionTest.php +++ b/lib/Cake/Test/TestCase/Database/Schema/CollectionTest.php @@ -16,7 +16,9 @@ */ namespace Cake\Test\TestCase\Database\Schema; +use Cake\Core\Configure; use Cake\Database\Schema\Table; +use Cake\Database\Connection; use Cake\Database\Schema\Collection; use Cake\TestSuite\TestCase; @@ -25,6 +27,27 @@ */ class CollectionTest extends TestCase { +/** + * Setup function + * + * @return void + */ + public function setUp() { + parent::setUp(); + $this->connection = new Connection(Configure::read('Datasource.test')); + } + +/** + * Teardown function + * + * @return void + */ + public function tearDown() { + parent::tearDown(); + $this->connection->disconnect(); + unset($this->connection); + } + /** * Test getting table listings. * @@ -42,10 +65,11 @@ public function testDescribe() { } /** - * @expectedException Cake\Error\Exception * @return void */ public function testDescribeIncorrectTable() { + $schema = new Collection($this->connection); + $this->assertNull($schema->describe('derp')); } } diff --git a/lib/Cake/Test/TestCase/Database/Schema/Dialect/PostgresTest.php b/lib/Cake/Test/TestCase/Database/Schema/Dialect/PostgresTest.php index 0a2501b61aa..dcca985dfa3 100644 --- a/lib/Cake/Test/TestCase/Database/Schema/Dialect/PostgresTest.php +++ b/lib/Cake/Test/TestCase/Database/Schema/Dialect/PostgresTest.php @@ -45,6 +45,7 @@ protected function _needsConnection() { */ protected function _createTables($connection) { $this->_needsConnection(); + $connection->execute('DROP TABLE IF EXISTS articles'); $connection->execute('DROP TABLE IF EXISTS authors'); diff --git a/lib/Cake/Test/TestCase/Database/Type/BinaryTypeTest.php b/lib/Cake/Test/TestCase/Database/Type/BinaryTypeTest.php index 473b66fdf27..0791c794a9a 100644 --- a/lib/Cake/Test/TestCase/Database/Type/BinaryTypeTest.php +++ b/lib/Cake/Test/TestCase/Database/Type/BinaryTypeTest.php @@ -14,7 +14,7 @@ * @since CakePHP(tm) v 3.0.0 * @license MIT License (http://www.opensource.org/licenses/mit-license.php) */ -namespace Cake\Test\TestCase\Model\Datasource\Database\Type; +namespace Cake\Test\TestCase\Database\Type; use Cake\Database\Type; use Cake\Database\Type\BinaryType; diff --git a/lib/Cake/Test/TestCase/Database/Type/DateTimeTypeTest.php b/lib/Cake/Test/TestCase/Database/Type/DateTimeTypeTest.php index a8d858b8907..adbf2583ada 100644 --- a/lib/Cake/Test/TestCase/Database/Type/DateTimeTypeTest.php +++ b/lib/Cake/Test/TestCase/Database/Type/DateTimeTypeTest.php @@ -14,7 +14,7 @@ * @since CakePHP(tm) v 3.0.0 * @license MIT License (http://www.opensource.org/licenses/mit-license.php) */ -namespace Cake\Test\TestCase\Model\Datasource\Database\Type; +namespace Cake\Test\TestCase\Database\Type; use Cake\Database\Type; use Cake\Database\Type\DateTimeType; diff --git a/lib/Cake/Test/TestCase/Database/Type/DateTypeTest.php b/lib/Cake/Test/TestCase/Database/Type/DateTypeTest.php index f2544a52c4c..6276f8b980f 100644 --- a/lib/Cake/Test/TestCase/Database/Type/DateTypeTest.php +++ b/lib/Cake/Test/TestCase/Database/Type/DateTypeTest.php @@ -14,7 +14,7 @@ * @since CakePHP(tm) v 3.0.0 * @license MIT License (http://www.opensource.org/licenses/mit-license.php) */ -namespace Cake\Test\TestCase\Model\Datasource\Database\Type; +namespace Cake\Test\TestCase\Database\Type; use Cake\Database\Type; use Cake\Database\Type\DateType; diff --git a/lib/Cake/Test/TestCase/Database/TypeTest.php b/lib/Cake/Test/TestCase/Database/TypeTest.php index f608f664677..de6d7449ae6 100644 --- a/lib/Cake/Test/TestCase/Database/TypeTest.php +++ b/lib/Cake/Test/TestCase/Database/TypeTest.php @@ -15,7 +15,7 @@ * @since CakePHP(tm) v 3.0.0 * @license MIT License (http://www.opensource.org/licenses/mit-license.php) */ -namespace Cake\Test\TestCase\Model\Datasource\Database; +namespace Cake\Test\TestCase\Database; use Cake\Database\Type; use PDO;