簡體   English   中英

鋼筋分布式測試

[英]Rebar distributed tests

我在鋼筋下進行分布式測試時遇到一些問題。 鋼筋以名稱nonode@nohost開頭節點。 之后,我調用幫助函數make_distrib ,該函數提供正常的節點名稱並開始分發工作。
啟動從屬節點后,我無法向其發送任何lambda。 我有錯誤:

=ERROR REPORT==== 27-Jul-2013::22:48:02 ===
    Error in process  on node 'test1@just' with exit value: {{badfun,#Fun<msg_proxy_tests.2.117197241>},[{error_handler,undefined_lambda,3,[{file,"error_handler.erl"},{line,64}]}]}

但! 如果我以簡單的方式進行測試-一切正常:

$erl
    1> c(msg_proxy_tests).
    {ok,msg_proxy_tests}
    2> eunit:test({module, msg_proxy_tests},[verbose]).
    ======================== EUnit ========================
    module 'msg_proxy_tests'msg_proxy_tests: distrib_mode_test_ (distribute mode test for nodes)...
    msg_proxy_tests.erl:14:<0.48.0>: nodes ( ) = [test1@just]
    msg_proxy_tests.erl:15:<9999.39.0>: node ( ) = test1@just
    msg_proxy_tests.erl:17:<0.48.0>: nodes ( ) = [test1@just]
    [0.238 s] ok

我怎樣才能解決這個問題?


模塊來源:

\n\n     -module(msg_proxy_tests)。\n\n     -include_lib(“ eunit / include / eunit.hrl”)。\n\n     distrib_mode_test _()->\n     {“節點的分布式模式測試”,超時,60, \n         fun()->\n             {ok,主機} = inet:gethostname(),\n             make_distrib(“ tests @” ++主機,簡稱),\n             slave:start(主機,test1),\n             ?debugVal(nodes()),\n             spawn(list_to_atom(“ test1 @” ++ Host),fun()->?debugVal(node())結束),\n             計時器:睡眠(100), \n             ?debugVal(nodes()),\n             stop_distrib(),\n             \n         結束}。\n\n     -spec make_distrib(NodeName :: string()| atom(),NodeType :: shortnames | longnames)->\n         {ok,ActualNodeName :: atom} |  {錯誤,原因:: term()}。\n     當is_list(NodeName)-> make_distrib(NodeName,NodeType)\n         make_distrib(erlang:list_to_atom(NodeName),NodeType);\n     make_distrib(NodeName,NodeType)->\n         的case node()\n             'nonode @ nohost'-> \n                 [] = os:cmd(“ epmd -daemon”),\n                 net_kernel:start([NodeName,NodeType])的情況 \n                     {ok,_Pid}-> node() \n                 結束;\n             CurrNode-> CurrNode\n         結束。\n\n     stop_distrib()->\n         net_kernel:stop()。\n\n

這是因為兩個節點上的模塊哈希不同。 發生這種情況是因為eunit在運行之前會編譯代碼,並且模塊包含-ifdef(TEST)宏,這肯定會更改其哈希值。

這就是為什么無法調用匿名函數#Fun<msg_proxy_tests.2.117197241並發生錯誤的原因。 (查看函數名稱,您會注意到有趣的數字,這是模塊哈希,在兩個節點上都不同)。

如果要避免這種情況,則應使用完全限定的名稱來調用module:fun_name/aritymodule:fun_name/arity

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM