diff options
author | Ricardo Hermida Ruiz <ricardo.ruiz@locaweb.com.br> | 2020-04-24 15:40:22 -0300 |
---|---|---|
committer | Ricardo Hermida Ruiz <ricardo.ruiz@locaweb.com.br> | 2020-04-24 15:40:22 -0300 |
commit | a6889b0128f7266e506ea4ef6e7c5a8bd8bc3d58 (patch) | |
tree | e22d03d315d79bb2cd54f645c121b737d8fdf8e0 | |
parent | bump otp (diff) | |
parent | Timeout option (diff) |
Merge remote-tracking branch 'origin/add-timeout-support' into pooling
-rw-r--r-- | .travis.yml | 22 | ||||
-rw-r--r-- | config/config.exs | 2 | ||||
-rw-r--r-- | config/test.exs | 3 | ||||
-rw-r--r-- | lib/powerdnsex.ex | 2 | ||||
-rw-r--r-- | lib/powerdnsex/config.ex | 26 | ||||
-rw-r--r-- | lib/powerdnsex/http_client.ex | 6 | ||||
-rw-r--r-- | mix.exs | 2 | ||||
-rw-r--r-- | test/lib/powerdnsex/config_test.exs | 22 | ||||
-rw-r--r-- | test/lib/powerdnsex/powerdnsex_test.exs | 4 | ||||
-rw-r--r-- | test/support/fake_config.exs | 4 |
10 files changed, 67 insertions, 26 deletions
diff --git a/.travis.yml b/.travis.yml index 6aeef56..775894c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,23 +2,25 @@ language: elixir elixir: - - 1.6 - - 1.7 - - 1.8 + - 1.10 otp_release: - - 19.3 - - 20.0 - - 21.0 + - 22.3 script: mix test matrix: include: - - elixir: '1.6.6' + - elixir: '1.6' otp_release: '19.3' - - elixir: '1.7.4' + - elixir: '1.7' otp_release: '20.0' - - elixir: '1.7.4' -otp_release: '21.0' + - elixir: '1.7' + otp_release: '21.0' + + - elixir: '1.8' + otp_release: '21.3' + + - elixir: '1.9' + otp_release: '22.3' diff --git a/config/config.exs b/config/config.exs index 8233fe9..97ecef9 100644 --- a/config/config.exs +++ b/config/config.exs @@ -1,3 +1,5 @@ use Mix.Config +config :powerdnsex, timeout: 2 + import_config "#{Mix.env()}.exs" diff --git a/config/test.exs b/config/test.exs index eedc0c7..7f4d787 100644 --- a/config/test.exs +++ b/config/test.exs @@ -1,4 +1,5 @@ use Mix.Config -config :powerdnsex, url: "https://powerdns.example.com" +config :powerdnsex, url: "http://172.20.0.1:3005" config :powerdnsex, token: "example" +config :powerdnsex, timeout: 300 diff --git a/lib/powerdnsex.ex b/lib/powerdnsex.ex index fbb5003..b77389c 100644 --- a/lib/powerdnsex.ex +++ b/lib/powerdnsex.ex @@ -107,7 +107,7 @@ defmodule PowerDNSex do defp call(params) do :poolboy.transaction(@name, fn pid -> - GenServer.call(pid, params) + GenServer.call(pid, params, Config.powerdns_timeout) end) end end diff --git a/lib/powerdnsex/config.ex b/lib/powerdnsex/config.ex index 34d5889..314dbca 100644 --- a/lib/powerdnsex/config.ex +++ b/lib/powerdnsex/config.ex @@ -1,11 +1,10 @@ defmodule PowerDNSex.Config do - defstruct url: "", - token: "" + defstruct [:url, :token, timeout: 60] alias PowerDNSex.Config def data do - set_attr_value = &Map.put(&2, &1, get_key(&1)) + set_attr_value = &Map.update!(&2, &1, get_key(&1)) %Config{} |> Map.from_struct() @@ -20,6 +19,8 @@ defmodule PowerDNSex.Config do def powerdns_token, do: data().token + def powerdns_timeout, do: :timer.seconds(data().timeout) + def valid?(), do: powerdns_url() && powerdns_token() ### @@ -27,15 +28,20 @@ defmodule PowerDNSex.Config do ### defp get_key(key) do - case Application.fetch_env(:powerdnsex, key) do - {:ok, {:system, env_var_name}} -> - System.get_env(env_var_name) + fn default -> + case Application.fetch_env(:powerdnsex, key) do + {:ok, {:system, env_var_name}} -> + System.get_env(env_var_name) + + {:ok, value} -> + value - {:ok, value} -> - value + _ when default != nil -> + default - _ -> - raise "[PowerDNSex] PowerDNS #{Atom.to_string(key)} not configured." + _ -> + raise "[PowerDNSex] PowerDNS #{Atom.to_string(key)} not configured." + end end end end diff --git a/lib/powerdnsex/http_client.ex b/lib/powerdnsex/http_client.ex index 13e5023..3431795 100644 --- a/lib/powerdnsex/http_client.ex +++ b/lib/powerdnsex/http_client.ex @@ -13,4 +13,10 @@ defmodule PowerDNSex.HttpClient do custom = ["X-API-Key": Config.powerdns_token()] Keyword.merge(headers, custom) end + + def process_request_options(options) do + custom_options = [ssl: [{:versions, [:'tlsv1.1']}], recv_timeout: Config.powerdns_timeout()] + Keyword.merge(options, custom_options) + end + end @@ -4,7 +4,7 @@ defmodule PowerDNSex.Mixfile do def project do [ app: :powerdnsex, - version: "0.3.0", + version: "0.4.0", elixir: "~> 1.6", description: description(), package: package(), diff --git a/test/lib/powerdnsex/config_test.exs b/test/lib/powerdnsex/config_test.exs index eca2e03..c8649ae 100644 --- a/test/lib/powerdnsex/config_test.exs +++ b/test/lib/powerdnsex/config_test.exs @@ -1,10 +1,11 @@ defmodule PowerDNSex.ConfigTest do - use ExUnit.Case, async: true + use ExUnit.Case, async: false alias PowerDNSex.FakeConfig, as: Config setup do: Config.set_url() setup do: Config.set_token() + setup do: Config.set_timeout() setup do: Config.set_url() && Config.set_token() describe "Config.powerdns_token/0" do @@ -56,4 +57,23 @@ defmodule PowerDNSex.ConfigTest do end end end + + describe "Config.powerdns_timeout/0" do + @tag :configs + test "using application config" do + assert PowerDNSex.Config.powerdns_timeout() == :timer.seconds(Config.timeout()) + end + + @tag :configs + test "uses default timeout" do + existing = Application.get_env(:powerdnsex, :timeout) + on_exit fn -> + Application.put_env(:powerdnsex, :timeout, existing) + end + + Application.delete_env(:powerdnsex, :timeout) + + assert PowerDNSex.Config.powerdns_timeout() == :timer.seconds(60) + end + end end diff --git a/test/lib/powerdnsex/powerdnsex_test.exs b/test/lib/powerdnsex/powerdnsex_test.exs index 92e7f91..42c3dfd 100644 --- a/test/lib/powerdnsex/powerdnsex_test.exs +++ b/test/lib/powerdnsex/powerdnsex_test.exs @@ -3,8 +3,8 @@ defmodule PowerDNSexTest do use ExVCR.Mock, adapter: ExVCR.Adapter.Hackney setup do - Config.set_url() - Config.set_token() + PowerDNSex.FakeConfig.set_url() + PowerDNSex.FakeConfig.set_token() ExVCR.Config.cassette_library_dir( "test/support/cassettes", diff --git a/test/support/fake_config.exs b/test/support/fake_config.exs index c8f4f60..e05db22 100644 --- a/test/support/fake_config.exs +++ b/test/support/fake_config.exs @@ -1,10 +1,14 @@ defmodule PowerDNSex.FakeConfig do @app_config_token "S3cr37_70k3n" @app_config_url "https://my-powerdns.api" + @app_config_timeout 42 def set_url, do: Application.put_env(:powerdnsex, :url, @app_config_url) def set_token, do: Application.put_env(:powerdnsex, :token, @app_config_token) + def set_timeout, do: Application.put_env(:powerdnsex, :timeout, @app_config_timeout) + def token, do: @app_config_token def url, do: @app_config_url + def timeout, do: @app_config_timeout end |