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なんてのも良いかもしれません.