123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- This is chutney. It doesn't do much so far. It isn't ready for prime-time.
- If it breaks, you get to keep all the pieces.
- It is supposed to be a good tool for:
- - Configuring a testing tor network
- - Launching and monitoring a testing tor network
- - Running tests on a testing tor network
- Right now it only sorta does these things.
- You will need, at the moment:
- - Tor installed somewhere in your path or the location of the 'tor' and
- 'tor-gencert' binaries specified through the environment variables
- CHUTNEY_TOR and CHUTNEY_TOR_GENCERT, respectively.
- - Python 2.7 or later
- Stuff to try:
- Automated Setup, Verification, and Shutdown:
- ./tools/test-network.sh --flavor basic-min
- ./tools/test-network.sh --coverage
- ./tools/test-network.sh --tor-path <tor-build-directory>
- ./tools/test-network.sh --tor <name-or-path> --tor-gencert <name-or-path>
- (--tor-path and $TOR_DIR override --tor and --tor-gencert.)
- ./tools/test-network.sh --chutney-path <chutney-directory>
- (The script is pretty good at guessing this.)
- test-network.sh looks for some tor binaries (either in a nearby build
- directory or in your $PATH), configures a comprehensive tor test network,
- launches it, then verifies data transmission through it, and cleans up after
- itself.
- You can modify its configuration using command-line arguments, or use the
- chutney environmental variables documented below:
- Timing Options:
- --start-time CHUTNEY_START_TIME
- --bootstrap-time CHUTNEY_BOOTSTRAP_TIME
- --stop-time CHUTNEY_STOP_TIME
- Traffic Options:
- --data CHUTNEY_DATA_BYTES
- --connections CHUTNEY_CONNECTIONS
- --hs-multi-client CHUTNEY_HS_MULTI_CLIENT
- Address Options:
- --ipv4 CHUTNEY_LISTEN_ADDRESS
- --ipv6 CHUTNEY_LISTEN_ADDRESS_V6
- Standard Actions:
- ./chutney configure networks/basic
- ./chutney start networks/basic
- ./chutney status networks/basic
- ./chutney verify networks/basic
- ./chutney hup networks/basic
- ./chutney stop networks/basic
- Bandwidth Tests:
- ./chutney configure networks/basic-min
- ./chutney start networks/basic-min
- ./chutney status networks/basic-min
- CHUTNEY_DATA_BYTES=104857600 ./chutney verify networks/basic-min
- # Send 100MB of data per client connection
- # verify produces performance figures for:
- # Single Stream Bandwidth: the speed of the slowest stream, end-to-end
- # Overall tor Bandwidth: the sum of the bandwidth across each tor instance
- # This approximates the CPU-bound tor performance on the current machine,
- # assuming everything is multithreaded and network performance is infinite.
- ./chutney stop networks/basic-min
- Connection Tests:
- ./chutney configure networks/basic-025
- ./chutney start networks/basic-025
- ./chutney status networks/basic-025
- CHUTNEY_CONNECTIONS=5 ./chutney verify networks/basic-025
- # Make 5 connections from each client through a random exit
- ./chutney stop networks/basic-025
- Note: If you create 7 or more connections to a hidden service from a single
- Tor 0.2.7 client, you'll likely get a verification failure due to #15937.
- This is fixed in 0.2.8.
- HS Connection Tests:
- ./chutney configure networks/hs-025
- ./chutney start networks/hs-025
- ./chutney status networks/hs-025
- CHUTNEY_HS_MULTI_CLIENT=1 ./chutney verify networks/hs-025
- # Make a connection from each client to each hs
- # Default behavior is one client connects to each HS
- ./chutney stop networks/hs-025
- Waiting for the network:
- The tools/test-network.sh script waits CHUTNEY_START_TIME seconds
- (default: 20) before calling chutney verify, because that's the minimum
- amount of time it takes to bootstrap a consensus containing relays.
- (It takes 5-10 seconds for the authorities to create the first consensus,
- then 10 seconds for relays to bootstrap, submit their descriptors, and be
- included in the next consensus.) If CHUTNEY_START_TIME is negative, the
- script leaves the network running, and exits immediately (without verifying).
- Commands like "chutney verify" start immediately, and keep trying for
- CHUTNEY_BOOTSTRAP_TIME seconds (default: 60). If it hasn't been
- successful after that time, it fails. If CHUTNEY_BOOTSTRAP_TIME is negative,
- the script leaves the network running, and exits after CHUTNEY_START_TIME
- (without verifying).
- The tools/test-network.sh script waits CHUTNEY_STOP_TIME seconds
- after verifying, then exits (default: immediately). If CHUTNEY_STOP_TIME is
- negative, the script leaves the network running, and exits after verifying.
- Changing the network address:
- Chutney defaults to binding to localhost. To change the IPv4 bind address,
- set the CHUTNEY_LISTEN_ADDRESS environment variable. Similarly, change
- CHUTNEY_LISTEN_ADDRESS_V6 for IPv6: it defaults to "no IPv6 address".
- Setting it to some interface's IP address allows us to make the simulated
- Tor network available on the network.
- IPv6 support for both Tor and Chutney is a work in progress. Currently,
- chutney verifies IPv6 client, bridge client, and hidden service
- connections. It does not use IPv6 SOCKSPort or Exit traffic.
- The configuration files:
- networks/basic holds the configuration for the network you're configuring
- above. It refers to some torrc template files in torrc_templates/.
- The working files:
- chutney sticks its working files, including all data directories, log
- files, etc, in ./net/. Each tor instance gets a subdirectory of net/nodes.
- You can override the directory "./net" with the CHUTNEY_DATA_DIR
- environment variable.
- Test scripts:
- The test scripts are stored in the "scripts/chutney_tests" directory. These
- Python files must define a "run_test(network)" function. Files starting with
- an underscore ("_") are ignored.
- Test scripts can be run using the following syntax:
- ./chutney <script-name> networks/<network-name>
- The chutney verify command is implemented using a test script.
- Test scripts in the test directory with the same name as standard commands
- are run instead of that standard command. This allows expert users to replace
- the standard chutney commands with modified versions.
|