mirror of
https://github.com/outbackdingo/firezone.git
synced 2026-01-27 18:18:55 +00:00
`tunnel_test` uses the `FluxCapacitor` component to rapidly advance time within a test-run. This component is also used by the logger in the tests to print _relative_ timestamps which makes it easier to compare different test runs. Currently, this component is initialised in the `ReferenceState` although it isn't really part of the test-input itself. It is only needed during the execution of a transition. When proptest finds a failing test run, it will reuse the same `ReferenceState` and attempt to shrink it to find the minimally-failing input. It does this by calling `.clone`. Because `FluxCapacitor` uses interior mutability to advance time, this means the time isn't actually reset to `0` whilst proptest is shrinking the input. This has / had on impact on the outcome of the test, it only makes the logs harder and more confusing to read. We fix this by removing the `StateMachineTest` trait implementation of `TunnelTest` and passing an additional parameter to `init_state`. This trait was originally needed because we were using the "no-boilerplate" version of `proptest-state-machine`. We have recently migrated away from that to get more fine-grained control over logging and test execution, meaning we no longer need this trait and can simply call these functions ourselves.
Rust development guide
Firezone uses Rust for all data plane components. This directory contains the Linux and Windows clients, and low-level networking implementations related to STUN/TURN.
We target the last stable release of Rust using rust-toolchain.toml.
If you are using rustup, that is automatically handled for you.
Otherwise, ensure you have the latest stable version of Rust installed.
Reading Client logs
The Client logs are written as JSONL for machine-readability.
To make them more human-friendly, pipe them through jq like this:
cd path/to/logs # e.g. `$HOME/.cache/dev.firezone.client/data/logs` on Linux
cat *.log | jq -r '"\(.time) \(.severity) \(.message)"'
Resulting in, e.g.
2024-04-01T18:25:47.237661392Z INFO started log
2024-04-01T18:25:47.238193266Z INFO GIT_VERSION = 1.0.0-pre.11-35-gcc0d43531
2024-04-01T18:25:48.295243016Z INFO No token / actor_name on disk, starting in signed-out state
2024-04-01T18:25:48.295360641Z INFO null