Changeset View
Changeset View
Standalone View
Standalone View
doc/functional-tests.md
Show First 20 Lines • Show All 332 Lines • ▼ Show 20 Lines | |||||
P2P messages. These can be found in the following source files: | P2P messages. These can be found in the following source files: | ||||
- `/src/rpc/*` for RPCs | - `/src/rpc/*` for RPCs | ||||
- `/src/wallet/rpc*` for wallet RPCs | - `/src/wallet/rpc*` for wallet RPCs | ||||
- `ProcessMessage()` in `/src/net_processing.cpp` for parsing P2P messages | - `ProcessMessage()` in `/src/net_processing.cpp` for parsing P2P messages | ||||
#### Using the P2P interface | #### Using the P2P interface | ||||
- [messages.py](/test/functional/test_framework/messages.py) contains all the | - `P2P`s can be used to test specific P2P protocol behavior. | ||||
definitions for objects that pass over the network (`CBlock`, `CTransaction`, | [p2p.py](/test/functional/test_framework/p2p.py) contains test framework | ||||
etc, along with the network-level wrappers for them, `msg_block`, `msg_tx`, etc). | p2p objects and [messages.py](/test/functional/test_framework/messages.py) | ||||
contains all the definitions for objects passed over the network (`CBlock`, | |||||
`CTransaction`, etc, along with the network-level wrappers for them, | |||||
`msg_block`, `msg_tx`, etc). | |||||
- P2P tests have two threads. One thread handles all network communication | - P2P tests have two threads. One thread handles all network communication | ||||
with the bitcoind(s) being tested in a callback-based event loop; the other | with the bitcoind(s) being tested in a callback-based event loop; the other | ||||
implements the test logic. | implements the test logic. | ||||
- `P2PConnection` is the class used to connect to a bitcoind. `P2PInterface` | - `P2PConnection` is the class used to connect to a bitcoind. `P2PInterface` | ||||
contains the higher level logic for processing P2P payloads and connecting to | contains the higher level logic for processing P2P payloads and connecting to | ||||
the Bitcoin Core node application logic. For custom behaviour, subclass the | the Bitcoin Core node application logic. For custom behaviour, subclass the | ||||
P2PInterface object and override the callback methods. | P2PInterface object and override the callback methods. | ||||
- Can be used to write tests where specific P2P protocol behavior is tested. | `P2PConnection`s can be used as such: | ||||
Examples tests are [p2p_unrequested_blocks.py](/test/functional/p2p_unrequested_blocks.py), | |||||
```python | |||||
p2p_conn = node.add_p2p_connection(P2PInterface()) | |||||
p2p_conn.send_and_ping(msg) | |||||
``` | |||||
They can also be referenced by indexing into a `TestNode`'s `p2ps` list, which | |||||
contains the list of test framework `p2p` objects connected to itself | |||||
(it does not include any `TestNode`s): | |||||
```python | |||||
node.p2ps[0].sync_with_ping() | |||||
``` | |||||
More examples can be found in [p2p_unrequested_blocks.py](/test/functional/p2p_unrequested_blocks.py), | |||||
[p2p_compactblocks.py](/test/functional/p2p_compactblocks.py). | [p2p_compactblocks.py](/test/functional/p2p_compactblocks.py). | ||||
#### Prototyping tests | #### Prototyping tests | ||||
The [`TestShell`](test-shell.md) class exposes the BitcoinTestFramework | The [`TestShell`](test-shell.md) class exposes the BitcoinTestFramework | ||||
functionality to interactive Python3 environments and can be used to prototype | functionality to interactive Python3 environments and can be used to prototype | ||||
tests. This may be especially useful in a REPL environment with session logging | tests. This may be especially useful in a REPL environment with session logging | ||||
utilities, such as | utilities, such as | ||||
Show All 29 Lines |