Current section

Files

Jump to
chaperon lib chaperon worker.ex
Raw

lib/chaperon/worker.ex

defmodule Chaperon.Worker do
@moduledoc """
Wraps supervised `Task`s running `Chaperon.Scenario` sessions that run on any
of the nodes in the cluster.
"""
require Logger
def start(amount, scenario_mod, config)
when is_integer(amount) and amount > 0
do
Chaperon.Worker.Supervisor.start_workers(nodes(), amount, scenario_mod, config, timeout(config))
end
def start(scenario_mod, config) do
Chaperon.Worker.Supervisor.start_worker(random_node(), scenario_mod, config, timeout(config))
end
def start_nested(scenario_mod, session, config) do
Chaperon.Worker.Supervisor.start_nested_worker(random_node(), scenario_mod, session, config, timeout(config))
end
def await(worker = %Task{}, timeout \\ 5000) do
Task.await(worker, timeout)
end
def random_node do
nodes()
|> Enum.shuffle
|> List.first
end
def nodes do
[Node.self | Node.list]
end
def timeout(config), do: config[:scenario_timeout] || :infinity
end