Files
firezone/elixir/config/test.exs
Jamil b20c141759 feat(portal): add batch-insert to change logs (#9733)
Inserting a change log incurs some minor overhead for sending query over
the network and reacting to its response. In many cases, this makes up
the bulk of the actual time it takes to run the change log insert.

To reduce this overhead and avoid any kind of processing delay in the
WAL consumers, we introduce batch insert functionality with size `500`
and timeout `30` seconds. If either of those two are hit, we flush the
batch using `insert_all`.

`insert_all` does not use `Ecto.Changeset`, so we need to be a bit more
careful about the data we insert, and check the inserted LSNs to
determine what to update the acknowledged LSN pointer to.

The functionality to determine when to call the new `on_flush/1`
callback lives in the replication_connection module, but the actual
behavior of `on_flush/1` is left to the child modules to implement. The
`Events.ReplicationConnection` module does not use flush behavior, and
so does not override the defaults, which is not to use a flush
mechanism.

Related: #949
2025-07-05 19:03:28 +00:00

145 lines
3.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
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