fix: local tui mode routes console logging to a file and disables download progress bars so stray output cannot scroll the TUI
This commit is contained in:
@@ -88,18 +88,90 @@ defmodule BDS.ServerTest do
|
||||
end
|
||||
|
||||
test "non-desktop modes disable wx so the :desktop dep boots inert" do
|
||||
assert Server.prepare_boot_env(:tui) == :tui
|
||||
assert Server.prepare_boot_env(:tui, fn -> :ok end) == :tui
|
||||
assert System.get_env("NO_WX") == "1"
|
||||
|
||||
System.delete_env("NO_WX")
|
||||
assert Server.prepare_boot_env(:server) == :server
|
||||
assert Server.prepare_boot_env(:server, fn -> :ok end) == :server
|
||||
assert System.get_env("NO_WX") == "1"
|
||||
end
|
||||
|
||||
test "desktop mode leaves wx enabled" do
|
||||
assert Server.prepare_boot_env(:desktop) == :desktop
|
||||
assert Server.prepare_boot_env(:desktop, fn -> :ok end) == :desktop
|
||||
assert System.get_env("NO_WX") == nil
|
||||
end
|
||||
|
||||
test "tui mode silences terminal writers; desktop and server modes keep them" do
|
||||
original = Application.get_env(:bumblebee, :progress_bar_enabled)
|
||||
|
||||
on_exit(fn ->
|
||||
if original == nil do
|
||||
Application.delete_env(:bumblebee, :progress_bar_enabled)
|
||||
else
|
||||
Application.put_env(:bumblebee, :progress_bar_enabled, original)
|
||||
end
|
||||
end)
|
||||
|
||||
parent = self()
|
||||
|
||||
assert Server.prepare_boot_env(:tui, fn -> send(parent, :redirected) end) == :tui
|
||||
assert Application.get_env(:bumblebee, :progress_bar_enabled) == false
|
||||
assert_received :redirected
|
||||
|
||||
Server.prepare_boot_env(:desktop, fn -> send(parent, :redirected) end)
|
||||
Server.prepare_boot_env(:server, fn -> send(parent, :redirected) end)
|
||||
refute_received :redirected
|
||||
end
|
||||
end
|
||||
|
||||
describe "tui logging redirect" do
|
||||
setup do
|
||||
dir = Path.join(System.tmp_dir!(), "bds-tui-log-#{System.unique_integer([:positive])}")
|
||||
log_file = Path.join(dir, "bds.log")
|
||||
Application.put_env(:bds, :tui_log_file, log_file)
|
||||
|
||||
on_exit(fn ->
|
||||
Application.delete_env(:bds, :tui_log_file)
|
||||
File.rm_rf(dir)
|
||||
end)
|
||||
|
||||
{:ok, log_file: log_file}
|
||||
end
|
||||
|
||||
test "tui_log_file defaults to the private app dir and honors the override", %{
|
||||
log_file: log_file
|
||||
} do
|
||||
assert Server.tui_log_file() == log_file
|
||||
|
||||
Application.delete_env(:bds, :tui_log_file)
|
||||
assert Server.tui_log_file() == Path.join([BDS.Projects.private_dir(), "logs", "bds.log"])
|
||||
end
|
||||
|
||||
test "redirect_logging_to_file swaps the default handler to a rotating file handler", %{
|
||||
log_file: log_file
|
||||
} do
|
||||
{:ok, original} = :logger.get_handler_config(:default)
|
||||
|
||||
on_exit(fn ->
|
||||
_ = :logger.remove_handler(:default)
|
||||
|
||||
:ok =
|
||||
:logger.add_handler(
|
||||
:default,
|
||||
original.module,
|
||||
Map.take(original, [:level, :filters, :filter_default, :formatter, :config])
|
||||
)
|
||||
end)
|
||||
|
||||
assert Server.redirect_logging_to_file() == :ok
|
||||
|
||||
{:ok, handler} = :logger.get_handler_config(:default)
|
||||
assert handler.module == :logger_std_h
|
||||
assert handler.config.file == String.to_charlist(log_file)
|
||||
assert handler.config.max_no_bytes > 0
|
||||
# The swap must keep the Elixir log formatter, not fall back to OTP's.
|
||||
assert handler.formatter == original.formatter
|
||||
end
|
||||
end
|
||||
|
||||
describe "ensure_ssh_dir!/1" do
|
||||
|
||||
Reference in New Issue
Block a user