[英]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/arity
: module:fun_name/arity
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.