Jiken
View SourceThis library allows developers to simulate failures in their Mix applications. Different functions are configured to fail with specific errors, and revert to their normal operation after.
It is intended to be used in development, but eventually the goal is to support staging usage as well.
Installation
The package can be installed by adding jiken
to your list of dependencies in mix.exs
:
Make sure to include it only in the :dev
environment.
def deps do
[
{:jiken, "~> 0.0.1", only: [:dev]}
]
end
Usage
This is how a function can be dynamically mocked with Jiken
.
iex> Jiken.Dummy()
"Hello, world!"
:ok
iex> Jiken.set(Jiken.Dummy, :greet, fn -> IO.puts("Hello, simulation!") end)
iex> Jiken.Dummy()
Hello, simulation!
:ok
iex> Jiken.reset(Jiken.Dummy)
:ok
iex> Jiken.Dummy()
Hello, world!
:ok
Roadmap
- [ ] Simulation configuration:
- [ ] In a
.jiken.exs
file define which functions to be mocked - [ ] Support different mocking strategies:
- [ ] Mock after a specific number of reductions (function calls)
- [ ] Mock at or after a specific time
- [ ] Specify when to unmock
- [ ] In a
- [ ] Pull exceptions from production and simulate them locally:
- [ ] from AppSignal
- [ ] from Sentry
- [ ] from Datadog
- [ ] Collect metrics for simulated exceptions
- [ ] Support telemetry
- [ ] Support more tailored usage in staging
- [ ] Support for coordination across distributed nodes
Inspirations
The biggest inspirations for this library are the following:
- Mimic - I've been using Mimic for a while now, and it's a great library. I want to better understand it and also to apply its approach to learn more about Elixir and OTP.
- sled simulation guide (jepsen-proof engineering) - I've been reading more about distributed systems and stumbled upon this post. I can't hide that the topic is beyond me for now, but I'm interested in going deeper into it.
Copyright and License
Copyright (c) 2024 Nikolay Dyulgerov
This library is MIT licensed. See the LICENSE.md for details.