JBoss検証計画
ある環境でJBossが問題なく動作するかどうかを検証せよとある日上司に言われたら貴方ならどうしますか.
求められているのはJBoss上で特定のアプリがちゃんと動作するかの検証ではなく,ある特定のJVM上(+OS/ハード上)でJBossがちゃんと動くかなので,JBossの機能を網羅的に呼び出してテストするようなことが必要と考える.
そんな困った仕事を振られたわけだが,少し考えてJBossのソース配布版についているtestsuiteによる動作検証という方法を思いついた.
testsuiteならば間違いなくJBossの全機能をその環境上で呼び出してくれる.testsuiteは基本的には各実装クラスの単体テストの集合だが,ちょろっと見た感じではクラスタリング機能のテスト等も含まれており,一定範囲の結合テストもやってくれそう.さらに,testsuiteの動作指定によっては長時間負荷テストまでできてしまいそうな感じ.すごいじゃん.
そんなわけでJBossのTestsuiteについて調べてみました.
今回の対象バージョン:jboss-3.2.7
ソース展開ディレクトリ:$JBOSS_SRC
testsuiteは以下のディレクトリにあります.
$JBOSS_SRC/testsuite
testsuiteを実行するためには,jbossのビルドが完了している必要があります.
shell> cd $JBOSS_SRC/build shell> chmod 744 build.sh shell> ./build.sh ... BUILD SUCCESSFUL Total time: 2 minites 22seconds
その上で,testsuiteのビルドを行いましょう.(これは必ずしも必要ではないかも)
shell> cd $JBOSS_SRC/testsuite shell> chmod 744 build.sh shell> ./build.sh ... BUILD SUCCESSFUL Total time: 1 minite 25 seconds
これでjbossサーバおよびtestsuiteのバイナリが使用可能となりました.次はtestsuiteの実行ですが,その前にtestsutieについてちょっと確認してみましょう.
今さら敢えて言う必要はないかもですが,testsuiteはビルドツールantを通して動作を行います(というかjbossの一連のビルド自体がantを使用).先ほどまで使用していたbuild.shはant用設定ファイルであるbuild.xmlのラッパーのようなものでした.
どんなテスト項目があるのかを見るために,-projecthelpオプションで確認してみましょう.
shell> cd $JBOSS_SRC/testsuite shell> ./build.sh -projecthelp Main targets: all Builds everything. clean Cleans up most generated files. compile Compile all source files. docs Builds all documentation. help Displays the project help iiop-test Execute a single test. jars Builds all jar files. jboss-all-config-tests The units tests which are run against the jboss all config jboss-minimal-tests Validate the minimal config main Executes the default target (most). most Builds almost everything. one-test Execute a single test. reports Generates all reports. start-all Run the all jboss configuration start-default Run the default jboss configuration start-minimal Run a minimal jboss configuration test Execute a single test. test-example-binding-manager Test the example binding configuration tests Execute all non-benchmark tests. tests-apache Test that apache can be started/stopped from ant tests-apache-tomcat-clustering Execute clustering tests requiring an apache load balanced two TC nodes. tests-clustering Execute clustering tests requiring two nodes. tests-ha Execute ha tests. tests-jboss-cluster Test that two jboss cluster nodes can be started/stopped from ant tests-jbossnet Execute JBoss.NET Tests tests-security-manager Tests run against a jboss server with a security manager tests-stress Execute all stress tests. tomcat-ssl-tests Tomcat tests requiring an SSL connector tomcat-sso-clustered-tests Tomcat tests requiring clustered SSO configured tomcat-sso-tests Tomcat tests requiring SSO configured Default target: main
なんかモサッと出てきましたね.これらのターゲットは大きく2つに分類できます.1つが先ほどのtestsuiteのビルド関連のもの,もう1つがこれからやるtestsuiteによるテストの実施に関するものです.
先ほどのようにターゲット名を指定しないでbuild.shを実行するとデフォルトであるmainが実行されます.といってもmainの中身はmostを呼び出すだけ,mostの中身はjarsを呼び出すだけとなります.jarsはbuild.xmlではなくimports/test-jars.xmlに定義されており,jarsによって各テスト用バイナリがコンパイルされる形になります.
testsuiteによるテストを走らせる場合には,ターゲット名testsを使用します.(少なくともJBoss Wikiにはそう書いてあります http://www.jboss.org/wiki/Wiki.jsp?page=HowToRunTheTestsuite) testsの中味は以下です.
見ていただければ分かるように,クラスタリングのテストやTomcatを用いたSSL,シングルサインオンのテストまで入っています.
ちなみにターゲット名testを用いて個別テストを行う場合を除いて,テストを実行する前にjbossは全てシャットダウンしておかなければなりません.jboss-all-config-testsなどの内部でjbossインスタンスが起動・停止されます.start-jbossやstop-jbossといったマクロがimports/server-config.xmlに定義されており,build.xmlの各ターゲットによって利用されています.
testsを実行すると最後にtests-reportが実行され,テスト結果がoutput/reportsフォルダ以下にtext形式,およびhtml形式で出力されます.ここではjboss-all-config-testsを行い,その後手動でtests-reportsを実行した場合の例を書きます.テストの実行はビルド時と比べてかなり長い時間を要します.
shell> ./build.sh tests ... BUILD SUCCESSFUL Total time: 41 minutes 23 seconds
公式サイトにアップされているコントリビュータによるテスト結果サンプル(http://testsuite.jboss.com/results/resultsSummary.jsp)から見ても分かるように,実は2000弱あるテスト項目のうち,いくつかは失敗に終わってしまいます.なぜ失敗に終わってしまったのかについての検証する必要もあるかと思いますが,指し当たってSun JVMと別のJVMとの間でのJBossの比較動作検証といった視点では,「Sun JVMでは成功した○○が別のJVMでは失敗だった/エラーだった」といった点がないかどうかから見ていくのが良いかも知れません.
-
- -
追記
testsではなくjboss-all-config-testsを実行した場合には,テスト結果内容を含むXMLの出力までを行ってくれるようです.その後手動でreportsを実行すればHTML化されます.ちなみにtestsに比べて95%くらいのカバー率ですかね>jboss-all-config-tests.さらに一回り小さいtests-standard-unitなんてのも良いかもしれません.