summaryrefslogtreecommitdiff
path: root/sid_test.ml
diff options
context:
space:
mode:
Diffstat (limited to 'sid_test.ml')
-rw-r--r--sid_test.ml117
1 files changed, 113 insertions, 4 deletions
diff --git a/sid_test.ml b/sid_test.ml
index 137575e..aaee961 100644
--- a/sid_test.ml
+++ b/sid_test.ml
@@ -1,5 +1,9 @@
open OUnit
+(*
+let () = Printexc.record_backtrace true ;;
+ *)
+
(* S-1-1-0-1-2-3-4-5-6-7-8-9-10-11-12-13-14 *)
let max_sid = Stdint.(
Sid.create_unsafe
@@ -82,7 +86,7 @@ let sf_parse_too_long_ok () =
let pr_encode_null_ok () =
let x =
Sid.WellKnown.null
- |> Sid.PacketRep.encode
+ |> Sid.PacketRep.encode
|> Xxd.xxd_of_bytes ~blocklen:2
in
let expect = "0101 0000 0000 0000 0000 0000" in
@@ -94,7 +98,7 @@ let pr_encode_null_ok () =
let pr_encode_all_ok () =
let x =
Sid.WellKnown.everyone
- |> Sid.PacketRep.encode
+ |> Sid.PacketRep.encode
|> Xxd.xxd_of_bytes ~blocklen:2
in
let expect = "0101 0000 0000 0001 0000 0000" in
@@ -103,6 +107,105 @@ let pr_encode_all_ok () =
~msg:(Printf.sprintf "[%s] ≠ [%s]" x expect)
x expect
+let pr_decode_all_ok () =
+ let s =
+ match
+ Xxd.bytes_of_xxd "0101 0000 0000 0001 0000 0000"
+ (* vvcc iiii iiii iiii ssss ssss *)
+ |> Sid.PacketRep.decode
+ with
+ | Ok s -> s
+ | Error e ->
+ assert_failure
+ (Printf.sprintf "error decoding SID: %s" e)
+ in
+ let w = Sid.WellKnown.world in
+ assert_bool
+ (Printf.sprintf "[%s] ≠ [%s]"
+ (Sid.to_string s) (Sid.to_string w))
+ (Sid.equal s w)
+
+let pr_decode_version_fail () =
+ let b = Xxd.bytes_of_xxd "0201 0000 0000 0001 0000 0000" in
+ (* vvcc iiii iiii iiii ssss ssss *)
+ match Sid.PacketRep.decode b with
+ | Error e ->
+ let expect = "input malformed: expected SID version=0x01, got 0x02" in
+ assert_equal
+ ~msg:(Printf.sprintf "[%s] ≠ [%s]" e expect)
+ e expect
+ | Ok s ->
+ assert_failure
+ (Printf.sprintf "malformed SID decoded unexpectedly: %s"
+ (Sid.to_string s))
+
+let pr_decode_sacount_fail () =
+ let b = Xxd.bytes_of_xxd "0110 0000 0000 0001 0000 0000" in
+ (* vvcc iiii iiii iiii ssss ssss *)
+ match Sid.PacketRep.decode b with
+ | Error e ->
+ let expect = "input malformed: up to 15 subAuthority elements \
+ permitted, 16 specified" in
+ assert_equal
+ ~msg:(Printf.sprintf "[%s] ≠ [%s]" e expect)
+ e expect
+ | Ok s ->
+ assert_failure
+ (Printf.sprintf "malformed SID decoded unexpectedly: %s"
+ (Sid.to_string s))
+
+let pr_decode_short_fail () =
+ let b = Xxd.bytes_of_xxd "0105 0000 0000 00" in
+ (* vvcc iiii iiii ii…… *)
+ match Sid.PacketRep.decode b with
+ | Error e ->
+ let expect = "bad input size: expected 8–68 B, got 7 B" in
+ assert_equal
+ ~msg:(Printf.sprintf "[%s] ≠ [%s]" e expect)
+ e expect
+ | Ok s ->
+ assert_failure
+ (Printf.sprintf "malformed SID decoded unexpectedly: %s"
+ (Sid.to_string s))
+
+let pr_decode_long_fail () =
+ let r =
+ "010e 0000 0000 0000 0100 0000 0200 0000 \
+ 0300 0000 0400 0000 0500 0000 0600 0000 \
+ 0700 0000 0800 0000 0900 0000 0a00 0000 \
+ 0b00 0000 0c00 0000 0d00 0000 0e00 0000 \
+ 0f00 0000 1000 0000"
+ in
+ let b = Xxd.bytes_of_xxd r in
+ match Sid.PacketRep.decode b with
+ | Error e ->
+ let expect = "bad input size: expected 8–68 B, got 72 B" in
+ assert_equal
+ ~msg:(Printf.sprintf "[%s] ≠ [%s]" e expect)
+ e expect
+ | Ok s ->
+ assert_failure
+ (Printf.sprintf "malformed SID decoded unexpectedly: %s"
+ (Sid.to_string s))
+
+let pr_decode_odd_fail () =
+ match
+ Xxd.bytes_of_xxd "0101 0000 0000 0000 0100 0000 0200"
+ (* vvcc iiii iiii iiii ssss ssss ssss …
+ upper half word missing *)
+ |> Sid.PacketRep.decode
+ with
+ | Error e ->
+ let expect = "bad input size: not divisible by word length (4)" in
+ assert_equal
+ ~msg:(Printf.sprintf "[%s] ≠ [%s]" e expect)
+ e expect
+ | Ok s ->
+ assert_failure
+ (Printf.sprintf "malformed SID decoded unexpectedly: %s"
+ (Sid.to_string s))
+
+
let string_format_test = "string-format-syntax" >:::
[ "parse-ok" >:: sf_parse_ok
; "parse-empty-fail" >:: sf_parse_empty_fail
@@ -117,8 +220,14 @@ let string_format_test = "string-format-syntax" >:::
let packet_rep_test = "packet-rep" >:::
- [ "encode-null-ok" >:: pr_encode_null_ok
- ; "encode-all-ok" >:: pr_encode_all_ok
+ [ "encode-null-ok" >:: pr_encode_null_ok
+ ; "encode-all-ok" >:: pr_encode_all_ok
+ ; "decode-all-ok" >:: pr_decode_all_ok
+ ; "decode-version-fail" >:: pr_decode_version_fail
+ ; "decode-sacount-fail" >:: pr_decode_sacount_fail
+ ; "decode-short-fail" >:: pr_decode_short_fail
+ ; "decode-long-fail" >:: pr_decode_long_fail
+ ; "decode-odd-fail" >:: pr_decode_odd_fail
]
let () =