Alpha/Tests/delegation: add double registration test

Emptied and then recredited between the two self-delegations.
This commit is contained in:
bruno 2018-06-28 23:36:16 +02:00 committed by Benjamin Canou
parent 1b6eca4d89
commit 9ee7cf18fd

View File

@ -882,7 +882,7 @@ let valid_delegate_registration_switch_delegation_credit_debit amount () =
Assert.equal_pkh ~loc:__LOC__ orig_delegate delegate_pkh Assert.equal_pkh ~loc:__LOC__ orig_delegate delegate_pkh
(** C- a second self-delegation should raise an `Active_delegate` error *) (** C- a second self-delegation should raise an `Active_delegate` error *)
(* with implicit contract with some credits *) (* with implicit contract with some credit *)
let double_registration () = let double_registration () =
Context.init 1 >>=? fun (b, bootstrap_contracts) -> Context.init 1 >>=? fun (b, bootstrap_contracts) ->
Incremental.begin_construction b >>=? fun i -> Incremental.begin_construction b >>=? fun i ->
@ -932,6 +932,37 @@ let double_registration_when_empty () =
| Delegate_storage.Active_delegate -> true | Delegate_storage.Active_delegate -> true
| _ -> false) | _ -> false)
(* with implicit contract emptied then recredited after first self-delegation *)
let double_registration_when_recredited () =
Context.init 1 >>=? fun (b, bootstrap_contracts) ->
Incremental.begin_construction b >>=? fun i ->
let bootstrap = List.hd bootstrap_contracts in
let account = Account.new_account () in
let pkh = Account.(account.pkh) in
let impl_contract = Contract.implicit_contract pkh in
(* credit 1μꜩ+ check balance *)
Op.transaction (I i) bootstrap impl_contract Tez.one_mutez >>=? fun create_contract ->
Incremental.add_operation i create_contract >>=? fun i ->
Assert.balance_is ~loc:__LOC__ (I i) impl_contract Tez.one_mutez >>=? fun _ ->
(* self delegation *)
Op.delegation (I i) impl_contract (Some pkh) >>=? fun self_delegation ->
Incremental.add_operation i self_delegation >>=? fun i ->
(* empty the delegate account *)
Op.transaction (I i) impl_contract bootstrap Tez.one_mutez >>=? fun empty_contract ->
Incremental.add_operation i empty_contract >>=? fun i ->
Assert.balance_is ~loc:__LOC__ (I i) impl_contract Tez.zero >>=? fun _ ->
(* credit 1μꜩ+ check balance *)
Op.transaction (I i) bootstrap impl_contract Tez.one_mutez >>=? fun create_contract ->
Incremental.add_operation i create_contract >>=? fun i ->
Assert.balance_is ~loc:__LOC__ (I i) impl_contract Tez.one_mutez >>=? fun _ ->
(* second self-delegation *)
Op.delegation (I i) impl_contract (Some pkh) >>=? fun second_registration ->
Incremental.add_operation i second_registration >>= fun err ->
Assert.proto_error ~loc:__LOC__ err (function
| Delegate_storage.Active_delegate -> true
| _ -> false)
let tests_delegate_registration = let tests_delegate_registration =
[ [
(*** unregistered delegate key: no self-delegation ***) (*** unregistered delegate key: no self-delegation ***)
@ -1012,6 +1043,7 @@ let tests_delegate_registration =
(*** double registration ***) (*** double registration ***)
Test.tztest "double registration" `Quick double_registration ; Test.tztest "double registration" `Quick double_registration ;
Test.tztest "double registration when delegate account is emptied" `Quick double_registration_when_empty ; Test.tztest "double registration when delegate account is emptied" `Quick double_registration_when_empty ;
Test.tztest "double registration when delegate account is emptied and then recredited" `Quick double_registration_when_recredited ;
] ]