www.cgi.test
- CGIのテスト ¶CGIスクリプトをテストするための便利な手続きを定義しています。 このテストは、指定された環境変数をセットし、実際にスクリプトを 実行し、出力を取得します。ユーザのテスト手続きは、その出力が 期待したものであるかどうかを検査します。
{www.cgi.test
}
モジュールにより、CGIスクリプトが実行される際の環境変数の
デフォルト値のテーブルが保持されます。プログラマは、これらの
手続きを使ってそのデフォルト値を取得したり設定したりできます。
CGIスクリプトの呼び出し毎に、これらのデフォルト値を上書きしたり、 追加の環境変数を渡したりできます。
デフォルトでは、下記の環境変数が設定されています。
Name | Value |
SERVER_SOFTWARE | cgitest/1.0 |
SERVER_NAME | localhost |
GATEWAY_INTERFACE | CGI/1.1 |
SERVER_PROTOCOL | HTTP/1.1 |
SERVER_PORT | 80 |
REQUEST_METHOD | GET |
REMOTE_HOST | remote |
REMOTE_ADDR | 127.0.0.1 |
{www.cgi.test
}
与えられた環境でスクリプトを実行し、そのスクリプトの標準出力のパイプに
接続された入力ポートを1つ引数に取る proc を呼び出します。
引数 script は、プログラムの名前とその引数のリストでなければ
なりません。リストの要素はそれぞれ、文字列化されるためにまず
x->string
に渡されます。
スクリプトは、変数 environment で与えられる環境と、上述した
デフォルトのテスト環境の下で実行されます。
environmentは、キー(car
)がその環境変数の名前、
cdr
が対応する値であるような連想リストでなければなりません。
両方ともまず x->string
に渡されます。
environment とデフォルトのテスト環境に同じ環境変数がある場合は、
environment にあるものが使われます。
さらに、引数 parameters に連想リストが渡された場合、そこから
クエリストリングが作られスクリプトに渡されます。
クエリストリングを渡す実際のメソッドは、環境変数 REQUEST_METHOD
の
値に依存します。REQUEST_METHOD
が GET
か HEAD
で
ある場合は、クエリストリングは環境変数 QUERY_STRING
に置かれます。
REQUEST_METHOD
が POST
の場合は、クエリストリングは
スクリプトの標準入力から取得されます。後者の場合、CONTENT_TYPE
には
application/x-www-form-urlencoded
が、
CONTENT_LENGTH
には QUERY_STRING
の長さが、それぞれ自動的に
セットされます。REQUEST_METHOD
がその他の値の場合は、
parameters は無視されます。
必要であれば、このメカニズムをバイパスして、環境変数 QUERY_STRING
を
直接セットアップすることも可能です。
{www.cgi.test
}
call-with-cgi-script
の便利なラッパー手続きです。
script、environment、parametersは、
そのまま call-with-cgi-script
に渡されます。
スクリプトの出力は、run-cgi-script->header&body
により
パーズされます。
最初に、RFC2822ヘッダフィールドが rfc822-read-headers
(rfc.822
- RFC822メッセージ形式参照)によりパーズされます。
次に、readerが、スクリプトの出力にパイプされた入力ポートと
ともに呼ばれます。
run-cgi-script->header&body
は、ヘッダのリスト
(rfc822-read-headers
によりパーズされたもの)と
readerの戻り値の2つの値を返します。
{www.cgi.test
}
この手続きでは、run-cgi-script->header&body
の
readerとして、ssax:xml->sxml
(sxml.ssax
- 関数的なXMLパーザ参照)を使います。
整形式(Well-formed)のHTMLやXMLドキュメントを生成する
CGIスクリプトをテストする場合に便利です。
{www.cgi.test
}
これらの手続きは、run-cgi-script->header&body
の
readerとして、それぞれ port->string
、
port->string-list
を使います。
例:
(run-cgi-script->string-list "bbs.cgi" :environment '((REMOTE_ADDR . "12.34.56.78")) :parameters '((command . "view") (page . 1234)))