Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
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
4 changes: 2 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ members = [
"node/common",
"node/invariants",
"node/native",
"node/testing",
"tools/testing",
"node/web",
"p2p",
"p2p/libp2p-rpc-behaviour",
Expand Down Expand Up @@ -142,7 +142,7 @@ mina-node-account = { path = "node/account" }
mina-node-common = { path = "node/common" }
mina-node-invariants = { path = "node/invariants" }
mina-node-native = { path = "node/native" }
mina-node-testing = { path = "node/testing" }
mina-node-testing = { path = "tools/testing" }
mina-p2p-messages = { path = "mina-p2p-messages" }
mina-poseidon = { git = "https://github.com/o1-labs/proof-systems", tag = "0.2.0" }
mina-signer = { git = "https://github.com/o1-labs/proof-systems", tag = "0.2.0" }
Expand Down
10 changes: 5 additions & 5 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -368,7 +368,7 @@ docker-build-bootstrap-sandbox: ## Build bootstrap sandbox Docker image
.PHONY: docker-build-debugger
docker-build-debugger: ## Build debugger Docker image
docker build -t $(DOCKER_ORG)/mina-rust-debugger:$(GIT_COMMIT) \
-f node/testing/docker/Dockerfile.debugger node/testing/docker/
-f tools/testing/docker/Dockerfile.debugger tools/testing/docker/

.PHONY: docker-build-frontend
docker-build-frontend: ## Build frontend Docker image
Expand All @@ -395,12 +395,12 @@ docker-build-fuzzing: ## Build fuzzing Docker image
.PHONY: docker-build-light
docker-build-light: ## Build light Docker image
docker build -t $(DOCKER_ORG)/mina-rust-light:$(GIT_COMMIT) \
-f node/testing/docker/Dockerfile.light node/testing/docker/
-f tools/testing/docker/Dockerfile.light tools/testing/docker/

.PHONY: docker-build-light-focal
docker-build-light-focal: ## Build light focal Docker image
docker build -t $(DOCKER_ORG)/mina-rust-light-focal:$(GIT_COMMIT) \
-f node/testing/docker/Dockerfile.light.focal node/testing/docker/
-f tools/testing/docker/Dockerfile.light.focal tools/testing/docker/

.PHONY: docker-build-mina
docker-build-mina: ## Build main Mina Docker image
Expand All @@ -419,12 +419,12 @@ docker-build-mina: ## Build main Mina Docker image
.PHONY: docker-build-mina-testing
docker-build-mina-testing: ## Build Mina testing Docker image
docker build -t $(DOCKER_ORG)/mina-rust-testing:$(GIT_COMMIT) \
-f node/testing/docker/Dockerfile.mina node/testing/docker/
-f tools/testing/docker/Dockerfile.mina tools/testing/docker/

.PHONY: docker-build-test
docker-build-test: ## Build test Docker image
docker build -t $(DOCKER_ORG)/mina-rust-test:$(GIT_COMMIT) \
-f node/testing/docker/Dockerfile.test node/testing/docker/
-f tools/testing/docker/Dockerfile.test tools/testing/docker/

# Docker push targets

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ This repository contains the complete Mina Rust Node implementation:
- [node/](node) - Combines all the business logic of the node.
- [native/](node/native) - OS specific pieces of the node, which is used to
run the node natively (Linux/Mac/Windows).
- [testing/](node/testing) - Testing framework for Mina node.
- [testing/](tools/testing) - Testing framework for Mina node.
- [cli/](cli) - Mina CLI.
- [frontend/](frontend) - OpenMina frontend.

Expand Down
2 changes: 2 additions & 0 deletions node/common/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -48,5 +48,7 @@ google-cloud-storage = { workspace = true }
google-cloud-auth = { workspace = true }

[features]
# won't compile without this on
default = ["p2p-webrtc"]
p2p-webrtc = ["node/p2p-webrtc"]
p2p-libp2p = ["node/p2p-libp2p"]
7 changes: 0 additions & 7 deletions node/testing/docker/README.md

This file was deleted.

62 changes: 31 additions & 31 deletions p2p/testing.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@
If two nodes are connecting to each other at the same time, they should be
connected, so each one has exactly one connection.

- [`p2p_basic_connections(simultaneous_connections)`](../node/testing/src/scenarios/p2p/basic_connection_handling.rs#L25)
- [`p2p_basic_connections(simultaneous_connections)`](../tools/testing/src/scenarios/p2p/basic_connection_handling.rs#L25)

### Two Rust nodes shouldn't be disconnected for a while after they are connected

- [`p2p_basic_connections(connection_stbility)`](../node/testing/src/scenarios/p2p/basic_connection_handling.rs#L342)
- [`p2p_basic_connections(connection_stbility)`](../tools/testing/src/scenarios/p2p/basic_connection_handling.rs#L342)

### All connections should be tracked by the state machine

Expand All @@ -20,14 +20,14 @@ should be present in the state machine.

**Tests:**

- [`p2p_basic_connections(all_nodes_connections_are_symmetric)`](../node/testing/src/scenarios/p2p/basic_connection_handling.rs#L98)
- [`p2p_basic_connections(seed_connections_are_symmetric)`](../node/testing/src/scenarios/p2p/basic_connection_handling.rs#L165)
- [`p2p_basic_connections(all_nodes_connections_are_symmetric)`](../tools/testing/src/scenarios/p2p/basic_connection_handling.rs#L98)
- [`p2p_basic_connections(seed_connections_are_symmetric)`](../tools/testing/src/scenarios/p2p/basic_connection_handling.rs#L165)

### Number of active peers should not exceed configured maximum number

**Tests:**

- [`p2p_basic_connections(max_number_of_peers)`](../node/testing/src/scenarios/p2p/basic_connection_handling.rs#L248)
- [`p2p_basic_connections(max_number_of_peers)`](../tools/testing/src/scenarios/p2p/basic_connection_handling.rs#L248)

## Incoming Connections

Expand All @@ -37,10 +37,10 @@ We should accept an incoming connection from an arbitrary node.

**Tests:**

- [p2p_basic_incoming(accept_connection)](../node/testing/src/scenarios/p2p/basic_incoming_connections.rs#L16)
- [p2p_basic_incoming(accept_multiple_connections)](../node/testing/src/scenarios/p2p/basic_incoming_connections.rs#L62)
- [solo_node_accept_incoming](../node/testing/src/scenarios/solo_node/basic_connectivity_accept_incoming.rs)
- [multi_node_connection_discovery/OCamlToRust](../node/testing/src/scenarios/multi_node/connection_discovery.rs#L127)
- [p2p_basic_incoming(accept_connection)](../tools/testing/src/scenarios/p2p/basic_incoming_connections.rs#L16)
- [p2p_basic_incoming(accept_multiple_connections)](../tools/testing/src/scenarios/p2p/basic_incoming_connections.rs#L62)
- [solo_node_accept_incoming](../tools/testing/src/scenarios/solo_node/basic_connectivity_accept_incoming.rs)
- [multi_node_connection_discovery/OCamlToRust](../tools/testing/src/scenarios/multi_node/connection_discovery.rs#L127)
(should be replaced with one with non-OCaml peer)
- TODO: fast-running short test

Expand All @@ -59,14 +59,14 @@ malicious node that uses the same peer ID.

**Tests:**

- [`p2p_basic_incoming(does_not_accept_self_connection)`](../node/testing/src/scenarios/p2p/basic_incoming_connections.rs#L120)
- [`p2p_basic_incoming(does_not_accept_self_connection)`](../tools/testing/src/scenarios/p2p/basic_incoming_connections.rs#L120)

## Outgoing connections

### Node should connect to other nodes

- [`p2p_basic_outgoing(make_connection)`](../node/testing/src/scenarios/p2p/basic_outgoing_connections.rs#L19)
- [`p2p_basic_outgoing(make_multiple_connections)`](../node/testing/src/scenarios/p2p/basic_outgoing_connections.rs#L74)
- [`p2p_basic_outgoing(make_connection)`](../tools/testing/src/scenarios/p2p/basic_outgoing_connections.rs#L19)
- [`p2p_basic_outgoing(make_multiple_connections)`](../tools/testing/src/scenarios/p2p/basic_outgoing_connections.rs#L74)

### Node shouldn't try to make outgoing connection using its own peer_id

Expand All @@ -75,21 +75,21 @@ connecting to new peers.

**Tests:**

- [`p2p_basic_outgoing(dont_connect_to_node_same_id)`](node/testing/src/scenarios/p2p/basic_outgoing_connections.rs#L134)
- [`p2p_basic_outgoing(dont_connect_to_initial_peer_same_id)`](node/testing/src/scenarios/p2p/basic_outgoing_connections.rs#L187)
- [`p2p_basic_outgoing(dont_connect_to_self_initial_peer)`](node/testing/src/scenarios/p2p/basic_outgoing_connections.rs#L226)
- [`p2p_basic_outgoing(dont_connect_to_node_same_id)`](tools/testing/src/scenarios/p2p/basic_outgoing_connections.rs#L134)
- [`p2p_basic_outgoing(dont_connect_to_initial_peer_same_id)`](tools/testing/src/scenarios/p2p/basic_outgoing_connections.rs#L187)
- [`p2p_basic_outgoing(dont_connect_to_self_initial_peer)`](tools/testing/src/scenarios/p2p/basic_outgoing_connections.rs#L226)

### Node should connect to all available initial peers

TODO: what if the number of initial peers exceeds the max number of peers?

- [`p2p_basic_outgoing(connect_to_all_initial_peers)`](../node/testing/src/scenarios/p2p/basic_outgoing_connections.rs#L293)
- [multi_node_initial_joining](../node/testing/src/scenarios/multi_node/basic_connectivity_initial_joining.rs)
- [`p2p_basic_outgoing(connect_to_all_initial_peers)`](../tools/testing/src/scenarios/p2p/basic_outgoing_connections.rs#L293)
- [multi_node_initial_joining](../tools/testing/src/scenarios/multi_node/basic_connectivity_initial_joining.rs)
(partially?)

### Node should retry connecting to unavailable initial peers

- [`p2p_basic_outgoing(connect_to_unavailableinitial_peers)`](../node/testing/src/scenarios/p2p/basic_outgoing_connections.rs#L433)
- [`p2p_basic_outgoing(connect_to_unavailableinitial_peers)`](../tools/testing/src/scenarios/p2p/basic_outgoing_connections.rs#L433)

### Node should be able to connect to initial peers eventually, even if initially they are not available.

Expand All @@ -101,7 +101,7 @@ TODO: Use cases where this is important.

**Tests:**

- [`p2p_basic_outgoing(connect_to_all_initial_peers_become_ready)`](../node/testing/src/scenarios/p2p/basic_outgoing_connections.rs#L362)
- [`p2p_basic_outgoing(connect_to_all_initial_peers_become_ready)`](../tools/testing/src/scenarios/p2p/basic_outgoing_connections.rs#L362)

### Node should have a reasonable retry rate for reconnection

Expand All @@ -114,7 +114,7 @@ Rust node shouldn't reconnect too soon to a node that dropped the connection.

### Node advertises itself through Kademlia

- [solo_node_accept_incoming](../node/testing/src/scenarios/solo_node/basic_connectivity_accept_incoming.rs)
- [solo_node_accept_incoming](../tools/testing/src/scenarios/solo_node/basic_connectivity_accept_incoming.rs)
(TODO: should be replaced by one with Rust-only peer)

### Node should be able to perform initial peer selection (Kademlia "bootstrap")
Expand All @@ -135,9 +135,9 @@ returns a list of peers that are "close" to some random peer.

This step starts after Kademlia initialization is complete.

- [multi_node_peer_discovery](../node/testing/src/scenarios/multi_node/basic_connectivity_peer_discovery.rs)
- [multi_node_peer_discovery](../tools/testing/src/scenarios/multi_node/basic_connectivity_peer_discovery.rs)
(partially, should be replaced with one with a non-OCaml peer)
- [multi_node_connection_discovery/OCamlToRust](../node/testing/src/scenarios/multi_node/connection_discovery.rs#L127)
- [multi_node_connection_discovery/OCamlToRust](../tools/testing/src/scenarios/multi_node/connection_discovery.rs#L127)
(indirectly, should be replaced with one with a non-OCaml peer)
- TODO: fast-running Rust-only test

Expand All @@ -155,33 +155,33 @@ node behind NAT shouldn't advertise its address obtained using external

### Advertising to OCaml nodes

- [solo_node_accept_incoming](../node/testing/src/scenarios/solo_node/basic_connectivity_accept_incoming.rs)
- [multi_node_connection_discovery/OCamlToRustViaSeed](../node/testing/src/scenarios/multi_node/connection_discovery.rs#L267)
- [solo_node_accept_incoming](../tools/testing/src/scenarios/solo_node/basic_connectivity_accept_incoming.rs)
- [multi_node_connection_discovery/OCamlToRustViaSeed](../tools/testing/src/scenarios/multi_node/connection_discovery.rs#L267)

### Peer discovery via Rust node

If a Rust node is used as a seed node, OCaml nodes connected to it should be
able to also discover and connect to each other.

- [multi_node_connection_discovery/RustAsSeed](../node/testing/src/scenarios/multi_node/connection_discovery.rs#L25)
- [multi_node_connection_discovery/RustAsSeed](../tools/testing/src/scenarios/multi_node/connection_discovery.rs#L25)

### Peer discovery using OCaml seed node

- [multi_node_peer_discovery](../node/testing/src/scenarios/multi_node/basic_connectivity_peer_discovery.rs)
- [multi_node_connection_discovery/RustToOCamlViaSeed](../node/testing/src/scenarios/multi_node/connection_discovery.rs#L362)
- [multi_node_peer_discovery](../tools/testing/src/scenarios/multi_node/basic_connectivity_peer_discovery.rs)
- [multi_node_connection_discovery/RustToOCamlViaSeed](../tools/testing/src/scenarios/multi_node/connection_discovery.rs#L362)

## Incoming Connections

### OCaml node should be able to successfully connect to a Rust node

- [solo_node_accept_incoming](../node/testing/src/scenarios/solo_node/basic_connectivity_accept_incoming.rs)
- [multi_node_connection_discovery/OCamlToRust](../node/testing/src/scenarios/multi_node/connection_discovery.rs#L127)
- [solo_node_accept_incoming](../tools/testing/src/scenarios/solo_node/basic_connectivity_accept_incoming.rs)
- [multi_node_connection_discovery/OCamlToRust](../tools/testing/src/scenarios/multi_node/connection_discovery.rs#L127)

## Outgoing Connections

### Rust node should be able to successfully connect to an OCaml node

- [multi_node_connection_discovery/RustToOCaml](../node/testing/src/scenarios/multi_node/connection_discovery.rs#201)
- [multi_node_connection_discovery/RustToOCaml](../tools/testing/src/scenarios/multi_node/connection_discovery.rs#201)

# General Safety

Expand All @@ -192,7 +192,7 @@ able to also discover and connect to each other.
The node should connect to as many peers as it is configured to (between min and
max number).

- [multi_node_initial_joining](../node/testing/src/scenarios/multi_node/basic_connectivity_initial_joining.rs)
- [multi_node_initial_joining](../tools/testing/src/scenarios/multi_node/basic_connectivity_initial_joining.rs)

### Peer disconnection

Expand Down
2 changes: 1 addition & 1 deletion p2p/testing/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
### P2p Testing Framework

This is a lighter version of the [Testing Framework](../../node/testing/) that
This is a lighter version of the [Testing Framework](../../tools/testing/) that
is focused on peer-to-peer functionality of the Rust node.

It allows to set up, run and observe clusters of peers that implement Mina p2p
Expand Down
File renamed without changes.
File renamed without changes.
7 changes: 7 additions & 0 deletions tools/testing/docker/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
```
docker build -t vladsimplestakingcom/mina-light:2.0.0rampup4 -f tools/testing/docker/Dockerfile.light tools/testing/docker
docker build -t vladsimplestakingcom/mina-light:2.0.0rampup4-focal -f tools/testing/docker/Dockerfile.light.focal tools/testing/docker
docker build -t vladsimplestakingcom/mina-openmina-builder:focal -f tools/testing/docker/Dockerfile.openmina tools/testing/docker
docker build -t vladsimplestakingcom/mina-testenv:2.0.0rampup4-focal -f tools/testing/docker/Dockerfile.test tools/testing/docker
docker build -t vladsimplestakingcom/mina-debugger:2.0.0rampup4-focal -f tools/testing/docker/Dockerfile.debugger tools/testing/docker
```
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
10 changes: 5 additions & 5 deletions website/docs/developers/scripts/update-ocaml-node.sh
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,10 @@ echo "Updating config_${old_hash} to config_${new_hash}"

# Check if config_${old_hash} pattern exists in the files
config_files=(
"${base_dir}/node/testing/src/node/ocaml/config.rs"
"${base_dir}/node/testing/src/node/ocaml/mod.rs"
"${base_dir}/node/testing/src/scenarios/multi_node/basic_connectivity_peer_discovery.rs"
"${base_dir}/node/testing/src/scenarios/solo_node/basic_connectivity_accept_incoming.rs"
"${base_dir}/tools/testing/src/node/ocaml/config.rs"
"${base_dir}/tools/testing/src/node/ocaml/mod.rs"
"${base_dir}/tools/testing/src/scenarios/multi_node/basic_connectivity_peer_discovery.rs"
"${base_dir}/tools/testing/src/scenarios/solo_node/basic_connectivity_accept_incoming.rs"
)

config_pattern_found=false
Expand All @@ -63,7 +63,7 @@ version_files=(
"${base_dir}/.github/workflows/tests.yaml"
"${base_dir}/.github/workflows/test-graphql-compatibility.yml"
"${base_dir}/docker-compose.archive.devnet.compare.yml"
"${base_dir}/node/testing/src/node/ocaml/config.rs"
"${base_dir}/tools/testing/src/node/ocaml/config.rs"
)

version_pattern_found=false
Expand Down
4 changes: 2 additions & 2 deletions website/docs/developers/testing/network-connectivity.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ of the public (or private) OCaml testnet.

_The source code for this test can be found in this repo:_

[https://github.com/o1-labs/mina-rust/blob/develop/node/testing/src/scenarios/solo_node/basic_connectivity_initial_joining.rs](https://github.com/o1-labs/mina-rust/blob/develop/node/testing/src/scenarios/solo_node/basic_connectivity_initial_joining.rs)
[https://github.com/o1-labs/mina-rust/blob/develop/tools/testing/src/scenarios/solo_node/basic_connectivity_initial_joining.rs](https://github.com/o1-labs/mina-rust/blob/develop/tools/testing/src/scenarios/solo_node/basic_connectivity_initial_joining.rs)

We are testing these scenarios:

Expand Down Expand Up @@ -181,7 +181,7 @@ under our control.

_The source code for this test can be found in this repo:_

[https://github.com/o1-labs/mina-rust/blob/develop/node/testing/src/scenarios/multi_node/basic_connectivity_initial_joining.rs#L9](https://github.com/o1-labs/mina-rust/blob/develop/node/testing/src/scenarios/multi_node/basic_connectivity_initial_joining.rs#L9)
[https://github.com/o1-labs/mina-rust/blob/develop/tools/testing/src/scenarios/multi_node/basic_connectivity_initial_joining.rs#L9](https://github.com/o1-labs/mina-rust/blob/develop/tools/testing/src/scenarios/multi_node/basic_connectivity_initial_joining.rs#L9)

### How it's tested

Expand Down
10 changes: 5 additions & 5 deletions website/docs/developers/testing/scenario-tests.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ deterministically across different environments.

### mina-node-testing framework

#### Test library (`node/testing/src/`)
#### Test library (`tools/testing/src/`)

The `mina-node-testing` library provides the core runtime infrastructure:

Expand All @@ -44,7 +44,7 @@ The `mina-node-testing` library provides the core runtime infrastructure:
- **Recording/replay**: Captures and reproduces test scenarios with complete
fidelity

#### Test runner (`node/testing/src/bin/runner.rs`)
#### Test runner (`tools/testing/src/bin/runner.rs`)

The test runner provides comprehensive scenario management:

Expand Down Expand Up @@ -395,18 +395,18 @@ isolation.
### Workflow Requirements

- **scenarios-run**: Expects pre-existing scenario files in
`node/testing/res/scenarios/`
`tools/testing/res/scenarios/`
- **scenarios-generate**:
- Default (`--output=stdout`): Runs scenarios and outputs to stdout, no JSON
files created
- With `--output=json`: Runs scenarios and saves them as JSON files in
`node/testing/res/scenarios/`
`tools/testing/res/scenarios/`

#### Understanding Scenario Load/Save Implementation

For detailed technical information about how scenarios are loaded and saved, see
the
[scenario module source code](https://github.com/o1-labs/mina-rust/blob/develop/node/testing/src/scenario/mod.rs).
[scenario module source code](https://github.com/o1-labs/mina-rust/blob/develop/tools/testing/src/scenario/mod.rs).

### Scenario generation and replay

Expand Down
Loading
Loading