Skip to main content

e2e_test/
e2e_test.rs

1use anyhow::Result;
2use iroh::{
3    Endpoint, SecretKey,
4};
5use iroh_gossip::net::Gossip;
6
7// Imports from distrubuted-topic-tracker
8use distributed_topic_tracker::{AutoDiscoveryGossip, RecordPublisher, TopicId};
9
10#[tokio::main]
11async fn main() -> Result<()> {
12    // Generate a new random secret key
13    let secret_key = SecretKey::generate(&mut rand::rng());
14    let signing_key = mainline::SigningKey::from_bytes(&secret_key.to_bytes());
15
16    // Set up endpoint with address lookup enabled
17    let endpoint = Endpoint::builder(iroh::endpoint::presets::N0)
18        .secret_key(secret_key.clone())
19        .bind()
20        .await?;
21
22    // Initialize gossip with auto-discovery
23    let gossip = Gossip::builder().spawn(endpoint.clone());
24
25    // Set up protocol router
26    let _router = iroh::protocol::Router::builder(endpoint.clone())
27        .accept(iroh_gossip::ALPN, gossip.clone())
28        .spawn();
29
30    let topic_id = TopicId::new("my-iroh-gossip-topic".to_string());
31    let initial_secret = b"my-initial-secret".to_vec();
32
33    let record_publisher = RecordPublisher::new(
34        topic_id.clone(),
35        signing_key.verifying_key(),
36        signing_key.clone(),
37        None,
38        initial_secret,
39    );
40    let (gossip_sender, gossip_receiver) = gossip
41        .subscribe_and_join_with_auto_discovery(record_publisher)
42        .await?
43        .split()
44        .await?;
45
46    tokio::spawn(async move {
47        while let Some(Ok(event)) = gossip_receiver.next().await {
48            println!("event: {event:?}");
49        }
50    });
51
52    tokio::time::sleep(std::time::Duration::from_secs(3)).await;
53    gossip_sender
54        .broadcast(format!("hi from {}", endpoint.id()).into())
55        .await?;
56
57    println!("[joined topic]");
58
59    tokio::time::sleep(std::time::Duration::from_secs(10)).await;
60
61    println!("[finished]");
62
63    // successfully joined
64    // exit with code 0
65    Ok(())
66}