mirror of
https://github.com/ipfs/kubo.git
synced 2026-02-28 13:57:52 +08:00
@maybebtc thoughts on this? dialing self should be **possible**, so we should in general test that we do consider that case, but not sure if this is good to expose to clients. thoughts? Btw, on why dialing self should be possible, we may create little protocols which we may have a node connect to self, say across its interfaces to test connectivity, etc... think of it like: > server localhost:1234 & > curl localhost:1234
64 lines
1.4 KiB
Go
64 lines
1.4 KiB
Go
package mocknet
|
|
|
|
import (
|
|
eventlog "github.com/jbenet/go-ipfs/util/eventlog"
|
|
|
|
context "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context"
|
|
)
|
|
|
|
var log = eventlog.Logger("mocknet")
|
|
|
|
// WithNPeers constructs a Mocknet with N peers.
|
|
func WithNPeers(ctx context.Context, n int) (Mocknet, error) {
|
|
m := New(ctx)
|
|
for i := 0; i < n; i++ {
|
|
if _, err := m.GenPeer(); err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
return m, nil
|
|
}
|
|
|
|
// FullMeshLinked constructs a Mocknet with full mesh of Links.
|
|
// This means that all the peers **can** connect to each other
|
|
// (not that they already are connected. you can use m.ConnectAll())
|
|
func FullMeshLinked(ctx context.Context, n int) (Mocknet, error) {
|
|
m, err := WithNPeers(ctx, n)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
nets := m.Nets()
|
|
for _, n1 := range nets {
|
|
for _, n2 := range nets {
|
|
// yes, even self.
|
|
if _, err := m.LinkNets(n1, n2); err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
}
|
|
|
|
return m, nil
|
|
}
|
|
|
|
// FullMeshConnected constructs a Mocknet with full mesh of Connections.
|
|
// This means that all the peers have dialed and are ready to talk to
|
|
// each other.
|
|
func FullMeshConnected(ctx context.Context, n int) (Mocknet, error) {
|
|
m, err := FullMeshLinked(ctx, n)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
nets := m.Nets()
|
|
for _, n1 := range nets {
|
|
for _, n2 := range nets {
|
|
if err := m.ConnectNets(n1, n2); err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
}
|
|
|
|
return m, nil
|
|
}
|