mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-22 12:46:44 +00:00
added test for getPeerMsg/peerMsg - FAILS
This commit is contained in:
parent
50d834d3f2
commit
6d848d0e0e
1 changed files with 129 additions and 0 deletions
|
|
@ -3,8 +3,136 @@ package p2p
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/ethereum/go-ethereum/crypto"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type peerId struct {
|
||||||
|
pubkey []byte
|
||||||
|
}
|
||||||
|
|
||||||
|
func (self *peerId) String() string {
|
||||||
|
return fmt.Sprintf("test peer %x", self.Pubkey()[:4])
|
||||||
|
}
|
||||||
|
|
||||||
|
func (self *peerId) Pubkey() (pubkey []byte) {
|
||||||
|
pubkey = self.pubkey
|
||||||
|
if len(pubkey) == 0 {
|
||||||
|
pubkey = crypto.GenerateNewKeyPair().PublicKey
|
||||||
|
self.pubkey = pubkey
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func testPeerFree() (peer *Peer) {
|
||||||
|
peer = NewPeer(&peerId{}, []Cap{})
|
||||||
|
peer.pubkeyHook = func(*peerAddr) error { return nil }
|
||||||
|
peer.ourID = &peerId{}
|
||||||
|
peer.listenAddr = &peerAddr{}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestPeersMsg(t *testing.T) {
|
||||||
|
var peers []*Peer
|
||||||
|
for i := 0; i < 3; i++ {
|
||||||
|
peers = append(peers, testPeerFree())
|
||||||
|
}
|
||||||
|
peer1 := testPeerFree()
|
||||||
|
peer1.newPeerAddr = make(chan *peerAddr)
|
||||||
|
peer1.otherPeers = func() []*Peer {
|
||||||
|
return peers
|
||||||
|
}
|
||||||
|
|
||||||
|
peer2 := testPeerFree()
|
||||||
|
peer2.newPeerAddr = make(chan *peerAddr)
|
||||||
|
peer2.otherPeers = func() []*Peer {
|
||||||
|
return peers
|
||||||
|
}
|
||||||
|
|
||||||
|
rw1, rw2 := MsgPipe()
|
||||||
|
fmt.Printf("all set up\n ")
|
||||||
|
|
||||||
|
done := make(chan struct{})
|
||||||
|
go func() {
|
||||||
|
fmt.Printf("expect handshake\n ")
|
||||||
|
|
||||||
|
if err := expectMsg(rw2, handshakeMsg); err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
|
fmt.Printf("send handshake\n ")
|
||||||
|
|
||||||
|
err := rw2.EncodeMsg(handshakeMsg,
|
||||||
|
baseProtocolVersion,
|
||||||
|
"",
|
||||||
|
[]interface{}{},
|
||||||
|
0,
|
||||||
|
make([]byte, 64),
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
|
fmt.Printf("send getPeers msg\n")
|
||||||
|
|
||||||
|
if err := rw2.EncodeMsg(getPeersMsg); err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
|
fmt.Printf("expecting peersMsg\n")
|
||||||
|
var msg Msg
|
||||||
|
if msg, err = rw2.ReadMsg(); err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var addrs []*peerAddr
|
||||||
|
fmt.Printf("got peersMsg\n")
|
||||||
|
if err := msg.Decode(&addrs); err != nil {
|
||||||
|
t.Errorf("msg %v : %v", msg, err)
|
||||||
|
}
|
||||||
|
fmt.Printf("decoding done\n")
|
||||||
|
|
||||||
|
if len(addrs) != 3 {
|
||||||
|
t.Errorf("too few peer addresses, expected %v, got %v", 3, len(addrs))
|
||||||
|
}
|
||||||
|
fmt.Printf("count ok\n")
|
||||||
|
|
||||||
|
for i, p := range peers {
|
||||||
|
if i == len(addrs) {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
addr := addrs[i]
|
||||||
|
fmt.Printf("addr %v: %v\n", i, addr)
|
||||||
|
if addr != p.listenAddr {
|
||||||
|
t.Errorf("incorrect peer address %v (%v)", addr, i)
|
||||||
|
}
|
||||||
|
if addr == nil {
|
||||||
|
t.Errorf("no processing %v", i)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fmt.Printf("complete\n")
|
||||||
|
if err := expectMsg(rw2, peersMsg); err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := rw2.EncodeMsg(discMsg, DiscQuitting); err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
close(done)
|
||||||
|
fmt.Printf("done channel closed")
|
||||||
|
}()
|
||||||
|
|
||||||
|
fmt.Printf("proto")
|
||||||
|
|
||||||
|
if err := runBaseProtocol(peer1, rw1); err == nil {
|
||||||
|
t.Errorf("base protocol returned without error")
|
||||||
|
} else if reason, ok := err.(discRequestedError); !ok || reason != DiscQuitting {
|
||||||
|
t.Errorf("base protocol returned wrong error: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
<-done
|
||||||
|
t.Error("oops")
|
||||||
|
}
|
||||||
|
|
||||||
func TestBaseProtocolDisconnect(t *testing.T) {
|
func TestBaseProtocolDisconnect(t *testing.T) {
|
||||||
peer := NewPeer(NewSimpleClientIdentity("p1", "", "", "foo"), nil)
|
peer := NewPeer(NewSimpleClientIdentity("p1", "", "", "foo"), nil)
|
||||||
peer.ourID = NewSimpleClientIdentity("p2", "", "", "bar")
|
peer.ourID = NewSimpleClientIdentity("p2", "", "", "bar")
|
||||||
|
|
@ -32,6 +160,7 @@ func TestBaseProtocolDisconnect(t *testing.T) {
|
||||||
if err := rw2.EncodeMsg(discMsg, DiscQuitting); err != nil {
|
if err := rw2.EncodeMsg(discMsg, DiscQuitting); err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
close(done)
|
close(done)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue