The integration testing proposal introduced new set of requirements which would require that the infrastructure be controlled at the code level in order to write the tests.
## Proposed Change
The following components shall be required
### Network driver `ND`
The network driver is module which would implement the basic infrastructure management operations which would then be used in test cases to simulate different scenarios.
The `Node` class shall have the following methods:
-`url`
-`start()`
-`stop()`
-`start_tendermint()`
-`stop_tendermint()`
-`configure_tendermint()`
-`reset_tendermint()`
-`start_db()`
-`stop_db()`
-`reset_db()`
-`configure_bigchaindb()`
-`configure_clock()`
-`configure_QoS()` (discussed later)
`configure_clock()`: This method should allow to change the clock on a given node. This could facilitate simulation of nodes located in different time zones.
`configure_QoS()`: This methods allows configuring different scenarios like network latency, packet loss etc. The underlying implementation could be facilitated via [tc](https://wiki.linuxfoundation.org/networking/netem).
The network driver implementation could be achieved using the following libraries