@cryptotaxi247 / kubo / commits / a7576c98b

mocknet: conn close idempotent with process.

License: MIT Signed-off-by: Juan Batiz-Benet <juan@benet.ai>

Juan Batiz-Benet committed Oct 4, 2015 at 10:07 UTC a7576c98be7edc868c9dc1c874fcb5d3698c3b2e
2 files changed +23 -16
p2p/net/mock/mock_conn.go
+21
@@ -9,6 +9,7 @@ import (
9 peer "github.com/ipfs/go-ipfs/p2p/peer"
10
11 ma "github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multiaddr"
12 + process "github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/jbenet/goprocess"
13 )
14
15 // conn represents one side's perspective of a
@@ -28,11 +29,31 @@ type conn struct {
29 link *link
30 rconn *conn // counterpart
31 streams list.List
32 + proc process.Process
33
34 sync.RWMutex
35 }
36
37 +func newConn(ln, rn *peernet, l *link) *conn {
38 + c := &conn{net: ln, link: l}
39 + c.local = ln.peer
40 + c.remote = rn.peer
41 +
42 + c.localAddr = ln.ps.Addrs(ln.peer)[0]
43 + c.remoteAddr = rn.ps.Addrs(rn.peer)[0]
44 +
45 + c.localPrivKey = ln.ps.PrivKey(ln.peer)
46 + c.remotePubKey = rn.ps.PubKey(rn.peer)
47 +
48 + c.proc = process.WithTeardown(c.teardown)
49 + return c
50 +}
51 +
52 func (c *conn) Close() error {
53 + return c.proc.Close()
54 +}
55 +
56 +func (c *conn) teardown() error {
57 for _, s := range c.allStreams() {
58 s.Close()
59 }
p2p/net/mock/mock_link.go
+2 -16
@@ -33,22 +33,8 @@ func (l *link) newConnPair(dialer *peernet) (*conn, *conn) {
33 l.RLock()
34 defer l.RUnlock()
35
36 - mkconn := func(ln, rn *peernet) *conn {
37 - c := &conn{net: ln, link: l}
38 - c.local = ln.peer
39 - c.remote = rn.peer
40 -
41 - c.localAddr = ln.ps.Addrs(ln.peer)[0]
42 - c.remoteAddr = rn.ps.Addrs(rn.peer)[0]
43 -
44 - c.localPrivKey = ln.ps.PrivKey(ln.peer)
45 - c.remotePubKey = rn.ps.PubKey(rn.peer)
46 -
47 - return c
48 - }
49 -
50 - c1 := mkconn(l.nets[0], l.nets[1])
51 - c2 := mkconn(l.nets[1], l.nets[0])
36 + c1 := newConn(l.nets[0], l.nets[1], l)
37 + c2 := newConn(l.nets[1], l.nets[0], l)
38 c1.rconn = c2
39 c2.rconn = c1
40