Tests: fix double_endorsement tests

This commit is contained in:
Galfour 2018-06-14 19:42:33 +02:00 committed by Grégoire Henry
parent b5c275c5fa
commit 392f6cec46
2 changed files with 35 additions and 25 deletions

View File

@ -135,14 +135,20 @@ let different_delegates () =
Context.init 2 >>=? fun (b, _) ->
Block.bake b >>=? fun b ->
Block.bake b >>=? fun blk_a ->
Block.bake b >>=? fun blk_b ->
get_first_different_endorsers (B blk_a) >>=? fun (endorser_a, endorser_b) ->
block_fork b >>=? fun (blk_a, blk_b) ->
Context.get_endorser (B blk_a) >>=? fun (endorser_a, _a_slots) ->
get_first_different_endorsers (B blk_b) >>=? fun (endorser_b1c, endorser_b2c) ->
let endorser_b =
if Signature.Public_key_hash.(=) endorser_a endorser_b1c.delegate
then endorser_b2c.delegate
else endorser_b1c.delegate
in
Op.endorsement ~delegate:endorser_a.delegate (B blk_a) () >>=? fun e_a ->
Op.endorsement ~delegate:endorser_b.delegate (B blk_b) () >>=? fun e_b ->
Op.double_endorsement (B blk_a) e_a e_b >>=? fun operation ->
Block.bake ~operation blk_a >>= fun res ->
Op.endorsement ~delegate:endorser_a (B blk_a) () >>=? fun e_a ->
Op.endorsement ~delegate:endorser_b (B blk_b) () >>=? fun e_b ->
Block.bake ~operation:(Operation.pack e_b) blk_b >>=? fun _ ->
Op.double_endorsement (B blk_b) e_a e_b >>=? fun operation ->
Block.bake ~operation blk_b >>= fun res ->
Assert.proto_error ~loc:__LOC__ res begin function
| Apply.Inconsistent_double_endorsement_evidence _ -> true
| _ -> false end
@ -150,28 +156,33 @@ let different_delegates () =
(** Check that a double endorsement evidence that exposes a ill-formed
endorsement fails. *)
let wrong_delegate () =
Context.init 2 >>=? fun (b, _) ->
Context.init ~endorsers_per_block:1 2 >>=? fun (b, contracts) ->
Error_monad.map_s (Context.Contract.manager (B b)) contracts >>=? fun accounts ->
let pkh1 = (List.nth accounts 0).Account.pkh in
let pkh2 = (List.nth accounts 1).Account.pkh in
block_fork b >>=? fun (blk_a, blk_b) ->
get_first_different_endorsers (B blk_a)
>>=? fun (_endorser_a, endorser_b) ->
Context.get_endorser (B blk_a) >>=? fun (endorser_a, _) ->
Op.endorsement ~delegate:endorser_a (B blk_a) () >>=? fun endorsement_a ->
Context.get_endorser (B blk_b) >>=? fun (endorser_b, _) ->
let delegate =
if Signature.Public_key_hash.equal pkh1 endorser_b
then pkh2
else pkh1
in
Op.endorsement ~delegate (B blk_b) () >>=? fun endorsement_b ->
Op.endorsement ~delegate:endorser_b.delegate (B blk_a) () >>=? fun endorsement_a ->
Op.endorsement ~delegate:endorser_b.delegate (B blk_b) () >>=? fun endorsement_b ->
Op.double_endorsement (B blk_a) endorsement_a endorsement_b >>=? fun operation ->
Block.bake ~operation blk_a >>= fun e ->
Op.double_endorsement (B blk_b) endorsement_a endorsement_b >>=? fun operation ->
Block.bake ~operation blk_b >>= fun e ->
Assert.proto_error ~loc:__LOC__ e begin function
| Operation_repr.Invalid_signature -> true
| Baking.Unexpected_endorsement -> true
| _ -> false end
let tests = [
Test.tztest "valid double endorsement evidence" `Quick valid_double_endorsement_evidence ;
Test.tztest "invalid double endorsement evidence" `Quick invalid_double_endorsement ;
Test.tztest "too early double endorsement evidence" `Quick too_early_double_endorsement_evidence ;
Test.tztest "too late double endorsement evidence" `Quick too_late_double_endorsement_evidence ;
Test.tztest "different delegates" `Quick different_delegates ;
Test.tztest "wrong delegate" `Quick wrong_delegate ;
]

View File

@ -101,7 +101,7 @@ let max_endorsement () =
(B b) ~nb_endorsement endorser_account previous_balance
) (List.combine delegates previous_balances)
(** Check that an endorser balance is consistent with a different piority *)
(** Check that an endorser balance is consistent with a different priority *)
let consistent_priority () =
Context.init 32 >>=? fun (b, _) ->
Block.get_next_baker ~policy:(By_priority 15) b >>=? fun (baker_account, _, _) ->
@ -122,7 +122,7 @@ let consistent_priority () =
assert_endorser_balance_consistency ~loc:__LOC__ ~priority:15
(B b) ~nb_endorsement:(List.length endorser.slots) endorser.delegate balance
(** Check every 32 endorser's balances are consistent with a different piority *)
(** Check every 32 endorser's balances are consistent with a different priority *)
let consistent_priorities () =
let priorities = 15 -- 31 in
Context.init 64 >>=? fun (b, _) ->
@ -178,7 +178,7 @@ let wrong_endorsement_predecessor () =
Context.get_endorser (B b) >>=? fun (genesis_endorser, _slots) ->
Block.bake b >>=? fun b' ->
Op.endorsement ~delegate:genesis_endorser ~signing_context:(B b') (B b) () >>=? fun operation ->
Op.endorsement ~delegate:genesis_endorser ~signing_context:(B b) (B b') () >>=? fun operation ->
let operation = Operation.pack operation in
Block.bake ~operation b' >>= fun res ->
@ -214,7 +214,7 @@ let duplicate_endorsement () =
Incremental.add_operation inc operation >>= fun res ->
Assert.proto_error ~loc:__LOC__ res begin function
| Baking.Unexpected_endorsement -> true
| Apply.Duplicate_endorsement _ -> true
| _ -> false
end
@ -224,8 +224,7 @@ let no_enough_for_deposit () =
Error_monad.map_s (fun c ->
Context.Contract.manager (B b) c >>=? fun m -> return (m, c)) contracts >>=?
fun managers ->
let slot = 0 in
Context.get_endorser (B b) slot >>=? fun endorser ->
Context.get_endorser (B b) >>=? fun (endorser,_) ->
let _, contract_other_than_endorser =
List.find (fun (c, _) -> not (Signature.Public_key_hash.equal c.Account.pkh endorser))
managers
@ -234,7 +233,7 @@ let no_enough_for_deposit () =
List.find (fun (c, _) -> (Signature.Public_key_hash.equal c.Account.pkh endorser))
managers
in
Op.endorsement ~delegate:endorser (B b) [slot] >>=? fun op_endo ->
Op.endorsement ~delegate:endorser (B b) () >>=? fun op_endo ->
Context.Contract.balance (B b)
(Contract.implicit_contract endorser) >>=? fun initial_balance ->
Op.transaction (B b) contract_of_endorser contract_other_than_endorser initial_balance >>=? fun op_trans ->