57 lines
2.1 KiB
Markdown
57 lines
2.1 KiB
Markdown
|
# uTP testing infrastructure
|
||
|
|
||
|
Testing infrastructure which enables to test uTP implementation over different
|
||
|
network conditions on local machine.
|
||
|
|
||
|
Highly based on tools developed to test quic protocol:
|
||
|
|
||
|
[quic-interop-runner](https://github.com/marten-seemann/quic-interop-runner)
|
||
|
|
||
|
[quic-network-simulator](https://github.com/marten-seemann/quic-network-simulator)
|
||
|
|
||
|
## Prerequisities
|
||
|
|
||
|
- Machine with docker installed
|
||
|
|
||
|
- nimbus-eth1 set-up to run `make utp_test`
|
||
|
|
||
|
## How it works
|
||
|
|
||
|
Test setup uses docker compose to start 3 docker containers:
|
||
|
- client - which is instance of uTP test app
|
||
|
- server - which is instance of uTP test app
|
||
|
- sim - which is instance with ns3 network simulator with several pre-compiled scenarios
|
||
|
|
||
|
The networking is setup in such way that network traffic is routed from client to server
|
||
|
and server to client thorugh sim which decideds what to do with flowing packets
|
||
|
|
||
|
Explanation from [quic-network-simulator](https://github.com/marten-seemann/quic-network-simulator):
|
||
|
|
||
|
```
|
||
|
The framework uses two networks on the host machine: `leftnet` (IPv4
|
||
|
193.167.0.0/24, IPv6 fd00:cafe:cafe:0::/64) and `rightnet` (IPv4
|
||
|
193.167.100.0/24, IPv6 fd00:cafe:cafe:100::/64). `leftnet` is connected to the
|
||
|
client docker image, and `rightnet` is connected to the server. The ns-3
|
||
|
simulation sits in the middle and forwards packets between `leftnet` and
|
||
|
`rightnet`
|
||
|
```
|
||
|
|
||
|
## Practicalities
|
||
|
|
||
|
For now process is semi-manual (TODO automate this as much as possible)
|
||
|
|
||
|
To run integration testing scenarios with different network conditions
|
||
|
|
||
|
```
|
||
|
1. cd nimbus-eth1/
|
||
|
2. docker build -t test-utp --build-arg BRANCH_NAME={branch-name} fluffy/tools/utp_testing/docker
|
||
|
3. SCENARIO="scenario_details" docker-compose -f fluffy/tools/utp_testing/docker/docker-compose.yml up
|
||
|
|
||
|
For example:
|
||
|
SCENARIO="drop-rate --delay=15ms --bandwidth=10Mbps --queue=25 --rate_to_client=0 --rate_to_server=0" docker-compose -f fluffy/tools/utp_testing/docker/docker-compose.yml up
|
||
|
would start `drop-rate` scenario with specified delay, bandwith, and different drop rates
|
||
|
4. make utp-test
|
||
|
```
|
||
|
|
||
|
All scenarios are specified in: [scenarios](https://github.com/marten-seemann/quic-network-simulator/tree/master/sim/scenarios)
|