ligo/test/proto_alpha_isolate/test_isolate_origination.ml
2018-02-01 18:20:47 +01:00

107 lines
3.3 KiB
OCaml

(**************************************************************************)
(* *)
(* Copyright (c) 2014 - 2016. *)
(* Dynamic Ledger Solutions, Inc. <contact@tezos.com> *)
(* *)
(* All rights reserved. No warranty, explicit or implicit, provided. *)
(* *)
(**************************************************************************)
let name = "Isolate Origination"
module Logger = Logging.Make(struct let name = name end)
let section = Lwt_log.Section.make name
let () =
Lwt_log.Section.set_level section Lwt_log.Debug
exception No_error
open Isolate_helpers
let (>>?=) = Assert.(>>?=)
let (>>=??) = Assert.(>>=??)
let test_simple_origination originate =
let open Proto_alpha.Error_monad in
let src = List.hd Account.bootstrap_accounts in
(* 0 balance should fail *)
originate src 0 >>= Assert.wrap >>= fun result ->
Assert.initial_amount_too_low ~msg: __LOC__ result ;
(* .5 Balance should fail *)
originate src 50 >>= Assert.wrap >>= fun result ->
Assert.initial_amount_too_low ~msg: __LOC__ result ;
(* 2. Balance should work *)
originate src 200 >>= Assert.ok >>= fun _ ->
return ()
let test_delegation
(originate: ?tc: Proto_alpha.Tezos_context.t -> ?delegatable: bool -> 'a)
(delegate: ?tc: Proto_alpha.Tezos_context.t -> 'b)
=
let open Proto_alpha.Error_monad in
let account_a = List.nth Account.bootstrap_accounts 0 in
let account_b = List.nth Account.bootstrap_accounts 1 in
(* Delegatable should change delegate *)
originate
~delegatable: true account_a 200
>>=? fun ((contracts, _errs), tc) ->
let contract = List.hd contracts in
let account_ac = {account_a with contract} in
delegate ~tc account_ac account_b.hpub >>= Assert.ok ~msg: __LOC__ >>= fun _ ->
(* Not-Delegatable should not change delegate *)
originate
~delegatable: false account_a 200
>>=? fun ((contracts, _errs), tc) ->
let contract = List.hd contracts in
let account_a = {account_a with contract} in
delegate ~tc account_a account_b.hpub >>= Assert.wrap >>= fun res ->
Assert.non_delegatable ~msg: __LOC__ res ;
return ()
let main (): unit Error_monad.tzresult Lwt.t =
Init.main () >>=? fun root ->
let originate ?(tc=root.tezos_context) ?baker ?spendable ?fee ?delegatable src amount =
let delegatable = Option.unopt ~default:true delegatable in
let spendable = Option.unopt ~default:true spendable in
let fee = Option.unopt ~default:10 fee in
Apply.origination_pred
?baker
~tc
~pred: root
(src, amount, spendable, delegatable, fee)
in
let delegate ?(tc=root.tezos_context) ?baker ?fee src delegate =
let fee = Option.unopt ~default:10 fee in
Apply.delegation_pred
?baker
~tc
~pred: root
(src, delegate, fee)
in
test_simple_origination originate >>=?? fun () ->
test_delegation
(originate ?fee: None ?baker: None ~spendable: true)
(delegate ?fee: None ?baker: None) >>=?? fun () ->
Error_monad.return ()
let tests = [
"main", (fun _ -> main ()) ;
]
let main () =
Test.run "origination." tests