#BSD系でext/tlsのテストがひっかかってたのをちょい工夫してみました。手元のFreeBSD9では通るようになりましたが、BSD系な方、試して頂けたらありがたいです。
#Mac OS X通りました。ぶらぼー
#FreeBSD 8.2Rも通りました。ぶらぼー
#いやー、これは本気で嬉しいな。
#ぇ、全部パスします?>Mac OS X
#はい
#普通のLionです。
#GAUCHE_TEST_RECORD_FILE=../../test.record ../../src/gosh -ftest -I. -I. ./test.scm > test.log
Testing rfc.tls ... failed.
discrepancies found. Errors are:
test ssltest: expects 0 => got 256
#むぅ。ちと git pull しなおして出直してきます。
#ところで、Kahuaのバックエンドにしようと思ってGauche-redisってのを作ってるんだけど、他の用途で使いたい人っているかなぁ。
#maruさん、ext/tls/ssltest.logをちょいとどっかに貼り付けてもらえますか。そこのテストはaxTLSのテストプログラムを呼んでるんですが、結構トリッキーなことをやってるので、タイミングの問題等で失敗する可能性はあります。
##古いgoshのインスタンスとか残ってるのを消して、maintiner-cleanから./DIST genして再試行してみます
#ちょいまって、試してもらいたい異が
#わ。cleanしちゃった
#あ、いや、cleanはいいんですが
#あーでも違うかなあ。一応、このパッチを入れて試してみてもらえますか
#--- a/ext/tls/system-fix.c
+++ b/ext/tls/system-fix.c
@@ -30,7 +30,7 @@ void safe_system(const char *commands)
strerror(errno));
return;
}
- if (status != 0) {
+ if (/*status != 0*/TRUE) {
fprintf(stdout, "process exit with %d (command: %s)\n",
status, commands);
}
#了解です。ちょっとお待ちを
#あ、ちょいまち。もうひとつ。
#--- a/ext/tls/system-fix.c
+++ b/ext/tls/system-fix.c
@@ -30,10 +30,11 @@ void safe_system(const char *commands)
strerror(errno));
return;
}
- if (status != 0) {
+ if (/*status != 0*/TRUE) {
fprintf(stdout, "process exit with %d (command: %s)\n",
status, commands);
}
+ sleep(1);
}
#else /*WIN32*/
fprintf(stdout, "system: executing (%s)\n", commands);
#こっちでお願い。失敗してるテストは、opensslでサーバを立ててそこにaxTLSライブラリからアクセスに行ってるんですが、opensslのサーバが完全に立ち上がる前にアクセスにいっちゃってるんじゃないか疑惑。sleep(1)でそれが回避できるかも。
#確認が取れたら、実際は0.2秒くらいの待ちにするつもりですが。
#了解です。いまビルドしてます。
#axTLS/ssl/test/ssltest.mod.c:2301:28: error: use of undeclared identifier 'TRUE'
if (/*status != 0*/TRUE) {
^
1 warning and 1 error generated.
#TRUEってどこで定義されてましたっけ
#あ、そうか。ssltest.cはgauche.h使ってないんだった。1とかにしといてください。
#了解
#現象変わらずです
#diff --git a/ext/tls/system-fix.c b/ext/tls/system-fix.c
index ebc5b7b..591f6f2 100644
--- a/ext/tls/system-fix.c
+++ b/ext/tls/system-fix.c
@@ -30,10 +30,11 @@ void safe_system(const char *commands)
strerror(errno));
return;
}
- if (status != 0) {
+ if (/*status != 0*/1) {
fprintf(stdout, "process exit with %d (command: %s)\n",
status, commands);
}
+ sleep(1);
}
#else /*WIN32*/
fprintf(stdout, "system: executing (%s)\n", commands);
#diffはこれです
#Testing utility scripts ... passed.
Total: 12745 tests, 12744 passed, 1 failed, 0 aborted.
#おしい。
#むー残念。ssltest.logの方はちょっと変わってると思うんですがどうですか (単に"process exit with 0 ..."のメッセージが増えてるだけのはず)
#gistに貼り付けたのってdiff取れないのかしら。目視で確認中です...
#opensslのバージョンってわかります? コマンドラインからのとり方はわからないけど、opensslオプションなしで起動してversionと打つと出ます。
#### starting client tests 以降の出力行が増えてますね
#OpenSSL> version
OpenSSL 1.0.1a 19 Apr 2012
#です
#新しいか。じゃあそっちのせいではないですね。
#あ、待てよ、タイミングの問題だとするとここのsleepじゃだめかも。
#ああ、ssltest.cの方には既に待ちが入ってるのかあ。一応これも試してもらえますか(前のパッチはrevertしてください)。ext/tls以下でmake clean; make; make -s checkするだけでいいです。
#--- a/ext/tls/axTLS/ssl/test/ssltest.c
+++ b/ext/tls/axTLS/ssl/test/ssltest.c
@@ -1367,7 +1367,7 @@ static int SSL_client_test(
#endif
}
- usleep(200000); /* allow server to start */
+ usleep(1000000); /* allow server to start */
if (*ssl_ctx == NULL)
{
#了解。しばしお待ちを
#ぁぁ、部分的にビルド&チェックできるのか。トップディレクトリからmake cleanしちゃった
#NetBSD 6.99.5 x86_64 通りました。 ssltest.log は 129 行。
#状況変わらずです。差分は
#diff --git a/ext/tls/axTLS/ssl/test/ssltest.c b/ext/tls/axTLS/ssl/test/ssltest.c
index c096aef..5b9106d 100644
--- a/ext/tls/axTLS/ssl/test/ssltest.c
+++ b/ext/tls/axTLS/ssl/test/ssltest.c
@@ -1367,7 +1367,7 @@ static int SSL_client_test(
#endif
}
- usleep(200000); /* allow server to start */
+ usleep(1000000); /* allow server to start */
if (*ssl_ctx == NULL)
{
#ぐぬぬぬぬぬ
#19002番で本当に誰かがlistenしてたりして... 確認してみよっと
#自分とのところ(MacOSX10.6.8)はsleep(1);のパッチ当てた段階で通りましたよ。
#s/との/の/
#ポートの衝突はないですね
#sleep(1)を当てる前は通らなかったってことですね >ayatoy
#はい
#timing issue ですかね...
#maruさんと全く同じssltest.logでした>当てる前
#(び)さんのOSXてバージョンいくつですか? ぼくのとこは 10.7.3 なのですが関係するでしょうか
#あとはこれかなあ。ssltestはstderrを/dev/nullにつっこんじゃってるんで、これを当ててもらえるとmake checkでエラーがコンソールに出ます。それで何か手がかりが得られるかも
#--- a/ext/tls/axTLS/ssl/test/ssltest.c
+++ b/ext/tls/axTLS/ssl/test/ssltest.c
@@ -2136,9 +2136,9 @@ int main(int argc, char *argv[])
fd = _open("test_result.txt", O_WRONLY|O_TEMPORARY|O_CREAT, _S_IWRITE);
dup2(fd, 2); /* write stderr to this file */
#else
- fd = open("/dev/null", O_WRONLY); /* write stderr to /dev/null */
+ /* fd = open("/dev/null", O_WRONLY); */ /* write stderr to /dev/null */
signal(SIGPIPE, SIG_IGN); /* ignore pipe errors */
- dup2(fd, 2);
+ /* dup2(fd, 2); */
#endif
/*<SK>*/
#(なお、「わざとエラーを発生させる」というテストもあるので、エラーメッセージが出ること自体は正常です。でも中に手がかりが混じってるかもしれない)
#lolouila:maru% make -s check [~/github/Gauche/ext/tls]
Testing rfc.tls ... awk: can't open file ../ssl/openssl.pid
source line number 1
awk: can't open file ../ssl/openssl.pid
source line number 1
socket: Connection refused
kill: 46831: No such process
failed.
discrepancies found. Errors are:
test ssltest: expects 0 => got 256
#コンソールにこんな出力が
#can't open fileは正常です。むー、これだけだと特におかしいことはなさそうな。
#opensslがちゃんと立ち上がってるかどうかだなあ。usleep()の行を30秒 (30000000)とかにして、テスト実行中に別シェルからpsでopensslを探してみる、というの、お願いできますか?
#了解しました。
#47002 s001 S+ 0:00.14 ./ssltest --exttest
47013 s001 S+ 0:00.02 openssl s_server -tls1 -accept 19002 -quiet -cert ../.././axTLS/ssl/test/axTLS.x509_512.pem -key ../../.
#居ますね
#47002 s001 S+ 0:00.15 ./ssltest --exttest
47013 s001 S+ 0:00.02 openssl s_server -tls1 -accept 19002 -quiet -cert ../.././axTLS/ssl/test/axTLS.x509_512.pem -key ../../.
47020 s001 S+ 0:00.01 openssl s_server -tls1 -accept 19003 -quiet -cert ../.././axTLS/ssl/test/axTLS.x509_1024.pem -key ../../
47025 s001 S+ 0:00.01 openssl s_server -tls1 -accept 19004 -quiet -cert ../.././axTLS/ssl/test/axTLS.x509_2048.pem -key ../../
#増えてく...
#ふーむー。これで、127.0.0.1:19002にconnectしにいって繋げない、って状況は何だろう。あ、増えてくのは次々起動してるから正常です。最後にまとめてkillされるはず。
#待ち時間ふやしたら出力変わりました:
#lolouila:maru% make -s check [~/github/Gauche/ext/tls]
Testing rfc.tls ... awk: can't open file ../ssl/openssl.pid
source line number 1
awk: can't open file ../ssl/openssl.pid
source line number 1
verify depth is 1
depth=1 O = axTLS Project Dodgy Certificate Authority
verify return:1
depth=0 O = axTLS Project, CN = 127.0.0.1
verify return:1
ERROR
140735267961276:error:14094412:SSL routines:SSL3_READ_BYTES:sslv3 alert bad certificate:s3_pkt.c:1251:SSL alert number 42
verify depth is 1
kill: 47054: No such process
kill: 47057: No such process
kill: 47060: No such process
kill: 47063: No such process
kill: 47066: No such process
kill: 47069: No such process
kill: 47073: No such process
kill: 47076: No such process
kill: 47079: No such process
kill: 47082: No such process
kill: 47085: No such process
kill: 47088: No such process
kill: 47091: No such process
kill: 47094: No such process
kill: 47097: No such process
kill: 47100: No such process
kill: 47103: No such process
kill: 47106: No such process
kill: 47109: No such process
kill: 47112: No such process
kill: 47115: No such process
kill: 47118: No such process
kill: 47121: No such process
kill: 47124: No such process
kill: 47127: No such process
kill: 47130: No such process
kill: 47133: No such process
passed.
#これは通ったんですよねきっと。
#ああ、通ってるっぽい。ssltest.logの最後の方にALL TESTS PASSEDって出てませんか
#出力されてます。ここまで引っ張ると通るのか...
#するとusleepのタイミングかあ。2秒くらいではどうですか。テスト時間かかっちゃうけど。
#お待ちください
#connect失敗したら少し待ってリトライするようにすれば、速い環境では時間食わずにすむかな。
#diff --git a/ext/tls/axTLS/ssl/test/ssltest.c b/ext/tls/axTLS/ssl/test/ssltest.c
index c096aef..ad4d307 100644
--- a/ext/tls/axTLS/ssl/test/ssltest.c
+++ b/ext/tls/axTLS/ssl/test/ssltest.c
@@ -1367,7 +1367,7 @@ static int SSL_client_test(
#endif
}
- usleep(200000); /* allow server to start */
+ usleep(2000000); /* allow server to start */
if (*ssl_ctx == NULL)
{
#これで通りますね
#後ろでVMぶんぶん回ってるせいかなぁ
#ありがとうございます。原因はわかったと思うので、fix考えます。
#了解しました。
#返事遅れたけど、redisバインディングはあれば使ってみることがあるかも> (び)
#dbmってサポートしといた方が便利ですかね。とりあえず生のAPIはサポートしたんですが、その上にどういう層を載せると便利か、考えているところです。
#いずれにせよ、連休が終わったところで公開しちゃいます。
#key-valueストアという抽象化が一番簡単な使い方でしょうから、dbmインタフェースはあれば便利だと思います。
#了解です。dbm.redis足してみます。
#ext/tlsのテスト改良してみました。どうかな。
#Total: 12704 tests, 12704 passed, 0 failed, 0 aborted.
#まはろー>ayatoy
#あーマルチスレッドでのparameterの問題がまだ未解決だったな…どうしようかな。滑り込みで入れるように頑張ってみるか。
##最低限ですが公開しました。dbmはこれから足します。
#遊んでやってくださいまし
#むむ。ayatoyさんとこはこのdiffで通るのか。
#diff --git a/ext/tls/axTLS/ssl/test/ssltest.c b/ext/tls/axTLS/ssl/test/ssltest.c
index c096aef..3a50f0a 100644
--- a/ext/tls/axTLS/ssl/test/ssltest.c
+++ b/ext/tls/axTLS/ssl/test/ssltest.c
@@ -766,9 +766,15 @@ static int client_socket_init(uint16_t port)
client_fd = socket(AF_INET, SOCK_STREAM, 0);
if (connect(client_fd, (struct sockaddr *)&address, sizeof(address)) < 0)
{
- perror("socket");
- SOCKET_CLOSE(client_fd);
- client_fd = -1;
+ /*<SK> If the machine is heavily loaded, the first attempt may fail
+ because the server isn't ready yet. We give the server some more
+ time and the retry. */
+ usleep(2000000);
+ if (connect(client_fd, (struct sockaddr *)&address, sizeof(address)) < 0) {
+ perror("socket");
+ SOCKET_CLOSE(client_fd);
+ client_fd = -1;
+ }
}
return client_fd;
#子供の寝かしつけですっかり出遅れた感があるのでまた後日調べます。しつこくfailし続けるです。
#Testing rfc.tls ... failed.
discrepancies found. Errors are:
test ssltest: expects 0 => got 256
#一応 10db485ca61e02e06a3ff0851ca1cff27958f5c0 です。VM全部サスペンドしても変わらないってのは何なんだろか...
#あれー。ssltest.logの方は同じですか? ("could not start socket on 10092" が出てる?)
##うーむ、1376行目のusleepを2秒にしたら通って、こっちの変更では通らない、という謎がまだわからない。1376行目をusleep(2000000)にするとまた通ります? > maru
#usleep にそんなに大きな値を渡したらエラーになっていませんか?少なくとも NetBSD の実装はエラーにします。
#ああそうか。そっちの方の問題かも。この単位ならsleepでいいはずだなあ。それじゃclient_socket_init()の中のusleepをsleep(2)にしてみてください>maru