# Run Through Jepsen Tutorial ## Metadata **Status**:: #x **Zettel**:: #zettel/literature **Created**:: [[2026-06-14]] **URL**:: [github.com](https://github.com/jepsen-io/jepsen/blob/main/doc/tutorial/01-scaffolding.md) **GitHub**:: [doitian/jepsen.etcdemo](https://github.com/doitian/jepsen.etcdemo) ## Synopsis A test framework in Clojure that has integration with model checkers and fault injection (via Nemesis). ## Highlights ### Test scaffolding - The option `{:pure-generators true}` is no longer needed in newer version of Jepsen. ### Database automation - Jepsen uses hostnames n1, n2, … for nodes by default. Create a nodes file that each line is a hostname or IP and use `--nodes-file` to use the nodes file. - Jepsen uses root:root by default. - Use `(debian/install ["ca-certificates"])` to install missing packages. - Jepsen use `scp` to download log files. Use test option `:remote` to specify following function to adopt the same auth mechanism used by the test: ```clojure (def sftp-remote "Like jepsen.control's default sshj remote, but without the shell-out SCP wrapper. The SCP wrapper invokes the system `scp` binary, which can't use the test's :ssh password and prompts interactively when no key is present. sshj's own SFTP up/download honors username+password auth, so log-file downloads work with root:root." (-> (sshj/->SSHJRemote sshj/concurrency-limit nil nil nil) retry/remote)) ``` ### Refining Tests - Crash operations increase the space to explore thus degrade the testing performance. Convert crash operations to failures to improve the performance.