# Copyright(c) 2015-2023 ACCESS CO., LTD. All rights reserved. defmodule Antikythera.Test.Config do @moduledoc """ Helpers to be used in each gear's `test/test_helper.exs`. At the top of `test/test_helper.exs`, all gears must place the following line: Antikythera.Test.Config.init() This line will start [`ExUnit`](http://elixir-lang.org/docs/stable/ex_unit/) and set configurations for whitebox/blackbox test mode. """ alias AntikytheraCore.Handler.CowboyRouting alias AntikytheraCore.GearManager alias AntikytheraCore.GearModule deployment_envs = Application.compile_env!(:antikythera, :deployments) |> Keyword.keys() def init() do System.at_exit(fn _ -> stop_gear_supervisors() end) ExUnit.start() if blackbox_test?() do ExUnit.configure(exclude: [:test], include: [:blackbox, :blackbox_only]) IO.puts("Target base URL: #{base_url()}") else ExUnit.configure(exclude: [:blackbox_only]) end end # Explicit termination of gear's supervisor is required to ensure that # the gear's logger gracefully closes its log file. defp stop_gear_supervisors() do GearManager.running_gear_names() |> Enum.each(fn gear_name -> :ok = gear_name |> GearModule.root_supervisor() |> Supervisor.stop() end) end def base_url() do gear_name = Mix.Project.config()[:app] case test_mode() do :whitebox -> "http://#{CowboyRouting.default_domain(gear_name, :local)}:#{Antikythera.Env.port_to_listen()}" :blackbox_local -> "http://#{CowboyRouting.default_domain(gear_name, :local)}:#{System.get_env("TEST_PORT") || 8080}" other_env -> base_url_for_deployment(gear_name, other_env) end end Enum.each(deployment_envs, fn env -> # credo:disable-for-next-line Credo.Check.Warning.UnsafeToAtom defp base_url_for_deployment(gear_name, unquote(:"blackbox_#{env}")) do "https://" <> CowboyRouting.default_domain(gear_name, unquote(env)) end end) def blackbox_test?(), do: test_mode() != :whitebox def test_mode() do case System.get_env("TEST_MODE") do nil -> :whitebox "blackbox_local" -> :blackbox_local other -> test_mode_for_deployment(other) end end Enum.each(deployment_envs, fn env -> # credo:disable-for-next-line Credo.Check.Warning.UnsafeToAtom defp test_mode_for_deployment(unquote("blackbox_#{env}")), do: :"blackbox_#{unquote(env)}" end) defp test_secret(env_var_name) do case System.get_env(env_var_name) do nil -> raise "Environment variable `#{env_var_name}` not found!" s -> Poison.decode!(s) end end def whitebox_test_secret() do test_secret("WHITEBOX_TEST_SECRET_JSON") end def blackbox_test_secret() do test_secret("BLACKBOX_TEST_SECRET_JSON") end end