master
go 56 lines 1.63 KB
Raw
1 package corehttp
2
3 import (
4 "context"
5 "testing"
6 "time"
7
8 "github.com/ipfs/kubo/core"
9
10 inet "github.com/libp2p/go-libp2p/core/network"
11 bhost "github.com/libp2p/go-libp2p/p2p/host/basic"
12 swarmt "github.com/libp2p/go-libp2p/p2p/net/swarm/testing"
13 )
14
15 // This test is based on go-libp2p/p2p/net/swarm.TestConnectednessCorrect
16 // It builds 4 nodes and connects them, one being the sole center.
17 // Then it checks that the center reports the correct number of peers.
18 func TestPeersTotal(t *testing.T) {
19 ctx := context.Background()
20
21 hosts := make([]*bhost.BasicHost, 4)
22 for i := range 4 {
23 var err error
24 hosts[i], err = bhost.NewHost(swarmt.GenSwarm(t), nil)
25 if err != nil {
26 t.Fatal(err)
27 }
28 }
29
30 dial := func(a, b inet.Network) {
31 swarmt.DivulgeAddresses(b, a)
32 if _, err := a.DialPeer(ctx, b.LocalPeer()); err != nil {
33 t.Fatalf("Failed to dial: %s", err)
34 }
35 }
36
37 dial(hosts[0].Network(), hosts[1].Network())
38 dial(hosts[0].Network(), hosts[2].Network())
39 dial(hosts[0].Network(), hosts[3].Network())
40
41 // there's something wrong with dial, i think. it's not finishing
42 // completely. there must be some async stuff.
43 <-time.After(100 * time.Millisecond)
44
45 node := &core.IpfsNode{PeerHost: hosts[0]}
46 collector := IpfsNodeCollector{Node: node}
47 peersTransport := collector.PeersTotalValues()
48 if len(peersTransport) > 2 {
49 t.Fatalf("expected at most 2 peers transport (tcp and upd/quic), got %d, transport map %v",
50 len(peersTransport), peersTransport)
51 }
52 totalPeers := peersTransport["/ip4/tcp"] + peersTransport["/ip4/udp/quic-v1"]
53 if totalPeers != 3 {
54 t.Fatalf("expected 3 peers in either tcp or upd/quic transport, got %f", totalPeers)
55 }
56 }