@@ -99,6 +99,14 @@ defmodule EctoNetworkTest do
9999 assert "#{ device . ip_address } " == "127.0.0.1"
100100 end
101101
102+ test "rejects an IPv4 tuple with out-of-range values" do
103+ changeset = Device . changeset ( % Device { } , % { ip_address: { 300 , 300 , 300 , 300 } } )
104+ { :error , changeset } = TestRepo . insert ( changeset )
105+
106+ assert changeset . errors [ :ip_address ] ==
107+ { "is invalid" , [ type: EctoNetwork.INET , validation: :cast ] }
108+ end
109+
102110 test "accepts ipv6 address as tuple and saves" do
103111 ip_address = { 8193 , 3512 , 0 , 0 , 0 , 65280 , 66 , 33577 }
104112 short_ip_address = "2001:db8::ff00:42:8329"
@@ -109,6 +117,23 @@ defmodule EctoNetworkTest do
109117 assert String . downcase ( "#{ device . ip_address } " ) == String . downcase ( short_ip_address )
110118 end
111119
120+ test "rejects an IPv6 tuple with out-of-range values" do
121+ ip_address = { 65536 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }
122+ changeset = Device . changeset ( % Device { } , % { ip_address: ip_address } )
123+ { :error , changeset } = TestRepo . insert ( changeset )
124+
125+ assert changeset . errors [ :ip_address ] ==
126+ { "is invalid" , [ type: EctoNetwork.INET , validation: :cast ] }
127+ end
128+
129+ test "rejects tuples with incorrect size" do
130+ changeset = Device . changeset ( % Device { } , % { ip_address: { 1 , 2 , 3 } } )
131+ { :error , changeset } = TestRepo . insert ( changeset )
132+
133+ assert changeset . errors [ :ip_address ] ==
134+ { "is invalid" , [ type: EctoNetwork.INET , validation: :cast ] }
135+ end
136+
112137 test "accepts cidr address as binary and saves" do
113138 changeset = Device . changeset ( % Device { } , % { network: "127.0.0.0/24" } )
114139 device = TestRepo . insert! ( changeset )
0 commit comments