Skip to content

Commit 1869c77

Browse files
committed
feat: improve DNS test
1 parent eae0795 commit 1869c77

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

tests/lean/run/async_dns.lean

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,32 @@ def runDNSNoAscii : Async Unit := do
3131
unless infos.size > 0 do
3232
(throw <| IO.userError <| "No DNS results for google.com" : IO _)
3333

34+
let ipv4 := infos.filterMap (fun | .v4 e => some e | _ => none)
35+
36+
if let some head := ipv4[0]? then
37+
let parts : Vector UInt8 4 := head.octets
38+
39+
let isValid :=
40+
-- Not in 0.0.0.0/8 (current network)
41+
parts[0] != 0 &&
42+
-- Not in 10.0.0.0/8 (private)
43+
parts[0] != 10 &&
44+
-- Not in 127.0.0.0/8 (loopback)
45+
parts[0] != 127 &&
46+
-- Not in 169.254.0.0/16 (link-local)
47+
!(parts[0] == 169 && parts[1] == 254) &&
48+
-- Not in 172.16.0.0/12 (private)
49+
!(parts[0] == 172 && parts[1] >= 16 && parts[1] <= 31) &&
50+
-- Not in 192.168.0.0/16 (private)
51+
!(parts[0] == 192 && parts[1] == 168) &&
52+
-- Not in 224.0.0.0/4 (multicast)
53+
parts[0] < 224 &&
54+
-- Not 255.255.255.255 (broadcast)
55+
!(parts[0] == 255 && parts[1] == 255 && parts[2] == 255 && parts[3] == 255)
56+
57+
unless isValid do
58+
throw <| IO.userError <| s!"Invalid IP address for google.com: {parts[0]}.{parts[1]}.{parts[2]}.{parts[3]}"
59+
3460
def runReverseDNS : Async Unit := do
3561
let result ← DNS.getNameInfo (.v4 ⟨.ofParts 8 8 8 8, 53⟩)
3662
assertBEq result.service "domain"

0 commit comments

Comments
 (0)