From 90feb07cdf09f6c63e657deb4c40f34245abb831 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=B5=D1=80=D0=B3=D0=B5=D0=B9=20=D0=9F=D1=80=D0=BE?= =?UTF-8?q?=D1=85=D0=BE=D1=80=D0=BE=D0=B2?= Date: Tue, 2 Apr 2019 00:02:10 +0200 Subject: [PATCH] Fix httpd "eaddrinuse" in tests --- src/mtproto_proxy_app.erl | 5 +++++ test/mtp_test_datacenter.erl | 30 ++++++++++++++++-------------- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/mtproto_proxy_app.erl b/src/mtproto_proxy_app.erl index 7515c9a..f7e4337 100644 --- a/src/mtproto_proxy_app.erl +++ b/src/mtproto_proxy_app.erl @@ -59,6 +59,11 @@ start_proxy(#{name := Name, port := Port, secret := Secret, tag := Tag} = P) -> stop_proxy(#{name := Name}) -> ranch:stop_listener(Name). +-ifdef(TEST). +report(Fmt, Args) -> + lager:debug(Fmt, Args). +-else. report(Fmt, Args) -> io:format(Fmt, Args), lager:info(Fmt, Args). +-endif. diff --git a/test/mtp_test_datacenter.erl b/test/mtp_test_datacenter.erl index c2343be..42b377e 100644 --- a/test/mtp_test_datacenter.erl +++ b/test/mtp_test_datacenter.erl @@ -29,7 +29,7 @@ start_dc() -> -spec start_dc(binary(), dc_conf(), #{}) -> {ok, #{}}. start_dc(Secret, DcConf, Acc) -> Cfg = dc_list_to_config(DcConf), - {ok, Acc1} = start_config_server({127, 0, 0, 1}, 3333, Secret, Cfg, Acc), + {ok, Acc1} = start_config_server({127, 0, 0, 1}, 0, Secret, Cfg, Acc), RpcHandler = maps:get(rpc_handler, Acc, mtp_test_echo_rpc), Ids = [begin @@ -59,7 +59,21 @@ middle_connections(#{srv_ids := Ids}) -> %% Api start_config_server(Ip, Port, Secret, DcConfig, Acc) -> application:load(mtproto_proxy), - Netloc = lists:flatten(io_lib:format("http://~s:~w", [inet:ntoa(Ip), Port])), + RootDir = code:lib_dir(mtproto_proxy, test), + {ok, Pid} = + inets:start(httpd, + [{port, Port}, + {server_name, "mtp_config"}, + {server_root, "/tmp"}, + {document_root, RootDir}, + + {bind_address, Ip}, + {modules, [?MODULE]}, + {mtp_secret, Secret}, + {mtp_dc_conf, DcConfig}]), + %% Get listen port in case when Port is 0 (ephemeral) + [{port, RealPort}] = httpd:info(Pid, [port]), + Netloc = lists:flatten(io_lib:format("http://~s:~w", [inet:ntoa(Ip), RealPort])), Env = [{proxy_secret_url, Netloc ++ ?SECRET_PATH}, {proxy_config_url, @@ -77,18 +91,6 @@ start_config_server(Ip, Port, Secret, DcConfig, Acc) -> end, {K, OldV} end || {K, V} <- Env], - RootDir = code:lib_dir(mtproto_proxy, test), - {ok, Pid} = - inets:start(httpd, - [{port, Port}, - {server_name, "mtp_config"}, - {server_root, "/tmp"}, - {document_root, RootDir}, - - {bind_address, Ip}, - {modules, [?MODULE]}, - {mtp_secret, Secret}, - {mtp_dc_conf, DcConfig}]), {ok, Acc#{env => OldEnv, httpd_pid => Pid}}.