Merge pull request #8 from tendermint/develop
update MakeConnectedSwitches
This commit is contained in:
commit
1eb390680d
40
switch.go
40
switch.go
|
@ -195,7 +195,7 @@ func (sw *Switch) OnStop() {
|
|||
// NOTE: This performs a blocking handshake before the peer is added.
|
||||
// CONTRACT: Iff error is returned, peer is nil, and conn is immediately closed.
|
||||
func (sw *Switch) AddPeerWithConnection(conn net.Conn, outbound bool) (*Peer, error) {
|
||||
// Filter by ip
|
||||
// Filter by addr (ie. ip:port)
|
||||
if err := sw.FilterConnByAddr(conn.RemoteAddr()); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -456,29 +456,52 @@ type SwitchEventDonePeer struct {
|
|||
//------------------------------------------------------------------
|
||||
// Switches connected via arbitrary net.Conn; useful for testing
|
||||
|
||||
// Returns n fully connected switches.
|
||||
// Returns n switches, connected according to the connect func.
|
||||
// If connect==Connect2Switches, the switches will be fully connected.
|
||||
// initSwitch defines how the ith switch should be initialized (ie. with what reactors).
|
||||
func MakeConnectedSwitches(n int, initSwitch func(int, *Switch) *Switch, connPipe func() (net.Conn, net.Conn)) []*Switch {
|
||||
// NOTE: panics if any switch fails to start.
|
||||
func MakeConnectedSwitches(n int, initSwitch func(int, *Switch) *Switch, connect func([]*Switch, int, int)) []*Switch {
|
||||
switches := make([]*Switch, n)
|
||||
for i := 0; i < n; i++ {
|
||||
switches[i] = makeSwitch(i, "testing", "123.123.123", initSwitch)
|
||||
}
|
||||
|
||||
for i := 0; i < n; i++ {
|
||||
switchI := switches[i]
|
||||
for j := i; j < n; j++ {
|
||||
switchJ := switches[j]
|
||||
c1, c2 := connPipe()
|
||||
go switchI.AddPeerWithConnection(c1, false) // AddPeer is blocking, requires handshake.
|
||||
go switchJ.AddPeerWithConnection(c2, true)
|
||||
connect(switches, i, j)
|
||||
}
|
||||
}
|
||||
// Wait for things to happen, peers to get added...
|
||||
// TODO: better
|
||||
time.Sleep(100 * time.Millisecond * time.Duration(n*n))
|
||||
|
||||
if err := StartSwitches(switches); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
return switches
|
||||
}
|
||||
|
||||
// Will connect switches i and j via net.Pipe()
|
||||
// NOTE: caller ensures i and j are within bounds
|
||||
func Connect2Switches(switches []*Switch, i, j int) {
|
||||
switchI := switches[i]
|
||||
switchJ := switches[j]
|
||||
c1, c2 := net.Pipe()
|
||||
go switchI.AddPeerWithConnection(c1, false) // AddPeer is blocking, requires handshake.
|
||||
go switchJ.AddPeerWithConnection(c2, true)
|
||||
}
|
||||
|
||||
func StartSwitches(switches []*Switch) error {
|
||||
for _, s := range switches {
|
||||
_, err := s.Start() // start switch and reactors
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func makeSwitch(i int, network, version string, initSwitch func(int, *Switch) *Switch) *Switch {
|
||||
privKey := crypto.GenPrivKeyEd25519()
|
||||
// new switch, add reactors
|
||||
|
@ -491,6 +514,5 @@ func makeSwitch(i int, network, version string, initSwitch func(int, *Switch) *S
|
|||
Version: version,
|
||||
})
|
||||
s.SetNodePrivKey(privKey)
|
||||
s.Start() // start switch and reactors
|
||||
return s
|
||||
}
|
||||
|
|
|
@ -90,7 +90,7 @@ func (tr *TestReactor) getMsgs(chID byte) []PeerMessage {
|
|||
// XXX: note this uses net.Pipe and not a proper TCP conn
|
||||
func makeSwitchPair(t testing.TB, initSwitch func(int, *Switch) *Switch) (*Switch, *Switch) {
|
||||
// Create two switches that will be interconnected.
|
||||
switches := MakeConnectedSwitches(2, initSwitch, net.Pipe)
|
||||
switches := MakeConnectedSwitches(2, initSwitch, Connect2Switches)
|
||||
return switches[0], switches[1]
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue