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