towerops/config/test.exs
Graham McIntire 52329cf959
perf(tests): make device deletion delay configurable for faster tests
Make the 500ms device deletion delay configurable via application config.
Set to 10ms in test environment (vs 500ms in production).

This sleep waits for in-flight polling jobs to complete before deleting
a device. In tests with mocked jobs, this delay is unnecessary.

Affected tests:
- All device deletion tests (were 500-650ms, now ~100-150ms)
- Equipment context tests
- API controller tests
- LiveView tests with device deletion

Performance: 28.3s → 25.2s (11% faster)
Total improvement from baseline: 52s → 25.2s (51.5% faster)
2026-03-06 08:04:08 -06:00

97 lines
3.1 KiB
Elixir

import Config
alias Ecto.Adapters.SQL.Sandbox
# Only in tests, remove the complexity from the password hashing algorithm
config :argon2_elixir,
t_cost: 1,
m_cost: 8
config :error_tracker, enabled: false
# Suppress log output during tests (tests that need logs use capture_log)
config :logger, :default_handler, false
config :logger, level: :error
# Initialize plugs at runtime for faster test compilation
config :phoenix, :plug_init_mode, :runtime
# Sort query params output of verified routes for robust url comparisons
config :phoenix,
sort_verified_routes_query_params: true
# Enable helpful, but potentially expensive runtime checks
config :phoenix_live_view,
enable_expensive_runtime_checks: true
# Disable swoosh api client as it is only required for production adapters
config :swoosh, :api_client, false
# Disable Oban job processing in tests (use testing mode)
config :towerops, Oban,
repo: Towerops.Repo,
testing: :manual,
queues: false,
plugins: false
# In test we don't send emails
config :towerops, Towerops.Mailer, adapter: Swoosh.Adapters.Test
# Configure your database
#
# The MIX_TEST_PARTITION environment variable can be used
# to provide built-in test partitioning in CI environment.
# Run `mix help test` for more information.
#
# In CI, DATABASE_URL is set and will be used automatically by Ecto.
# Locally, fall back to individual connection parameters.
if database_url = System.get_env("DATABASE_URL") do
config :towerops, Towerops.Repo,
url: database_url,
pool: Sandbox,
pool_size: System.schedulers_online() * 2
else
config :towerops, Towerops.Repo,
username: "postgres",
password: "postgres",
hostname: "localhost",
database: "towerops_test#{System.get_env("MIX_TEST_PARTITION")}",
pool: Sandbox,
pool_size: System.schedulers_online() * 2
end
# Configure Cloak encryption for testing
# Use a fixed test key (same as dev for simplicity)
config :towerops, Towerops.Vault,
ciphers: [
default: {
Cloak.Ciphers.AES.GCM,
# Test key - same as dev for consistency
tag: "AES.GCM.V1", key: Base.decode64!("nQWmgQYhoCNXA3PAxwriKxLyPHAOWH9VgpLkBOXrowM=")
}
]
# We don't run a server during test. If one is required,
# you can enable the server option below.
config :towerops, ToweropsWeb.Endpoint,
http: [ip: {127, 0, 0, 1}, port: 4002],
secret_key_base: "XDSSqVUtRXUjEfzxefIAaPIzBfonpNMOrCRyP1a0kjPzzyOpVNSRmMBVae/bwTqj",
server: false
# Webhook secret for CI-triggered agent updates
config :towerops, :agent_webhook_secret, "test-webhook-secret"
# Set environment identifier for runtime checks
config :towerops, :env, :test
config :towerops,
ping_module: Towerops.Monitoring.PingMock,
poller_module: Towerops.Snmp.PollerMock,
snmp_adapter: Towerops.Snmp.SnmpMock,
sql_sandbox: true,
# Disable rate limiting in tests to avoid blocking concurrent test requests
rate_limiting_enabled: false,
# Reduce debounce delay in tests for faster test execution (50ms vs 500ms in prod)
agent_channel_debounce_ms: 50,
# Reduce device deletion delay for faster tests (10ms vs 500ms in prod)
device_deletion_delay_ms: 10