検索
特集

petardfsでアプリケーションをテストするPrograming Bible(2/2 ページ)

petardファイルシステムは、エラーだけを生成するように設計されたファイルシステムである。システムテストと単体テストを行うのに役立つ。

PC用表示 関連情報
Share
Tweet
LINE
Hatena
SourceForge.JP Magazine
前のページへ |       

petardfsの実行

 完全なXML設定ファイルは、petardfsディストリビューションtarballにtestsuite/sampledata/config -simple-filesystem-simple-error-in-read-file1.xmlとして収められている。simple- filesystem.tarには、file1.txt、file2.txtなどの名前の一連のファイルを持つ小さなファイルシステムが含まれる。設定ファイルには、これらのサンプルファイルで発生する各種のエラーが定義されている。

 以下の一連のコマンドでは、petardfsをマウントし、このエラー生成ファイルシステムに簡単な指示を送っている。トップレベルへの「...」パスの部分は、petardfsのtarballディストリビューション内のファイルへのパスで置き換えることができる。petardfsで file1.txtにdiffコマンドを実行すると、“Interrupted system call”のエラーが起きることに注意してほしい。catコマンドではこのエラーが起きても適切に再試行が行われるので、この問題を回避するため、catを使ってファイルのコピーを作成してからdiffをこのコピーに対して実行する。file2.txtのエラーは、4096番目のバイトで起きる単純なEIOエラーである。catは、このエラーをstderr経由でリポートし、終了する。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

Dejagnu

 petardfsディストリビューションは、petardfsをアプリケーションのテストスイートに統合する方法のサンプルとしても使える。petardfsには、petardfsの関数が期待通りに動作することをテストするためにDejaGnuを使用する、限定的なテストスイートが含まれている。トップレベルのMakefile.amでは、DejaGnuはAUTOMAKE_OPTIONSに含まれる。サブディレクトリtestsuite/petardfs.test下のpetardfs.expには、入門レベルのpetardfs用 TCL/expect DejaGnuテストスイートが含まれる。

 petardfs.expによって実行されるテストは、petardfsそのものが期待通りに動作するかどうかを確認する。ただし、 petardfsをテストするコマンドと、petardfs上で動作するアプリケーションをテストするコマンドは、非常に似ている。例えば、さまざまな設定オプションを使ってpetardfsを実行することや、proc unmount_petardfs {}のような関数を使ってpetardfsファイルシステムを再度アンマウントする必要があることは、両者に共通する。

 テストスイートの中心部は、petardfs.expファイルの最後にあるrun_all関数にある。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 run_simple_petardfs_test_suite関数は、指定されたエラー設定を使ってpetardfsファイルシステムをマウントし、指定された一連のテストケースをpetardfsに対して実行し、期待通りの結果かどうかをチェックする。petardfs.expのテストケースでは、さまざまなコマンドをpetardfsに対して実行することで、特定のエラーメッセージが生成されることが期待される。最後に、run_simple_petardfs_test_suiteは、petardfsをアンマウントして、テストスイート内のほかのテスト関数が別の設定でpetardfsを同じマウントポイントにマウントできるようにし、またテストスイートの完了後に動作中のpetardfsのインスタンスが残らないようにする。

 petardfs.expには、幾つかのユーティリティ関数が用意され、利用される。rt_expected{ testname expected cmd }関数は、診断結果または成功をリポートするためにtestnameを使ってコマンド(cmd)を実行する。expectedの文字列は、テストの成功時にコマンドの出力に表示される。verify_output_identical { cmdA cmdB diffflags }関数は、2つのコマンドを実行し、diff -Nsuarとdiffに渡される追加フラグdiffflagsを使って、両者の出力を比較する。このようなユーティリティ関数があることで、DejaGnuテストスイートケースをpetardfs用に作成する作業はかなり簡単になる。ユーティリティ関数では、アプリケーションのタイムアウトエラーとspawn/expectペアが処理される。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

まとめ

 petardfsを使うことで、アプリケーションに厳しい目を向け、エラー条件に適切に反応するかどうかを確認できる。テストスイートを通してアプリケーションをpetardfs上で実行することで、プロジェクトのエラー処理コード内にエラーを検出し、修正できる。起動時にファイルを開くことに失敗した場合など、多くのエラー状況においてアプリケーションは単に終了するだけでよいが、ログファイルの切り詰めに失敗したような場合は、エラーの発生をメッセージで報告するだけで、動作を継続する必要がある。petardfsを使うと、読み込みエラーのような一般的なエラーとtruncate(2)エラーのような珍しいエラーの両方をテストできる。

関連キーワード

テスト | バグ | 単体テスト | Programing Bible


前のページへ |       

Copyright © 2010 OSDN Corporation, All Rights Reserved.

ページトップに戻る