iota_network/
utils.rs

1// Copyright (c) Mysten Labs, Inc.
2// Modifications Copyright (c) 2024 IOTA Stiftung
3// SPDX-License-Identifier: Apache-2.0
4
5#[cfg(test)]
6pub fn build_network(f: impl FnOnce(anemo::Router) -> anemo::Router) -> anemo::Network {
7    build_network_impl(f, None).0
8}
9
10#[cfg(test)]
11pub fn build_network_and_key(
12    f: impl FnOnce(anemo::Router) -> anemo::Router,
13) -> (anemo::Network, iota_types::crypto::NetworkKeyPair) {
14    build_network_impl(f, None)
15}
16
17#[cfg(test)]
18pub fn build_network_with_anemo_config(
19    f: impl FnOnce(anemo::Router) -> anemo::Router,
20    anemo_config: anemo::Config,
21) -> (anemo::Network, iota_types::crypto::NetworkKeyPair) {
22    build_network_impl(f, Some(anemo_config))
23}
24
25#[cfg(test)]
26fn build_network_impl(
27    f: impl FnOnce(anemo::Router) -> anemo::Router,
28    anemo_config: Option<anemo::Config>,
29) -> (anemo::Network, iota_types::crypto::NetworkKeyPair) {
30    use fastcrypto::traits::KeyPair;
31
32    let keypair = iota_types::crypto::NetworkKeyPair::generate(&mut rand::thread_rng());
33    let router = f(anemo::Router::new());
34    let network = anemo::Network::bind("localhost:0")
35        .private_key(keypair.copy().private().0.to_bytes())
36        .config(anemo_config.unwrap_or_default())
37        .server_name("test")
38        .start(router)
39        .unwrap();
40
41    println!(
42        "starting network {} {}",
43        network.local_addr(),
44        network.peer_id(),
45    );
46    (network, keypair)
47}