Skip to content

Istanbul BFT on Quorum Test Specification

Alan Chen edited this page Aug 28, 2017 · 7 revisions

Istanbul BFT Test Specification

Availability/Stress Testing

# of validators 4 7

Numbering System

Test cases are numbered with the format of TA-B-CC-DD where:

Symbol Description
Q Numbering initial, defaults to Q referring to Quorum.
A Group. F: Functional tests. P: Performance tests.
B Attribute sub-group. U: Unit tests. S: Situational tests.
C Sequence.
D Sub-sequence.

General consensus tests

Number Item Description Expectation
QFS-01-01 Blockchain initialization Run geth init with proper gensis.json Should run without fails.
QFS-01-02 Run geth Run geth after geth init. Should run without fails.
QFS-01-03 Peer connection Run geth with static validators should be able to connect to peers admin.peers should return expected peers.
QFS-01-04 Consensus progress Validator network should be able to generate blocks Watch 10 blocks and each block should be created in 3 seconds.
QFS-01-05 Round robin proposer selection Validator network should pick proposers in round robin fashion Watch 12 blocks and make sure each validator generates at least 3 blocks in a 4 validator network.

Dynamic validators addition/removal testing

Number Item Description Expectation
QFS-02-01 Add validators Randomly add several validators Validator network should grow.
QFS-02-02 New validators consensus participation Add a new validator in validator network Watch few block and see if the newly added validator has been picked as proposer at least once.
QFS-02-03 Remove validators Randomly remove few validators Validator network should shrink.
QFS-02-04 Reduce validator network size below 2F+1 Reduce validator network size but keep it more than 2F+1. Blocks should still be created continuously.
QFS-02-05 Reduce validator network size below 2F+1 Reduce validator network size to less than 2F+1. Blocks should stop being created.

Recoverability testing

Number Item Description Expectation
QFS-03-01 Add validator to more than 2F+1 Add validators in a network with < 2F+1 validators to > 2F+1. Blocks should start being created.

Non-Byzantine faulty behavior testing

Number Item Description Expectation
QFS-04-01 Stop F validators In a 3F+1 network, stop F validators. Blocks should keep generating.

Byzantine faulty behavior testing

Number Item Description Expectation
QFS-05-01 F faulty validators In a 3F+1 network, setup F faulty validators and 2F+1 normal validators. Blocks should keep generating.
QFS-05-02 F+1 faulty validators In a 3F+1 network, setup F+1 faulty validators and 2F normal validators. Blocks should stop generating.

Block synchronization testing

Number Item Description Expectation
QFS-06-01 Node connection Run a 3F+1 validator network and start a new node The node should be able to connect to the validators.
QFS-06-02 Node synchronization Run a 3F+1 validator network, start a new node, and stop validator mining. The node and validators should have the same block height.

Gossip network testing

Number Item Description Expectation
QFS-07-01 Consensus on gossip network Run a weakly connected 3F+1 validator network, each validator connects to only one other validator. Block should keep generating.

Private transaction testing

Number Item Description Expectation
QFS-08-1 Constellation connection Run a 3F+1 validator network Each validator should have constellation connections to all other validators.
QFS-08-2 Sending private transaction Add two nodes in the network and let them connect to each other with constellation network. Send private transaction from one node to another. The receiving node should be able to see the transaction.
QFS-08-3 Private transaction decryption Same as above setting. Let the receiving node decrypt the private transaction. The receiving node should be able to see the private transaction data.
QFS-08-4 Encrypted private transaction Add three nodes (A, B, C) in the network and let them connect to each other with constellation network. Let A send private transaction to B. C should still be able to see the transaction, but the data is encrypted.