mirror of
https://github.com/ipfs/kubo.git
synced 2026-02-26 12:57:44 +08:00
70 lines
1.8 KiB
Go
70 lines
1.8 KiB
Go
// Package mocknet provides a mock net.Network to test with.
|
|
//
|
|
// - a Mocknet has many inet.Networks
|
|
// - a Mocknet has many Links
|
|
// - a Link joins two inet.Networks
|
|
// - inet.Conns and inet.Streams are created by inet.Networks
|
|
package mocknet
|
|
|
|
import (
|
|
"io"
|
|
"time"
|
|
|
|
inet "github.com/jbenet/go-ipfs/net"
|
|
peer "github.com/jbenet/go-ipfs/peer"
|
|
)
|
|
|
|
type Mocknet interface {
|
|
GenPeer() (inet.Network, error)
|
|
AddPeer(peer.ID) (inet.Network, error)
|
|
|
|
// retrieve things
|
|
Peer(peer.ID) peer.Peer
|
|
Peers() []peer.Peer
|
|
Net(peer.ID) inet.Network
|
|
Nets() []inet.Network
|
|
LinksBetweenPeers(a, b peer.Peer) []Link
|
|
LinksBetweenNets(a, b inet.Network) []Link
|
|
|
|
PrintLinkMap(io.Writer)
|
|
|
|
// Links are the **ability to connect**.
|
|
// think of Links as the physical medium.
|
|
// For p1 and p2 to connect, a link must exist between them.
|
|
// (this makes it possible to test dial failures, and
|
|
// things like relaying traffic)
|
|
LinkPeers(peer.Peer, peer.Peer) (Link, error)
|
|
LinkNets(inet.Network, inet.Network) (Link, error)
|
|
Unlink(Link) error
|
|
UnlinkPeers(peer.Peer, peer.Peer) error
|
|
UnlinkNets(inet.Network, inet.Network) error
|
|
|
|
// LinkDefaults are the default options that govern links
|
|
// if they do not have thier own option set.
|
|
SetLinkDefaults(LinkOptions)
|
|
LinkDefaults() LinkOptions
|
|
|
|
// Connections are the usual. Connecting means Dialing.
|
|
// **to succeed, peers must be linked beforehand**
|
|
ConnectPeers(peer.Peer, peer.Peer) error
|
|
ConnectNets(inet.Network, inet.Network) error
|
|
DisconnectPeers(peer.Peer, peer.Peer) error
|
|
DisconnectNets(inet.Network, inet.Network) error
|
|
}
|
|
|
|
type LinkOptions struct {
|
|
Latency time.Duration
|
|
Bandwidth int // in bytes-per-second
|
|
// we can make these values distributions down the road.
|
|
}
|
|
|
|
type Link interface {
|
|
Networks() []inet.Network
|
|
Peers() []peer.Peer
|
|
|
|
SetOptions(LinkOptions)
|
|
Options() LinkOptions
|
|
|
|
// Metrics() Metrics
|
|
}
|