QA@IT

debian squeeze で node.js のテストがエラーになる件

2476 PV

表題の件で 以下のような環境で make test が失敗するのですが、お分かりの方いらっしゃるでしょうか?
パッケージになってるものを使えと言われそうですが、現状 sid にしか存在しないので、お分かりの方居ましたらお願い致します。
エラーになる状況は違うのですが、github上の最新ソースでもエラーになります。
バグ報告も考えていますが、対処方法があれば教えていただきたいです。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 6.0.5 (squeeze)
Release:    6.0.5
Codename:   squeeze

以下ビルドからの抜粋を載せておきます。

$ ./configure
Checking for program g++ or c++          : /usr/bin/g++ 
Checking for program cpp                 : /usr/bin/cpp 
Checking for program ar                  : /usr/bin/ar 
Checking for program ranlib              : /usr/bin/ranlib 
Checking for g++                         : ok  
Checking for program gcc or cc           : /usr/bin/gcc 
Checking for gcc                         : ok  
Checking for library dl                  : yes 
Checking for openssl                     : yes 
Checking for library util                : yes 
Checking for library rt                  : yes 
Checking for fdatasync(2) with c++       : yes 
'configure' finished successfully (0.372s)
$ make
(略)
Waf: Leaving directory `/home/d6rkaiz/src/node-v0.6.19/out'
'build' finished successfully (6m16.517s)

続いて make test

$ make test
Waf: Entering directory `/home/d6rkaiz/src/node-v0.6.19/out'
DEST_OS: linux
DEST_CPU: x64
Parallel Jobs: 1
Product type: program
Waf: Leaving directory `/home/d6rkaiz/src/node-v0.6.19/out'
'build' finished successfully (0.202s)
-rwxr-xr-x 1 d6rkaiz users 9.5M Jun 16 13:08 out/Release/node
python tools/test.py --mode=release simple message
=== release test-dgram-broadcast-multi-process ===                    
Path: simple/test-dgram-broadcast-multi-process
[PARENT] sent 'First message to send' to 255.255.255.255:12346
[PARENT] sent 'Second message to send' to 255.255.255.255:12346
[PARENT] sent 'Third message to send' to 255.255.255.255:12346
[PARENT] sent 'Fourth message to send' to 255.255.255.255:12346
[PARENT] sendSocket closed
[PARENT] Responses were not received within 5000 ms.
[PARENT] Fail
Command: out/Release/node /home/d6rkaiz/src/node-v0.6.19/test/simple/test-dgram-broadcast-multi-process.js
[01:18|% 100|+ 350|-   1]: Done                                                
make: *** [test] Error 1

回答

このテストは、親プロセスから udp で INADDR_BROADCAST (255.255.255.255) を送信し、子プロセスでこのブロードキャストを受信することを確認するテストです。 ログを見ると親プロセスからの送信ログは出力されているのですが、子プロセス側で受信したログが出力されていません。
正常の場合、

[CHILD] 28520 received 'First message to send' from {"address":"x.x.x.1x","family":"IPv4","port":12346,"size":21}

のようなメッセージが出力されます。
提示されているログからエラーの原因として推測できることは、、

  • 子プロセスのフォークに失敗している
  • 子プロセスがブロードキャストを受信できない。
  • 親プロセスからのブロードキャストの送信が実際に行われていない。 ですが、原因を特定するにはさらなる切り分けが必要です。

可能性として高いのはネットワーク設定(OSのファイヤーウォールやスイッチ等)でブロードキャストの送受信ができなくなっていることが考えられますので、切り分け方法として

  • ブロードキャストの送受信をフィルターしていないかネットワークの設定の確認する
  • テストコードに console.log() などを追加してどこまでテストコードが正常に稼働しているか確認する
  • もし同サブネット上の他のサーバで操作できればブロードキャストが届いているか確認する といった作業が必要だと思います。

その他、当方 Ubuntu12.04 上で動作確認していますので Debian squeeze 固有の問題である可能性もあります。

編集 履歴 (0)
  • FWに `ufw` を使っていたのですが、それがブロードキャストをブロックしていたのが原因で `ufw allow to 255.255.255.255 proto udp port 12346` とすることでテストをPassすることが出来ました。ありがとうございました! -
ウォッチ

この質問への回答やコメントをメールでお知らせします。