swarm/network: peersexchange massaging

added send peers to newly connected peer from already connected peer
removed peermsg expect
This commit is contained in:
nolash 2017-03-18 16:14:49 +01:00 committed by Lewis Marshall
parent 9cad74910f
commit 5401bf02f1
5 changed files with 64 additions and 8 deletions

View file

@ -266,7 +266,7 @@ func ExpectMsg(r MsgReader, code uint64, content interface{}) error {
return err
}
if !bytes.Equal(actualContent, contentEnc) {
return fmt.Errorf("message payload mismatch:\ngot: %x\nwant: %x", actualContent, contentEnc)
return fmt.Errorf("message %v payload mismatch:\ngot: %x\nwant: %x", msg, actualContent, contentEnc)
}
}
return nil

View file

@ -14,15 +14,16 @@ import (
type discPeer struct {
Peer
overlay Overlay
proxLimit uint8
peers map[discover.NodeID]bool
overlay Overlay
proxLimit uint8
peers map[discover.NodeID]bool
sentPeers bool
}
// NotifyPeer notifies the receiver remote end of a peer p or PO po.
// callback for overlay driver
func (self *discPeer) NotifyPeer(p Peer, po uint8) error {
if po < self.proxLimit || self.peers[p.ID()] {
if po < self.proxLimit || self.peers[p.ID()] || !self.sentPeers {
return nil
}
resp := &peersMsg{
@ -104,6 +105,19 @@ func (self SubPeersMsg) String() string {
func (self *discPeer) handleSubPeersMsg(msg interface{}) error {
spm := msg.(*SubPeersMsg)
if !self.sentPeers {
var peers []*peerAddr
self.overlay.EachLivePeer(self.OverlayAddr(), 255, func(p Peer, po int) bool {
if uint8(po) > self.proxLimit {
return false
}
self.peers[p.ID()] = true
peers = append(peers, &peerAddr{p.OverlayAddr(), p.UnderlayAddr()})
return true
})
self.Send(&peersMsg{Peers: peers})
}
self.sentPeers = true
self.proxLimit = spm.ProxLimit
return nil
}

0
swarm/network/msg Normal file
View file

View file

@ -7,22 +7,58 @@ import (
"github.com/ethereum/go-ethereum/logger/glog"
"github.com/ethereum/go-ethereum/p2p/adapters"
"github.com/ethereum/go-ethereum/p2p/simulations"
"github.com/ethereum/go-ethereum/p2p/protocols"
p2ptest "github.com/ethereum/go-ethereum/p2p/testing"
)
type pssTester struct {
*p2ptest.ProtocolTester
ct *protocols.CodeMap
}
func TestPssTwoToSelf(t *testing.T) {
addr := RandomAddr()
pt := newPssTester(t, addr, 2)
subpeermsgcode, found := pt.ct.GetCode(&SubPeersMsg{})
if !found {
t.Fatalf("peerMsg not defined")
}
/*peermsgcode, found := pt.ct.GetCode(&peersMsg{})
if !found {
t.Fatalf("peerMsg not defined")
}*/
hs_pivot := correctBzzHandshake(addr)
for _, id := range pt.Ids {
hs_sim := correctBzzHandshake(NewPeerAddrFromNodeId(id))
glog.V(logger.Detail).Infof("Will handshake %v with %v", hs_pivot, hs_sim)
<-pt.GetPeer(id).Connc
pt.TestExchanges(bzzHandshakeExchange(hs_pivot, hs_sim, id)...)
pt.TestExchanges(
p2ptest.Exchange{
Expects: []p2ptest.Expect{
p2ptest.Expect{
Code: subpeermsgcode,
Msg: &SubPeersMsg{},
Peer: id,
},
},
},/*
p2ptest.Exchange{
Expects: []p2ptest.Expect{
p2ptest.Expect{
Code: peermsgcode,
Msg: &peersMsg{},
Peer: id,
},
},
},*/
)
}
}
@ -33,6 +69,10 @@ func newPssTester(t *testing.T, addr *peerAddr, n int) *pssTester {
func newPssBaseTester(t *testing.T, addr *peerAddr, n int) *pssTester {
ct := BzzCodeMap()
ct.Register(&PssMsg{})
ct.Register(&peersMsg{})
ct.Register(&getPeersMsg{})
ct.Register(&SubPeersMsg{}) // why is this official?
simPipe := adapters.NewSimPipe
kp := NewKadParams()
@ -62,6 +102,7 @@ func newPssBaseTester(t *testing.T, addr *peerAddr, n int) *pssTester {
return &pssTester{
ProtocolTester: s,
ct: ct,
}
}

View file

@ -15,7 +15,7 @@ import (
"github.com/ethereum/go-ethereum/p2p"
"github.com/ethereum/go-ethereum/p2p/adapters"
"github.com/ethereum/go-ethereum/p2p/simulations"
p2ptest "github.com/ethereum/go-ethereum/p2p/testing"
//p2ptest "github.com/ethereum/go-ethereum/p2p/testing"
"github.com/ethereum/go-ethereum/swarm/network"
)
@ -111,7 +111,8 @@ func nethook(conf *simulations.NetworkConfig) (simulations.NetworkControl, *simu
conf.Backend = true
net := NewNetwork(simulations.NewNetwork(conf))
ids := p2ptest.RandomNodeIds(10)
//ids := p2ptest.RandomNodeIds(10)
ids := adapters.RandomNodeIds(10)
for i, id := range ids {
net.NewNode(&simulations.NodeConfig{Id: id})