The Ziggurat implementation for Algorand's algod
nodes.
Ziggurat is written in stable Rust; you can install the Rust toolchain by following the official instructions here.
- Clone this repository.
- Build go-algorand from source.
- Run the setup script:
tools/setup_env.sh
In case algorand files are installed in a specific location, export that location to the ALGORAND_BIN_PATH
environment variable and rerun the setup script:
export ALGORAND_BIN_PATH="$HOME/node" # example path
tools/setup_env.sh
Run conformance and resistance tests with the following command:
cargo +stable test
Create a package of IP addresses (4k addresses) which are required for performance tests.
NOTE: To run the ips.py
script below, the user must be in sudoers file in order to use this script.
Script uses ip
/ipconfig
commands which require the sudo privilages.
From the root repository directory, depending on your OS, run one of the following commands.
Generate dummy devices with addresses:
python3 ./tools/ips.py --subnet 1.1.0.0/20 --file src/tools/ips.rs --dev_prefix test_zeth
Add the whole subnet to the loopback device - can be also used on Linux (device name - Linux: lo
, MacOS: lo0
):
python3 ./tools/ips.py --subnet 1.1.0.0/20 --file src/tools/ips.rs --dev lo0
Increase the limit for the number of file descriptors:
ulimit -n 65536
Run performance tests with the following command:
cargo +stable test performance --features performance
Short overview of test cases and their current status. In case of failure, the behaviour observed is usually documented in the test case.
These results were obtained by running the test suite against Algorand v3.12.2-stable (181490e3).
Legend | |
---|---|
✓ | pass |
✖ | fail |
- | unimplemented |
Test Case | Algod | Additional Information |
---|---|---|
001 | ✓ | |
002 | ✓ | |
003 | ✓ | |
004 | ✓ | |
005 | ✓ | |
006 | ✓ | |
007 | ✓ | |
008 | ✓ | |
009 | ✖ | The PingReply handler doesn't exist anymore in the go-algorand codebase |
010 | ✓/✖ | Only BlockAndCert request is supported, other type requests are unsupported |
011 | ✓ | |
012 | ✓ | |
013 | ✓ |
Test Case | Algod | Additional Information |
---|---|---|
001 | ✓ | |
002 | ✓ |
Test Case | Algod | Additional Information |
---|---|---|
001 | ✖ | The node doesn't reject the connection in case a small amount of random data is sent |
002 | ✓/✖ | The procedure accepts sometimes invalid requests (should be improved) |
003 | ✖ | The node doesn't reject the connection in most scenarios |
004 | ✓/✖ | The node won't reject the connection for enormously long and invalid messages |