Files
firezone/elixir/config/test.exs
Jamil 4a448e5517 fix(portal): separate dev and runtime Oban configs (#10027)
Oban includes its own configuration validation, which seems to prevent
`runtime.exs` from overriding any compile-time options. This prevents us
from using ENV vars to configure it, such as restricting job execution
to `domain` nodes by setting `queues: []`. To fix that, we make sure to
set Oban configuration in env-specific files `config/dev.exs` and
`config/test.exs`, and at runtime for prod with `config/runtime.exs`.

Fixes #10016
2025-07-28 15:13:52 +00:00

170 lines
4.7 KiB
Elixir

import Config
###############################
##### Domain ##################
###############################
partition_suffix =
if partition = System.get_env("MIX_TEST_PARTITION") do
"_p#{partition}"
else
""
end
config :domain, sql_sandbox: true
config :domain, run_manual_migrations: true
config :domain, Domain.Repo,
database: "firezone_test#{partition_suffix}",
pool: Ecto.Adapters.SQL.Sandbox,
queue_target: 1000
# Oban has its own config validation that prevents overriding config in runtime.exs,
# so we explicitly set the config in dev.exs, test.exs, and runtime.exs (for prod) only.
config :domain, Oban,
# Periodic jobs don't make sense in tests
plugins: [
# Keep the last 90 days of completed, cancelled, and discarded jobs
# {Oban.Plugins.Pruner, max_age: 60 * 60 * 24 * 90},
# Rescue jobs that may have failed due to transient errors like deploys
# or network issues. It's not guaranteed that the job won't be executed
# twice, so for now we disable it since all of our Oban jobs can be retried
# without loss.
# {Oban.Plugins.Lifeline, rescue_after: :timer.minutes(30)}
# Periodic jobs
# {Oban.Plugins.Cron,
# crontab: [
# # Delete expired flows every minute
# {"* * * * *", Domain.Flows.Jobs.DeleteExpiredFlows}
# ]}
],
queues: [default: 10],
engine: Oban.Engines.Basic,
repo: Domain.Repo
config :domain, Domain.ChangeLogs.ReplicationConnection,
replication_slot_name: "test_change_logs_slot",
publication_name: "test_change_logs_publication",
enabled: false,
connection_opts: [
database: "firezone_test#{partition_suffix}"
]
config :domain, Domain.Events.ReplicationConnection,
replication_slot_name: "test_events_slot",
publication_name: "test_events_publication",
enabled: false,
connection_opts: [
database: "firezone_test#{partition_suffix}"
]
config :domain, Domain.Billing.Stripe.APIClient,
endpoint: "https://api.stripe.com",
finch_transport_opts: [],
retry_config: [
max_retries: 3,
base_delay_ms: 100,
max_delay_ms: 1000
]
config :domain, Domain.Telemetry, enabled: false
config :domain, Domain.ConnectivityChecks, enabled: false
config :domain, platform_adapter: Domain.GoogleCloudPlatform
config :domain, Domain.GoogleCloudPlatform, service_account_email: "foo@iam.example.com"
config :domain, Domain.ComponentVersions,
fetch_from_url: false,
versions: [
apple: "1.0.0",
android: "1.0.0",
gateway: "1.0.0",
gui: "1.0.0",
headless: "1.0.0"
]
config :domain, Domain.Telemetry.Reporter.GoogleCloudMetrics, project_id: "fz-test"
config :domain, web_external_url: "http://localhost:13100"
# Prevent Oban from running jobs and plugins in tests
config :domain, Oban, testing: :manual
###############################
##### Web #####################
###############################
config :web, Web.Endpoint,
http: [port: 13_100],
url: [port: 13_100],
server: true
config :web, Web.Plugs.SecureHeaders,
csp_policy: [
"default-src 'self' 'nonce-${nonce}' https://api-js.mixpanel.com",
"img-src 'self' data: https://www.gravatar.com https://track.hubspot.com",
"style-src 'self' 'unsafe-inline'",
"script-src 'self' 'unsafe-inline' https://cdn.mxpnl.com https://*.hs-analytics.net"
]
config :web, :constant_execution_time, 1
###############################
##### API #####################
###############################
config :api, API.Endpoint,
http: [port: 13_101],
url: [port: 13_101],
server: true
config :api,
# shorten debounce timeout for tests
relays_presence_debounce_timeout_ms: 100
###############################
##### Third-party configs #####
###############################
config :domain, Domain.Mailer, adapter: Domain.Mailer.TestAdapter
# Allow asserting on info logs and higher
config :logger, level: :info
config :argon2_elixir, t_cost: 1, m_cost: 8
config :wallaby,
driver: Wallaby.Chrome,
screenshot_on_failure: true,
# TODO: Contribute to Wallaby to make this configurable on the per-process level,
# along with buffer to write logs only on process failure
js_logger: false,
hackney_options: [timeout: 10_000, recv_timeout: 10_000]
ex_unit_config =
[
formatters: [JUnitFormatter, ExUnit.CLIFormatter],
capture_log: true,
exclude: [:acceptance]
] ++
case System.get_env("CI_ASSERT_RECEIVE_TIMEOUT_MS") do
nil -> []
timeout -> [assert_receive_timeout: String.to_integer(timeout)]
end
config :ex_unit, ex_unit_config
# Initialize plugs at runtime for faster development compilation
config :phoenix, :plug_init_mode, :runtime
config :workos, WorkOS.Client,
api_key: "sk_example_123456789",
client_id: "client_123456789"
config :sentry,
environment_name: :test