Tezt_mavryk.RPC_core
RPC description type and functions to call RPCs.
val show_verb : verb -> string
Convert verb to string.
type 'result t = {
verb : verb;
path : string list;
query_string : (string * string) list;
data : data option;
decode : Tezt_wrapper.JSON.t -> 'result;
}
RPC descriptions.
'result
is the type of values returned by the RPC after decoding.
val make :
?data:data ->
?query_string:(string * string) list ->
verb ->
string list ->
(Tezt_wrapper.JSON.t -> 'result) ->
'result t
Make an RPC description.
Usage: make ~get_host ~get_port verb path decode
data
is specified, it is provided as the request body.query_string
is specified, it is added to the URL after the ?
character. It is a list of key-value pairs. For instance, ~query_string: ["key1", "value1"; "key2", "value2"]
denotes ?key1=value1&key2=value2
.path
is the part of the URL that denotes the RPC's endpoint. For instance, ["chains"; "main"; "blocks"; "head"]
denotes /chains/main/blocks/head
.decode
is the function that will be used to decode the response body of the RPC. If you do not want to define it, use Fun.id
(to return a JSON.t
) or ignore
(to ignore the response body).Use one of the call
functions below to actually call the RPC.
val make_uri : Endpoint.t -> 'result t -> Uri.t
make_uri endpoint rpc
returns the URI of the RPC rpc
at endpoint
.
val decode_raw : ?origin:string -> 'result t -> string -> 'result
Parse and decode a response body using the decode function of an RPC description.
origin
is used in error messages. Its default value is "RPC response"
.
val decode : 'result t -> Tezt_wrapper.JSON.t -> 'result
Decode a response body using the decode function of an RPC description.
val check_string_response :
?body_rex:string ->
code:int ->
string response ->
unit
check_string_response ?body_rex ~code response
verifies that the given response's body and HTTP status match the expected ones using the facilities provided by module Check
.
The function checks exact equality for the HTTP status and for regular expression matching for the body (if provided).
type rpc_hooks = {
on_request : verb -> uri:string -> data option -> unit;
on_response : Cohttp.Code.status_code -> body:string -> unit;
}
Callbacks that can be specified when calling RPCs.
on_request
is called before each RPC call, and on_response
is called after each successful RPC call (errors like 404 Not Found are considered successful RPC calls).
module type CALLERS = sig ... end
include CALLERS with type uri_provider := Endpoint.t
val call :
?rpc_hooks:rpc_hooks ->
?log_request:bool ->
?log_response_status:bool ->
?log_response_body:bool ->
Endpoint.t ->
'result t ->
'result Lwt.t
Call an RPC.
The response body is parsed as JSON, then decoded using the decode function of the RPC description.
Calls Test.fail
if the status code is not a success code. To handle error cases, use call_raw
or call_json
instead. They return the status code and you can use decode
to parse the response body in case of success.
Parameter hooks
allows to attach some hooks to the RPC.
If log_request
is true
, log the HTTP method and URI before calling the RPC. Default is true
.
If log_response_status
is true
, log the HTTP status code of the response after the RPC call. Default is true
.
If log_response_body
is true
, log the response body after the RPC call.
For call
and call_json
, if the response is valid JSON, it is pretty-printed with indentation. Default is true
.
val call_raw :
?rpc_hooks:rpc_hooks ->
?log_request:bool ->
?log_response_status:bool ->
?log_response_body:bool ->
Endpoint.t ->
'result t ->
string response Lwt.t
Call an RPC, but do not parse its response body.
Does not fail if the status code is not a success code.
val call_json :
?rpc_hooks:rpc_hooks ->
?log_request:bool ->
?log_response_status:bool ->
?log_response_body:bool ->
Endpoint.t ->
'result t ->
Tezt_wrapper.JSON.t response Lwt.t
Call an RPC, but do not decode its response body, only parse as JSON.
Does not fail if the status code is not a success code, except if the response body is not valid JSON.