Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add network tests in advanced docs #362

Merged
merged 6 commits into from
May 30, 2024
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
91 changes: 91 additions & 0 deletions docs/advanced/test-command.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
---
sidebar_position: 1
description: Test networking between Charon dependant services
---

import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';

# Network tests

:::caution
The charon test command is in alpha state and should be used with caution on testnets only.
:::

Charon test command is evaluates effectiveness of the network between the machine it is running on and the targeted external service - other Charon peers, beacon node(s) or validator client. It prints a performance report to the standard output (can be omitted by with `quiet` flag) and a machine-readable TOML format of the report if `output-toml` flag is set.

## Peers

Run tests towards other Charon peers to evaluate the effectiveness of a potential cluster setup. The command sets up a libp2p node, similarly to what Charon originally does. This test command **has to be running simultanuously with other peers**. After the node is up it has some await time for other peers to get their nodes up and running, retrying every 3 seconds. The libp2p node connects to relays (configurable with `p2p-relays` flag) and to other libp2p nodes via TCP. Other peer nodes are discoverable by using their ENRs. Note that for a peer to be successfully discovered, it needs to be connected to the same relay. After completion of the test suite the libp2p node stays alive (duration configurable with `keep-alive` flag) for other peers to continue testing against it. The node can be forcefully stopped as well.

To be able to establish direct connection, you have to ensure:

- Your machine is publicly accessible on the internet or atleast a specific port is.
- You add flag `p2p-tcp-address` (i.e.: `127.0.0.1:9001`) flag and the port specified in it is free and publicly accessible.
- You add the flag `p2p-external-ip` (i.e.: `8.8.8.8`) and specify your public ip.

If all points are satisfied by you and the other peers, you should be able to establish a direct TCP connection between each other. Note that a relay is still required, as establishing direct connection is facilitated by it.

### Pre-requisites

- [Create ENR](http://localhost:3000/docs/next/charon/charon-cli-reference#creating-an-enr-for-charon).
- Share your ENR with other peers which will test against you.
- Obtain the ENRs of the other peers against which you will test.

### Run

```shell
charon alpha test peers \
--enrs="enr:-HW4QNDXi9MzdH9Af65g20jDfelAJ0kJhclitkYYgFziYHXhRFF6JyB_CnVnimB7VxKBGBSkHbmy-Tu8BJq8JQkfptiAgmlkgnY0iXNlY3AyNTZrMaEDBVt5pk6x0A2fjth25pjLOEE9DpqCG-BCYyvutY04TZ,enr:-HW4QO2vefLueTBEUGly5hkcpL7NWdMKWx7Nuy9f7z6XZInCbFAc0IZj6bsnmj-Wi4ElS6jNa0Mge5Rkc2WGTVemas2AgmlkgnY0iXNlY3AyNTZrMaECR9SmYQ_1HRgJmNxvh_ER2Sxx78HgKKgKaOkCROYwaDY"
```

### Run with Docker

```shell
docker run -v /Users/obol/charon/.charon:/opt/charon/.charon obolnetwork/charon:v1.0.0-rc1 alpha test peers \
--enrs="enr:-HW4QNDXi9MzdH9Af65g20jDfelAJ0kJhclitkYYgFziYHXhRFF6JyB_CnVnimB7VxKBGBSkHbmy-Tu8BJq8JQkfptiAgmlkgnY0iXNlY3AyNTZrMaEDBVt5pk6x0A2fjth25pjLOEE9DpqCG-BCYyvutY04TZs,enr:-HW4QO2vefLueTBEUGly5hkcpL7NWdMKWx7Nuy9f7z6XZInCbFAc0IZj6bsnmj-Wi4ElS6jNa0Mge5Rkc2WGTVemas2AgmlkgnY0iXNlY3AyNTZrMaECR9SmYQ_1HRgJmNxvh_ER2Sxx78HgKKgKaOkCROYwaDY"
```

## Beacon

Run tests towards beacon node(s), evaluating the effectiveness of a potential connection of a Charon node running on the same machine.

### Pre-requisites

- Running beacon node(s) towards which tests will be executed.

### Run

```shell
charon alpha test beacon \
--endpoints="https://ethereum-holesky-beacon-api.publicnode.com,https://ethereum-sepolia-beacon-api.publicnode.com"
```

### Run with Docker

```shell
docker run obolnetwork/charon:v1.0.0-rc1 alpha test beacon \
--endpoints="https://ethereum-holesky-beacon-api.publicnode.com,https://ethereum-sepolia-beacon-api.publicnode.com"
```

## Validator

Run tests towards a validator client, evaluating the effectiveness of a potential connection of a Charon node running on the same machine.

The default endpoint for pinging a validator client is set to `127.0.0.1:3600` (configurable with `validator-api-address` flag).

### Pre-requisites

- Running validator client towards which tests will be executed.

### Run

```shell
charon alpha test validator
```

### Run with Docker

```shell
docker run obolnetwork/charon:v1.0.0-rc1 alpha test validator
```
Loading