Project

General

Profile

Backport(バックポート) #3661

テストケースをSQLite等のDBMS上で動作させることができない

Added by isao sano almost 7 years ago. Updated over 6 years ago.

Status:
Fixed(完了)
Priority:
Normal(通常)
Assignee:
Target version:
Start date:
2014-07-15
Due date:
% Done:

100%


Description

現象

php5 test/unit/model/doctrine/MemberTest.php などのようにテストケースを実行すると、下記のようなエラーが出力されて中断する。

PHP Fatal error:  Uncaught exception 'Doctrine_Connection_Sqlite_Exception' with message 'SQLSTATE[23000]: Integrity constraint violation: 19 activity_data.body may not be NULL' in /home/upsilon/git/openpne3/sqlite/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php:1082
Stack trace:
#0 /home/upsilon/git/openpne3/sqlite/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection/Statement.php(269): Doctrine_Connection->rethrowException(Object(PDOException), Object(Doctrine_Connection_Statement))
#1 /home/upsilon/git/openpne3/sqlite/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php(1042): Doctrine_Connection_Statement->execute(Array)
#2 /home/upsilon/git/openpne3/sqlite/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php(687): Doctrine_Connection->exec('INSERT INTO act...', Array)
#3 /home/upsilon/git/openpne3/sqlite/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctr in /home/upsilon/git/openpne3/sqlite/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php on line 1082

Fatal error: Uncaught exception 'Doctrine_Connection_Sqlite_Exception' with message 'SQLSTATE[23000]: Integrity constraint violation: 19 activity_data.body may not be NULL' in /home/upsilon/git/openpne3/sqlite/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php:1082
Stack trace:
#0 /home/upsilon/git/openpne3/sqlite/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection/Statement.php(269): Doctrine_Connection->rethrowException(Object(PDOException), Object(Doctrine_Connection_Statement))
#1 /home/upsilon/git/openpne3/sqlite/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php(1042): Doctrine_Connection_Statement->execute(Array)
#2 /home/upsilon/git/openpne3/sqlite/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php(687): Doctrine_Connection->exec('INSERT INTO act...', Array)
#3 /home/upsilon/git/openpne3/sqlite/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctr in /home/upsilon/git/openpne3/sqlite/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php on line 1082

原因

test/fixtures/test_data.yml の中にActivityDataのbodyの値が設定されていないレコードが含まれている。

修正内容

dummy_activity7 と dummy_activity8 に不足している値を追加する。

#1527 に対する修正によって再度発生した問題

現象

php5 test/unit/model/doctrine/MemberTest.php などのようにテストケースを実行すると、下記のようなエラーが出力されて中断する。

PHP Fatal error:  Uncaught exception 'Doctrine_Connection_Sqlite_Exception' with message 'SQLSTATE[HY000]: General error: 1 near "SET": syntax error. Failing Query: "SET FOREIGN_KEY_CHECKS = 0"' in /home/upsilon/git/openpne3/houou/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php:1082
Stack trace:
#0 /home/upsilon/git/openpne3/houou/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php(1061): Doctrine_Connection->rethrowException(Object(PDOException), Object(Doctrine_Connection_Sqlite_ExtraFunctions), 'SET FOREIGN_KEY...')
#1 /home/upsilon/git/openpne3/houou/test/bootstrap/database.php(15): Doctrine_Connection->exec('SET FOREIGN_KEY...')
#2 /home/upsilon/git/openpne3/houou/test/unit/model/doctrine/MemberTest.php(4): include_once('/home/upsilon/g...')
#3 {main}
  thrown in /home/upsilon/git/openpne3/houou/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php on line 1082

原因

6e7de531 によって test/bootstrap/database.php に追加された、

$conn = opDoctrineQuery::getMasterConnectionDirect();
$conn->exec('SET FOREIGN_KEY_CHECKS = 0');

のコードからエラーが発生している。ここで実行されている SET FOREIGN_KEY_CHECKS = 0 はMySQLに依存するクエリであるため、MySQL以外のDBMS上では実行に失敗しエラーが発生する。

修正内容

上記のコードを、DBMSがMySQLである場合のみ実行するように修正する。


Related issues

Copied from OpenPNE 3 - Bug(バグ) #1984: テストケースをSQLite等のDBMS上で動作させることができない Fixed(完了) 2011-03-29

Associated revisions

Revision 73fa2dcc (diff)
Added by Youichi Kimura almost 7 years ago

avoid incompatible query when not using MySQL (fixes #3661, BP from #1984)

Revision 7439f352 (diff)
Added by Youichi Kimura over 6 years ago

activity_data.body must not contain the null value (fixes #1984)

History

#1 Updated by isao sano almost 7 years ago

  • Copied from Bug(バグ) #1984: テストケースをSQLite等のDBMS上で動作させることができない added

#2 Updated by 誠二 天重 almost 7 years ago

  • Status changed from New(新規) to Pending Review(レビュー待ち)
  • Assignee set to 誠二 天重
  • % Done changed from 0 to 50

https://github.com/openpne/OpenPNE3/pull/163
にてプルリクしました。

#3 Updated by Shinichi Urabe almost 7 years ago

  • Status changed from Pending Review(レビュー待ち) to Pending Testing(テスト待ち)
  • % Done changed from 50 to 70

レビューOKです

#4 Updated by 誠二 天重 over 6 years ago

もとのバグチケットから 019a6ce780fb636795dab151fc4ef679f4aca244 を cherry-pick し忘れていたので、プルリクエストに追加しました。

#5 Updated by 誠二 天重 over 6 years ago

  • Status changed from Pending Testing(テスト待ち) to Pending Review(レビュー待ち)
  • % Done changed from 70 to 50

#6 Updated by Shinichi Urabe over 6 years ago

  • Status changed from Pending Review(レビュー待ち) to Pending Testing(テスト待ち)
  • % Done changed from 50 to 70

レビューOKです

#7 Updated by isao sano over 6 years ago

  • Status changed from Pending Testing(テスト待ち) to Pending Merge(マージ待ち)
  • % Done changed from 70 to 80

単体試験完了しました。
問題ありません。

#8 Updated by Youichi Kimura over 6 years ago

  • Status changed from Pending Merge(マージ待ち) to Fixed(完了)
  • % Done changed from 80 to 100

更新履歴 73fa2dcc2c93218cde3d7cbfb54bb7624b158292 で適用されました。

Also available in: Atom PDF