erlang eunit

erlang - Asegúrese de que epmd comenzó



eunit (1)

No, no puedes asegurarte de que EPMD se inicie de una manera más limpia.

TL; DR

EPMD es un programa externo, implementado en C. Mientras que net_kernel:start/1 se encarga de crear el supervisor net_sup , en realidad no net_sup el demonio EPMD, que debe iniciarse explícitamente. -sname un vistazo a cómo se inicia EPMD cuando se especifica la opción -sname en el comando erl y - sorpresa, sorpresa - Descubrí que el programa epmd se inicia a través de una llamada C del system() .

Tengo una prueba de eunit que genera un nombre de nodo único y comienza la distribución:

{A,B,C} = now(), Nodename = list_to_atom(lists:flatten(io_lib:format( "test-~b-~b-~b@localhost", [A, B, C]))), {ok, _} = net_kernel:start([Nodename, shortnames]),

Esto funciona bien siempre y cuando se haya ejecutado un nodo de Erlang distribuido en la máquina en algún momento anterior, y así epmd todavía se está ejecutando, pero en el servidor de compilación no puedo suponer que ese sea el caso.

Resolví el problema agregando esto a mi prueba:

_ = os:cmd("epmd -daemon"),

pero se siente como un truco. ¿Hay alguna manera mejor / más agradable de garantizar que epmd se inicie antes de ejecutar net_kernel:start ?