diff --git a/p2p/net/mock/mock_conn.go b/p2p/net/mock/mock_conn.go index e61a8b4e1..ae97c3e83 100644 --- a/p2p/net/mock/mock_conn.go +++ b/p2p/net/mock/mock_conn.go @@ -9,6 +9,7 @@ import ( peer "github.com/ipfs/go-ipfs/p2p/peer" ma "github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multiaddr" + process "github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/jbenet/goprocess" ) // conn represents one side's perspective of a @@ -28,11 +29,31 @@ type conn struct { link *link rconn *conn // counterpart streams list.List + proc process.Process sync.RWMutex } +func newConn(ln, rn *peernet, l *link) *conn { + c := &conn{net: ln, link: l} + c.local = ln.peer + c.remote = rn.peer + + c.localAddr = ln.ps.Addrs(ln.peer)[0] + c.remoteAddr = rn.ps.Addrs(rn.peer)[0] + + c.localPrivKey = ln.ps.PrivKey(ln.peer) + c.remotePubKey = rn.ps.PubKey(rn.peer) + + c.proc = process.WithTeardown(c.teardown) + return c +} + func (c *conn) Close() error { + return c.proc.Close() +} + +func (c *conn) teardown() error { for _, s := range c.allStreams() { s.Close() } diff --git a/p2p/net/mock/mock_link.go b/p2p/net/mock/mock_link.go index 28575e758..8ce43c441 100644 --- a/p2p/net/mock/mock_link.go +++ b/p2p/net/mock/mock_link.go @@ -33,22 +33,8 @@ func (l *link) newConnPair(dialer *peernet) (*conn, *conn) { l.RLock() defer l.RUnlock() - mkconn := func(ln, rn *peernet) *conn { - c := &conn{net: ln, link: l} - c.local = ln.peer - c.remote = rn.peer - - c.localAddr = ln.ps.Addrs(ln.peer)[0] - c.remoteAddr = rn.ps.Addrs(rn.peer)[0] - - c.localPrivKey = ln.ps.PrivKey(ln.peer) - c.remotePubKey = rn.ps.PubKey(rn.peer) - - return c - } - - c1 := mkconn(l.nets[0], l.nets[1]) - c2 := mkconn(l.nets[1], l.nets[0]) + c1 := newConn(l.nets[0], l.nets[1], l) + c2 := newConn(l.nets[1], l.nets[0], l) c1.rconn = c2 c2.rconn = c1