README.md

# ExUnit Cluster

NOTE: Requires at least OTP 25 (which is first supported by elixir 1.13.4).

Spin up dynamic clusters in ExUnit tests with no special setup necessary.

You can run normal tests, alongside clustered tests.

To run distributed tests simply use `ExUnit.Cluster.Case` in a test module
```elixir
defmodule MyTest do
  use ExUnit.Cluster.Case, async: true

  test "I can spin up a 3 node cluster", ctx do
    n1 = Cluster.start_node(ctx.cluster)
    n2 = Cluster.start_node(ctx.cluster)
    n3 = Cluster.start_node(ctx.cluster)

    nodes = Cluster.get_nodes(ctx.cluster)

    assert Enum.sort([n1, n2, n3]) == Enum.sort(nodes)

    res =
      Enum.flat_map(nodes, fn n ->
        Cluster.call(cluster, n, Node, :list, [[:visible, :this]])
      end)

    assert length(res) == 9
    assert MapSet.size(MapSet.new(res)) == 3
  end
end
```

## Installation

If [available in Hex](https://hex.pm/docs/publish), the package can be installed
by adding `ex_unit_cluster` to your list of dependencies in `mix.exs`:

```elixir
def deps do
  [
    {:ex_unit_cluster, "~> 0.1.0"}
  ]
end
```

Documentation can be generated with [ExDoc](https://github.com/elixir-lang/ex_doc)
and published on [HexDocs](https://hexdocs.pm). Once published, the docs can
be found at <https://hexdocs.pm/ex_unit_cluster>.