mirror of
https://github.com/ipfs/kubo.git
synced 2026-03-11 19:27:51 +08:00
net: Connectedness bugfix
Connectedness was totally incorrect. added a test case.
This commit is contained in:
parent
7952d95bbf
commit
4d9f1f0fdf
@ -2,6 +2,8 @@
|
||||
package net
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
ic "github.com/jbenet/go-ipfs/crypto"
|
||||
swarm "github.com/jbenet/go-ipfs/net/swarm"
|
||||
peer "github.com/jbenet/go-ipfs/peer"
|
||||
@ -234,7 +236,7 @@ func (n *network) InterfaceListenAddresses() ([]ma.Multiaddr, error) {
|
||||
// For now only returns Connected || NotConnected. Expand into more later.
|
||||
func (n *network) Connectedness(p peer.ID) Connectedness {
|
||||
c := n.swarm.ConnectionsToPeer(p)
|
||||
if c != nil && len(c) < 1 {
|
||||
if c != nil && len(c) > 0 {
|
||||
return Connected
|
||||
}
|
||||
return NotConnected
|
||||
@ -266,6 +268,10 @@ func (n *network) SetHandler(p ProtocolID, h StreamHandler) {
|
||||
n.mux.SetHandler(p, h)
|
||||
}
|
||||
|
||||
func (n *network) String() string {
|
||||
return fmt.Sprintf("<Network %s>", n.LocalPeer())
|
||||
}
|
||||
|
||||
func (n *network) IdentifyProtocol() *IDService {
|
||||
return n.ids
|
||||
}
|
||||
|
||||
61
net/net_test.go
Normal file
61
net/net_test.go
Normal file
@ -0,0 +1,61 @@
|
||||
package net_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
context "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context"
|
||||
inet "github.com/jbenet/go-ipfs/net"
|
||||
)
|
||||
|
||||
// TestConnectednessCorrect starts a few networks, connects a few
|
||||
// and tests Connectedness value is correct.
|
||||
func TestConnectednessCorrect(t *testing.T) {
|
||||
|
||||
ctx := context.Background()
|
||||
|
||||
nets := make([]inet.Network, 4)
|
||||
for i := 0; i < 4; i++ {
|
||||
nets[i] = GenNetwork(t, ctx)
|
||||
}
|
||||
|
||||
// connect 0-1, 0-2, 0-3, 1-2, 2-3
|
||||
|
||||
dial := func(a, b inet.Network) {
|
||||
DivulgeAddresses(b, a)
|
||||
if err := a.DialPeer(ctx, b.LocalPeer()); err != nil {
|
||||
t.Fatalf("Failed to dial: %s", err)
|
||||
}
|
||||
}
|
||||
|
||||
dial(nets[0], nets[1])
|
||||
dial(nets[0], nets[3])
|
||||
dial(nets[1], nets[2])
|
||||
dial(nets[3], nets[2])
|
||||
|
||||
// test those connected show up correctly
|
||||
|
||||
testConnectedness := func(a, b inet.Network, c inet.Connectedness) {
|
||||
if a.Connectedness(b.LocalPeer()) != c {
|
||||
t.Error("%s is connected to %s, but Connectedness incorrect", a, b)
|
||||
}
|
||||
|
||||
// test symmetric case
|
||||
if b.Connectedness(a.LocalPeer()) != c {
|
||||
t.Error("%s is connected to %s, but Connectedness incorrect", a, b)
|
||||
}
|
||||
}
|
||||
|
||||
// test connected
|
||||
testConnectedness(nets[0], nets[1], inet.Connected)
|
||||
testConnectedness(nets[0], nets[3], inet.Connected)
|
||||
testConnectedness(nets[1], nets[2], inet.Connected)
|
||||
testConnectedness(nets[3], nets[2], inet.Connected)
|
||||
|
||||
// test not connected
|
||||
testConnectedness(nets[0], nets[2], inet.NotConnected)
|
||||
testConnectedness(nets[1], nets[3], inet.NotConnected)
|
||||
|
||||
for _, n := range nets {
|
||||
n.Close()
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user