From 416539a6acb4391b52f80d91b96fdab07658953d Mon Sep 17 00:00:00 2001 From: Tiago Freire Date: Mon, 22 Aug 2016 21:26:56 -0300 Subject: WIP - Add elixir GenServer --- test/lib/powerdnsex/config_test.exs | 6 ++-- .../powerdnsex/managers/records_manager_test.exs | 39 ++++++++++++++-------- .../lib/powerdnsex/managers/zones_manager_test.exs | 16 ++++----- .../cassettes/records_manager/create/success.json | 6 ++-- .../cassettes/records_manager/delete/success.json | 6 ++-- .../cassettes/records_manager/show/success.json | 31 +++++++++++++++++ .../records_manager/update/invalid_record.json | 6 ++-- .../records_manager/update/not_found.json | 6 ++-- .../cassettes/records_manager/update/success.json | 6 ++-- .../create/invalid_not_canonical.json | 4 +-- .../cassettes/zones_manager/create/success.json | 6 ++-- .../cassettes/zones_manager/delete/not_found.json | 4 +-- .../cassettes/zones_manager/delete/success.json | 4 +-- .../cassettes/zones_manager/show/not_found.json | 6 ++-- .../cassettes/zones_manager/show/success.json | 6 ++-- 15 files changed, 98 insertions(+), 54 deletions(-) create mode 100644 test/support/cassettes/records_manager/show/success.json (limited to 'test') diff --git a/test/lib/powerdnsex/config_test.exs b/test/lib/powerdnsex/config_test.exs index adb212a..c0a5150 100644 --- a/test/lib/powerdnsex/config_test.exs +++ b/test/lib/powerdnsex/config_test.exs @@ -11,7 +11,7 @@ defmodule PowerDNSex.ConfigTest do describe "Config.powerdns_token/0" do @tag :configs test "Using Env vars", with_valid_url do - env_token = "3nv_S3cr37_T0k3n" + env_token = "S3cr37_70k3n" System.put_env("POWERDNS_TOKEN", env_token) Application.put_env(:powerdns, :token, {:system, "POWERDNS_TOKEN"}) assert PowerDNSex.Config.powerdns_token == env_token @@ -36,7 +36,7 @@ defmodule PowerDNSex.ConfigTest do describe "Config.powerdns_url/0" do @tag :configs test "Using Env vars", with_valid_token do - env_url = "https://env-powerdns.test" + env_url = "https://env-powerdns.test/" System.put_env("POWERDNS_URL", env_url) Application.put_env(:powerdns, :url, {:system, "POWERDNS_URL"}) assert PowerDNSex.Config.powerdns_url == env_url @@ -44,7 +44,7 @@ defmodule PowerDNSex.ConfigTest do @tag :configs test "using application config", with_valid_token_and_url do - assert PowerDNSex.Config.powerdns_url == Config.url + assert PowerDNSex.Config.powerdns_url == Config.url <> "/" end @tag :configs diff --git a/test/lib/powerdnsex/managers/records_manager_test.exs b/test/lib/powerdnsex/managers/records_manager_test.exs index aa054c2..f01f757 100644 --- a/test/lib/powerdnsex/managers/records_manager_test.exs +++ b/test/lib/powerdnsex/managers/records_manager_test.exs @@ -1,10 +1,11 @@ -defmodule PowerDNSex.RecordsManagerTest do +defmodule PowerDNSex.Managers.RecordsManagerTest do use ExUnit.Case, async: false use ExVCR.Mock, adapter: ExVCR.Adapter.Hackney - alias PowerDNSex.Models.{Zone, ResourceRecordSet, Record} - alias PowerDNSex.RecordsManager + alias PowerDNSex.Models.{Zone, Record} + alias PowerDNSex.Managers.RecordsManager + alias PowerDNSex.FakeConfig, as: Config @valid_zone %Zone{name: "my-domain.art.", url: "api/v1/servers/localhost/zones/my-domain.art."} @@ -43,14 +44,8 @@ defmodule PowerDNSex.RecordsManagerTest do } setup do - # Config.set_url - # Config.set_token - - pwdns_url_loca = "http://cpro36999.systemintegration.locaweb.com.br/" - Application.put_env(:powerdns, :url, pwdns_url_loca) - - pwdns_token_loca = "Locaweb2016" - Application.put_env(:powerdns, :token, pwdns_token_loca) + Config.set_url + Config.set_token ExVCR.Config.cassette_library_dir("test/support/cassettes", "test/support/custom_cassettes") @@ -58,6 +53,7 @@ defmodule PowerDNSex.RecordsManagerTest do end describe "create/2" do + @tag :records_manager_create test "exception given empty zones url" do raise_msg = "[Records Manager] Zone URL attribute is empty!" assert_raise RuntimeError, raise_msg, fn() -> @@ -65,13 +61,30 @@ defmodule PowerDNSex.RecordsManagerTest do end end - test "content and value of the return given correct params" do + @tag :records_manager_create + test "the return given correct params" do use_cassette "records_manager/create/success" do assert RecordsManager.create(@valid_zone, @new_record) == :ok end end end + describe "show/2" do + @tag :records_manager_show + test "content given attrs of a valid record" do + use_cassette "records_manager/show/success" do + zone_name = @valid_zone.name + attrs = %{name: "new-record.#{zone_name}", + type: "A", + content: "127.0.0.1"} + + record = RecordsManager.show(zone_name, attrs) + assert record.name == attrs.name + assert record.type == attrs.type + end + end + end + describe "update/2" do @tag :records_manager_update test "exception given empty zones url" do @@ -109,7 +122,7 @@ defmodule PowerDNSex.RecordsManagerTest do end describe "delete/2" do - @tag :records_manager_update + @tag :records_manager_delete test "the return given a correct record" do use_cassette "records_manager/delete/success" do assert RecordsManager.delete(@valid_zone, @record_to_delete) == :ok diff --git a/test/lib/powerdnsex/managers/zones_manager_test.exs b/test/lib/powerdnsex/managers/zones_manager_test.exs index b3aa5ef..c0e874d 100644 --- a/test/lib/powerdnsex/managers/zones_manager_test.exs +++ b/test/lib/powerdnsex/managers/zones_manager_test.exs @@ -1,9 +1,9 @@ -defmodule PowerDNSex.ZonesManagerTest do +defmodule PowerDNSex.Managers.ZonesManagerTest do use ExUnit.Case, async: false use ExVCR.Mock, adapter: ExVCR.Adapter.Hackney - alias PowerDNSex.ZonesManager + alias PowerDNSex.Managers.ZonesManager alias PowerDNSex.Models.{Zone, Record} alias PowerDNSex.Models.ResourceRecordSet, as: RRSet alias PowerDNSex.FakeConfig, as: Config @@ -37,14 +37,14 @@ defmodule PowerDNSex.ZonesManagerTest do rrsets: @expected_rrset} setup do - # Config.set_url - # Config.set_token + Config.set_url + Config.set_token - pwdns_url_loca = "http://cpro36999.systemintegration.locaweb.com.br/" - Application.put_env(:powerdns, :url, pwdns_url_loca) + # pwdns_url_loca = "http://cpro36999.systemintegration.locaweb.com.br/" + # Application.put_env(:powerdns, :url, pwdns_url_loca) - pwdns_token_loca = "Locaweb2016" - Application.put_env(:powerdns, :token, pwdns_token_loca) + # pwdns_token_loca = "Locaweb2016" + # Application.put_env(:powerdns, :token, pwdns_token_loca) ExVCR.Config.cassette_library_dir("test/support/cassettes", "test/support/custom_cassettes") diff --git a/test/support/cassettes/records_manager/create/success.json b/test/support/cassettes/records_manager/create/success.json index 73bdc22..10dc5ce 100644 --- a/test/support/cassettes/records_manager/create/success.json +++ b/test/support/cassettes/records_manager/create/success.json @@ -3,12 +3,12 @@ "request": { "body": "{\"rrsets\":[{\"type\":\"A\",\"ttl\":86400,\"records\":[{\"disabled\":false,\"content\":\"127.0.0.1\"},{\"disabled\":true,\"content\":\"192.168.0.1\"}],\"name\":\"new-record.my-domain.art.\",\"changetype\":\"REPLACE\"}]}", "headers": { - "X-API-Key": "Locaweb2016" + "X-API-Key": "S3cr37_70k3n" }, "method": "patch", "options": [], "request_body": "", - "url": "http://cpro36999.systemintegration.locaweb.com.br/api/v1/servers/localhost/zones/my-domain.art." + "url": "https://my-powerdns.api/api/v1/servers/localhost/zones/my-domain.art." }, "response": { "body": "", @@ -27,4 +27,4 @@ "type": "ok" } } -] \ No newline at end of file +] diff --git a/test/support/cassettes/records_manager/delete/success.json b/test/support/cassettes/records_manager/delete/success.json index fccb1ad..2eba075 100644 --- a/test/support/cassettes/records_manager/delete/success.json +++ b/test/support/cassettes/records_manager/delete/success.json @@ -3,12 +3,12 @@ "request": { "body": "{\"rrsets\":[{\"type\":\"A\",\"ttl\":null,\"records\":[],\"name\":\"record-to-delete.my-domain.art.\",\"changetype\":\"DELETE\"}]}", "headers": { - "X-API-Key": "Locaweb2016" + "X-API-Key": "S3cr37_70k3n" }, "method": "patch", "options": [], "request_body": "", - "url": "http://cpro36999.systemintegration.locaweb.com.br/api/v1/servers/localhost/zones/my-domain.art." + "url": "https://my-powerdns.api/api/v1/servers/localhost/zones/my-domain.art." }, "response": { "body": "", @@ -27,4 +27,4 @@ "type": "ok" } } -] \ No newline at end of file +] diff --git a/test/support/cassettes/records_manager/show/success.json b/test/support/cassettes/records_manager/show/success.json new file mode 100644 index 0000000..542ed79 --- /dev/null +++ b/test/support/cassettes/records_manager/show/success.json @@ -0,0 +1,31 @@ +[ + { + "request": { + "body": "", + "headers": { + "X-API-Key": "S3cr37_70k3n" + }, + "method": "get", + "options": [], + "request_body": "", + "url": "https://my-powerdns.api/api/v1/servers/localhost/zones/my-domain.art." + }, + "response": { + "body": "{\"account\": \"\", \"dnssec\": false, \"id\": \"my-domain.art.\", \"kind\": \"Native\", \"last_check\": 0, \"masters\": [], \"name\": \"my-domain.art.\", \"notified_serial\": 0, \"rrsets\": [{\"comments\": [], \"name\": \"new-record.my-domain.art.\", \"records\": [{\"content\": \"192.168.0.1\", \"disabled\": true}, {\"content\": \"127.0.0.1\", \"disabled\": false}], \"ttl\": 86400, \"type\": \"A\"}, {\"comments\": [], \"name\": \"updated-record.my-domain.art.\", \"records\": [{\"content\": \"127.0.0.1\", \"disabled\": true}], \"ttl\": 86800, \"type\": \"A\"}, {\"comments\": [], \"name\": \"my-domain.art.\", \"records\": [{\"content\": \"a.misconfigured.powerdns.server. hostmaster.my-domain.art. 2016060601 10800 3600 604800 3600\", \"disabled\": false}], \"ttl\": 3600, \"type\": \"SOA\"}], \"serial\": 2016060601, \"soa_edit\": \"\", \"soa_edit_api\": \"\", \"url\": \"api/v1/servers/localhost/zones/my-domain.art.\"}", + "headers": { + "Access-Control-Allow-Origin": "*", + "Connection": "close", + "Content-Length": "822", + "Content-Security-Policy": "default-src 'self'; style-src 'self' 'unsafe-inline'", + "Content-Type": "application/json", + "Server": "PowerDNS/4.0.1", + "X-Content-Type-Options": "nosniff", + "X-Frame-Options": "deny", + "X-Permitted-Cross-Domain-Policies": "none", + "X-Xss-Protection": "1; mode=block" + }, + "status_code": 200, + "type": "ok" + } + } +] diff --git a/test/support/cassettes/records_manager/update/invalid_record.json b/test/support/cassettes/records_manager/update/invalid_record.json index df6d73a..aee43cd 100644 --- a/test/support/cassettes/records_manager/update/invalid_record.json +++ b/test/support/cassettes/records_manager/update/invalid_record.json @@ -3,12 +3,12 @@ "request": { "body": "{\"rrsets\":[{\"type\":\"NS\",\"ttl\":86800,\"records\":[{\"disabled\":true,\"content\":\"127.0.0.1\"}],\"name\":\"updated-record.my-domain.art.\",\"changetype\":\"REPLACE\"}]}", "headers": { - "X-API-Key": "Locaweb2016" + "X-API-Key": "S3cr37_70k3n" }, "method": "patch", "options": [], "request_body": "", - "url": "http://cpro36999.systemintegration.locaweb.com.br/api/v1/servers/localhost/zones/my-domain.art." + "url": "https://my-powerdns.api/api/v1/servers/localhost/zones/my-domain.art." }, "response": { "body": "{\"error\": \"Record updated-record.my-domain.art./NS '127.0.0.1': Not in expected format (parsed as '127.0.0.1.')\"}", @@ -28,4 +28,4 @@ "type": "ok" } } -] \ No newline at end of file +] diff --git a/test/support/cassettes/records_manager/update/not_found.json b/test/support/cassettes/records_manager/update/not_found.json index 38edad2..31a82cc 100644 --- a/test/support/cassettes/records_manager/update/not_found.json +++ b/test/support/cassettes/records_manager/update/not_found.json @@ -3,12 +3,12 @@ "request": { "body": "{\"rrsets\":[{\"type\":\"A\",\"ttl\":86800,\"records\":[{\"disabled\":true,\"content\":\"127.0.0.1\"}],\"name\":\"updated-record.my-domain.art.\",\"changetype\":\"REPLACE\"}]}", "headers": { - "X-API-Key": "Locaweb2016" + "X-API-Key": "S3cr37_70k3n" }, "method": "patch", "options": [], "request_body": "", - "url": "http://cpro36999.systemintegration.locaweb.com.br/api/v1/servers/localhost/zones/not-canonical-domain.tst" + "url": "https://my-powerdns.api/api/v1/servers/localhost/zones/not-canonical-domain.tst" }, "response": { "body": "{\"error\": \"Could not find domain 'not-canonical-domain.tst.'\"}", @@ -28,4 +28,4 @@ "type": "ok" } } -] \ No newline at end of file +] diff --git a/test/support/cassettes/records_manager/update/success.json b/test/support/cassettes/records_manager/update/success.json index d6a5112..21263f6 100644 --- a/test/support/cassettes/records_manager/update/success.json +++ b/test/support/cassettes/records_manager/update/success.json @@ -3,12 +3,12 @@ "request": { "body": "{\"rrsets\":[{\"type\":\"A\",\"ttl\":86800,\"records\":[{\"disabled\":true,\"content\":\"127.0.0.1\"}],\"name\":\"updated-record.my-domain.art.\",\"changetype\":\"REPLACE\"}]}", "headers": { - "X-API-Key": "Locaweb2016" + "X-API-Key": "S3cr37_70k3n" }, "method": "patch", "options": [], "request_body": "", - "url": "http://cpro36999.systemintegration.locaweb.com.br/api/v1/servers/localhost/zones/my-domain.art." + "url": "https://my-powerdns.api/api/v1/servers/localhost/zones/my-domain.art." }, "response": { "body": "", @@ -27,4 +27,4 @@ "type": "ok" } } -] \ No newline at end of file +] diff --git a/test/support/cassettes/zones_manager/create/invalid_not_canonical.json b/test/support/cassettes/zones_manager/create/invalid_not_canonical.json index 353115d..7816f3e 100644 --- a/test/support/cassettes/zones_manager/create/invalid_not_canonical.json +++ b/test/support/cassettes/zones_manager/create/invalid_not_canonical.json @@ -3,12 +3,12 @@ "request": { "body": "{\"soa_edit_api\":\"\",\"soa_edit\":\"\",\"serial\":2016060601,\"records\":[],\"nameservers\":[],\"name\":\"not-canonical-domain.tst\",\"masters\":[],\"kind\":\"Native\",\"account\":null}", "headers": { - "X-API-Key": "Locaweb2016" + "X-API-Key": "S3cr37_70k3n" }, "method": "post", "options": [], "request_body": "", - "url": "http://cpro36999.systemintegration.locaweb.com.br/api/v1/servers/localhost/zones" + "url": "https://my-powerdns.api/api/v1/servers/localhost/zones" }, "response": { "body": "{\"error\": \"DNS Name 'not-canonical-domain.tst' is not canonical\"}", diff --git a/test/support/cassettes/zones_manager/create/success.json b/test/support/cassettes/zones_manager/create/success.json index e7880c8..76883af 100644 --- a/test/support/cassettes/zones_manager/create/success.json +++ b/test/support/cassettes/zones_manager/create/success.json @@ -3,12 +3,12 @@ "request": { "body": "{\"soa_edit_api\":\"\",\"soa_edit\":\"\",\"serial\":2016060601,\"records\":[],\"nameservers\":[],\"name\":\"my-domain.art.\",\"masters\":[],\"kind\":\"Native\",\"account\":null}", "headers": { - "X-API-Key": "Locaweb2016" + "X-API-Key": "S3cr37_70k3n" }, "method": "post", "options": [], "request_body": "", - "url": "http://cpro36999.systemintegration.locaweb.com.br/api/v1/servers/localhost/zones" + "url": "https://my-powerdns.api/api/v1/servers/localhost/zones" }, "response": { "body": "{\"account\": \"\", \"dnssec\": false, \"id\": \"my-domain.art.\", \"kind\": \"Native\", \"last_check\": 0, \"masters\": [], \"name\": \"my-domain.art.\", \"notified_serial\": 0, \"rrsets\": [{\"comments\": [], \"name\": \"my-domain.art.\", \"records\": [{\"content\": \"a.misconfigured.powerdns.server. hostmaster.my-domain.art. 2016060601 10800 3600 604800 3600\", \"disabled\": false}], \"ttl\": 3600, \"type\": \"SOA\"}], \"serial\": 2016060601, \"soa_edit\": \"\", \"soa_edit_api\": \"\", \"url\": \"api/v1/servers/localhost/zones/my-domain.art.\"}", @@ -28,4 +28,4 @@ "type": "ok" } } -] \ No newline at end of file +] diff --git a/test/support/cassettes/zones_manager/delete/not_found.json b/test/support/cassettes/zones_manager/delete/not_found.json index 0637299..8239a23 100644 --- a/test/support/cassettes/zones_manager/delete/not_found.json +++ b/test/support/cassettes/zones_manager/delete/not_found.json @@ -3,12 +3,12 @@ "request": { "body": "", "headers": { - "X-API-Key": "Locaweb2016" + "X-API-Key": "S3cr37_70k3n" }, "method": "delete", "options": [], "request_body": "", - "url": "http://cpro36999.systemintegration.locaweb.com.br/api/v1/servers/localhost/zones/it-will-never-exist.on.the.art." + "url": "https://my-powerdns.api/api/v1/servers/localhost/zones/it-will-never-exist.on.the.art." }, "response": { "body": "{\"error\": \"Could not find domain 'it-will-never-exist.on.the.art.'\"}", diff --git a/test/support/cassettes/zones_manager/delete/success.json b/test/support/cassettes/zones_manager/delete/success.json index 2f3fe90..a898ff2 100644 --- a/test/support/cassettes/zones_manager/delete/success.json +++ b/test/support/cassettes/zones_manager/delete/success.json @@ -3,12 +3,12 @@ "request": { "body": "", "headers": { - "X-API-Key": "Locaweb2016" + "X-API-Key": "S3cr37_70k3n" }, "method": "delete", "options": [], "request_body": "", - "url": "http://cpro36999.systemintegration.locaweb.com.br/api/v1/servers/localhost/zones/my-domain.art." + "url": "https://my-powerdns.api/api/v1/servers/localhost/zones/my-domain.art." }, "response": { "body": "", diff --git a/test/support/cassettes/zones_manager/show/not_found.json b/test/support/cassettes/zones_manager/show/not_found.json index a989d91..bd54638 100644 --- a/test/support/cassettes/zones_manager/show/not_found.json +++ b/test/support/cassettes/zones_manager/show/not_found.json @@ -3,12 +3,12 @@ "request": { "body": "", "headers": { - "X-API-Key": "Locaweb2016" + "X-API-Key": "S3cr37_70k3n" }, "method": "get", "options": [], "request_body": "", - "url": "http://cpro36999.systemintegration.locaweb.com.br/api/v1/servers/localhost/zones/it-will-never-exist.on.the.art." + "url": "https://my-powerdns.api/api/v1/servers/localhost/zones/it-will-never-exist.on.the.art." }, "response": { "body": "{\"error\": \"Could not find domain 'it-will-never-exist.on.the.art.'\"}", @@ -28,4 +28,4 @@ "type": "ok" } } -] \ No newline at end of file +] diff --git a/test/support/cassettes/zones_manager/show/success.json b/test/support/cassettes/zones_manager/show/success.json index 8f9a935..91d5316 100644 --- a/test/support/cassettes/zones_manager/show/success.json +++ b/test/support/cassettes/zones_manager/show/success.json @@ -3,12 +3,12 @@ "request": { "body": "", "headers": { - "X-API-Key": "Locaweb2016" + "X-API-Key": "S3cr37_70k3n" }, "method": "get", "options": [], "request_body": "", - "url": "http://cpro36999.systemintegration.locaweb.com.br/api/v1/servers/localhost/zones/my-domain.art." + "url": "https://my-powerdns.api/api/v1/servers/localhost/zones/my-domain.art." }, "response": { "body": "{\"account\": \"\", \"dnssec\": false, \"id\": \"my-domain.art.\", \"kind\": \"Native\", \"last_check\": 0, \"masters\": [], \"name\": \"my-domain.art.\", \"notified_serial\": 0, \"rrsets\": [{\"comments\": [], \"name\": \"my-domain.art.\", \"records\": [{\"content\": \"a.misconfigured.powerdns.server. hostmaster.my-domain.art. 2016060601 10800 3600 604800 3600\", \"disabled\": false}], \"ttl\": 3600, \"type\": \"SOA\"}], \"serial\": 2016060601, \"soa_edit\": \"\", \"soa_edit_api\": \"\", \"url\": \"api/v1/servers/localhost/zones/my-domain.art.\"}", @@ -28,4 +28,4 @@ "type": "ok" } } -] \ No newline at end of file +] -- cgit v1.2.3