README 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. This is chutney. It doesn't do much so far. It isn't ready for prime-time.
  2. If it breaks, you get to keep all the pieces.
  3. It is supposed to be a good tool for:
  4. - Configuring a testing tor network
  5. - Launching and monitoring a testing tor network
  6. - Running tests on a testing tor network
  7. Right now it only sorta does these things.
  8. You will need, at the moment:
  9. - Tor installed somewhere in your path, or
  10. - The location of the 'tor' and 'tor-gencert' binaries specified through the
  11. environment variables CHUTNEY_TOR and CHUTNEY_TOR_GENCERT, respectively, or
  12. - To run chutney's tools/test-network.sh from a tor build directory, and
  13. - Python 2.7 or later (Python 3 support is an ongoing work)
  14. Stuff to try:
  15. Automated Setup, Verification, and Shutdown:
  16. ./tools/test-network.sh --flavor basic-min
  17. ./tools/test-network.sh --coverage
  18. ./tools/test-network.sh --tor-path <tor-build-directory>
  19. ./tools/test-network.sh --tor <name-or-path> --tor-gencert <name-or-path>
  20. (--tor-path and $TOR_DIR override --tor and --tor-gencert.)
  21. (The script tries hard to find tor.)
  22. ./tools/test-network.sh --chutney-path <chutney-directory>
  23. (The script is pretty good at finding chutney.)
  24. test-network.sh looks for some tor binaries (either in a nearby build
  25. directory or in your $PATH), configures a comprehensive tor test network,
  26. launches it, then verifies data transmission through it, and cleans up after
  27. itself. Relative paths are supported.
  28. You can modify its configuration using command-line arguments, or use the
  29. chutney environmental variables documented below:
  30. Timing Options:
  31. --start-time CHUTNEY_START_TIME
  32. --bootstrap-time CHUTNEY_BOOTSTRAP_TIME
  33. --stop-time CHUTNEY_STOP_TIME
  34. Traffic Options:
  35. --data CHUTNEY_DATA_BYTES
  36. --connections CHUTNEY_CONNECTIONS
  37. --hs-multi-client CHUTNEY_HS_MULTI_CLIENT
  38. Address Options:
  39. --ipv4 CHUTNEY_LISTEN_ADDRESS
  40. --ipv6 CHUTNEY_LISTEN_ADDRESS_V6
  41. Warning Options:
  42. --all-warnings CHUTNEY_WARNINGS_IGNORE_EXPECTED=false
  43. CHUTNEY_WARNINGS_SUMMARY=false
  44. --no-warnings CHUTNEY_WARNINGS_SKIP=true
  45. --only-warnings CHUTNEY_WARNINGS_ONLY=true
  46. Expert Options:
  47. --debug CHUTNEY_DEBUG=true
  48. --coverage USE_COVERAGE_BINARY=true
  49. --net-dir CHUTNEY_DATA_DIR
  50. --dry-run NETWORK_DRY_RUN=true
  51. --quiet ECHO=true
  52. (These are advanced options: in the past, they have had long-standing bugs.)
  53. Standard Actions:
  54. ./chutney configure networks/basic
  55. ./chutney start networks/basic
  56. ./chutney status networks/basic
  57. ./chutney verify networks/basic
  58. ./chutney hup networks/basic
  59. ./chutney stop networks/basic
  60. Bandwidth Tests:
  61. ./chutney configure networks/basic-min
  62. ./chutney start networks/basic-min
  63. ./chutney status networks/basic-min
  64. CHUTNEY_DATA_BYTES=104857600 ./chutney verify networks/basic-min
  65. # Send 100MB of data per client connection
  66. # verify produces performance figures for:
  67. # Single Stream Bandwidth: the speed of the slowest stream, end-to-end
  68. # Overall tor Bandwidth: the sum of the bandwidth across each tor instance
  69. # This approximates the CPU-bound tor performance on the current machine,
  70. # assuming everything is multithreaded and network performance is infinite.
  71. ./chutney stop networks/basic-min
  72. Connection Tests:
  73. ./chutney configure networks/basic-025
  74. ./chutney start networks/basic-025
  75. ./chutney status networks/basic-025
  76. CHUTNEY_CONNECTIONS=5 ./chutney verify networks/basic-025
  77. # Make 5 connections from each client through a random exit
  78. ./chutney stop networks/basic-025
  79. Note: If you create 7 or more connections to a hidden service from a single
  80. Tor 0.2.7 client, you'll likely get a verification failure due to #15937.
  81. This is fixed in 0.2.8.
  82. HS Connection Tests:
  83. ./chutney configure networks/hs-025
  84. ./chutney start networks/hs-025
  85. ./chutney status networks/hs-025
  86. CHUTNEY_HS_MULTI_CLIENT=1 ./chutney verify networks/hs-025
  87. # Make a connection from each client to each hs
  88. # Default behavior is one client connects to each HS
  89. ./chutney stop networks/hs-025
  90. Waiting for the network:
  91. The tools/test-network.sh script waits CHUTNEY_START_TIME seconds
  92. (default: 20) before calling chutney verify, because that's the minimum
  93. amount of time it takes to bootstrap a consensus containing relays.
  94. (It takes 5-10 seconds for the authorities to create the first consensus,
  95. then 10 seconds for relays to bootstrap, submit their descriptors, and be
  96. included in the next consensus.) If CHUTNEY_START_TIME is negative, the
  97. script leaves the network running, and exits immediately (without verifying).
  98. Commands like "chutney verify" start immediately, and keep trying for
  99. CHUTNEY_BOOTSTRAP_TIME seconds (default: 60). If it hasn't been
  100. successful after that time, it fails. If CHUTNEY_BOOTSTRAP_TIME is negative,
  101. the script leaves the network running, and exits after CHUTNEY_START_TIME
  102. (without verifying).
  103. The tools/test-network.sh script waits CHUTNEY_STOP_TIME seconds
  104. after verifying, then exits (default: immediately). If CHUTNEY_STOP_TIME is
  105. negative, the script leaves the network running, and exits after verifying.
  106. Changing the network address:
  107. Chutney defaults to binding to localhost. To change the IPv4 bind address,
  108. set the CHUTNEY_LISTEN_ADDRESS environment variable. Similarly, change
  109. CHUTNEY_LISTEN_ADDRESS_V6 for IPv6: it defaults to "no IPv6 address".
  110. Setting it to some interface's IP address allows us to make the simulated
  111. Tor network available on the network.
  112. IPv6 support for both Tor and Chutney is a work in progress. Currently,
  113. chutney verifies IPv6 client, bridge client, and hidden service
  114. connections. It does not use IPv6 SOCKSPort or Exit traffic.
  115. The configuration files:
  116. networks/basic holds the configuration for the network you're configuring
  117. above. It refers to some torrc template files in torrc_templates/.
  118. The working files:
  119. chutney sticks its working files, including all data directories, log
  120. files, etc, in ./net/. Each tor instance gets a subdirectory of net/nodes.
  121. You can override the directory "./net" with the CHUTNEY_DATA_DIR
  122. environment variable.
  123. Test scripts:
  124. The test scripts are stored in the "scripts/chutney_tests" directory. These
  125. Python files must define a "run_test(network)" function. Files starting with
  126. an underscore ("_") are ignored.
  127. Test scripts can be run using the following syntax:
  128. ./chutney <script-name> networks/<network-name>
  129. The chutney verify command is implemented using a test script.
  130. Test scripts in the test directory with the same name as standard commands
  131. are run instead of that standard command. This allows expert users to replace
  132. the standard chutney commands with modified versions.