diff --git a/tezt/tests/cloud/dal.ml b/tezt/tests/cloud/dal.ml index a7fea65d1874114d2675058678f83fa18beb08d1..453fcb4ccd8aec57bb598bcefbde2eda5dd4df4e 100644 --- a/tezt/tests/cloud/dal.ml +++ b/tezt/tests/cloud/dal.ml @@ -2828,13 +2828,13 @@ let init_sandbox_and_activate_protocol cloud (configuration : configuration) in let* simulated_delegates = match configuration.simulate_network with - | Scatter (selected_baker_count, baker_daemons_count) -> + | Scatter (selected_bakers_count, baker_daemons_count) -> let* () = init_yes_wallet () in let* all_delegates_aliases = Client.list_known_addresses client |> Lwt.map (List.map fst) in let selected_delegates = - Tezos_stdlib.TzList.take_n selected_baker_count all_delegates_aliases + Tezos_stdlib.TzList.take_n selected_bakers_count all_delegates_aliases in let* delegates = Lwt_list.map_s @@ -2842,7 +2842,10 @@ let init_sandbox_and_activate_protocol cloud (configuration : configuration) selected_delegates in round_robin_split baker_daemons_count delegates |> Lwt.return - | Map (selected_bakers_count, baker_daemons_count) -> + | Map + ( selected_bakers_count, + single_key_baker_daemons_count, + multiple_keys_baker_daemons_count ) -> let* () = init_yes_wallet () in let* all_delegates_aliases = Client.list_known_addresses client |> Lwt.map (List.map fst) @@ -2852,7 +2855,7 @@ let init_sandbox_and_activate_protocol cloud (configuration : configuration) in let single_key_bakers_aliases, remaining_baker_aliases = Tezos_stdlib.TzList.split_n - (baker_daemons_count - 1) + single_key_baker_daemons_count selected_delegates_aliases in let* single_key_bakers = @@ -2862,12 +2865,15 @@ let init_sandbox_and_activate_protocol cloud (configuration : configuration) Lwt.return [a]) single_key_bakers_aliases in - let* remaining_baker = - Lwt_list.map_s - (fun alias -> Client.show_address ~alias client) - remaining_baker_aliases + let* remaining_bakers = + let* r = + Lwt_list.map_s + (fun alias -> Client.show_address ~alias client) + remaining_baker_aliases + in + round_robin_split multiple_keys_baker_daemons_count r |> Lwt.return in - Lwt.return (single_key_bakers @ [remaining_baker]) + Lwt.return (single_key_bakers @ remaining_bakers) | Disabled -> Lwt.return_nil in let* generated_baker_accounts = @@ -3892,12 +3898,18 @@ let init ~(configuration : configuration) etherlink_configuration cloud (* As simulate_network and stake are mutually exclusive, the stake is used only when the simulation is Disabled. *) match configuration.simulate_network with - | Scatter (_, baker_count) | Map (_, baker_count) -> + | Scatter (_, baker_count) -> Lwt_list.mapi_s (fun i _ -> let name = name_of (Baker i) in next_agent ~name) (List.init baker_count Fun.id) + | Map (_, single_baker_count, multiple_baker_count) -> + Lwt_list.mapi_s + (fun i _ -> + let name = name_of (Baker i) in + next_agent ~name) + (List.init (single_baker_count + multiple_baker_count) Fun.id) | Disabled -> Lwt_list.mapi_s (fun i _stake -> @@ -3911,9 +3923,15 @@ let init ~(configuration : configuration) etherlink_configuration cloud let name = name_of (Baker i) in next_agent ~name) (match configuration.simulate_network with - | Scatter (_selected_baker_count, baker_daemon_count) - | Map (_selected_baker_count, baker_daemon_count) -> + | Scatter (_selected_baker_count, baker_daemon_count) -> List.init baker_daemon_count string_of_int + | Map + ( _selected_baker_count, + single_baker_daemon_count, + multiple_baker_daemon_count ) -> + List.init + (single_baker_daemon_count + multiple_baker_daemon_count) + string_of_int | Disabled -> configuration.bakers) in let* producers_agents = @@ -4603,9 +4621,12 @@ let register (module Cli : Scenarios_cli.Dal) = let baker_daemon_count = match simulate_network with | Scenarios_cli.Disabled -> 0 - | Scatter (_selected_baker_count, baker_daemon_count) - | Map (_selected_baker_count, baker_daemon_count) -> - baker_daemon_count + | Scatter (_selected_baker_count, baker_daemon_count) -> baker_daemon_count + | Map + ( _selected_baker_count, + single_baker_daemon_count, + multiple_baker_daemon_count ) -> + single_baker_daemon_count + multiple_baker_daemon_count in let vms = let* stake = configuration.stake in diff --git a/tezt/tests/cloud/scenarios_cli.ml b/tezt/tests/cloud/scenarios_cli.ml index 19cca9718f5912b17b6c68b0738d7b472df5d864..0edbb12a8ebc674fdfea27e115bdfae37ca7d9b7 100644 --- a/tezt/tests/cloud/scenarios_cli.ml +++ b/tezt/tests/cloud/scenarios_cli.ml @@ -28,22 +28,23 @@ end baking rights, in a round robin fashion, on [y] baker daemons. This is particularly useful to scatter the baking power across several baker daemons, - - map(x,y): maps [y-1] keys from the biggest bakers found onto [y-1] baker - daemons (theses daemons are handling a single key) and gives the - remaining keys [x-y-1] to a single baker daemon. This is particularly - useful to simulate the behaviour of an actual network, + - map(x,y,z): maps [y] keys from the biggest bakers found onto [y] baker + daemons (theses daemons are handling a single key) and scatters the + remaining [x-y] keys to [z] baker daemons. This is particularly useful to + simulate the behaviour of an actual network, - disabled: no simulation, we rely on the configuration.stake parameter. For example: - scatter(10,2): [[0;2;4;6;8];[1;3;5;7;9]] - - map(10,3):[[0];[1];[2;3;4;5;6;7;8;9]] *) + - map(10,3,0):[[0];[1];[2;3;4;5;6;7;8;9]] + - map(10,3,2):[[0];[1];[2;5;6;8];[3;5;8;9]]*) type network_simulation_config = | Scatter of int * int - | Map of int * int + | Map of int * int * int | Disabled let simulate_network_to_string = function | Scatter (x, y) -> Format.sprintf "scatter(%d,%d)" x y - | Map (x, y) -> Format.sprintf "map(%d,%d)" x y + | Map (x, y, z) -> Format.sprintf "map(%d,%d,%d)" x y z | Disabled -> Format.sprintf "disabled" let parse_network_simulation_config_from_args simulate_network_arg = @@ -67,7 +68,7 @@ let parse_network_simulation_config_from_args simulate_network_arg = arg2 in let re_scatter = Str.regexp "\\(scatter\\)(\\([^,]+\\),\\([^)]*\\))" in - let re_map = Str.regexp "\\(map\\)(\\([^,]+\\),\\([^)]*\\))" in + let re_map = Str.regexp "\\(map\\)(\\([^,]+\\),\\([^)]*\\),\\([^)]*\\))" in if Str.string_match re_scatter simulate_network_arg 0 then let arg1 = Str.matched_group 2 simulate_network_arg @@ -88,8 +89,12 @@ let parse_network_simulation_config_from_args simulate_network_arg = Str.matched_group 3 simulate_network_arg |> int_of_string |> is_positive_param in - let () = is_arg1_sup_eq_arg2 arg1 arg2 in - Some (Map (arg1, arg2)) + let arg3 = + Str.matched_group 4 simulate_network_arg + |> int_of_string |> is_positive_param + in + let () = is_arg1_sup_eq_arg2 arg1 (arg2 + arg3) in + Some (Map (arg1, arg2, arg3)) else Test.fail "Unexpected network simulation config (--simulation) [%s]"