以下は JE2BWM ほかが作成した翻訳 です。 原文は University of California より GFDL で配付されており、 この翻訳も GFDL に従います。
原文: Test framework for BOINC developers (not intended for general use)   (翻訳対象の更新日付は 9:09 PM UTC, April 20 2007 です)。

BOINC 開発者のためのテスト用フレームワーク(一般向けではありません)

boinc.gif
(英語のみ)

まず、ソフトウエアの前提条件(原文) へいって、テストに関係している節を見てください。 実用に供するサーバを走らせるには、PHPを動かせるウェブ・サーバが 必要です。 そのためには、パスやパーミッションの設定が山ほど必要に なってしまいますが、ここでは、テストのためにそれらの設定は しないことにします。

Pythonで書かれた テスト用フレームワーク

test/ というディレクトリに、 BOINCを端から端まで通しでテストすることを楽にする Pythonモジュールのライブラリが納められています。 Pythonフレームワーク をご覧ください。

手早く始めるには

単発のテスト実行:
cd boinc/test && ./test_uc.py
全テストの一式を実行:
cd boinc/test && make check
2,3分後に、"Passed Test"(テスト通過OK)の表示がでるはずです。 テスト実行中には、各種プログラムの状況表示もでます(状況表示の行が 一行に収まるように、ウィンドーの大きさを調節してください)。

テスト実施フレームワークの目標

このフレームワークの目標は、BOINCと、 BOINCのアプリケーションのテスト自動化[の両方]です。 それぞれのテストは、Pythonのプログラムで実行されます。 このプログラムは、[対象のBOINC] システムを一定の状態に初期化してから、 システムを実行して、その終了を見守ります。 その終了時の状況によって、 このプログラムは、成功または失敗を返します。

BOINCの機能の多くは、複数のプロジェクト/複数のホストに関与しています。 物理的に複数台あるホストの上で、自動化されたテストを実行するのは、 法外に複雑なことになるでしょう。 うれしいことに、BOINCのアーキテクチャは、 複数のプロジェクトと(仮想)ホストを、一台の物理ホスト上に配置することを 可能にしています。 というわけで、このテスト実施フレームワークでは、 この配置[(つまり1台の物理ホストに全部配置する)]を使いました。

このフレームワークは、下記のどの属性でもテストに付加できます。

下記のシステム属性は計画されていますが、実装はまだです:

TODO: ディレクトリ構造

TODO: モジュール/クラス

TODO: スクリプトの例

テスト・アプリケーション

apps/ ディレクトリには、次のテスト・アプリケーションが入って います。

テスト・ケース

test/ ディレクトリには、名前にプレフィクス test_を つけた、種々のpython スクリプトがあります。 それぞれのスクリプトは、BOINCの エンド・ツー・エンドのテストケースを一つずつ実行します。 (ここで、エンド・ツー・エンドのテストといっているのは、 プロジェクト用とホスト用のディレクトリ構造を生成し、 ウェブ・サーバとサーバデーモン、ホスト・クライアントを起動し、 出力が期待どおりであるかどうかを調べるテストである、ということです。 )
test_uc.py uppercase を使う基本テスト
test_concat.py コマンド・ラインの引数とファイル名をテストします。
test_uc_slow.py チェックポイント/再開メカニズムのテスト
test_prefs.py プレファレンス(好みの設定)のいくつかの側面をテスト
test_water.py ウォーターマーク機能訳注1のいくつかの側面をテスト
test_rsc.py スケジューリングサーバが、[クライアントにとって] 実行可能なワークユニットだけを送出するかどうかをテストします。
test_pers.py パーシステントファイル転送(ダウンロードとアップロード)のテスト。 転送の途中で[わざと] 中断を起こして、中断があってもファイルサイズが 減少しないことを確認します。
test_masterurl_failure.py マスターURLがアクセスできないときに、 クライアントでの指数バックオフ訳注2動作が 働くかどうかテストします。 このテストは自動化されていません。 テストを実行したら、(host ディレクトリの中にある) client.outファイルを [人間が] 見て、すべて上手くいっていることを確かめる必要があります。
test_sched_failure.py スケジューリングサーバが故障したときに、 クライアントでの指数バックオフ訳注2動作が 働くかどうかテストします。 このテストは自動化されていません。 テストを実行したら、(host ディレクトリの中にある) client.outファイルを [人間が] 見て、すべて上手くいっていることを確かめる必要があります。

付録: 最適な環境変数の設定

次に掲げる環境変数は指定は任意で、どんなウェブ・サーバにも適用されます。

BOINC_TEST_USER_NAME

データベース名を設定するときに使うユーザ名です。 設定しなければ、$USER がデフォルト値になります。
BOINC_TEST_VERBOSE
メッセージの饒舌さのレベルです。
0何も出力しません
1(デフォルト値)いくらか出力されます。 出力が tty のときは、出力行は上書きされます。
2全てを出力します
BOINC_TEST_DELETE
テストベッドをテスト終了後に消すかどうかを指定します。 BOINC_TEST_AUTO_SETUP=0 としたときだけ、意味があります。 指定可能な値は、以下のとおりです(大文字・小文字の区別はしません)。
No[消しません]
If-Successful(デフォルト値)[テスト成功なら消します]
Always[いつでも消します]
BOINC_TEST_INSTALL_METHOD
html/php および cgi のファイルをどんな方法で、 源になるディレクトリからテストベッドの場所へ インストールするかを指定します。
link ハードリンク(hardlink)します
symlink(デフォルト値)シンボリックリンクを使います
copy 複写します
copy(複写)する方法は、どの版のファイルが使われたかを、特定のテストに ついて残しておけるので有用です。 コンパイルされたcgi とスケジューラープログラムが、 平行してビルドを行っても中断されないという点では、ハードリンクを使うのが 最善です訳注3

付録: ウェブ・サーバ

テストスクリプトは、デフォルト状態では、セキュリティの能力もなく、 最小のcgi/phpの能力しかもたない特別なウェブ・サーバを使います。 下記の環境変数でディレクトリ名を指定すれば、 個々に手で初期設定したディレクトリを使って、 Apacheまたはその他のウェブ・サーバでもテストに使うことができます。
BOINC_TEST_AUTO_SETUP=0   (defaultは1です)

BOINC_TEST_KEY_DIR
BOINC_TEST_PROJECTS_DIR
BOINC_TEST_CGI_URL
BOINC_TEST_HTML_URL
BOINC_TEST_CGI_DIR
BOINC_TEST_HTML_DIR
BOINC_TEST_HOSTS_DIR

設定の例

Bourne shellの場合の例:
    QHOME=/disks/philmor/a/users/quarl/proj
    TOP=$QHOME/test-boinc
    URL=http://milhouse.ssl.berkeley.edu/quarl

    export BOINC_TEST_PROJECTS_DIR=$TOP/projects
    export BOINC_TEST_USER_NAME=quarl
    export BOINC_TEST_SRC_DIR=$QHOME/boinc
    export BOINC_TEST_CGI_DIR=$TOP/boinc_cgi
    export BOINC_TEST_CGI_URL=$URL/boinc_cgi
    export BOINC_TEST_HTML_DIR=$TOP/boinc_html
    export BOINC_TEST_HTML_URL=$URL/boinc_html
    export BOINC_TEST_SHMEM_KEY=0x1717f00f
    export BOINC_TEST_KEY_DIR=$TOP/keys
    export BOINC_TEST_HOSTS_DIR=$TOP/host
Apacheの設定例:
    <Directory /disks/philmor/a/users/quarl/proj/test-boinc>
            AllowOverride FileInfo AuthConfig Limit
            Options Indexes SymLinksIfOwnerMatch IncludesNoExec ExecCGI
        <Limit GET POST OPTIONS PROPFIND>
            Order allow,deny
            Allow from all
        </Limit>
    </Directory>

    ScriptAlias /quarl/boinc_cgi/ "/disks/philmor/a/users/quarl/proj/test-boinc/boinc_cgi/"
    Alias /quarl/ "/disks/philmor/a/users/quarl/proj/test-boinc/"

(訳注1): ウォーターマーク(watermark)
ここでは、たぶん、特定の指標の最大・最小値が、一定の期間に どこまで達したかを記録する機能だと思われますが、 訳した部分にはまだ詳細は登場していません。
(訳注2): 指数バックオフ(Exponential Backoff)
指数関数的に次の再試行までの時間間隔を長くしていくこと。
(訳注3) hardlinkが良い理由
訳者には説明されている理由がよく理解できていません。 訳もおかしいかな。

 


BOINCの訳のメインページに戻る | (原文のメインページに戻る)
 

最終更新時刻 16:49:13, 2007年05月19日(JST)
Copyright © 2012 University of California. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation.
Copyright © 2012 Komori Hitoshi(je2bwm at jarl.com). Japanese translation from English web pages on BOINC. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation.