summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Lemenkov <lemenkov@gmail.com>2020-07-07 00:03:24 +0200
committerPeter Lemenkov <lemenkov@gmail.com>2020-07-07 13:38:21 +0200
commit5f622370d3f5986fa721df016271c064474bd51c (patch)
treee4b080a4b20e26160e822be75b164a13de6108a2
parent9eb84a464326c8d52bdb6cb251a95e63800f6559 (diff)
downloaderlang-sd_notify-5f622370d3f5986fa721df016271c064474bd51c.tar.gz
Unset NOTIFY_SOCKET env if requested
Signed-off-by: Peter Lemenkov <lemenkov@gmail.com>
-rw-r--r--src/sd_notify.erl5
-rw-r--r--test/sd_notify_test.erl28
2 files changed, 30 insertions, 3 deletions
diff --git a/src/sd_notify.erl b/src/sd_notify.erl
index 9d0b2e2..72f1324 100644
--- a/src/sd_notify.erl
+++ b/src/sd_notify.erl
@@ -41,7 +41,7 @@ sd_notifyf(UnsetEnv, Format, Data) ->
sd_pid_notifyf(Pid, UnsetEnv, Format, Data) ->
sd_pid_notify_with_fds(Pid, UnsetEnv, lists:flatten(io_lib:format(Format, Data)), []).
-sd_pid_notify_with_fds(_Pid, _UnsetEnv, Call, _Fds) ->
+sd_pid_notify_with_fds(_Pid, UnsetEnv, Call, _Fds) ->
error_logger:info_msg("systemd: ~p", [Call]),
case os:getenv("NOTIFY_SOCKET") of
false -> {error, not_configured};
@@ -52,6 +52,9 @@ sd_pid_notify_with_fds(_Pid, _UnsetEnv, Call, _Fds) ->
{ok, Socket} ->
Result = gen_udp:send(Socket, {local,Path}, 0, Call),
gen_udp:close(Socket),
+
+ UnsetEnv == true andalso os:unsetenv("NOTIFY_SOCKET"),
+
Result
end
end.
diff --git a/test/sd_notify_test.erl b/test/sd_notify_test.erl
index 86766bc..21a9f9d 100644
--- a/test/sd_notify_test.erl
+++ b/test/sd_notify_test.erl
@@ -2,8 +2,7 @@
-include_lib("eunit/include/eunit.hrl").
-
-sd_notify_test_() ->
+sd_notify_basic_test_() ->
{ok, CWD} = file:get_cwd(),
FakeNotifyUnixSockName = CWD ++ "/fake-sock-" ++ integer_to_list(erlang:phash2(make_ref())),
{ok, FakeNotifyUnixSock} = gen_udp:open(0, [{ifaddr, {local, FakeNotifyUnixSockName}}, {active, false}, list]),
@@ -26,3 +25,28 @@ sd_notify_test_() ->
]
}.
+
+sd_notify_unsetenv_test_() ->
+ {ok, CWD} = file:get_cwd(),
+ FakeNotifyUnixSockName = CWD ++ "/fake-sock-" ++ integer_to_list(erlang:phash2(make_ref())),
+ {ok, FakeNotifyUnixSock} = gen_udp:open(0, [{ifaddr, {local, FakeNotifyUnixSockName}}, {active, false}, list]),
+ os:putenv("NOTIFY_SOCKET", FakeNotifyUnixSockName),
+
+ {setup,
+ fun() -> ok end,
+ fun(_) -> ok = gen_udp:close(FakeNotifyUnixSock), ok = file:delete(FakeNotifyUnixSockName) end,
+ [
+ {
+ "Try sending message",
+ fun() ->
+ TestMessage = integer_to_list(erlang:phash2(make_ref())),
+ ok = sd_notify:sd_pid_notify_with_fds(0, true, TestMessage, []),
+ {ok, {_Address, _Port, _Packet}} = gen_udp:recv(FakeNotifyUnixSock, length(TestMessage), 1000),
+ Ret = os:getenv("NOTIFY_SOCKET"),
+ ?assertEqual(Ret, false)
+ end
+ }
+
+ ]
+
+ }.