Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
864e80a4
Commit
864e80a4
authored
May 08, 2018
by
kiel barry
Committed by
Felix Lange
May 08, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
p2p: fix some golint warnings (#16577)
parent
a42be3b7
Changes
13
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
292 additions
and
291 deletions
+292
-291
table_test.go
p2p/discover/table_test.go
+10
-10
net_test.go
p2p/discv5/net_test.go
+10
-10
node.go
p2p/discv5/node.go
+4
-4
ticket.go
p2p/discv5/ticket.go
+2
-2
topic.go
p2p/discv5/topic.go
+8
-8
message.go
p2p/message.go
+12
-12
peer_error.go
p2p/peer_error.go
+2
-2
inproc.go
p2p/simulations/adapters/inproc.go
+49
-49
state.go
p2p/simulations/adapters/state.go
+4
-4
network.go
p2p/simulations/network.go
+155
-154
peerpool.go
p2p/testing/peerpool.go
+17
-17
protocolsession.go
p2p/testing/protocolsession.go
+13
-13
protocoltester.go
p2p/testing/protocoltester.go
+6
-6
No files found.
p2p/discover/table_test.go
View file @
864e80a4
...
...
@@ -582,26 +582,26 @@ func (*preminedTestnet) ping(toid NodeID, toaddr *net.UDPAddr) error { return ni
// mine generates a testnet struct literal with nodes at
// various distances to the given target.
func
(
n
*
preminedTestnet
)
mine
(
target
NodeID
)
{
n
.
target
=
target
n
.
targetSha
=
crypto
.
Keccak256Hash
(
n
.
target
[
:
])
func
(
t
n
*
preminedTestnet
)
mine
(
target
NodeID
)
{
t
n
.
target
=
target
tn
.
targetSha
=
crypto
.
Keccak256Hash
(
t
n
.
target
[
:
])
found
:=
0
for
found
<
bucketSize
*
10
{
k
:=
newkey
()
id
:=
PubkeyID
(
&
k
.
PublicKey
)
sha
:=
crypto
.
Keccak256Hash
(
id
[
:
])
ld
:=
logdist
(
n
.
targetSha
,
sha
)
if
len
(
n
.
dists
[
ld
])
<
bucketSize
{
n
.
dists
[
ld
]
=
append
(
n
.
dists
[
ld
],
id
)
ld
:=
logdist
(
t
n
.
targetSha
,
sha
)
if
len
(
t
n
.
dists
[
ld
])
<
bucketSize
{
tn
.
dists
[
ld
]
=
append
(
t
n
.
dists
[
ld
],
id
)
fmt
.
Println
(
"found ID with ld"
,
ld
)
found
++
}
}
fmt
.
Println
(
"&preminedTestnet{"
)
fmt
.
Printf
(
" target: %#v,
\n
"
,
n
.
target
)
fmt
.
Printf
(
" targetSha: %#v,
\n
"
,
n
.
targetSha
)
fmt
.
Printf
(
" dists: [%d][]NodeID{
\n
"
,
len
(
n
.
dists
))
for
ld
,
ns
:=
range
n
.
dists
{
fmt
.
Printf
(
" target: %#v,
\n
"
,
t
n
.
target
)
fmt
.
Printf
(
" targetSha: %#v,
\n
"
,
t
n
.
targetSha
)
fmt
.
Printf
(
" dists: [%d][]NodeID{
\n
"
,
len
(
t
n
.
dists
))
for
ld
,
ns
:=
range
t
n
.
dists
{
if
len
(
ns
)
==
0
{
continue
}
...
...
p2p/discv5/net_test.go
View file @
864e80a4
...
...
@@ -336,26 +336,26 @@ func (*preminedTestnet) localAddr() *net.UDPAddr {
// mine generates a testnet struct literal with nodes at
// various distances to the given target.
func
(
n
*
preminedTestnet
)
mine
(
target
NodeID
)
{
n
.
target
=
target
n
.
targetSha
=
crypto
.
Keccak256Hash
(
n
.
target
[
:
])
func
(
t
n
*
preminedTestnet
)
mine
(
target
NodeID
)
{
t
n
.
target
=
target
tn
.
targetSha
=
crypto
.
Keccak256Hash
(
t
n
.
target
[
:
])
found
:=
0
for
found
<
bucketSize
*
10
{
k
:=
newkey
()
id
:=
PubkeyID
(
&
k
.
PublicKey
)
sha
:=
crypto
.
Keccak256Hash
(
id
[
:
])
ld
:=
logdist
(
n
.
targetSha
,
sha
)
if
len
(
n
.
dists
[
ld
])
<
bucketSize
{
n
.
dists
[
ld
]
=
append
(
n
.
dists
[
ld
],
id
)
ld
:=
logdist
(
t
n
.
targetSha
,
sha
)
if
len
(
t
n
.
dists
[
ld
])
<
bucketSize
{
tn
.
dists
[
ld
]
=
append
(
t
n
.
dists
[
ld
],
id
)
fmt
.
Println
(
"found ID with ld"
,
ld
)
found
++
}
}
fmt
.
Println
(
"&preminedTestnet{"
)
fmt
.
Printf
(
" target: %#v,
\n
"
,
n
.
target
)
fmt
.
Printf
(
" targetSha: %#v,
\n
"
,
n
.
targetSha
)
fmt
.
Printf
(
" dists: [%d][]NodeID{
\n
"
,
len
(
n
.
dists
))
for
ld
,
ns
:=
range
n
.
dists
{
fmt
.
Printf
(
" target: %#v,
\n
"
,
t
n
.
target
)
fmt
.
Printf
(
" targetSha: %#v,
\n
"
,
t
n
.
targetSha
)
fmt
.
Printf
(
" dists: [%d][]NodeID{
\n
"
,
len
(
t
n
.
dists
))
for
ld
,
ns
:=
range
t
n
.
dists
{
if
len
(
ns
)
==
0
{
continue
}
...
...
p2p/discv5/node.go
View file @
864e80a4
...
...
@@ -315,11 +315,11 @@ func PubkeyID(pub *ecdsa.PublicKey) NodeID {
// Pubkey returns the public key represented by the node ID.
// It returns an error if the ID is not a point on the curve.
func
(
id
NodeID
)
Pubkey
()
(
*
ecdsa
.
PublicKey
,
error
)
{
func
(
n
NodeID
)
Pubkey
()
(
*
ecdsa
.
PublicKey
,
error
)
{
p
:=
&
ecdsa
.
PublicKey
{
Curve
:
crypto
.
S256
(),
X
:
new
(
big
.
Int
),
Y
:
new
(
big
.
Int
)}
half
:=
len
(
id
)
/
2
p
.
X
.
SetBytes
(
id
[
:
half
])
p
.
Y
.
SetBytes
(
id
[
half
:
])
half
:=
len
(
n
)
/
2
p
.
X
.
SetBytes
(
n
[
:
half
])
p
.
Y
.
SetBytes
(
n
[
half
:
])
if
!
p
.
Curve
.
IsOnCurve
(
p
.
X
,
p
.
Y
)
{
return
nil
,
errors
.
New
(
"id is invalid secp256k1 curve point"
)
}
...
...
p2p/discv5/ticket.go
View file @
864e80a4
...
...
@@ -304,8 +304,8 @@ func (s ticketRefByWaitTime) Len() int {
return
len
(
s
)
}
func
(
r
ticketRef
)
waitTime
()
mclock
.
AbsTime
{
return
r
.
t
.
regTime
[
r
.
idx
]
-
r
.
t
.
issueTime
func
(
r
ef
ticketRef
)
waitTime
()
mclock
.
AbsTime
{
return
r
ef
.
t
.
regTime
[
ref
.
idx
]
-
ref
.
t
.
issueTime
}
// Less reports whether the element with
...
...
p2p/discv5/topic.go
View file @
864e80a4
...
...
@@ -271,15 +271,15 @@ func (t *topicTable) useTicket(node *Node, serialNo uint32, topics []Topic, idx
return
false
}
func
(
t
opictab
*
topicTable
)
getTicket
(
node
*
Node
,
topics
[]
Topic
)
*
ticket
{
t
opictab
.
collectGarbage
()
func
(
t
*
topicTable
)
getTicket
(
node
*
Node
,
topics
[]
Topic
)
*
ticket
{
t
.
collectGarbage
()
now
:=
mclock
.
Now
()
n
:=
t
opictab
.
getOrNewNode
(
node
)
n
:=
t
.
getOrNewNode
(
node
)
n
.
lastIssuedTicket
++
t
opictab
.
storeTicketCounters
(
node
)
t
.
storeTicketCounters
(
node
)
t
:=
&
ticket
{
t
ic
:=
&
ticket
{
issueTime
:
now
,
topics
:
topics
,
serial
:
n
.
lastIssuedTicket
,
...
...
@@ -287,15 +287,15 @@ func (topictab *topicTable) getTicket(node *Node, topics []Topic) *ticket {
}
for
i
,
topic
:=
range
topics
{
var
waitPeriod
time
.
Duration
if
topic
:=
t
opictab
.
topics
[
topic
];
topic
!=
nil
{
if
topic
:=
t
.
topics
[
topic
];
topic
!=
nil
{
waitPeriod
=
topic
.
wcl
.
waitPeriod
}
else
{
waitPeriod
=
minWaitPeriod
}
t
.
regTime
[
i
]
=
now
+
mclock
.
AbsTime
(
waitPeriod
)
t
ic
.
regTime
[
i
]
=
now
+
mclock
.
AbsTime
(
waitPeriod
)
}
return
t
return
t
ic
}
const
gcInterval
=
time
.
Minute
...
...
p2p/message.go
View file @
864e80a4
...
...
@@ -270,15 +270,15 @@ func newMsgEventer(rw MsgReadWriter, feed *event.Feed, peerID discover.NodeID, p
// ReadMsg reads a message from the underlying MsgReadWriter and emits a
// "message received" event
func
(
self
*
msgEventer
)
ReadMsg
()
(
Msg
,
error
)
{
msg
,
err
:=
self
.
MsgReadWriter
.
ReadMsg
()
func
(
ev
*
msgEventer
)
ReadMsg
()
(
Msg
,
error
)
{
msg
,
err
:=
ev
.
MsgReadWriter
.
ReadMsg
()
if
err
!=
nil
{
return
msg
,
err
}
self
.
feed
.
Send
(
&
PeerEvent
{
ev
.
feed
.
Send
(
&
PeerEvent
{
Type
:
PeerEventTypeMsgRecv
,
Peer
:
self
.
peerID
,
Protocol
:
self
.
Protocol
,
Peer
:
ev
.
peerID
,
Protocol
:
ev
.
Protocol
,
MsgCode
:
&
msg
.
Code
,
MsgSize
:
&
msg
.
Size
,
})
...
...
@@ -287,15 +287,15 @@ func (self *msgEventer) ReadMsg() (Msg, error) {
// WriteMsg writes a message to the underlying MsgReadWriter and emits a
// "message sent" event
func
(
self
*
msgEventer
)
WriteMsg
(
msg
Msg
)
error
{
err
:=
self
.
MsgReadWriter
.
WriteMsg
(
msg
)
func
(
ev
*
msgEventer
)
WriteMsg
(
msg
Msg
)
error
{
err
:=
ev
.
MsgReadWriter
.
WriteMsg
(
msg
)
if
err
!=
nil
{
return
err
}
self
.
feed
.
Send
(
&
PeerEvent
{
ev
.
feed
.
Send
(
&
PeerEvent
{
Type
:
PeerEventTypeMsgSend
,
Peer
:
self
.
peerID
,
Protocol
:
self
.
Protocol
,
Peer
:
ev
.
peerID
,
Protocol
:
ev
.
Protocol
,
MsgCode
:
&
msg
.
Code
,
MsgSize
:
&
msg
.
Size
,
})
...
...
@@ -304,8 +304,8 @@ func (self *msgEventer) WriteMsg(msg Msg) error {
// Close closes the underlying MsgReadWriter if it implements the io.Closer
// interface
func
(
self
*
msgEventer
)
Close
()
error
{
if
v
,
ok
:=
self
.
MsgReadWriter
.
(
io
.
Closer
);
ok
{
func
(
ev
*
msgEventer
)
Close
()
error
{
if
v
,
ok
:=
ev
.
MsgReadWriter
.
(
io
.
Closer
);
ok
{
return
v
.
Close
()
}
return
nil
...
...
p2p/peer_error.go
View file @
864e80a4
...
...
@@ -48,8 +48,8 @@ func newPeerError(code int, format string, v ...interface{}) *peerError {
return
err
}
func
(
self
*
peerError
)
Error
()
string
{
return
self
.
message
func
(
pe
*
peerError
)
Error
()
string
{
return
pe
.
message
}
var
errProtocolReturned
=
errors
.
New
(
"protocol returned"
)
...
...
p2p/simulations/adapters/inproc.go
View file @
864e80a4
...
...
@@ -154,30 +154,30 @@ type SimNode struct {
}
// Addr returns the node's discovery address
func
(
s
elf
*
SimNode
)
Addr
()
[]
byte
{
return
[]
byte
(
s
elf
.
Node
()
.
String
())
func
(
s
n
*
SimNode
)
Addr
()
[]
byte
{
return
[]
byte
(
s
n
.
Node
()
.
String
())
}
// Node returns a discover.Node representing the SimNode
func
(
s
elf
*
SimNode
)
Node
()
*
discover
.
Node
{
return
discover
.
NewNode
(
s
elf
.
ID
,
net
.
IP
{
127
,
0
,
0
,
1
},
30303
,
30303
)
func
(
s
n
*
SimNode
)
Node
()
*
discover
.
Node
{
return
discover
.
NewNode
(
s
n
.
ID
,
net
.
IP
{
127
,
0
,
0
,
1
},
30303
,
30303
)
}
// Client returns an rpc.Client which can be used to communicate with the
// underlying services (it is set once the node has started)
func
(
s
elf
*
SimNode
)
Client
()
(
*
rpc
.
Client
,
error
)
{
s
elf
.
lock
.
RLock
()
defer
s
elf
.
lock
.
RUnlock
()
if
s
elf
.
client
==
nil
{
func
(
s
n
*
SimNode
)
Client
()
(
*
rpc
.
Client
,
error
)
{
s
n
.
lock
.
RLock
()
defer
s
n
.
lock
.
RUnlock
()
if
s
n
.
client
==
nil
{
return
nil
,
errors
.
New
(
"node not started"
)
}
return
s
elf
.
client
,
nil
return
s
n
.
client
,
nil
}
// ServeRPC serves RPC requests over the given connection by creating an
// in-memory client to the node's RPC server
func
(
s
elf
*
SimNode
)
ServeRPC
(
conn
net
.
Conn
)
error
{
handler
,
err
:=
s
elf
.
node
.
RPCHandler
()
func
(
s
n
*
SimNode
)
ServeRPC
(
conn
net
.
Conn
)
error
{
handler
,
err
:=
s
n
.
node
.
RPCHandler
()
if
err
!=
nil
{
return
err
}
...
...
@@ -187,13 +187,13 @@ func (self *SimNode) ServeRPC(conn net.Conn) error {
// Snapshots creates snapshots of the services by calling the
// simulation_snapshot RPC method
func
(
s
elf
*
SimNode
)
Snapshots
()
(
map
[
string
][]
byte
,
error
)
{
s
elf
.
lock
.
RLock
()
services
:=
make
(
map
[
string
]
node
.
Service
,
len
(
s
elf
.
running
))
for
name
,
service
:=
range
s
elf
.
running
{
func
(
s
n
*
SimNode
)
Snapshots
()
(
map
[
string
][]
byte
,
error
)
{
s
n
.
lock
.
RLock
()
services
:=
make
(
map
[
string
]
node
.
Service
,
len
(
s
n
.
running
))
for
name
,
service
:=
range
s
n
.
running
{
services
[
name
]
=
service
}
s
elf
.
lock
.
RUnlock
()
s
n
.
lock
.
RUnlock
()
if
len
(
services
)
==
0
{
return
nil
,
errors
.
New
(
"no running services"
)
}
...
...
@@ -213,23 +213,23 @@ func (self *SimNode) Snapshots() (map[string][]byte, error) {
}
// Start registers the services and starts the underlying devp2p node
func
(
s
elf
*
SimNode
)
Start
(
snapshots
map
[
string
][]
byte
)
error
{
func
(
s
n
*
SimNode
)
Start
(
snapshots
map
[
string
][]
byte
)
error
{
newService
:=
func
(
name
string
)
func
(
ctx
*
node
.
ServiceContext
)
(
node
.
Service
,
error
)
{
return
func
(
nodeCtx
*
node
.
ServiceContext
)
(
node
.
Service
,
error
)
{
ctx
:=
&
ServiceContext
{
RPCDialer
:
s
elf
.
adapter
,
RPCDialer
:
s
n
.
adapter
,
NodeContext
:
nodeCtx
,
Config
:
s
elf
.
config
,
Config
:
s
n
.
config
,
}
if
snapshots
!=
nil
{
ctx
.
Snapshot
=
snapshots
[
name
]
}
serviceFunc
:=
s
elf
.
adapter
.
services
[
name
]
serviceFunc
:=
s
n
.
adapter
.
services
[
name
]
service
,
err
:=
serviceFunc
(
ctx
)
if
err
!=
nil
{
return
nil
,
err
}
s
elf
.
running
[
name
]
=
service
s
n
.
running
[
name
]
=
service
return
service
,
nil
}
}
...
...
@@ -237,9 +237,9 @@ func (self *SimNode) Start(snapshots map[string][]byte) error {
// ensure we only register the services once in the case of the node
// being stopped and then started again
var
regErr
error
s
elf
.
registerOnce
.
Do
(
func
()
{
for
_
,
name
:=
range
s
elf
.
config
.
Services
{
if
err
:=
s
elf
.
node
.
Register
(
newService
(
name
));
err
!=
nil
{
s
n
.
registerOnce
.
Do
(
func
()
{
for
_
,
name
:=
range
s
n
.
config
.
Services
{
if
err
:=
s
n
.
node
.
Register
(
newService
(
name
));
err
!=
nil
{
regErr
=
err
return
}
...
...
@@ -249,54 +249,54 @@ func (self *SimNode) Start(snapshots map[string][]byte) error {
return
regErr
}
if
err
:=
s
elf
.
node
.
Start
();
err
!=
nil
{
if
err
:=
s
n
.
node
.
Start
();
err
!=
nil
{
return
err
}
// create an in-process RPC client
handler
,
err
:=
s
elf
.
node
.
RPCHandler
()
handler
,
err
:=
s
n
.
node
.
RPCHandler
()
if
err
!=
nil
{
return
err
}
s
elf
.
lock
.
Lock
()
s
elf
.
client
=
rpc
.
DialInProc
(
handler
)
s
elf
.
lock
.
Unlock
()
s
n
.
lock
.
Lock
()
s
n
.
client
=
rpc
.
DialInProc
(
handler
)
s
n
.
lock
.
Unlock
()
return
nil
}
// Stop closes the RPC client and stops the underlying devp2p node
func
(
s
elf
*
SimNode
)
Stop
()
error
{
s
elf
.
lock
.
Lock
()
if
s
elf
.
client
!=
nil
{
s
elf
.
client
.
Close
()
s
elf
.
client
=
nil
func
(
s
n
*
SimNode
)
Stop
()
error
{
s
n
.
lock
.
Lock
()
if
s
n
.
client
!=
nil
{
s
n
.
client
.
Close
()
s
n
.
client
=
nil
}
s
elf
.
lock
.
Unlock
()
return
s
elf
.
node
.
Stop
()
s
n
.
lock
.
Unlock
()
return
s
n
.
node
.
Stop
()
}
// Services returns a copy of the underlying services
func
(
s
elf
*
SimNode
)
Services
()
[]
node
.
Service
{
s
elf
.
lock
.
RLock
()
defer
s
elf
.
lock
.
RUnlock
()
services
:=
make
([]
node
.
Service
,
0
,
len
(
s
elf
.
running
))
for
_
,
service
:=
range
s
elf
.
running
{
func
(
s
n
*
SimNode
)
Services
()
[]
node
.
Service
{
s
n
.
lock
.
RLock
()
defer
s
n
.
lock
.
RUnlock
()
services
:=
make
([]
node
.
Service
,
0
,
len
(
s
n
.
running
))
for
_
,
service
:=
range
s
n
.
running
{
services
=
append
(
services
,
service
)
}
return
services
}
// Server returns the underlying p2p.Server
func
(
s
elf
*
SimNode
)
Server
()
*
p2p
.
Server
{
return
s
elf
.
node
.
Server
()
func
(
s
n
*
SimNode
)
Server
()
*
p2p
.
Server
{
return
s
n
.
node
.
Server
()
}
// SubscribeEvents subscribes the given channel to peer events from the
// underlying p2p.Server
func
(
s
elf
*
SimNode
)
SubscribeEvents
(
ch
chan
*
p2p
.
PeerEvent
)
event
.
Subscription
{
srv
:=
s
elf
.
Server
()
func
(
s
n
*
SimNode
)
SubscribeEvents
(
ch
chan
*
p2p
.
PeerEvent
)
event
.
Subscription
{
srv
:=
s
n
.
Server
()
if
srv
==
nil
{
panic
(
"node not running"
)
}
...
...
@@ -304,12 +304,12 @@ func (self *SimNode) SubscribeEvents(ch chan *p2p.PeerEvent) event.Subscription
}
// NodeInfo returns information about the node
func
(
s
elf
*
SimNode
)
NodeInfo
()
*
p2p
.
NodeInfo
{
server
:=
s
elf
.
Server
()
func
(
s
n
*
SimNode
)
NodeInfo
()
*
p2p
.
NodeInfo
{
server
:=
s
n
.
Server
()
if
server
==
nil
{
return
&
p2p
.
NodeInfo
{
ID
:
s
elf
.
ID
.
String
(),
Enode
:
s
elf
.
Node
()
.
String
(),
ID
:
s
n
.
ID
.
String
(),
Enode
:
s
n
.
Node
()
.
String
(),
}
}
return
server
.
NodeInfo
()
...
...
p2p/simulations/adapters/state.go
View file @
864e80a4
...
...
@@ -20,12 +20,12 @@ type SimStateStore struct {
m
map
[
string
][]
byte
}
func
(
s
elf
*
SimStateStore
)
Load
(
s
string
)
([]
byte
,
error
)
{
return
s
elf
.
m
[
s
],
nil
func
(
s
t
*
SimStateStore
)
Load
(
s
string
)
([]
byte
,
error
)
{
return
s
t
.
m
[
s
],
nil
}
func
(
s
elf
*
SimStateStore
)
Save
(
s
string
,
data
[]
byte
)
error
{
s
elf
.
m
[
s
]
=
data
func
(
s
t
*
SimStateStore
)
Save
(
s
string
,
data
[]
byte
)
error
{
s
t
.
m
[
s
]
=
data
return
nil
}
...
...
p2p/simulations/network.go
View file @
864e80a4
This diff is collapsed.
Click to expand it.
p2p/testing/peerpool.go
View file @
864e80a4
...
...
@@ -39,29 +39,29 @@ func NewTestPeerPool() *TestPeerPool {
return
&
TestPeerPool
{
peers
:
make
(
map
[
discover
.
NodeID
]
TestPeer
)}
}
func
(
self
*
TestPeerPool
)
Add
(
p
TestPeer
)
{
self
.
lock
.
Lock
()
defer
self
.
lock
.
Unlock
()
log
.
Trace
(
fmt
.
Sprintf
(
"pp add peer %v"
,
p
.
ID
()))
self
.
peers
[
p
.
ID
()]
=
p
func
(
p
*
TestPeerPool
)
Add
(
peer
TestPeer
)
{
p
.
lock
.
Lock
()
defer
p
.
lock
.
Unlock
()
log
.
Trace
(
fmt
.
Sprintf
(
"pp add peer %v"
,
p
eer
.
ID
()))
p
.
peers
[
peer
.
ID
()]
=
peer
}
func
(
self
*
TestPeerPool
)
Remove
(
p
TestPeer
)
{
self
.
lock
.
Lock
()
defer
self
.
lock
.
Unlock
()
delete
(
self
.
peers
,
p
.
ID
())
func
(
p
*
TestPeerPool
)
Remove
(
peer
TestPeer
)
{
p
.
lock
.
Lock
()
defer
p
.
lock
.
Unlock
()
delete
(
p
.
peers
,
peer
.
ID
())
}
func
(
self
*
TestPeerPool
)
Has
(
id
discover
.
NodeID
)
bool
{
self
.
lock
.
Lock
()
defer
self
.
lock
.
Unlock
()
_
,
ok
:=
self
.
peers
[
id
]
func
(
p
*
TestPeerPool
)
Has
(
id
discover
.
NodeID
)
bool
{
p
.
lock
.
Lock
()
defer
p
.
lock
.
Unlock
()
_
,
ok
:=
p
.
peers
[
id
]
return
ok
}
func
(
self
*
TestPeerPool
)
Get
(
id
discover
.
NodeID
)
TestPeer
{
self
.
lock
.
Lock
()
defer
self
.
lock
.
Unlock
()
return
self
.
peers
[
id
]
func
(
p
*
TestPeerPool
)
Get
(
id
discover
.
NodeID
)
TestPeer
{
p
.
lock
.
Lock
()
defer
p
.
lock
.
Unlock
()
return
p
.
peers
[
id
]
}
p2p/testing/protocolsession.go
View file @
864e80a4
...
...
@@ -78,10 +78,10 @@ type Disconnect struct {
}
// trigger sends messages from peers
func
(
s
elf
*
ProtocolSession
)
trigger
(
trig
Trigger
)
error
{
simNode
,
ok
:=
s
elf
.
adapter
.
GetNode
(
trig
.
Peer
)
func
(
s
*
ProtocolSession
)
trigger
(
trig
Trigger
)
error
{
simNode
,
ok
:=
s
.
adapter
.
GetNode
(
trig
.
Peer
)
if
!
ok
{
return
fmt
.
Errorf
(
"trigger: peer %v does not exist (1- %v)"
,
trig
.
Peer
,
len
(
s
elf
.
IDs
))
return
fmt
.
Errorf
(
"trigger: peer %v does not exist (1- %v)"
,
trig
.
Peer
,
len
(
s
.
IDs
))
}
mockNode
,
ok
:=
simNode
.
Services
()[
0
]
.
(
*
mockNode
)
if
!
ok
{
...
...
@@ -107,7 +107,7 @@ func (self *ProtocolSession) trigger(trig Trigger) error {
}
// expect checks an expectation of a message sent out by the pivot node
func
(
s
elf
*
ProtocolSession
)
expect
(
exps
[]
Expect
)
error
{
func
(
s
*
ProtocolSession
)
expect
(
exps
[]
Expect
)
error
{
// construct a map of expectations for each node
peerExpects
:=
make
(
map
[
discover
.
NodeID
][]
Expect
)
for
_
,
exp
:=
range
exps
{
...
...
@@ -120,9 +120,9 @@ func (self *ProtocolSession) expect(exps []Expect) error {
// construct a map of mockNodes for each node
mockNodes
:=
make
(
map
[
discover
.
NodeID
]
*
mockNode
)
for
nodeID
:=
range
peerExpects
{
simNode
,
ok
:=
s
elf
.
adapter
.
GetNode
(
nodeID
)
simNode
,
ok
:=
s
.
adapter
.
GetNode
(
nodeID
)
if
!
ok
{
return
fmt
.
Errorf
(
"trigger: peer %v does not exist (1- %v)"
,
nodeID
,
len
(
s
elf
.
IDs
))
return
fmt
.
Errorf
(
"trigger: peer %v does not exist (1- %v)"
,
nodeID
,
len
(
s
.
IDs
))
}
mockNode
,
ok
:=
simNode
.
Services
()[
0
]
.
(
*
mockNode
)
if
!
ok
{
...
...
@@ -202,9 +202,9 @@ func (self *ProtocolSession) expect(exps []Expect) error {
}
// TestExchanges tests a series of exchanges against the session
func
(
s
elf
*
ProtocolSession
)
TestExchanges
(
exchanges
...
Exchange
)
error
{
func
(
s
*
ProtocolSession
)
TestExchanges
(
exchanges
...
Exchange
)
error
{
for
i
,
e
:=
range
exchanges
{
if
err
:=
s
elf
.
testExchange
(
e
);
err
!=
nil
{
if
err
:=
s
.
testExchange
(
e
);
err
!=
nil
{
return
fmt
.
Errorf
(
"exchange #%d %q: %v"
,
i
,
e
.
Label
,
err
)
}
log
.
Trace
(
fmt
.
Sprintf
(
"exchange #%d %q: run successfully"
,
i
,
e
.
Label
))
...
...
@@ -214,14 +214,14 @@ func (self *ProtocolSession) TestExchanges(exchanges ...Exchange) error {
// testExchange tests a single Exchange.
// Default timeout value is 2 seconds.
func
(
s
elf
*
ProtocolSession
)
testExchange
(
e
Exchange
)
error
{
func
(
s
*
ProtocolSession
)
testExchange
(
e
Exchange
)
error
{
errc
:=
make
(
chan
error
)
done
:=
make
(
chan
struct
{})
defer
close
(
done
)
go
func
()
{
for
_
,
trig
:=
range
e
.
Triggers
{
err
:=
s
elf
.
trigger
(
trig
)
err
:=
s
.
trigger
(
trig
)
if
err
!=
nil
{
errc
<-
err
return
...
...
@@ -229,7 +229,7 @@ func (self *ProtocolSession) testExchange(e Exchange) error {
}
select
{
case
errc
<-
s
elf
.
expect
(
e
.
Expects
)
:
case
errc
<-
s
.
expect
(
e
.
Expects
)
:
case
<-
done
:
}
}()
...
...
@@ -250,7 +250,7 @@ func (self *ProtocolSession) testExchange(e Exchange) error {
// TestDisconnected tests the disconnections given as arguments
// the disconnect structs describe what disconnect error is expected on which peer
func
(
s
elf
*
ProtocolSession
)
TestDisconnected
(
disconnects
...*
Disconnect
)
error
{
func
(
s
*
ProtocolSession
)
TestDisconnected
(
disconnects
...*
Disconnect
)
error
{
expects
:=
make
(
map
[
discover
.
NodeID
]
error
)
for
_
,
disconnect
:=
range
disconnects
{
expects
[
disconnect
.
Peer
]
=
disconnect
.
Error
...
...
@@ -259,7 +259,7 @@ func (self *ProtocolSession) TestDisconnected(disconnects ...*Disconnect) error
timeout
:=
time
.
After
(
time
.
Second
)
for
len
(
expects
)
>
0
{
select
{
case
event
:=
<-
s
elf
.
events
:
case
event
:=
<-
s
.
events
:
if
event
.
Type
!=
p2p
.
PeerEventTypeDrop
{
continue
}
...
...
p2p/testing/protocoltester.go
View file @
864e80a4
...
...
@@ -101,24 +101,24 @@ func NewProtocolTester(t *testing.T, id discover.NodeID, n int, run func(*p2p.Pe
}
// Stop stops the p2p server
func
(
self
*
ProtocolTester
)
Stop
()
error
{
self
.
Server
.
Stop
()
func
(
t
*
ProtocolTester
)
Stop
()
error
{
t
.
Server
.
Stop
()
return
nil
}
// Connect brings up the remote peer node and connects it using the
// p2p/simulations network connection with the in memory network adapter
func
(
self
*
ProtocolTester
)
Connect
(
selfID
discover
.
NodeID
,
peers
...*
adapters
.
NodeConfig
)
{
func
(
t
*
ProtocolTester
)
Connect
(
selfID
discover
.
NodeID
,
peers
...*
adapters
.
NodeConfig
)
{
for
_
,
peer
:=
range
peers
{
log
.
Trace
(
fmt
.
Sprintf
(
"start node %v"
,
peer
.
ID
))
if
_
,
err
:=
self
.
network
.
NewNodeWithConfig
(
peer
);
err
!=
nil
{
if
_
,
err
:=
t
.
network
.
NewNodeWithConfig
(
peer
);
err
!=
nil
{
panic
(
fmt
.
Sprintf
(
"error starting peer %v: %v"
,
peer
.
ID
,
err
))
}
if
err
:=
self
.
network
.
Start
(
peer
.
ID
);
err
!=
nil
{
if
err
:=
t
.
network
.
Start
(
peer
.
ID
);
err
!=
nil
{
panic
(
fmt
.
Sprintf
(
"error starting peer %v: %v"
,
peer
.
ID
,
err
))
}
log
.
Trace
(
fmt
.
Sprintf
(
"connect to %v"
,
peer
.
ID
))
if
err
:=
self
.
network
.
Connect
(
selfID
,
peer
.
ID
);
err
!=
nil
{
if
err
:=
t
.
network
.
Connect
(
selfID
,
peer
.
ID
);
err
!=
nil
{
panic
(
fmt
.
Sprintf
(
"error connecting to peer %v: %v"
,
peer
.
ID
,
err
))
}
}
...
...
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