From 921360438504b5e01bc64671eabcfe5263e12ed6 Mon Sep 17 00:00:00 2001 From: swrup Date: Fri, 27 Feb 2026 17:49:54 +0100 Subject: [PATCH] wip validate response --- test/dune | 5 ++++ test/validate_response.ml | 58 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 test/validate_response.ml diff --git a/test/dune b/test/dune index 7e8b7438..a906ce1d 100644 --- a/test/dune +++ b/test/dune @@ -7,3 +7,8 @@ (name test_crypto) (modules test_crypto) (libraries mte fmt)) + +(executable + (name validate_response) + (modules validate_response) + (libraries mte fmt bos)) diff --git a/test/validate_response.ml b/test/validate_response.ml new file mode 100644 index 00000000..709f4464 --- /dev/null +++ b/test/validate_response.ml @@ -0,0 +1,58 @@ +open Syntax +(*open Crypto*) + +let keys content = + let open Api.ExchangeKeysResponse in + let* v = Api.decode jsont content in + (* validate version compatibility *) + let* () = + if + Libtool_version.is_compatible + ~implementation:Libtool_version.mte_protocol_version v.version + then Ok () + else Fmt.error "version incompatible" + in + + (* TODO *) + (* validate currency specification *) + (* validate all amounts *) + (* validate all timestamp/duration *) + (* validate master_public_key *) + (* validate accounts *) + (* validate wire-fees *) + (* validate signkeys *) + (* validate exchange_pub *) + (* validate denominations *) + (* validate exchange_sig *) + (* validate global-fees *) + (* validate list_issue_date *) + (* validate auditors *) + Ok () + +(* --- *) +open Cmdliner +open Cmdliner.Term.Syntax + +let keys_cmd = + let input = + let doc = "input file" in + Arg.(required & opt (some filepath) None & info [ "i"; "input" ] ~doc) + in + let doc = "validate a /keys JSON response" in + Cmd.make (Cmd.info "keys" ~doc) + @@ + let+ input = input in + let* content = + Result.bind (Fpath.of_string input) Bos.OS.File.read |> unwrap_err_msg + in + keys content + +let cli = + let info = + let doc = "Testing tool to validate exchange responses" in + Cmd.info "validate" ~doc + in + Cmd.group info [ keys_cmd ] + +let main () = Cmd.eval_result cli +let () = if !Sys.interactive then () else exit (main ())