特集
» 2007年09月27日 01時30分 公開

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

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

[Ben-Martin,Open Tech Press]
SourceForge.JP Magazine

 petardファイルシステム(petardfs)は、エラーだけを生成するように設計されたファイルシステムである。ただし、エラーを生成する条件と期待されるエラーの姿を任意に指定できる。このため、petardfsはシステムテストと単体テストに便利である。例えば、ファイルを開くのに失敗した場合やファイルを5000バイト読み込んだところで読み込みエラーが起きた場合に、アプリケーションから正しいエラーメッセージが表示されることを確認できる。

 petardfsでは、セットアップの簡単なFUSE(Filesystem in Userspace)を使うので、カーネルの再コンパイルや新しいカーネルモジュールの追加は必要ない。標準の設定で“ベースファイルシステム”とマウントポイントを指定する。例えば、/home/ben/fooがベースファイルシステムで、ファイルシステムを/home/ben/petard-fooにマウントするとしよう。これ以外の設定を行わなくても、foo下にあるファイルはpetard-fooでそのまま使用できる。petardfsでは、XML設定ファイルを使って、エラーを報告するファイルと使用するエラーコードを設定する。例えば、foo.txtがバイト34〜37の位置でEIOエラーを発生する、などの設定が可能だ。

 petardfsのビルドとインストールは、通常のconfigure、make、make installの手順で行う。petardfsはfuselagefsファイルシステムを基盤とするが、これはFUSEのC++ラッパーであり、ベースファイルシステムをマウントポイントにマッピングする機能を提供する。そのおかげで、開発者はほかのFUSEファイルシステムを素早く作成し、これを若干の機能が追加されたベースファイルシステムとして提供できる。

 petardfsとfuselagefsは、SourceForge.netからダウンロードできる。

petardfs上での実行

 petardfsの最重要オプションは、--error-definitions(-e)と--url(-u)である。前者はエラー定義が格納されたXMLファイルを指定し、後者はベースファイルシステムを指定する。ベースファイルシステムは、常に絶対パスで指定する。また、petardfsファイルシステムをマウントするパスを最後の引数として指定する。前掲の例で言えば、ベースファイルシステムを指定するオプションは、-u /home/ben/fooになる。コマンドラインの最後の引数には、petardfsを使用する場所、つまり/home/ben/petard-fooを指定する。

 petardfsコマンドラインオプションの中で、FUSEに指示を渡すものは名前が--fuse-で始まる。通常、FUSEファイルシステムがfusermount -dでアンマウントされるまで、petardfsはバックグラウンドで動作する。FUSEオプションの「--fuse-forground」を使うと、端末で fusermountコマンドを実行するかCtrl+Cを押すまで、petardfsは端末のフォアグラウンドに留まる。「--fuse- forground」オプションを使うのは、petardfs自体にバグの疑いがある場合が主である。petardfsをフォアグラウンドで実行すると、stderrメッセージを使用できる。petardfsをGNUデバッガから直接呼び出すこともできる。

設定ファイル

 petardfsでは、ファイルシステムに関連する主要な関数にエラーのリストを指定できる。設定ファイルのトップレベルの要素は「petardfs-config」である。この要素に1つの「errors」要素が含まれる。各関数は「errors」下に要素として現れる。関数ごとにエラー条件のリストを指定できる。

 すべてのファイルパスは、ベースファイルシステムからの相対パスで指定する。ファイルシステムパスのルートは、ベースファイルシステムでもある。例えば、ベースファイルシステムが/home/ben/fooで、マウント先が/home/ben/petard-fooの場合、次のエラー条件は/home/ben/petard-foo/file2.txtの読み込み時にEIOエラーを生成する。


<petardfs-config>
    <errors>

      <read>     <error path="/file2.txt">       <n start-offset="4096" end-offset="4196" error-code="&EIO;"/>     </error>       <read>
    <errors> <petardfs-config>

 さらに細かいエラー条件を指定するには、EINTRとEAGAINを使う。どちらも、アプリケーションが同じI/O関数呼び出しを再試行することを意味する。例えば、次の設定では、file3.txtファイルの読み込みは、アプリケーションがバイト20000の読み込みを3回試みた後で、続行を許可される。


<error path="/file1.txt">
  <n start-offset="10000" end-offset="10000" error-code="&EINTR;" times="10"/>
</error>
<error path="/file3.txt">
  <n start-offset="20000" end-offset="20000" error-code="&EAGAIN;" times="3"/>
</error>

 この例で使用するすべてのエラーコードは、XMLエンティティである。好き勝手に決めた整数エラーコードがXMLファイルのあちこちに散らばるのを避けるため、エラーコードはXMLファイル本体のヘッダに定義される。petardfsは、特定のエラー条件に関連づけられた数値エラーコードをただ返すだけである。


<!DOCTYPE petardfs-config [

<!ENTITY    EPERM         "1"> <!ENTITY    ENOENT        "2"> <!ENTITY    ESRCH         "3">         :         :

 petardfsの現在のリリースでは、エラー条件を関連づけられる有効な関数は、read、write、fsync、mkdir、symlink、unlink、rmdir、rename、link、chmod、chown、ftruncate、utime、openである。

関連キーワード

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


       1|2 次のページへ

Copyright © 2010 OSDN Corporation, All Rights Reserved.

注目のテーマ

マーケット解説

- PR -