Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
go-libp2p
Commits
08b8250c
Commit
08b8250c
authored
10 years ago
by
Juan Batiz-Benet
Browse files
Options
Download
Email Patches
Plain Diff
mocknet: use host
parent
7c3202b1
master
2018-Q4-OKR
docs-improvements
feat/backoff-listing
feat/p2p-multiaddr
feat/pnet/working3
feat/protobuf
feat/relay-integrate
feat/udp
feat/update/go-reuseport
feature/standardize-readme
fix/473
fix/no-custom-field
fix/reset-ping-stream
fix/revert-correct-external-addr
gx/update-jccl6u
gx/update-nza0mn
jenkinsfile
kevina/fix-go-vet
multistream-ping
punching
revert-276-update-go-detect-race
wip/js-interop
v6.0.23
v6.0.22
v6.0.21
v6.0.20
v6.0.19
v6.0.18
v6.0.17
v6.0.16
v6.0.15
v6.0.14
v6.0.13
v6.0.12
v6.0.11
v6.0.10
v6.0.9
v6.0.8
v6.0.7
v6.0.6
v6.0.5
v6.0.4
v6.0.3
v6.0.2
v6.0.1
v6.0.0
v5.0.21
v5.0.20
v5.0.19
v5.0.18
v5.0.17
v5.0.16
v5.0.15
v5.0.14
v5.0.13
v5.0.12
v5.0.11
v5.0.10
v5.0.9
v5.0.8
v5.0.7
v5.0.6
v5.0.5
v5.0.4
v5.0.3
v5.0.2
v5.0.1
v5.0.0
v4.5.5
v4.5.4
v4.5.3
v4.5.2
v4.5.1
v4.5.0
v4.4.5
v4.4.4
v4.4.3
v4.4.2
v4.4.1
v4.4.0
v4.3.12
v4.3.11
v4.3.10
v4.3.9
v4.3.8
v4.3.7
v4.3.6
v4.3.5
v4.3.4
v4.3.3
v4.3.2
v4.3.1
v4.3.0
v4.2.0
v4.1.0
v4.0.4
v4.0.3
v4.0.2
v4.0.1
v4.0.0
v3.6.0
v3.5.4
v3.5.3
v3.5.2
v3.5.1
v3.5.0
v3.4.3
v3.4.2
v3.4.1
v3.4.0
v3.3.7
v3.3.6
v3.3.4
v3.3.3
v3.3.2
v3.3.1
v3.3.0
v3.2.3
v3.2.2
v3.2.1
v3.2.0
v3.1.0
v3.0.0
v2.0.3
v2.0.2
v2.0.1
v1.0.0
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
net2/mock/interface.go
+5
-2
net2/mock/interface.go
net2/mock/mock_net.go
+31
-13
net2/mock/mock_net.go
net2/mock/mock_test.go
+41
-26
net2/mock/mock_test.go
with
77 additions
and
41 deletions
+77
-41
net2/mock/interface.go
View file @
08b8250c
...
...
@@ -11,6 +11,7 @@ import (
"time"
ic
"github.com/jbenet/go-ipfs/p2p/crypto"
host
"github.com/jbenet/go-ipfs/p2p/host"
inet
"github.com/jbenet/go-ipfs/p2p/net2"
peer
"github.com/jbenet/go-ipfs/p2p/peer"
...
...
@@ -20,16 +21,18 @@ import (
type
Mocknet
interface
{
// GenPeer generates a peer and its inet.Network in the Mocknet
GenPeer
()
(
inet
.
Network
,
error
)
GenPeer
()
(
host
.
Host
,
error
)
// AddPeer adds an existing peer. we need both a privkey and addr.
// ID is derived from PrivKey
AddPeer
(
ic
.
PrivKey
,
ma
.
Multiaddr
)
(
inet
.
Network
,
error
)
AddPeer
(
ic
.
PrivKey
,
ma
.
Multiaddr
)
(
host
.
Host
,
error
)
// retrieve things (with randomized iteration order)
Peers
()
[]
peer
.
ID
Net
(
peer
.
ID
)
inet
.
Network
Nets
()
[]
inet
.
Network
Host
(
peer
.
ID
)
host
.
Host
Hosts
()
[]
host
.
Host
Links
()
LinkMap
LinksBetweenPeers
(
a
,
b
peer
.
ID
)
[]
Link
LinksBetweenNets
(
a
,
b
inet
.
Network
)
[]
Link
...
...
This diff is collapsed.
Click to expand it.
net2/mock/mock_net.go
View file @
08b8250c
...
...
@@ -5,6 +5,8 @@ import (
"sync"
ic
"github.com/jbenet/go-ipfs/p2p/crypto"
host
"github.com/jbenet/go-ipfs/p2p/host"
bhost
"github.com/jbenet/go-ipfs/p2p/host/basic"
inet
"github.com/jbenet/go-ipfs/p2p/net2"
peer
"github.com/jbenet/go-ipfs/p2p/peer"
testutil
"github.com/jbenet/go-ipfs/util/testutil"
...
...
@@ -16,9 +18,8 @@ import (
// mocknet implements mocknet.Mocknet
type
mocknet
struct
{
// must map on peer.ID (instead of peer.ID) because
// each inet.Network has different peerstore
nets
map
[
peer
.
ID
]
*
peernet
nets
map
[
peer
.
ID
]
*
peernet
hosts
map
[
peer
.
ID
]
*
bhost
.
BasicHost
// links make it possible to connect two peers.
// think of links as the physical medium.
...
...
@@ -35,12 +36,13 @@ type mocknet struct {
func
New
(
ctx
context
.
Context
)
Mocknet
{
return
&
mocknet
{
nets
:
map
[
peer
.
ID
]
*
peernet
{},
hosts
:
map
[
peer
.
ID
]
*
bhost
.
BasicHost
{},
links
:
map
[
peer
.
ID
]
map
[
peer
.
ID
]
map
[
*
link
]
struct
{}{},
cg
:
ctxgroup
.
WithContext
(
ctx
),
}
}
func
(
mn
*
mocknet
)
GenPeer
()
(
inet
.
Network
,
error
)
{
func
(
mn
*
mocknet
)
GenPeer
()
(
host
.
Host
,
error
)
{
sk
,
_
,
err
:=
testutil
.
RandKeyPair
(
512
)
if
err
!=
nil
{
return
nil
,
err
...
...
@@ -48,20 +50,22 @@ func (mn *mocknet) GenPeer() (inet.Network, error) {
a
:=
testutil
.
RandLocalTCPAddress
()
n
,
err
:=
mn
.
AddPeer
(
sk
,
a
)
h
,
err
:=
mn
.
AddPeer
(
sk
,
a
)
if
err
!=
nil
{
return
nil
,
err
}
return
n
,
nil
return
h
,
nil
}
func
(
mn
*
mocknet
)
AddPeer
(
k
ic
.
PrivKey
,
a
ma
.
Multiaddr
)
(
inet
.
Network
,
error
)
{
func
(
mn
*
mocknet
)
AddPeer
(
k
ic
.
PrivKey
,
a
ma
.
Multiaddr
)
(
host
.
Host
,
error
)
{
n
,
err
:=
newPeernet
(
mn
.
cg
.
Context
(),
mn
,
k
,
a
)
if
err
!=
nil
{
return
nil
,
err
}
h
:=
bhost
.
New
(
n
)
// make sure to add listening address!
// this makes debugging things simpler as remembering to register
// an address may cause unexpected failure.
...
...
@@ -72,8 +76,9 @@ func (mn *mocknet) AddPeer(k ic.PrivKey, a ma.Multiaddr) (inet.Network, error) {
mn
.
Lock
()
mn
.
nets
[
n
.
peer
]
=
n
mn
.
hosts
[
n
.
peer
]
=
h
mn
.
Unlock
()
return
n
,
nil
return
h
,
nil
}
func
(
mn
*
mocknet
)
Peers
()
[]
peer
.
ID
{
...
...
@@ -87,16 +92,29 @@ func (mn *mocknet) Peers() []peer.ID {
return
cp
}
func
(
mn
*
mocknet
)
Host
(
pid
peer
.
ID
)
host
.
Host
{
mn
.
RLock
()
host
:=
mn
.
hosts
[
pid
]
mn
.
RUnlock
()
return
host
}
func
(
mn
*
mocknet
)
Net
(
pid
peer
.
ID
)
inet
.
Network
{
mn
.
RLock
()
n
:=
mn
.
nets
[
pid
]
mn
.
RUnlock
()
return
n
}
func
(
mn
*
mocknet
)
Hosts
()
[]
host
.
Host
{
mn
.
RLock
()
defer
mn
.
RUnlock
()
for
_
,
n
:=
range
mn
.
nets
{
if
n
.
peer
==
pid
{
return
n
}
cp
:=
make
([]
host
.
Host
,
0
,
len
(
mn
.
hosts
))
for
_
,
h
:=
range
mn
.
hosts
{
cp
=
append
(
cp
,
h
)
}
return
nil
return
cp
}
func
(
mn
*
mocknet
)
Nets
()
[]
inet
.
Network
{
...
...
This diff is collapsed.
Click to expand it.
net2/mock/mock_test.go
View file @
08b8250c
...
...
@@ -9,6 +9,7 @@ import (
inet
"github.com/jbenet/go-ipfs/p2p/net2"
peer
"github.com/jbenet/go-ipfs/p2p/peer"
protocol
"github.com/jbenet/go-ipfs/p2p/protocol"
testutil
"github.com/jbenet/go-ipfs/util/testutil"
context
"github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context"
...
...
@@ -46,31 +47,44 @@ func TestNetworkSetup(t *testing.T) {
a2
:=
testutil
.
RandLocalTCPAddress
()
a3
:=
testutil
.
RandLocalTCPAddress
()
n
1
,
err
:=
mn
.
AddPeer
(
sk1
,
a1
)
h
1
,
err
:=
mn
.
AddPeer
(
sk1
,
a1
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
p1
:=
n
1
.
LocalPeer
()
p1
:=
h
1
.
ID
()
n
2
,
err
:=
mn
.
AddPeer
(
sk2
,
a2
)
h
2
,
err
:=
mn
.
AddPeer
(
sk2
,
a2
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
p2
:=
n
2
.
LocalPeer
()
p2
:=
h
2
.
ID
()
n
3
,
err
:=
mn
.
AddPeer
(
sk3
,
a3
)
h
3
,
err
:=
mn
.
AddPeer
(
sk3
,
a3
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
p3
:=
n
3
.
LocalPeer
()
p3
:=
h
3
.
ID
()
// check peers and net
if
mn
.
Host
(
p1
)
!=
h1
{
t
.
Error
(
"host for p1.ID != h1"
)
}
if
mn
.
Host
(
p2
)
!=
h2
{
t
.
Error
(
"host for p2.ID != h2"
)
}
if
mn
.
Host
(
p3
)
!=
h3
{
t
.
Error
(
"host for p3.ID != h3"
)
}
n1
:=
h1
.
Network
()
if
mn
.
Net
(
p1
)
!=
n1
{
t
.
Error
(
"net for p1.ID != n1"
)
}
n2
:=
h2
.
Network
()
if
mn
.
Net
(
p2
)
!=
n2
{
t
.
Error
(
"net for p2.ID != n1"
)
}
n3
:=
h3
.
Network
()
if
mn
.
Net
(
p3
)
!=
n3
{
t
.
Error
(
"net for p3.ID != n1"
)
}
...
...
@@ -275,12 +289,12 @@ func TestStreams(t *testing.T) {
s
.
Close
()
}
ne
ts
:=
mn
.
Ne
ts
()
for
_
,
n
:=
range
nets
{
n
.
SetStreamHandler
(
handler
)
hos
ts
:=
mn
.
Hos
ts
()
for
_
,
h
:=
range
mn
.
Hosts
()
{
h
.
SetStreamHandler
(
protocol
.
TestingID
,
handler
)
}
s
,
err
:=
ne
ts
[
0
]
.
NewStream
(
nets
[
1
]
.
LocalPeer
())
s
,
err
:=
hos
ts
[
0
]
.
NewStream
(
protocol
.
TestingID
,
hosts
[
1
]
.
ID
())
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
...
...
@@ -350,9 +364,10 @@ func TestStreamsStress(t *testing.T) {
t
.
Fatal
(
err
)
}
nets
:=
mn
.
Nets
()
for
_
,
n
:=
range
nets
{
n
.
SetStreamHandler
(
makePonger
(
"pingpong"
))
hosts
:=
mn
.
Hosts
()
for
_
,
h
:=
range
hosts
{
ponger
:=
makePonger
(
string
(
protocol
.
TestingID
))
h
.
SetStreamHandler
(
protocol
.
TestingID
,
ponger
)
}
var
wg
sync
.
WaitGroup
...
...
@@ -360,11 +375,11 @@ func TestStreamsStress(t *testing.T) {
wg
.
Add
(
1
)
go
func
(
i
int
)
{
defer
wg
.
Done
()
from
:=
rand
.
Intn
(
len
(
ne
ts
))
to
:=
rand
.
Intn
(
len
(
ne
ts
))
s
,
err
:=
ne
ts
[
from
]
.
NewStream
(
nets
[
to
]
.
LocalPeer
())
from
:=
rand
.
Intn
(
len
(
hos
ts
))
to
:=
rand
.
Intn
(
len
(
hos
ts
))
s
,
err
:=
hos
ts
[
from
]
.
NewStream
(
protocol
.
TestingID
,
hosts
[
to
]
.
ID
())
if
err
!=
nil
{
log
.
Debugf
(
"%d (%s) %d (%s)"
,
from
,
ne
ts
[
from
],
to
,
ne
ts
[
to
])
log
.
Debugf
(
"%d (%s) %d (%s)"
,
from
,
hos
ts
[
from
],
to
,
hos
ts
[
to
])
panic
(
err
)
}
...
...
@@ -389,12 +404,12 @@ func TestAdding(t *testing.T) {
}
a
:=
testutil
.
RandLocalTCPAddress
()
n
,
err
:=
mn
.
AddPeer
(
sk
,
a
)
h
,
err
:=
mn
.
AddPeer
(
sk
,
a
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
peers
=
append
(
peers
,
n
.
LocalPeer
())
peers
=
append
(
peers
,
h
.
ID
())
}
p1
:=
peers
[
0
]
...
...
@@ -410,11 +425,11 @@ func TestAdding(t *testing.T) {
}
// set the new stream handler on p2
n
2
:=
mn
.
Ne
t
(
p2
)
if
n
2
==
nil
{
t
.
Fatalf
(
"no
network
for %s"
,
p2
)
h
2
:=
mn
.
Hos
t
(
p2
)
if
h
2
==
nil
{
t
.
Fatalf
(
"no
host
for %s"
,
p2
)
}
n
2
.
SetStreamHandler
(
func
(
s
inet
.
Stream
)
{
h
2
.
SetStreamHandler
(
protocol
.
TestingID
,
func
(
s
inet
.
Stream
)
{
defer
s
.
Close
()
b
:=
make
([]
byte
,
4
)
...
...
@@ -436,12 +451,12 @@ func TestAdding(t *testing.T) {
}
// talk to p2
n
1
:=
mn
.
Ne
t
(
p1
)
if
n
1
==
nil
{
h
1
:=
mn
.
Hos
t
(
p1
)
if
h
1
==
nil
{
t
.
Fatalf
(
"no network for %s"
,
p1
)
}
s
,
err
:=
n
1
.
NewStream
(
p2
)
s
,
err
:=
h
1
.
NewStream
(
protocol
.
TestingID
,
p2
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment
Menu
Projects
Groups
Snippets
Help