summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorTiago Freire <tcfonnet@gmail.com>2016-07-22 09:18:21 -0300
committerTiago Freire <tcfonnet@gmail.com>2016-07-25 10:51:14 -0300
commitcad149156ee46ec9feb4929dc1ed5d60a4f4f44e (patch)
treea36f8548f7b220f7846d7c4f77d03d5ab55bd390 /test
[WIP] Init.
Diffstat (limited to 'test')
-rw-r--r--test/lib/powerdnsx/config_test.exs55
-rw-r--r--test/lib/powerdnsx/managers/zones_manager_test.exs80
-rw-r--r--test/lib/powerdnsx/models/zone_test.exs27
-rw-r--r--test/support/cassettes/zones_manager/create/valid_parameters.json1
-rw-r--r--test/support/cassettes/zones_manager/show/valid_record.json27
-rw-r--r--test/support/fake_config.exs8
-rw-r--r--test/test_helper.exs9
7 files changed, 207 insertions, 0 deletions
diff --git a/test/lib/powerdnsx/config_test.exs b/test/lib/powerdnsx/config_test.exs
new file mode 100644
index 0000000..4a9a732
--- /dev/null
+++ b/test/lib/powerdnsx/config_test.exs
@@ -0,0 +1,55 @@
+defmodule PowerDNSx.ConfigTest do
+
+ use ExUnit.Case, async: true
+
+ alias PowerDNSx.FakeConfig, as: Config
+
+ setup with_valid_url, do: Config.set_url
+ setup with_valid_token, do: Config.set_token
+ setup with_valid_token_and_url, do: Config.set_url && Config.set_token
+
+ describe "Config.powerdns_token/0" do
+ test "Using Env vars", with_valid_url do
+ env_token = "3nv_S3cr37_T0k3n"
+ System.put_env("POWERDNS_TOKEN", env_token)
+ Application.put_env(:powerdns, :token, {:system, "POWERDNS_TOKEN"})
+ assert PowerDNSx.Config.powerdns_token == env_token
+ end
+
+ test "using application config", with_valid_token_and_url do
+ assert PowerDNSx.Config.powerdns_token == "4pp_S3cr37_T0k3n"
+ end
+
+ test "given none token config", with_valid_url do
+ Application.delete_env(:powerdns, :token)
+ expected_error = "[PowerDNSx] PowerDNS token not configured."
+
+ assert_raise RuntimeError, expected_error, fn ->
+ PowerDNSx.Config.powerdns_token
+ end
+ end
+ end
+
+ describe "Config.powerdns_url/0" do
+ test "Using Env vars", with_valid_token do
+ env_url = "https://env-powerdns.test"
+ System.put_env("POWERDNS_URL", env_url)
+ Application.put_env(:powerdns, :url, {:system, "POWERDNS_URL"})
+ assert PowerDNSx.Config.powerdns_url == env_url
+ end
+
+ test "using application config", with_valid_token_and_url do
+ assert PowerDNSx.Config.powerdns_url == "https://app-config-powerdns.test"
+ end
+
+ test "given none url config", with_valid_token do
+ Application.delete_env(:powerdns, :url)
+ expected_error = "[PowerDNSx] PowerDNS url not configured."
+ assert_raise RuntimeError, expected_error, fn ->
+ PowerDNSx.Config.powerdns_url
+ end
+ end
+ end
+
+
+end
diff --git a/test/lib/powerdnsx/managers/zones_manager_test.exs b/test/lib/powerdnsx/managers/zones_manager_test.exs
new file mode 100644
index 0000000..cc793d0
--- /dev/null
+++ b/test/lib/powerdnsx/managers/zones_manager_test.exs
@@ -0,0 +1,80 @@
+defmodule PowerDNSx.ZonesManagerTest do
+
+ use ExUnit.Case, async: true
+ use ExVCR.Mock, adapter: ExVCR.Adapter.Hackney
+
+ alias PowerDNSx.ZonesManager
+ alias PowerDNSx.Models.Zone
+ alias PowerDNSx.FakeConfig, as: Config
+
+ @valid_zone_loca %Zone{name: "devtiagofreire.art.br"}
+
+ @valid_zone_test %Zone{name: "my-domain.tst",
+ serial: 2016060601,
+ comments: ["Test comment"] }
+
+ @expected_records [
+ %{"content" => "ns2.my-powerdns.api", "disabled" => false,
+ "name" => "my-domain.tst", "ttl" => 3600, "type" => "NS"},
+ %{"content" => "ns1.my-powerdns.api", "disabled" => false,
+ "name" => "my-domain.tst", "ttl" => 3600, "type" => "NS"},
+ %{"content" => "a.misconfigured.powerdns.server " <>
+ "hostmaster.my-domain.tst " <>
+ "2016060601 10800 3600 604800 3600",
+ "disabled" => false, "name" => "my-domain.tst", "ttl" => 3600,
+ "type" => "SOA"}
+ ]
+
+ @expected_zone %Zone{name: "my-domain.tst",
+ id: "my-domain.tst.",
+ account: "",
+ serial: 2016060601,
+ url: "/servers/localhost/zones/my-domain.tst.",
+ records: @expected_records}
+
+ setup_all do
+ #Config.set_url
+ #Config.set_token
+
+ pwdns_url_loca = "http://cpro36999.systemintegration.locaweb.com.br"
+ pwdns_url_test = "http://my-powerdns.api"
+ Application.put_env(:powerdns, :url, pwdns_url_test)
+
+ pwdns_token_loca = "Locaweb2016"
+ pwdns_token_test = "S3cr3t-T0k3n"
+ Application.put_env(:powerdns, :token, pwdns_token_test)
+
+ ExVCR.Config.cassette_library_dir("test/support/cassettes",
+ "test/support/custom_cassettes")
+ HTTPoison.start
+ end
+
+ describe "ZoneManager.create/2" do
+ @tag :zones_manager_create
+ test "type of return given correct parameters" do
+ use_cassette "zones_manager/create/valid_parameters" do
+ zone = ZonesManager.create(@valid_zone_test)
+ assert zone.__struct__ == PowerDNSx.Models.Zone
+ end
+ end
+ end
+
+ describe "ZonesManager.show/2" do
+ @tag :zones_manager_show
+ test "type of return given a correct zone name" do
+ use_cassette "zones_manager/show/valid_record" do
+ zone = ZonesManager.show(@valid_zone_test.name)
+ assert zone.__struct__ == PowerDNSx.Models.Zone
+ end
+ end
+
+ @tag :zones_manager_show
+ test "values in return given a correct zone name" do
+ use_cassette "zones_manager/show/valid_record" do
+ zone = ZonesManager.show(@valid_zone_test.name)
+ assert zone == @expected_zone
+ end
+ end
+ end
+
+end
diff --git a/test/lib/powerdnsx/models/zone_test.exs b/test/lib/powerdnsx/models/zone_test.exs
new file mode 100644
index 0000000..8a61602
--- /dev/null
+++ b/test/lib/powerdnsx/models/zone_test.exs
@@ -0,0 +1,27 @@
+# defmodule PowerDNSx.Models.ZoneTest do
+#
+# use ExUnit.Case, async: true
+#
+# alias PowerDNSx.Models.Zone
+#
+# describe "Zone.build/1" do
+# test "build zone with all attributes" do
+# ns_servers = ["ns1.powerdnsx.tst", "ns2.powerdnsx.tst"]
+#
+# zone_params = %{id: nil,
+# name: "test.tst",
+# nameservers: ns_servers,
+# account: "pdnaccount",
+# kind: "Native",
+# masters: [],
+# records: [],
+# serial: nil,
+# comments: [],
+# soa_edit: nil,
+# soa_edit_api: nil}
+#
+# zone_built = Zone.build(zone_params)
+# assert zone_params === Map.from_struct(zone_built)
+# end
+# end
+# end
diff --git a/test/support/cassettes/zones_manager/create/valid_parameters.json b/test/support/cassettes/zones_manager/create/valid_parameters.json
new file mode 100644
index 0000000..0637a08
--- /dev/null
+++ b/test/support/cassettes/zones_manager/create/valid_parameters.json
@@ -0,0 +1 @@
+[] \ No newline at end of file
diff --git a/test/support/cassettes/zones_manager/show/valid_record.json b/test/support/cassettes/zones_manager/show/valid_record.json
new file mode 100644
index 0000000..75d348d
--- /dev/null
+++ b/test/support/cassettes/zones_manager/show/valid_record.json
@@ -0,0 +1,27 @@
+[
+ {
+ "request": {
+ "body": "",
+ "headers": {
+ "X-API-Key": "S3cr3t-T0k3n"
+ },
+ "method": "get",
+ "options": [],
+ "request_body": "",
+ "url": "http://my-powerdns.api/servers/localhost/zones/my-domain.tst"
+ },
+ "response": {
+ "body": "{\"id\":\"my-domain.tst.\",\"url\":\"/servers/localhost/zones/my-domain.tst.\",\"name\":\"my-domain.tst\",\"kind\":\"Native\",\"dnssec\":false,\"account\":\"\",\"masters\":[],\"serial\":2016060601,\"notified_serial\":0,\"last_check\":0,\"soa_edit_api\":\"\",\"soa_edit\":\"\",\"records\":[{\"name\":\"my-domain.tst\",\"type\":\"NS\",\"ttl\":3600,\"disabled\":false,\"content\":\"ns2.my-powerdns.api\"},{\"name\":\"my-domain.tst\",\"type\":\"NS\",\"ttl\":3600,\"disabled\":false,\"content\":\"ns1.my-powerdns.api\"},{\"name\":\"my-domain.tst\",\"type\":\"SOA\",\"ttl\":3600,\"disabled\":false,\"content\":\"a.misconfigured.powerdns.server hostmaster.my-domain.tst 2016060601 10800 3600 604800 3600\"}],\"comments\":[]}",
+ "headers": {
+ "Transfer-Encoding": "chunked",
+ "Access-Control-Allow-Origin": "*",
+ "Connection": "close",
+ "Content-Length": "717",
+ "Content-Type": "application/json",
+ "Server": "PowerDNS/3.4.8"
+ },
+ "status_code": 200,
+ "type": "ok"
+ }
+ }
+]
diff --git a/test/support/fake_config.exs b/test/support/fake_config.exs
new file mode 100644
index 0000000..e624d8e
--- /dev/null
+++ b/test/support/fake_config.exs
@@ -0,0 +1,8 @@
+defmodule PowerDNSx.FakeConfig do
+ @app_config_token "4pp_S3cr37_T0k3n"
+ @app_config_url "https://app-config-powerdns.test"
+
+
+ def set_url, do: Application.put_env(:powerdns, :url, @app_config_url)
+ def set_token, do: Application.put_env(:powerdns, :token, @app_config_token)
+end
diff --git a/test/test_helper.exs b/test/test_helper.exs
new file mode 100644
index 0000000..2fc6291
--- /dev/null
+++ b/test/test_helper.exs
@@ -0,0 +1,9 @@
+ExUnit.start()
+
+{:ok, files} = File.ls("./test/support/")
+
+Enum.each files, fn(file) ->
+ if String.match?(file, ~r/(.*).exs$/) do
+ Code.require_file "support/#{file}", __DIR__
+ end
+end