From cad149156ee46ec9feb4929dc1ed5d60a4f4f44e Mon Sep 17 00:00:00 2001 From: Tiago Freire Date: Fri, 22 Jul 2016 09:18:21 -0300 Subject: [WIP] Init. --- test/lib/powerdnsx/config_test.exs | 55 +++++++++++++++ test/lib/powerdnsx/managers/zones_manager_test.exs | 80 ++++++++++++++++++++++ test/lib/powerdnsx/models/zone_test.exs | 27 ++++++++ .../zones_manager/create/valid_parameters.json | 1 + .../cassettes/zones_manager/show/valid_record.json | 27 ++++++++ test/support/fake_config.exs | 8 +++ test/test_helper.exs | 9 +++ 7 files changed, 207 insertions(+) create mode 100644 test/lib/powerdnsx/config_test.exs create mode 100644 test/lib/powerdnsx/managers/zones_manager_test.exs create mode 100644 test/lib/powerdnsx/models/zone_test.exs create mode 100644 test/support/cassettes/zones_manager/create/valid_parameters.json create mode 100644 test/support/cassettes/zones_manager/show/valid_record.json create mode 100644 test/support/fake_config.exs create mode 100644 test/test_helper.exs (limited to 'test') 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 -- cgit v1.2.3