Net::Daemon::Test v0.02 日本語チョー訳

by Hippo2000(2001/1/8)

Net::Daemon::Logなのです。

作者はJochen Wiedmannさんです。それにしても、この方は色々なものを作っています。

なお内容等が間違っていたら修正します。ご連絡ください。


目次


名前

Net::Daemon::Test - Net::Daemonサーバーをテストするためのサポート関数


概要

    # これはファイル"servertask"に格納されているサーバーです・
    #
    # Net::Daemon::Testのサブクラスを作成し、それがさらに
    # Net::Daemonのサブクラスになります。
    use Net::Daemon::Test ();
    package MyDaemon;
    @MyDaemon::ISA = qw(Net::Daemon::Test);
    sub Run {
        # これやその他のメソッドを好きなように書きかえて下さい
    }
    my $self = Net::Daemon->new(\%attr, \@options);
    eval { $self->Bind() };
    if ($@) {
        die "Server cannot bind: $!";
    }
    eval { $self->Run() };
    if ($@) {
        die "Unexpected server termination: $@";
    }
    # これがクライアント、本当のテスト・スクリプトです。以下で"servertask"ファイルを
    # 呼んでいることに注意してください:
    #
    # 子プロセスを起動するためにChildメソッドを呼びます。timeoutオプションを
    # 使うのを忘れないで下さい。
    use Net::Daemon::Test ();
    my($handle, $port) = eval {
        Net::Daemon::Test->Child(5, # Number of subtests
                                 'servertask', '--timeout', '20')
    };
    if ($@) {
        print "not ok 1 $@\n";
        exit 0;
    }
    print "ok 1\n";
    # 以下に本当のテスト
    ...
    # サーバーを終了させる
    $handle->Terminate();

説明

このモジュールは、Test::Harnessを使うよりも、Net::Daemonサーバー・パッケージのテスト・スクリプトを作成するためのフレームです。しかしそれはあなたの選択です。

テストは2つの部分からなります。クライアント部分はとサーバー部分です。テストはクライアント部分が、子プロセスを起動し、外部のPerlスクリプトを呼び出すことによりサーバー部分を呼び出すことにより実行されます。(もちろんfork()では外部ファイルを必要としませんが、テスト・スクリプトにスレッドを必要とすることなくテスト・スクリプトをWindowsへ移植できるようにするにはこれが一番可能性があります。)

サーバー部分は通常のNet::Daemonアプリケーションで、例えばdbiproxyのようなスクリプトです。Net::Daemon::Testからの派生で、Net::Daemonからではないことです。主な違いはBindメソッドが自動的にポートを占有しようとすることです。一度ポートが占有されると、その番号はファイル"ndtest.prt"に格納されます。

サーバー・プロセスが起動された後、子プロセスはndtest.prtが作成されるまで10秒待ちます(これで十分だとよいのですが)。


利用できるメソッド


サーバー部分

Options
Net::Daemonにオプション--timeout を追加します: サーバーのRunメソッドは20秒ほどでdieします。
Bind
(インスタンス・メソッド)ほとんどデフォルトのBindメソッドと同じです。 しかし2つの方法でフリーなポートを発見し、占有しようとします:まず最初にポート0をBindしようとします。たいていのシステムではこのような場合、自動的にポートを選んでくれます。失敗したようであれば、ポート 30000-30049 が試されます。私たちはこれらがうまくいくことを望んでいます。 :-)
 
Run
(インスタンス・メソッド) Net::Daemonのメソッドをtimeoutを追加することにより書換えます。

sub Run ($) { my $self = shift; $self->Run(); }


クライアント部分

Child
(クラス・メソッド) サーバー・プロセスを起動しようとします。サーバー・プロセスはポート番号を持ったファイル'ndtest.prt' を作成するものと期待されます。

このメソッドはプロセス・ハンドルとポート番号を返します。プロセス・ハンドルはメソッドTerminate を提供します。これはサーバー・プロセスを停止させるのに使うことができます。


作者と著作権(AUTHOR AND COPYRIGHT)

  Net::Daemon is Copyright (C) 1998, Jochen Wiedmann
                                     Am Eisteich 9
                                     72555 Metzingen
                                     Germany
                                     Phone: +49 7123 14887
                                     Email: joe@ispsoft.de
  All rights reserved.

You may distribute under the terms of either the GNU General Public License or the Artistic License, as specified in the Perl README file.


参考資料

Net::Daemon(3), Test::Harness(3)


ホーム Perlの小技 Net::Daemon

ご意見、ご質問はこちらの掲示板で受け付けています。
またメールは河馬屋(Nifty)にお願いします。