[PATCH] テストの共通処理を抜きだし

9 views
Skip to first unread message

Kouhei Sutou

unread,
Nov 15, 2009, 6:43:20 AM11/15/09
to roma-us...@googlegroups.com
須藤です。

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/
--------------------------------------------------------

0001-extract-common-routine.patch

jun

unread,
Nov 18, 2009, 4:44:32 AM11/18/09
to roma-user-japan
須藤さん

いつもありがとうございます。鳥居です。

パッチを確認させて頂いたところ、サーバを起動する系のテストが通らなくなっているようです。
コードを見ていますがまだ原因が分かりませんのでパッチの push を見送っております。

サーバを起動する系のテストについてご確認頂けると助かります。

よろしくお願いします。

鳥居 順次
> 0001-extract-common-routine.patch
> 11K表示ダウンロード

Kouhei Sutou

unread,
Nov 18, 2009, 9:31:00 AM11/18/09
to roma-us...@googlegroups.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/)

jun

unread,
Nov 18, 2009, 11:21:24 PM11/18/09
to roma-user-japan
鳥居です。

全部載せると長いので、t_rclient.rb の実行結果を切り出しました。
パッチ後ではテスト毎にサーバの上げ下げを行うようになってしまっているようです。
オリジナルはテスト開始時に起動し、test_createhash2で一度再起動するようになっています。

通らないケースは動作の違いによるものと思われますが・・・

◆オリジナル

shell(#<Th:0x8817754>): /usr/local/bin/ruby /home/jun/git/roma2/ruby/
server/test/../bin/mkroute localhost_11211 localhost_11212 -d 3 --
enabled_repeathost
shell(#<Th:0x8817754>): /usr/local/bin/ruby /home/jun/git/roma2/ruby/
server/test/../bin/romad localhost -p 11211 -d --verbose
6977
shell(#<Th:0x8ccf0d0>): /usr/local/bin/ruby /home/jun/git/roma2/ruby/
server/test/../bin/romad localhost -p 11212 -d --verbose
6993
Loaded suite test/t_rclient
Started
RClientTest#test_add: 0.01 s: .
RClientTest#test_append: 0.02 s: .
RClientTest#test_createhash: 27.08 s: .
RClientTest#test_createhash2: shell(#<Th:0x8817754>): /usr/local/bin/
ruby /home/jun/git/roma2/ruby/server/test/../bin/romad localhost -p
11211 -d --verbose
7179
shell(#<Th:0x8d76484>): /usr/local/bin/ruby /home/jun/git/roma2/ruby/
server/test/../bin/romad localhost -p 11212 -d --verbose
7195
2.02 s: .
RClientTest#test_createhash3: 0.00 s: .
RClientTest#test_decr: 0.01 s: .
RClientTest#test_incr: 0.01 s: .
RClientTest#test_out: 0.01 s: .
RClientTest#test_prepend: 0.01 s: .
RClientTest#test_replace: 0.00 s: .
RClientTest#test_set_get: 0.59 s: .
RClientTest#test_set_get_delete: 0.01 s: .
RClientTestForceForward#test_add: 0.01 s: .
RClientTestForceForward#test_append: 0.01 s: .
RClientTestForceForward#test_createhash: 27.13 s: .
RClientTestForceForward#test_createhash2: shell(#<Th:0x8817754>): /usr/
local/bin/ruby /home/jun/git/roma2/ruby/server/test/../bin/romad
localhost -p 11211 -d --verbose
7463
shell(#<Th:0x8d00554>): /usr/local/bin/ruby /home/jun/git/roma2/ruby/
server/test/../bin/romad localhost -p 11212 -d --verbose
7479
2.02 s: .
RClientTestForceForward#test_createhash3: 0.00 s: .
RClientTestForceForward#test_decr: 0.02 s: .
RClientTestForceForward#test_incr: 0.02 s: .
RClientTestForceForward#test_out: 0.01 s: .
RClientTestForceForward#test_prepend: 0.01 s: .
RClientTestForceForward#test_replace: 0.01 s: .
RClientTestForceForward#test_set_get: 0.77 s: .
RClientTestForceForward#test_set_get_delete: 0.01 s: .

Finished in 59.800658 seconds.

24 tests, 198 assertions, 0 failures, 0 errors, 0 skips


◆パッチ後

RClientTestForceForward#test_replace: shell(#<Th:0x85d8754>): /usr/
local/bin/ruby /home/jun/git/roma/ruby/server/bin/mkroute
localhost_11211 localhost_11212 -d 3 --enabled_repeathost
shell(#<Th:0x85d8754>): /usr/local/bin/ruby /home/jun/git/roma/ruby/
server/bin/romad localhost -p 11211 -d --verbose
6715
shell(#<Th:0x895ab98>): /usr/local/bin/ruby /home/jun/git/roma/ruby/
server/bin/romad localhost -p 11212 -d --verbose
6731
4.03 s: .
RClientTestForceForward#test_set_get: shell(#<Th:0x85d8754>): /usr/
local/bin/ruby /home/jun/git/roma/ruby/server/bin/mkroute
localhost_11211 localhost_11212 -d 3 --enabled_repeathost
shell(#<Th:0x85d8754>): /usr/local/bin/ruby /home/jun/git/roma/ruby/
server/bin/romad localhost -p 11211 -d --verbose
6762
shell(#<Th:0x8914fd0>): /usr/local/bin/ruby /home/jun/git/roma/ruby/
server/bin/romad localhost -p 11212 -d --verbose
6778
4.74 s: .
RClientTestForceForward#test_set_get_delete: shell(#<Th:0x85d8754>): /
usr/local/bin/ruby /home/jun/git/roma/ruby/server/bin/mkroute
localhost_11211 localhost_11212 -d 3 --enabled_repeathost
shell(#<Th:0x85d8754>): /usr/local/bin/ruby /home/jun/git/roma/ruby/
server/bin/romad localhost -p 11211 -d --verbose
6823
shell(#<Th:0x8bd4ba8>): /usr/local/bin/ruby /home/jun/git/roma/ruby/
server/bin/romad localhost -p 11212 -d --verbose
6839
4.03 s: .

Finished in 103.203821 seconds.

1) Failure:
test_createhash(RClientTest) [/home/jun/git/roma/ruby/server/test/
t_rclient.rb:126]:
<"STORED"> expected but was
<nil>.

2) Failure:
test_createhash(RClientTestForceForward) [/home/jun/git/roma/ruby/
server/test/t_rclient.rb:126]:
<"STORED"> expected but was
<nil>.

24 tests, 166 assertions, 2 failures, 0 errors, 0 skips


On 11月18日, 午後11:31, Kouhei Sutou <k...@clear-code.com> wrote:
> 須藤です。
>
> In <64a799e1-d2f0-4a65-bbd2-06341758d...@r24g2000prf.googlegroups.com>

Kouhei Sutou

unread,
Nov 19, 2009, 9:21:34 AM11/19/09
to roma-us...@googlegroups.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で検出できる
こと*も*あるけど、ポータブルじゃなさそう。。。)

Kouhei Sutou

unread,
Dec 15, 2009, 9:46:38 AM12/15/09
to roma-us...@googlegroups.com
須藤です。

↓の差分もまとめて1つのパッチにしました。
いかがでしょうか。

--
須藤 功平 <k...@clear-code.com>
株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270)

In <20091119.232134.181...@clear-code.com>
"[roma-user-japan:28] Re: テストの共通処理を抜きだし" on Thu, 19 Nov 2009 23:21:34 +0900 (JST),
0001-extract-common-routine.patch

jun

unread,
Dec 16, 2009, 2:14:52 AM12/16/09
to roma-user-japan
鳥居です。

いつもありがとうございます。
返事遅くなりすみませんでした。

パッチを取り込ませて頂きます。

コネクションを明示的にクローズするように変更し、
時間がかかるようになったので起動処理の待ち時間を短くします。

鳥居 順次

On 12月15日, 午後11:46, Kouhei Sutou <k...@clear-code.com> wrote:
> 須藤です。
>
> ↓の差分もまとめて1つのパッチにしました。
> いかがでしょうか。
>
> --
> 須藤 功平 <k...@clear-code.com>
> 株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270)
>
> In <20091119.232134.181388163848854943....@clear-code.com>
> 0001-extract-common-routine.patch
> 12K表示ダウンロード
Reply all
Reply to author
Forward
0 new messages