package octez-protocol-alpha-libs

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

Module Tezos_alpha_test_helpers.ScenarioSource

This module centralises all modules related to Scenario writing and execution. Most scenario tests would use most if not all of them, so they only need to open Scenario.

include module type of struct include Scenario_base end
Sourcetype Tezos_base.TzPervasives.error +=
  1. | Unexpected_error

For assert_failure, when expected error does not match the actual error.

Sourcetype Tezos_base.TzPervasives.error +=
  1. | Unexpected_success

For assert_failure, when scenario actually succeeds when expected to fail.

Usual threaded state for the tests. Contains the current block, pending operations and the known State.t

Sourceval set_baker : string -> (t, t) Scenario_dsl.scenarios

Sets the de facto baker for all future blocks

Sourceval exclude_bakers : string list -> (t, t) Scenario_dsl.scenarios

Exclude a list of delegates from baking

Sourceval unset_baking_policy : (t, t) Scenario_dsl.scenarios

Unsets the baking policy, it returns to default (By_round 0)

Creates a snapshot of the current balances for the given account names. Can be used to check that balances at point A and B in the execution of a test are the same (either nothing happened, or a succession of actions resulted in getting the same values as before

Check balances against a previously defined snapshot

Sourceval save_current_rate : (t, t) Scenario_dsl.scenarios

Save the current issuance rate for future use

Sourceval check_rate_evolution : (Q.t -> Q.t -> bool) -> (t, t) Scenario_dsl.scenarios

Check that f saved_rate current_rate is true. f is typically a comparison function

Sourceval check_failure_aux : ?loc:string -> ?expected_error:('a -> Tezos_base.TzPervasives.tztrace) -> ('a -> 'b Tezos_base.TzPervasives.tzresult Lwt.t) -> 'a -> 'a Tezos_base.TzPervasives.tzresult Lwt.t
Sourceval check_fail_and_rollback : ?loc:string -> ?expected_error:('a -> Tezos_base.TzPervasives.tztrace) -> ('a, 'b) Scenario_dsl.single_scenario -> 'a -> 'a Tezos_base.TzPervasives.tzresult Lwt.t
Sourceval assert_failure : ?loc:string -> ?expected_error:('a -> Tezos_base.TzPervasives.tztrace) -> ('a, 'b) Scenario_dsl.scenarios -> ('a, 'a) Scenario_dsl.scenarios

Useful function to test expected failures: runs the given branch until it fails, then rollbacks to before execution. Fails if the given branch Succeeds

Sourceval assert_success : ?loc:string -> ('a, 'b) Scenario_dsl.scenarios -> ('a, 'a) Scenario_dsl.scenarios

Check a scenario does not fail, and rolls back to before the assert

Sourceval loop : int -> ('a, 'a) Scenario_dsl.scenarios -> ('a, 'a) Scenario_dsl.scenarios

Loop

Sourceval loop_action : int -> ('a -> 'a Tezos_base.TzPervasives.tzresult Lwt.t) -> ('a, 'a) Scenario_dsl.scenarios
Sourceval check_balance_field : Tezos_base.TzPervasives.String.Map.key -> [< `Bonds | `Liquid | `Staked | `Total | `Unstaked_finalizable | `Unstaked_frozen_total ] -> Tezos_protocol_alpha.Protocol.Alpha_context.Tez.t -> (t, t) Scenario_dsl.scenarios

Check a specific balance field for a specific account is equal to a specific amount

Sourceval check_balance_fields : Tezos_base.TzPervasives.String.Map.key -> liquid:Tezos_protocol_alpha.Protocol.Alpha_context.Tez.t -> staked:Tezos_protocol_alpha.Protocol.Alpha_context.Tez.t -> ?unstaked_frozen_total:Tezos_alpha_test_helpers.State_account.Tez.t -> unit -> (t, t) Scenario_dsl.scenarios
include module type of struct include Scenario_op end

Set delegate parameters for the given delegate

Add a new account with the given name

Reveal operation

Set delegate for src. If delegate_name_opt = None, then unset current delegate

Sourceval check_pending_slashings : loc:string -> (Block.t * State.t) -> unit Tezos_base.TzPervasives.tzresult Lwt.t
Sourceval order_attestations : correct_order:bool -> 'a Tezos_raw_protocol_alpha__Alpha_context.operation -> 'a Tezos_raw_protocol_alpha__Alpha_context.operation -> 'a Tezos_raw_protocol_alpha__Alpha_context.operation * 'a Tezos_raw_protocol_alpha__Alpha_context.operation

Double attestation helpers

Sourceval op_double_attestation : ?correct_order:bool -> Tezos_protocol_alpha.Protocol.Alpha_context.Kind.attestation Tezos_protocol_alpha.Protocol.Alpha_context.Operation.t -> Tezos_protocol_alpha.Protocol.Alpha_context.Kind.attestation Tezos_protocol_alpha.Protocol.Alpha_context.Operation.t -> Context.t -> Tezos_protocol_alpha.Protocol.Alpha_context.Operation.packed
Sourceval op_double_preattestation : ?correct_order:bool -> Tezos_protocol_alpha.Protocol.Alpha_context.Kind.preattestation Tezos_protocol_alpha.Protocol.Alpha_context.Operation.t -> Tezos_protocol_alpha.Protocol.Alpha_context.Kind.preattestation Tezos_protocol_alpha.Protocol.Alpha_context.Operation.t -> Context.t -> Tezos_protocol_alpha.Protocol.Alpha_context.Operation.packed
Sourceval order_block_hashes : correct_order:bool -> Tezos_protocol_alpha.Protocol.Alpha_context.Block_header.block_header -> Tezos_protocol_alpha.Protocol.Alpha_context.Block_header.block_header -> Tezos_protocol_alpha.Protocol.Alpha_context.Block_header.block_header * Tezos_protocol_alpha.Protocol.Alpha_context.Block_header.block_header
Sourceval op_double_baking : ?correct_order:bool -> Tezos_protocol_alpha.Protocol.Alpha_context.Block_header.block_header -> Tezos_protocol_alpha.Protocol.Alpha_context.Block_header.block_header -> Context.t -> Tezos_protocol_alpha.Protocol.Alpha_context.Operation.packed
Sourceval double_bake_op : string list -> (Block.t * State.t) -> (Block.t * State.t, Tezos_base.TzPervasives.tztrace) result Lwt.t

double_bake_op delegate_names (block, state) performs a double baking with the given delegate names. The first delegate in the list bakes the new main branch. All delegates (including the first) will bake two other blocks at the same level/different round.

Sourceval double_bake_many : string list -> (Scenario_base.t, Scenario_base.t) Scenario_dsl.scenarios
Sourceval double_attest_op : ?other_bakers:(string * string) -> op: (delegate:Tezos_base.TzPervasives.Signature.Public_key_hash.t -> Block.t -> ('a Tezos_protocol_alpha.Protocol.Alpha_context.Kind.consensus Tezos_protocol_alpha.Protocol.Alpha_context.operation, Tezos_base.TzPervasives.tztrace) result Lwt.t) -> op_evidence: ('a Tezos_protocol_alpha.Protocol.Alpha_context.Kind.consensus Tezos_protocol_alpha.Protocol.Alpha_context.operation -> 'a Tezos_protocol_alpha.Protocol.Alpha_context.Kind.consensus Tezos_protocol_alpha.Protocol.Alpha_context.operation -> Context.t -> Tezos_protocol_alpha.Protocol.Alpha_context.packed_operation) -> kind:Tezos_protocol_alpha.Protocol.Misbehaviour_repr.kind -> string list -> (Block.t * State.t) -> (Block.t * State.t, Tezos_base.TzPervasives.tztrace) result Lwt.t

double_attest_op ?other_bakers ~op ~op_evidence ~kind delegate_names (block, state) performs a double (pre)attestation with the given delegate names. Starting at block level `n`, it creates two 2-block branches and all delegates will (pre)attest the two blocks at level `n+2`. other_bakers can be used to force using specific bakers to avoid reusing forbidden ones

Sourceval double_attest_ : ?other_bakers:(string * string) -> string list -> (Block.t * State.t) -> (Block.t * State.t, Tezos_base.TzPervasives.tztrace) result Lwt.t
Sourceval double_attest_many : ?other_bakers:(string * string) -> string list -> (Scenario_base.t, Scenario_base.t) Scenario_dsl.scenarios
Sourceval double_attest : ?other_bakers:(string * string) -> string -> (Scenario_base.t, Scenario_base.t) Scenario_dsl.scenarios
Sourceval double_preattest_ : ?other_bakers:(string * string) -> string list -> (Block.t * State.t) -> (Block.t * State.t, Tezos_base.TzPervasives.tztrace) result Lwt.t
Sourceval double_preattest_many : ?other_bakers:(string * string) -> string list -> (Scenario_base.t, Scenario_base.t) Scenario_dsl.scenarios
Sourceval double_preattest : ?other_bakers:(string * string) -> string -> (Scenario_base.t, Scenario_base.t) Scenario_dsl.scenarios
Sourceval cycle_from_level : int32 -> int32 -> Tezos_alpha_test_helpers.State_account.Cycle.cycle
Sourceval pct_from_kind : Block.t -> Tezos_protocol_alpha.Protocol.Misbehaviour_repr.kind -> int
Sourceval get_pending_slashed_pct_for_delegate : (Block.t * State.t) -> Tezos_base.TzPervasives.Signature.Public_key_hash.t -> int
Sourceval update_state_denunciation : (Block.t * State.t) -> State.double_signing_state -> (State.t * bool, Tezos_base.TzPervasives.tztrace) result Lwt.t
Sourceval make_denunciations_op : ?single:bool -> ?rev:bool -> ?filter:(State.double_signing_state -> bool) -> (Block.t * State.t) -> (State.t * Tezos_protocol_alpha.Protocol.Alpha_context.packed_operation list, Tezos_base.TzPervasives.tztrace) result Lwt.t

make_denunciations_op ?single ?rev ?filter () denounces all double signers in the state. If single is set, only one denunciation is made. If rev is set, the denunciations are made in reverse order. If filter is set, only the double signers for which the filter returns true are denounced.

Sourceval make_denunciations : ?single:bool -> ?rev:bool -> ?filter:(State.double_signing_state -> bool) -> unit -> (Block.t * State.t, Scenario_base.t) Scenario_dsl.scenarios

Create an account and give an initial balance funded by funder

include module type of struct include Scenario_dsl end
Sourceexception Test_failed
Sourcetype ('input, 'output) scenarios = ('input, 'output) Scenario_dsl.scenarios =
  1. | Action : ('input -> 'output Tezos_base.TzPervasives.tzresult Lwt.t) -> ('input, 'output) scenarios
  2. | Empty : ('t, 't) scenarios
  3. | Concat : (('a, 'b) scenarios * ('b, 'c) scenarios) -> ('a, 'c) scenarios
  4. | Branch : (('a, 'b) scenarios * ('a, 'b) scenarios) -> ('a, 'b) scenarios
  5. | Tag : string -> ('t, 't) scenarios
  6. | Slow : ('t, 't) scenarios

A scenario is a succession of actions. We define a branching path as a way to create multiple tests from the same point. This allows easy compositionality of behaviors with minimal code sharing. The Tag allows to give meaningful identifiers to the branches. It is good practice to tag each case in a branch (it's not necessary, but since test names must be unique, at most one branch can remain unnamed, and even then it can create conflicting names.)

Sourcetype ('input, 'output) single_scenario = ('input, 'output) Scenario_dsl.single_scenario =
  1. | End_scenario : ('t, 't) single_scenario
  2. | Cons : (('input -> 't Tezos_base.TzPervasives.tzresult Lwt.t) * ('t, 'output) single_scenario) -> ('input, 'output) single_scenario

Unfolded scenario type

Sourceval cat_ss : 'a 'b 'c. ('a, 'b) single_scenario -> ('b, 'c) single_scenario -> ('a, 'c) single_scenario
Sourceval combine : ('a -> 'b -> 'c) -> 'a list -> 'b list -> 'c list
Sourceval unfold_scenarios : 'input 'output. ('input, 'output) scenarios -> (('input, 'output) single_scenario * string list * bool) list
Sourceval run_scenario : 'input 'output. ('input, 'output) single_scenario -> 'input -> 'output Tezos_base.TzPervasives.tzresult Lwt.t
Sourcetype test_closure = string * bool * (Tezt_tezos.Protocol.t -> unit Lwt.t)
Sourceval unfolded_to_test : ((unit, unit) single_scenario * string list * bool) -> test_closure
Sourceval register_test : __FILE__:string -> tags:string list -> test_closure -> unit
Sourceval register_tests : __FILE__:string -> tags:string list -> test_closure list -> unit

Useful aliases and operators

Sourceval noop : ('a, 'a) scenarios
Sourceval no_tag : ('a, 'a) scenarios
Sourceval concat : 'a 'b 'c. ('a, 'b) scenarios -> ('b, 'c) scenarios -> ('a, 'c) scenarios
Sourceval branch : 'a 'b. ('a, 'b) scenarios -> ('a, 'b) scenarios -> ('a, 'b) scenarios
Sourceval (-->) : ('a, 'b) scenarios -> ('b, 'c) scenarios -> ('a, 'c) scenarios

Continuation connector: execute a then b

Sourceval (|+) : ('a, 'b) scenarios -> ('a, 'b) scenarios -> ('a, 'b) scenarios

Branching connector: creates two tests with different execution paths

Sourceval end_test : ('a, unit) scenarios

Ends the test. Dump the state, returns unit

Sourceval tests_of_scenarios : (string * (unit, 't) scenarios) list -> test_closure list

Transforms scenarios into tests

Sourceval exec : ('a -> 'b Tezos_base.TzPervasives.tzresult Lwt.t) -> ('a, 'b) scenarios

Arbitrary execution

Sourceval exec_state : (('a * 'b) -> ('c, Tezos_base.TzPervasives.tztrace) result Lwt.t) -> ('a * 'b, 'a * 'c) scenarios

Execute a function that does not modify the block, only the state

Sourceval exec_unit : ('a -> (unit, Tezos_base.TzPervasives.tztrace) result Lwt.t) -> ('a, 'a) scenarios

Execute a function that does not modify neither the block nor the state. Usually used for checks/asserts

Sourceval fold : ('a -> ('b, 'c) scenarios) -> 'a list -> ('b, 'c) scenarios

fold f l folds f over l, fails on empty list

Sourceval fold_tag : ('a -> ('b, 'c) scenarios) -> (string * 'a) list -> ('b, 'c) scenarios

fold_tag f l folds f over l, l has a tag for each of its elements. Fails on empty list.

Sourceval fold_tag_f : ('a -> ('b, 'c) scenarios) -> ('a -> string) -> 'a list -> ('b, 'c) scenarios

fold_tag_f f tag l folds f over l, tag returns a tag for each element of l. Fails on empty list.

Sourceval unfold : ('a -> ('b, 'b) scenarios) -> 'a list -> ('b, 'b) scenarios

unfold f l maps f over l, and runs them in order

include module type of struct include Scenario_begin end
Sourcetype Tezos_base.TzPervasives.error +=
  1. | Inconsistent_number_of_bootstrap_accounts

Returns when the number of bootstrap accounts created by Context.init_n n is not equal to n

Sourcetype starter_constants = Scenario_begin.starter_constants =
  1. | Mainnet
  2. | Sandbox
  3. | Test
Sourceval start_with_list : constants:(string * Scenario_constants.constants) list -> (unit, Scenario_constants.constants) Scenario_dsl.scenarios
Sourceval activate_ai : [< `Force | `Force_and_vote_with_threshold of int32 | `No | `With_vote_threshold of int32 | `Zero_threshold ] -> (Scenario_constants.constants, Scenario_constants.constants) Scenario_dsl.scenarios
Sourceval init_constants : ?default:starter_constants -> ?reward_per_block:int64 -> ?deactivate_dynamic:bool -> ?blocks_per_cycle:int32 -> ?delegate_parameters_activation_delay:int -> unit -> (unit, Scenario_constants.constants) Scenario_dsl.scenarios

Initializes the constants for testing, with well chosen default values. Recommended over start or start_with

Sourceval begin_test : ?burn_rewards:bool -> ?force_attest_all:bool -> Tezos_base.TzPervasives.String.Map.key list -> (Scenario_constants.constants, Scenario_base.t) Scenario_dsl.scenarios

Initialize the test, given some initial parameters

include module type of struct include Scenario_constants end
Sourcetype constants = Constants_helpers.t
Sourceval set_opt : ('a -> constants -> constants) -> 'a option -> (constants, constants) Scenario_dsl.scenarios
Sourceval sets : ('a -> constants -> constants) -> (string * 'a) list -> (constants, constants) Scenario_dsl.scenarios
Sourceval sets_f : ('a -> constants -> constants) -> ('a -> string) -> 'a list -> (constants, constants) Scenario_dsl.scenarios
Sourceval branch_flags : (bool -> constants -> constants) list -> (constants, constants) Scenario_dsl.scenarios
Sourceval sets_int : (int -> constants -> constants) -> int list -> (constants, constants) Scenario_dsl.scenarios
include module type of struct include Scenario_bake end
Sourceval apply_end_cycle : Tezos_alpha_test_helpers.State_account.Cycle.t -> Block.t -> Block.t -> State.t -> State.t Tezos_base.TzPervasives.tzresult Lwt.t

Applies when baking the last block of a cycle

Sourceval apply_new_cycle : Tezos_alpha_test_helpers.State_account.Cycle.cycle -> State.t -> State.t

Applies when baking the first block of a cycle. Technically nothing special happens, but we need to update the unslashable unstakes since it's done lazily

Sourceval check_all_balances : Block.t -> State.t -> unit Tezos_base.TzPervasives.tzresult Lwt.t

After baking and applying rewards in state

Sourceval check_issuance_rpc : Block.t -> unit Tezos_base.TzPervasives.tzresult Lwt.t

Bake a block, with the given baker and the given operations.

Bake until a cycle is reached, using bake instead of Block.bake

Sourceval bake_until_dawn_of_next_cycle : Scenario_base.t -> Scenario_base.t Tezos_base.TzPervasives.tzresult Lwt.t

Bake all the remaining blocks of the current cycle

Bake a single block

Sourceval next_block_with_baker : string -> (Scenario_base.t, Scenario_base.t) Scenario_dsl.scenarios

Bake a single block with a specific baker

Bake until the end of a cycle

Bake until the end of a cycle

Sourceval exec_op : ((Block.t * 'a) -> (State.t * Tezos_protocol_alpha.Protocol.Alpha_context.packed_operation list, Tezos_base.TzPervasives.tztrace) result Lwt.t) -> (Block.t * 'a, Scenario_base.t) Scenario_dsl.scenarios

Executes an operation: f should return a new state and a list of operations, which are then applied

Waiting functions

Waits until condition init_t current_t is fulfilled. It is checked on the first block of every cycle. If it returns false, another cycle is baked, until it succeeds.

Sourceval wait_cycle_until : [< `AI_activation | `AI_activation_with_votes | `And of 'a * 'a | `delegate_parameters_activation | `right_before_delegate_parameters_activation ] as 'a -> (Scenario_base.t, Scenario_base.t) Scenario_dsl.scenarios

Wait until we are in a cycle satisfying the given condition. Fails if AI_activation is requested and AI is not set to be activated in the future.

Wait until AI activates. Fails if AI is not set to be activated in the future.

Sourceval wait_delegate_parameters_activation : (Scenario_base.t, Scenario_base.t) Scenario_dsl.scenarios

wait delegate_parameters_activation_delay cycles

OCaml

Innovation. Community. Security.