PropagationGridWorker hard-coded `now-2h` for run_time selection on the conservative theory that NOAA always finishes publishing within two hours. In practice f18 is on the mirror by HH:55–HH:00 of the next hour, so the cron at HH:05 was always picking a cycle that was already an hour stale. `HrrrClient.cycle_available?/1` HEADs the wrfprsf18 idx (the slowest file in the cycle) — a 200 means every earlier forecast hour is also on disk. `pick_run_time/1` probes `now-1h` first; if the probe returns true we use that cycle, otherwise we fall back to the existing `now-2h` slot. Test hook via :hrrr_cycle_available_fn env keeps the behaviour fully exercisable without hitting NOAA. End-to-end: weather/score data lag drops from ~2 h to ~1 h on every hour where NOAA delivers on time. The fallback path keeps the chain running on slow-publish hours.
102 lines
4.5 KiB
Elixir
102 lines
4.5 KiB
Elixir
import Config
|
|
|
|
alias Microwaveprop.Qrz.Client
|
|
|
|
# Only in tests, remove the complexity from the password hashing algorithm
|
|
config :bcrypt_elixir, :log_rounds, 1
|
|
|
|
# Print only warnings and errors during test
|
|
config :logger, level: :warning
|
|
|
|
config :microwaveprop, Client,
|
|
username: "testuser",
|
|
password: "testpass",
|
|
agent: "microwaveprop-test/1.0",
|
|
plug: {Req.Test, Client},
|
|
retry: false
|
|
|
|
config :microwaveprop, Microwaveprop.Geocoder,
|
|
plug: {Req.Test, Microwaveprop.Geocoder},
|
|
retry: false
|
|
|
|
# In test we don't send emails
|
|
config :microwaveprop, Microwaveprop.Mailer, adapter: Swoosh.Adapters.Test
|
|
config :microwaveprop, Microwaveprop.Qrz, cache_ttl_hours: 0
|
|
|
|
# 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.
|
|
config :microwaveprop, Microwaveprop.Repo,
|
|
username: "postgres",
|
|
password: "postgres",
|
|
hostname: "localhost",
|
|
database: "microwaveprop_test#{System.get_env("MIX_TEST_PARTITION")}",
|
|
pool: Ecto.Adapters.SQL.Sandbox,
|
|
pool_size: System.schedulers_online() * 2,
|
|
ownership_timeout: 60_000,
|
|
timeout: 60_000
|
|
|
|
# We don't run a server during test. If one is required,
|
|
# you can enable the server option below.
|
|
config :microwaveprop, MicrowavepropWeb.Endpoint,
|
|
http: [ip: {127, 0, 0, 1}, port: 4002],
|
|
secret_key_base: "f7KbnwUezGrPtrv/67l6Wi+W9/+wOqwFG5QJ/ZLs24cVM1gg2lBswZwrKuyWsBAZ",
|
|
server: false
|
|
|
|
# Run Oban jobs inline during tests
|
|
config :microwaveprop, Oban, testing: :inline
|
|
|
|
# MetricsLogSuppressionTest hits GET /metrics and asserts no "Sent 200"
|
|
# log line; that path needs PromEx alive to return a 200. We can't
|
|
# blanket-disable PromEx. Instead, toggle off the Oban-queue poller
|
|
# below — its 5 s telemetry measurement issues an Ecto query from a
|
|
# process that doesn't hold a sandbox connection and crashes with
|
|
# DBConnection.OwnershipError, spamming the test log.
|
|
config :microwaveprop, :prom_ex_include_oban_plugin, false
|
|
|
|
# Score files land under a per-run tmp directory so replace_scores tests
|
|
# don't write into a shared location (and we can assert on the file
|
|
# contents from inside tests).
|
|
config :microwaveprop,
|
|
:propagation_scores_dir,
|
|
Path.join(System.tmp_dir!(), "microwaveprop_test_scores_#{System.unique_integer([:positive])}")
|
|
|
|
config :microwaveprop, cache_contact_count: false
|
|
config :microwaveprop, cache_contact_map: false
|
|
config :microwaveprop, elevation_req_options: [plug: {Req.Test, Microwaveprop.Terrain.ElevationClient}, retry: false]
|
|
config :microwaveprop, gefs_req_options: [plug: {Req.Test, Microwaveprop.Weather.GefsClient}, retry: false]
|
|
config :microwaveprop, giro_req_options: [plug: {Req.Test, Microwaveprop.Ionosphere.GiroClient}, retry: false]
|
|
|
|
# Default the HRRR cycle freshness probe to "always available" in tests.
|
|
# Individual cases that exercise the fallback path override via
|
|
# `Application.put_env/3` in their setup.
|
|
config :microwaveprop, hrrr_cycle_available_fn: fn _run_time -> true end
|
|
config :microwaveprop, hrrr_req_options: [plug: {Req.Test, Microwaveprop.Weather.HrrrClient}, retry: false]
|
|
config :microwaveprop, iem_rate_limiter_interval_ms: 0
|
|
config :microwaveprop, iem_req_options: [plug: {Req.Test, Microwaveprop.Weather.IemClient}, retry: false]
|
|
config :microwaveprop, narr_req_options: [plug: {Req.Test, Microwaveprop.Weather.NarrClient}, retry: false]
|
|
|
|
# Route HTTP requests through Req.Test stubs
|
|
config :microwaveprop, nexrad_req_options: [plug: {Req.Test, Microwaveprop.Weather.NexradClient}, retry: false]
|
|
config :microwaveprop, rtma_req_options: [plug: {Req.Test, Microwaveprop.Weather.RtmaClient}, retry: false]
|
|
config :microwaveprop, solar_req_options: [plug: {Req.Test, Microwaveprop.Weather.SolarClient}]
|
|
config :microwaveprop, srtm_req_options: [plug: {Req.Test, Microwaveprop.Terrain.Srtm}, retry: false]
|
|
config :microwaveprop, start_freshness_monitor: false
|
|
config :microwaveprop, swpc_req_options: [plug: {Req.Test, Microwaveprop.SpaceWeather.SwpcClient}, retry: false]
|
|
config :microwaveprop, uwyo_req_options: [plug: {Req.Test, Microwaveprop.Weather.UwyoSoundingClient}, retry: false]
|
|
|
|
# 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
|