Failify is a test framework for end-to-end testing of distributed systems. It can be used to deterministically inject failures during a normal test case execution. Currently, node failure, network partition, network delay, network packet loss, and clock drift is supported. For a few supported languages, it is possible to enforce a specific order between nodes in order to reproduce a specific time-sensitive scenario and inject failures before or after a specific method is called when a specific stack trace is present. For more information, please refer to the documentation
To get started using Failify, look at the Failify's User Guide for your desired version. For detailed information about Failify's API take a look at its Javadoc. If you still have questions, try asking in StackOverflow using failify tag or create a github issue with question label.
Contribution to Failify is welcomed and appreciated. For developer guides check out the project's wiki. To contribute, you first need to find an open issue in the project issues page. If what you want to work on is not listed as an issue, first create an issue and discuss the importance and necessity of what you want to contribute. Then, send a pull request to be reviewed. If approved, your pull request will be merged into develop and will be included in the next release! Yaaaaay!
Failify is licensed under MIT and is freely available on Github.