mte/unikernel/duniverse/ocaml-dns/test/resolvconf.ml
2025-11-11 02:07:51 +01:00

118 lines
2.8 KiB
OCaml

let ok =
let module M = struct
type t = [ `Nameserver of Ipaddr.t ] list
let pp =
let pp_one ppf = function
| `Nameserver ip -> Fmt.pf ppf "nameserver %a" Ipaddr.pp ip
in
Fmt.(list ~sep:(any "\n") pp_one)
let equal a b = compare a b = 0 (* TODO polymorphic equality *)
end in
(module M: Alcotest.TESTABLE with type t = M.t)
let err =
let module M = struct
type t = [ `Msg of string ]
let pp ppf = function
| `Msg m -> Fmt.string ppf m
let equal _ _ = true
end in
(module M: Alcotest.TESTABLE with type t = M.t)
let test_one test_name (data, expected) () =
Alcotest.(check (result ok err)
("resolvconf " ^ test_name) expected (Dns_resolvconf.parse data))
let v4_ns = [ "8.8.8.8" ; "8.8.4.4" ]
and v6_ns = [ "2001:4860:4860::8888" ; "2001:4860:4860::8844" ]
let ok_result ns =
Ok (List.map (fun s -> `Nameserver (Ipaddr.of_string_exn s)) ns)
let linux =
{|
# Not all of these are supported by TRust-DNS
# They are testing that they don't break parsing
options ndots:8 timeout:8 attempts:8
domain example.com
search example.com sub.example.com
nameserver 2001:4860:4860::8888
nameserver 2001:4860:4860::8844
nameserver 8.8.8.8
nameserver 8.8.4.4
# some options not supported by TRust-DNS
options rotate
options inet6 no-tld-query
# A basic option not supported
sortlist 130.155.160.0/255.255.240.0 130.155.0.0
|}
let macos =
{|
#
# Mac OS X Notice
#
# This file is not used by the host name and address resolution
# or the DNS query routing mechanisms used by most processes on
# this Mac OS X system.
#
# This file is automatically generated.
#
options ndots:8 timeout:8 attempts:8
domain example.com.
search example.com. sub.example.com.
nameserver 2001:4860:4860::8888
nameserver 2001:4860:4860::8844
nameserver 8.8.8.8
nameserver 8.8.4.4
|}
let openbsd =
{|
# Generated by em0 dhclient
nameserver 8.8.8.8
nameserver 8.8.4.4
lookup file bind
|}
let simple =
{|
nameserver 8.8.8.8
nameserver 8.8.4.4
|}
let nixos =
{|
nameserver fe80::c2d7:aaff:fe96:8d82%wlp3s0
|}
let nixos2 =
{|
nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver fe80::c2d7:aaff:fe96:8d82%wlp3s0
nameserver 8.8.8.8
nameserver 8.8.4.4
|}
let local_ns = [ "fe80::c2d7:aaff:fe96:8d82" ]
let tests = [
"linux", `Quick, test_one "linux" (linux, ok_result (v6_ns @ v4_ns)) ;
"macos", `Quick, test_one "macos" (macos, ok_result (v6_ns @ v4_ns)) ;
"openbsd", `Quick, test_one "openbsd" (openbsd, ok_result v4_ns) ;
"simple", `Quick, test_one "simple" (simple, ok_result v4_ns) ;
"nixos", `Quick, test_one "nixos (with zone index)"
(nixos, ok_result local_ns) ;
"nixos 2", `Quick, test_one "nixos 2 (with zone index)"
(nixos2, ok_result (v4_ns @ local_ns @ v4_ns)) ;
]
let () = Alcotest.run "DNS resolvconf tests" [ "resolvconf tests", tests ]