ruby/server/test/t_*.rbにいくつか同じ処理がありますが、共通
化してはいかがでしょうか。
共通の処理をruby/server/test/roma-test-utils.rbに抜きだして、
ruby/server/test/run-test.rbからruby/server/test/t_*.rbをま
とめて実行するようにするパッチです。個別のテストを実行する場
合は-nオプションで指定する必要があります。
Rakeのタスクにしてもよいですが、Rakeは起動がモサッとしている
のでrun-test.rbのようなファイルを用意するのが私の好みです。
--
--------------------------------------------------------
各種ブラウザ向けツールバーやプラグインの開発を承ります。
また、ブラウザからICカードやカメラなどのハードウェアへ
アクセスする機能の開発も承ります。
--------------------------------------------------------
株式会社クリアコード 須藤功平 <k...@clear-code.com>
Tel: 03(6231)7270 URL: http://www.clear-code.com/
--------------------------------------------------------
In <64a799e1-d2f0-4a65...@r24g2000prf.googlegroups.com>
"[roma-user-japan:25] Re: テストの共通処理を抜きだし" on Wed, 18 Nov 2009 01:44:32 -0800 (PST),
jun <jun...@gmail.com> wrote:
> パッチを確認させて頂いたところ、サーバを起動する系のテストが通らなくなっているようです。
> コードを見ていますがまだ原因が分かりませんのでパッチの push を見送っております。
>
> サーバを起動する系のテストについてご確認頂けると助かります。
すいません、パッチをあてる前の結果とあてた後の結果を見せても
らえますか?
--
須藤 功平 <k...@clear-code.com>
株式会社クリアコード (http://www.clear-code.com/)
In <39d059af-30b2-4a74...@o9g2000prg.googlegroups.com>
"[roma-user-japan:27] Re: テストの共通処理を抜きだし" on Wed, 18 Nov 2009 20:21:24 -0800 (PST),
jun <jun...@gmail.com> wrote:
> 全部載せると長いので、t_rclient.rb の実行結果を切り出しました。
ありがとうございます。
> パッチ後ではテスト毎にサーバの上げ下げを行うようになってしまっているようです。
> オリジナルはテスト開始時に起動し、test_createhash2で一度再起動するようになっています。
はい、そのようにしました。
他のテストの影響を受けずに、常にまっさらな状態で新しいテスト
を実行した方がよいかと思います。その分、テスト時間が増えてし
まいますが、そこが気になる場合はサーバを再起動しなくても全部
リセットするような機能を入れるのがよいかと思います。
例えば、test_createhashを実行した後にtest_createhash2を実行
するとどちらもパスして、逆にtest_createhash2を実行した後に
test_createhashを実行すると失敗する、というようになってしま
うとせっかくテストで問題を見つけても原因の切り分けが難しくなっ
てしまう気がします。
> 通らないケースは動作の違いによるものと思われますが・・・
パッチ後のt_rclient.rbのteardownのstop_romaの後に
Roma::Messaging::ConPool.instance.close_all
を入れるとどうでしょう。
本当は、ConPoolの方を直した方がよいと思います。
今は、
1. serverへの接続1を作成
2. 接続1をpoolに入れる
3. server再起動
4. 再起動前のserverへの接続1に書き込み
5. 接続1から読み込み
という状態のときに接続がもうすでに有効でないことを検出できて
いません。
まわりのコードにあわせるとこんな感じでしょうか。
diff --git a/ruby/client/lib/roma/client/sender.rb b/ruby/client/lib/roma/client/sender.rb
index acad9a8..3881714 100644
--- a/ruby/client/lib/roma/client/sender.rb
+++ b/ruby/client/lib/roma/client/sender.rb
@@ -106,7 +106,8 @@ module Roma
def oneline_receiver(con)
ret = con.gets
- ret.chomp if ret
+ raise "connection closed" if ret.nil?
+ ret.chomp
end
def value_receiver(con)
ConPool#get_connectionで無効な接続かどうかを判断して、無効な
ら新しい接続を返す方がキレイな感じがしますが、read/writeせず
に無効かどうかを検出するのは難しそうな気がするのが悩ましいと
ころです。(接続が切れていればTCPSocket#peeraddrで検出できる
こと*も*あるけど、ポータブルじゃなさそう。。。)