118 lines
2.8 KiB
OCaml
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 ]
|
|
|