Skip to content

Commit

Permalink
Add self-contained local relay test
Browse files Browse the repository at this point in the history
  • Loading branch information
ianopolous committed Dec 27, 2023
1 parent 9969cb2 commit 4581381
Showing 1 changed file with 99 additions and 0 deletions.
99 changes: 99 additions & 0 deletions libp2p/src/test/java/io/libp2p/core/RelayTestJava.java
Original file line number Diff line number Diff line change
Expand Up @@ -108,4 +108,103 @@ void ping() throws Exception {
serverHost.stop().get(5, TimeUnit.SECONDS);
System.out.println("Server stopped");
}

@Test
void pingOverLocalRelay() throws Exception {
String localListenAddress = "/ip4/127.0.0.1/tcp/40002";

Host relayHost =
new HostBuilder()
.builderModifier(b -> enableRelay(b, Collections.emptyList()))
.transport(TcpTransport::new)
.secureChannel(NoiseXXSecureChannel::new)
.muxer(StreamMuxerProtocol::getYamux)
.listen("/ip4/127.0.0.1/tcp/0")
.protocol(new Ping())
.build();
relayHost.getNetwork().getTransports().stream()
.filter(t -> t instanceof RelayTransport)
.map(t -> (RelayTransport) t)
.findFirst()
.get()
.setHost(relayHost);
CompletableFuture<Void> relayStarted = relayHost.start();
relayStarted.get(5, TimeUnit.SECONDS);

List<Multiaddr> relayAddrs = relayHost.listenAddresses();
Multiaddr relayAddr = relayAddrs.get(0);
RelayTransport.CandidateRelay relay =
new RelayTransport.CandidateRelay(relayHost.getPeerId(), relayAddrs);
List<RelayTransport.CandidateRelay> relays = List.of(relay);

Host clientHost =
new HostBuilder()
.builderModifier(b -> enableRelay(b, relays))
.transport(TcpTransport::new)
.secureChannel(NoiseXXSecureChannel::new)
.muxer(StreamMuxerProtocol::getYamux)
.protocol(new Ping())
.build();
clientHost.getNetwork().getTransports().stream()
.filter(t -> t instanceof RelayTransport)
.map(t -> (RelayTransport) t)
.findFirst()
.get()
.setHost(clientHost);

Host serverHost =
new HostBuilder()
.builderModifier(b -> enableRelay(b, relays))
.transport(TcpTransport::new)
.secureChannel(NoiseXXSecureChannel::new)
.muxer(StreamMuxerProtocol::getYamux)
.protocol(new Ping())
.listen(localListenAddress)
.listen(relayAddr + "/p2p-circuit")
.build();
serverHost.getNetwork().getTransports().stream()
.filter(t -> t instanceof RelayTransport)
.map(t -> (RelayTransport) t)
.findFirst()
.get()
.setHost(serverHost);

CompletableFuture<Void> clientStarted = clientHost.start();
CompletableFuture<Void> serverStarted = serverHost.start();
clientStarted.get(5, TimeUnit.SECONDS);
System.out.println("Client started");
serverStarted.get(5, TimeUnit.SECONDS);
System.out.println("Server started");

Multiaddr toDial =
relayAddr.concatenated(
new Multiaddr("/p2p-circuit/p2p/" + serverHost.getPeerId().toBase58()));
System.out.println("Dialling " + toDial + " from " + clientHost.getPeerId());
StreamPromise<PingController> ping =
clientHost
.getNetwork()
.connect(serverHost.getPeerId(), toDial)
.thenApply(it -> it.muxerSession().createStream(new Ping()))
.get(5, TimeUnit.SECONDS);

Stream pingStream = ping.getStream().get(5, TimeUnit.SECONDS);
System.out.println("Ping stream created");
PingController pingCtr = ping.getController().get(5, TimeUnit.SECONDS);
System.out.println("Ping controller created");

for (int i = 0; i < 10; i++) {
long latency = pingCtr.ping().get(1, TimeUnit.SECONDS);
System.out.println("Ping is " + latency);
}
pingStream.close().get(5, TimeUnit.SECONDS);
System.out.println("Ping stream closed");

Assertions.assertThrows(
ExecutionException.class, () -> pingCtr.ping().get(5, TimeUnit.SECONDS));

clientHost.stop().get(5, TimeUnit.SECONDS);
System.out.println("Client stopped");
serverHost.stop().get(5, TimeUnit.SECONDS);
System.out.println("Server stopped");
}
}

0 comments on commit 4581381

Please sign in to comment.