# Schism
Schism provides a simple api for testing partitions between BEAM nodes.
Documentation: [https://hexdocs.pm/schism](https://hexdocs.pm/schism).
## Installation
If [available in Hex](https://hex.pm/docs/publish), the package can be installed
by adding `schism` to your list of dependencies in `mix.exs`:
```elixir
def deps do
[
{:schism, "~> 1.0", only: [:dev, :test]}
]
end
```
## Usage
Let's say that we have 5 nodes and we want to test what happens when they
disconnect from each other. We can use schism like so:
```elixir
test "netsplits" do
[n1, n2, n3, n4, n5] = nodes
# Partition our nodes
Schism.partition([n1, n3])
Schism.partition([n4])
Schism.partition([n2, n5])
# Test some stuff...
# Heal our partitions
Schism.heal([n1, n3])
Schism.heal([n2, n4, n5])
end
```
This api is useful for testing and development in conjunction with tools like
[local cluster](https://github.com/whitfin/local-cluster) and [propcheck](https://github.com/alfert/propcheck).
It is not recommended that you use this in production.
## Things Schism doesn't do
Schism's reason for existing is to quickly and easily test netsplits between BEAMS
and it uses a rudimentary trick with cookies to achieve this goal. This is great
for quickly testing your system against faults.
But because of Schism's simple nature it should not be considered a replacement
for a more robust suite of tests. It *does not* test failed TCP connections,
interleaving of messages, race-conditions, clock skew, corruption, or any of
the other issues you will see in a distributed system.