Crate arti_testing

Source
Expand description

Tool for running an Arti client with unusual behavior or limitations.

Example use:

$ cat ~/.arti_testing.toml
[storage]

cache_dir = "${USER_HOME}/.arti_testing/cache"
state_dir = "${USER_HOME}/.arti_testing/state"

$ ./target/debug/arti-testing bootstrap --config ~/.arti-testing.toml \
          --timeout 120 --expect=success
[...lots of logs]
Operation succeeded [as expected]
TCP stats: TcpCount { n_connect_attempt: 4, n_connect_ok: 2, n_accept: 0, n_bytes_send: 461102, n_bytes_recv: 3502811 }
Total events: Trace: 6943, Debug: 17, Info: 13, Warn: 0, Error: 0

$ faketime '1 year ago' ./target/debug/arti-testing connect \
          --config ~/.arti-testing.toml
          --target www.torproject.org:80
          --timeout 60
          --expect=timeout
[...lots of logs...]
Timeout occurred [as expected]
TCP stats: TcpCount { n_connect_attempt: 3, n_connect_ok: 3, n_accept: 0, n_bytes_send: 10917, n_bytes_recv: 16704 }
Total events: Trace: 77, Debug: 21, Info: 10, Warn: 2, Error: 0

ยงTODO

  • More ways to break

    • make TCP connections fail only sporadically
    • make TLS fail
      • With wrong cert
      • Mysteriously
      • With complete junk
      • TLS succeeds, then sends nonsense
      • Authenticating with wrong ID.
    • Munge directory before using it
      • May require some dirmgr plug-in. :p
      • May require
  • More things to look at

    • do something on the connection
    • look at bootstrapping status and events
    • Make streams repeatedly on different circuits with some delay.
  • Make sure we can replicate all/most test situations from arti#329

  • Actually implement those tests.

Modulesยง

  • config ๐Ÿ”’
    Reading configuration and command line issues in arti-testing.
  • dirfilter ๐Ÿ”’
    Support for modifying directories in various ways in order to cause different kinds of network failure.
  • rt ๐Ÿ”’
    Runtimes designed for testing.
  • traces ๐Ÿ”’
    Code to count the traces at different severities.

Structsยง

  • Job ๐Ÿ”’
    Descriptions of an action to take, and what to expect as an outcome.
  • TcpBreakage ๐Ÿ”’
    Describes how (if at all) to break TCP connection attempts

Enumsยง

  • Action ๐Ÿ”’
    A possible action for the tool to try to take
  • BreakageStage ๐Ÿ”’
    At what stage to install a kind of breakage
  • Expectation ๐Ÿ”’
    What we expect to happen when we run a given job.

Functionsยง