1+ defmodule TestDNSResolver do
2+ @ behaviour DNSResolver
3+
4+ @ impl DNSResolver
5+ def resolve ( _domain ) , do: { :ok , [ { 192 , 0 , 78 , 24 } ] }
6+ end
7+
18defmodule SafeURLTest do
29 use ExUnit.Case
310
@@ -10,12 +17,12 @@ defmodule SafeURLTest do
1017
1118 describe "#allowed?" do
1219 test "returns true for only allowed schemes" do
13- assert SafeURL . allowed? ( "http://includesecurity.com" )
14- assert SafeURL . allowed? ( "https://includesecurity.com" )
15- refute SafeURL . allowed? ( "ftp://includesecurity.com" )
20+ assert SafeURL . allowed? ( "http://includesecurity.com" , dns_module: TestDNSResolver )
21+ assert SafeURL . allowed? ( "https://includesecurity.com" , dns_module: TestDNSResolver )
22+ refute SafeURL . allowed? ( "ftp://includesecurity.com" , dns_module: TestDNSResolver )
1623
17- assert SafeURL . allowed? ( "ftp://includesecurity.com" , schemes: ~w[ ftp] )
18- refute SafeURL . allowed? ( "http://includesecurity.com" , schemes: ~w[ ftp] )
24+ assert SafeURL . allowed? ( "ftp://includesecurity.com" , schemes: ~w[ ftp] , dns_module: TestDNSResolver )
25+ refute SafeURL . allowed? ( "http://includesecurity.com" , schemes: ~w[ ftp] , dns_module: TestDNSResolver )
1926 end
2027
2128 test "returns false for reserved ranges" do
@@ -37,7 +44,7 @@ defmodule SafeURLTest do
3744 end
3845
3946 test "blocking custom IP ranges" do
40- opts = [ blocklist: [ "5.5.0.0/16" , "100.0.0.0/24" ] ]
47+ opts = [ blocklist: [ "5.5.0.0/16" , "100.0.0.0/24" ] , dns_module: TestDNSResolver ]
4148
4249 assert SafeURL . allowed? ( "http://includesecurity.com" , opts )
4350 assert SafeURL . allowed? ( "http://3.3.3.3" , opts )
@@ -46,7 +53,7 @@ defmodule SafeURLTest do
4653 end
4754
4855 test "only allows IPs in the allowlist when present" do
49- opts = [ allowlist: [ "10.0.0.0/24" ] ]
56+ opts = [ allowlist: [ "10.0.0.0/24" ] , dns_module: TestDNSResolver ]
5057
5158 assert SafeURL . allowed? ( "http://10.0.0.1/" , opts )
5259 refute SafeURL . allowed? ( "http://72.254.45.178" , opts )
0 commit comments