|
|
@ -1,7 +1,7 @@ |
|
|
|
# devp2p Simulations |
|
|
|
# devp2p Simulations |
|
|
|
|
|
|
|
|
|
|
|
The `p2p/simulations` package implements a simulation framework which supports |
|
|
|
The `p2p/simulations` package implements a simulation framework that supports |
|
|
|
creating a collection of devp2p nodes, connecting them together to form a |
|
|
|
creating a collection of devp2p nodes, connecting them to form a |
|
|
|
simulation network, performing simulation actions in that network and then |
|
|
|
simulation network, performing simulation actions in that network and then |
|
|
|
extracting useful information. |
|
|
|
extracting useful information. |
|
|
|
|
|
|
|
|
|
|
@ -65,10 +65,10 @@ localhost ports. |
|
|
|
|
|
|
|
|
|
|
|
## Network |
|
|
|
## Network |
|
|
|
|
|
|
|
|
|
|
|
A simulation network is created with an ID and default service (which is used |
|
|
|
A simulation network is created with an ID and default service. The default |
|
|
|
if a node is created without an explicit service), exposes methods for |
|
|
|
service is used if a node is created without an explicit service. The |
|
|
|
creating, starting, stopping, connecting and disconnecting nodes, and emits |
|
|
|
network has exposed methods for creating, starting, stopping, connecting |
|
|
|
events when certain actions occur. |
|
|
|
and disconnecting nodes. It also emits events when certain actions occur. |
|
|
|
|
|
|
|
|
|
|
|
### Events |
|
|
|
### Events |
|
|
|
|
|
|
|
|
|
|
@ -80,7 +80,7 @@ A simulation network emits the following events: |
|
|
|
|
|
|
|
|
|
|
|
The events have a "control" flag which when set indicates that the event is the |
|
|
|
The events have a "control" flag which when set indicates that the event is the |
|
|
|
outcome of a controlled simulation action (e.g. creating a node or explicitly |
|
|
|
outcome of a controlled simulation action (e.g. creating a node or explicitly |
|
|
|
connecting two nodes together). |
|
|
|
connecting two nodes). |
|
|
|
|
|
|
|
|
|
|
|
This is in contrast to a non-control event, otherwise called a "live" event, |
|
|
|
This is in contrast to a non-control event, otherwise called a "live" event, |
|
|
|
which is the outcome of something happening in the network as a result of a |
|
|
|
which is the outcome of something happening in the network as a result of a |
|
|
@ -98,12 +98,12 @@ network and then wait for expectations to be met. |
|
|
|
With a running simulation network, the `Simulation.Run` method can be called |
|
|
|
With a running simulation network, the `Simulation.Run` method can be called |
|
|
|
with a `Step` which has the following fields: |
|
|
|
with a `Step` which has the following fields: |
|
|
|
|
|
|
|
|
|
|
|
* `Action` - a function which performs some action in the network |
|
|
|
* `Action` - a function that performs some action in the network |
|
|
|
|
|
|
|
|
|
|
|
* `Expect` - an expectation function which returns whether or not a |
|
|
|
* `Expect` - an expectation function which returns whether or not a |
|
|
|
given node meets the expectation |
|
|
|
given node meets the expectation |
|
|
|
|
|
|
|
|
|
|
|
* `Trigger` - a channel which receives node IDs which then trigger a check |
|
|
|
* `Trigger` - a channel that receives node IDs which then trigger a check |
|
|
|
of the expectation function to be performed against that node |
|
|
|
of the expectation function to be performed against that node |
|
|
|
|
|
|
|
|
|
|
|
As a concrete example, consider a simulated network of Ethereum nodes. An |
|
|
|
As a concrete example, consider a simulated network of Ethereum nodes. An |
|
|
@ -116,7 +116,7 @@ the expectation and what network events were emitted during the step run. |
|
|
|
|
|
|
|
|
|
|
|
## HTTP API |
|
|
|
## HTTP API |
|
|
|
|
|
|
|
|
|
|
|
The simulation framework includes a HTTP API which can be used to control the |
|
|
|
The simulation framework includes a HTTP API that can be used to control the |
|
|
|
simulation. |
|
|
|
simulation. |
|
|
|
|
|
|
|
|
|
|
|
The API is initialised with a particular node adapter and has the following |
|
|
|
The API is initialised with a particular node adapter and has the following |
|
|
|