64 lines
2.2 KiB
Elixir
64 lines
2.2 KiB
Elixir
defmodule ProxmoxAgent.DiagnosticsTest do
|
|
use ExUnit.Case, async: false
|
|
|
|
alias ProxmoxAgent.Diagnostics
|
|
|
|
setup do
|
|
# Isolate tests: clear the env key before and after each test.
|
|
Application.delete_env(:agent, :dump_dir)
|
|
on_exit(fn -> Application.delete_env(:agent, :dump_dir) end)
|
|
:ok
|
|
end
|
|
|
|
describe "configure/1 and enabled?/0" do
|
|
test "nil disables and returns :ok" do
|
|
assert :ok = Diagnostics.configure(nil)
|
|
refute Diagnostics.enabled?()
|
|
end
|
|
|
|
test "empty string disables and returns :ok" do
|
|
assert :ok = Diagnostics.configure("")
|
|
refute Diagnostics.enabled?()
|
|
end
|
|
|
|
test "valid path creates the directory and enables" do
|
|
dir = Path.join(System.tmp_dir!(), "diag-#{System.unique_integer([:positive])}")
|
|
on_exit(fn -> File.rm_rf(dir) end)
|
|
|
|
assert :ok = Diagnostics.configure(dir)
|
|
assert Diagnostics.enabled?()
|
|
assert File.dir?(dir)
|
|
assert Application.get_env(:agent, :dump_dir) == dir
|
|
end
|
|
|
|
test "unreachable path disables (does not crash)" do
|
|
# Point at a path under a non-directory file to force mkdir_p failure.
|
|
parent = Path.join(System.tmp_dir!(), "diag-parent-#{System.unique_integer([:positive])}")
|
|
File.write!(parent, "not a directory")
|
|
dir = Path.join(parent, "child")
|
|
on_exit(fn -> File.rm_rf(parent) end)
|
|
|
|
assert :ok = Diagnostics.configure(dir)
|
|
refute Diagnostics.enabled?()
|
|
end
|
|
end
|
|
|
|
describe "log_command/4 and log_sample/2 (no writer running)" do
|
|
test "log_command/4 no-ops and returns :ok when disabled" do
|
|
assert :ok = Diagnostics.log_command("zpool", ["list"], {:ok, "body"}, 1_234)
|
|
end
|
|
|
|
test "log_sample/2 no-ops and returns :ok when disabled" do
|
|
assert :ok = Diagnostics.log_sample("fast", %{foo: "bar"})
|
|
end
|
|
|
|
test "log_command/4 no-ops when enabled but writer is not running" do
|
|
dir = Path.join(System.tmp_dir!(), "diag-#{System.unique_integer([:positive])}")
|
|
on_exit(fn -> File.rm_rf(dir) end)
|
|
|
|
:ok = Diagnostics.configure(dir)
|
|
# Writer is not started in this test — log should still be safe.
|
|
assert :ok = Diagnostics.log_command("zpool", ["list"], {:ok, "body"}, 1_234)
|
|
end
|
|
end
|
|
end
|