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 # Configure your database # # In test we don't send emails # 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. config :towerops, Towerops.Mailer, adapter: Swoosh.Adapters.Test # Disable PromEx HTTP server in test — avoids port conflicts under parallel runs. config :towerops, Towerops.PromEx, disabled: true, manual_metrics_start_delay: :no_delay, drop_metrics_groups: [], grafana: :disabled, metrics_server: :disabled # MIB upload directory for tests — points at a writable tmp dir so # # the MibController upload/delete flows can actually be exercised. # In CI, DATABASE_URL is set and will be used automatically by Ecto. # Locally, fall back to individual connection parameters. config :towerops, :mib_dir, Path.join(System.tmp_dir!(), "towerops-test-mibs") if database_url = System.get_env("DATABASE_URL") do config :towerops, Towerops.Repo, url: database_url, pool: Sandbox, pool_size: System.schedulers_online() * 2, # Bumped from default 50ms — channel-heavy test files (notably # AgentChannelTest) intermittently exhaust the pool while waiting on # background `:proc_lib` processes to release their checked-out # connections. A longer queue lets the test pool ride out the spike # rather than crashing with `connection not available`. queue_target: 500, queue_interval: 5_000 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, queue_target: 500, queue_interval: 5_000 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, rate_limit_redis_client: Towerops.RateLimit.RedisClientMock, 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 poll interval in tests for faster test execution (100ms vs 60s in prod) agent_poll_interval_ms: 100, # Reduce device deletion delay for faster tests (10ms vs 500ms in prod) device_deletion_delay_ms: 10, # Stripe test configuration stripe_product_id: "prod_test"