summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRicardo Hermida Ruiz <ricardo.ruiz@locaweb.com.br>2020-04-24 15:40:22 -0300
committerRicardo Hermida Ruiz <ricardo.ruiz@locaweb.com.br>2020-04-24 15:40:22 -0300
commita6889b0128f7266e506ea4ef6e7c5a8bd8bc3d58 (patch)
treee22d03d315d79bb2cd54f645c121b737d8fdf8e0
parentbump otp (diff)
parentTimeout option (diff)
Merge remote-tracking branch 'origin/add-timeout-support' into pooling
-rw-r--r--.travis.yml22
-rw-r--r--config/config.exs2
-rw-r--r--config/test.exs3
-rw-r--r--lib/powerdnsex.ex2
-rw-r--r--lib/powerdnsex/config.ex26
-rw-r--r--lib/powerdnsex/http_client.ex6
-rw-r--r--mix.exs2
-rw-r--r--test/lib/powerdnsex/config_test.exs22
-rw-r--r--test/lib/powerdnsex/powerdnsex_test.exs4
-rw-r--r--test/support/fake_config.exs4
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
diff --git a/mix.exs b/mix.exs
index 5c08d69..a2704bb 100644
--- a/mix.exs
+++ b/mix.exs
@@ -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