@ -30,6 +30,11 @@ import (
p2ptest "github.com/ethereum/go-ethereum/p2p/testing"
p2ptest "github.com/ethereum/go-ethereum/p2p/testing"
)
)
const (
TestProtocolVersion = 5
TestProtocolNetworkID = 3
)
var (
var (
loglevel = flag . Int ( "loglevel" , 2 , "verbosity of logs" )
loglevel = flag . Int ( "loglevel" , 2 , "verbosity of logs" )
)
)
@ -127,23 +132,30 @@ type bzzTester struct {
* p2ptest . ProtocolTester
* p2ptest . ProtocolTester
addr * BzzAddr
addr * BzzAddr
cs map [ string ] chan bool
cs map [ string ] chan bool
bzz * Bzz
}
}
func newBzzHandshakeTester ( t * testing . T , n int , addr * BzzAddr ) * bzzTester {
func newBzz ( addr * BzzAddr , lightNode bool ) * Bzz {
config := & BzzConfig {
config := & BzzConfig {
OverlayAddr : addr . Over ( ) ,
OverlayAddr : addr . Over ( ) ,
UnderlayAddr : addr . Under ( ) ,
UnderlayAddr : addr . Under ( ) ,
HiveParams : NewHiveParams ( ) ,
HiveParams : NewHiveParams ( ) ,
NetworkID : DefaultNetworkID ,
NetworkID : DefaultNetworkID ,
LightNode : lightNode ,
}
}
kad := NewKademlia ( addr . OAddr , NewKadParams ( ) )
kad := NewKademlia ( addr . OAddr , NewKadParams ( ) )
bzz := NewBzz ( config , kad , nil , nil , nil )
bzz := NewBzz ( config , kad , nil , nil , nil )
return bzz
}
s := p2ptest . NewProtocolTester ( t , NewNodeIDFromAddr ( addr ) , 1 , bzz . runBzz )
func newBzzHandshakeTester ( t * testing . T , n int , addr * BzzAddr , lightNode bool ) * bzzTester {
bzz := newBzz ( addr , lightNode )
pt := p2ptest . NewProtocolTester ( t , NewNodeIDFromAddr ( addr ) , n , bzz . runBzz )
return & bzzTester {
return & bzzTester {
addr : addr ,
addr : addr ,
ProtocolTester : s ,
ProtocolTester : pt ,
bzz : bzz ,
}
}
}
}
@ -184,22 +196,24 @@ func (s *bzzTester) testHandshake(lhs, rhs *HandshakeMsg, disconnects ...*p2ptes
return nil
return nil
}
}
func correctBzzHandshake ( addr * BzzAddr ) * HandshakeMsg {
func correctBzzHandshake ( addr * BzzAddr , lightNode bool ) * HandshakeMsg {
return & HandshakeMsg {
return & HandshakeMsg {
Version : 5 ,
Version : TestProtocolVersion ,
NetworkID : Default NetworkID,
NetworkID : TestProtocol NetworkID,
Addr : addr ,
Addr : addr ,
LightNode : lightNode ,
}
}
}
}
func TestBzzHandshakeNetworkIDMismatch ( t * testing . T ) {
func TestBzzHandshakeNetworkIDMismatch ( t * testing . T ) {
lightNode := false
addr := RandomAddr ( )
addr := RandomAddr ( )
s := newBzzHandshakeTester ( t , 1 , addr )
s := newBzzHandshakeTester ( t , 1 , addr , lightNode )
id := s . IDs [ 0 ]
id := s . IDs [ 0 ]
err := s . testHandshake (
err := s . testHandshake (
correctBzzHandshake ( addr ) ,
correctBzzHandshake ( addr , lightNode ) ,
& HandshakeMsg { Version : 5 , NetworkID : 321 , Addr : NewAddrFromNodeID ( id ) } ,
& HandshakeMsg { Version : TestProtocolVersion , NetworkID : 321 , Addr : NewAddrFromNodeID ( id ) } ,
& p2ptest . Disconnect { Peer : id , Error : fmt . Errorf ( "Handshake error: Message handler error: (msg code 0): network id mismatch 321 (!= 3)" ) } ,
& p2ptest . Disconnect { Peer : id , Error : fmt . Errorf ( "Handshake error: Message handler error: (msg code 0): network id mismatch 321 (!= 3)" ) } ,
)
)
@ -209,14 +223,15 @@ func TestBzzHandshakeNetworkIDMismatch(t *testing.T) {
}
}
func TestBzzHandshakeVersionMismatch ( t * testing . T ) {
func TestBzzHandshakeVersionMismatch ( t * testing . T ) {
lightNode := false
addr := RandomAddr ( )
addr := RandomAddr ( )
s := newBzzHandshakeTester ( t , 1 , addr )
s := newBzzHandshakeTester ( t , 1 , addr , lightNode )
id := s . IDs [ 0 ]
id := s . IDs [ 0 ]
err := s . testHandshake (
err := s . testHandshake (
correctBzzHandshake ( addr ) ,
correctBzzHandshake ( addr , lightNode ) ,
& HandshakeMsg { Version : 0 , NetworkID : 3 , Addr : NewAddrFromNodeID ( id ) } ,
& HandshakeMsg { Version : 0 , NetworkID : TestProtocolNetworkID , Addr : NewAddrFromNodeID ( id ) } ,
& p2ptest . Disconnect { Peer : id , Error : fmt . Errorf ( "Handshake error: Message handler error: (msg code 0): version mismatch 0 (!= 5)" ) } ,
& p2ptest . Disconnect { Peer : id , Error : fmt . Errorf ( "Handshake error: Message handler error: (msg code 0): version mismatch 0 (!= %d)" , TestProtocolVersion ) } ,
)
)
if err != nil {
if err != nil {
@ -225,16 +240,49 @@ func TestBzzHandshakeVersionMismatch(t *testing.T) {
}
}
func TestBzzHandshakeSuccess ( t * testing . T ) {
func TestBzzHandshakeSuccess ( t * testing . T ) {
lightNode := false
addr := RandomAddr ( )
addr := RandomAddr ( )
s := newBzzHandshakeTester ( t , 1 , addr )
s := newBzzHandshakeTester ( t , 1 , addr , lightNode )
id := s . IDs [ 0 ]
id := s . IDs [ 0 ]
err := s . testHandshake (
err := s . testHandshake (
correctBzzHandshake ( addr ) ,
correctBzzHandshake ( addr , lightNode ) ,
& HandshakeMsg { Version : 5 , NetworkID : 3 , Addr : NewAddrFromNodeID ( id ) } ,
& HandshakeMsg { Version : TestProtocolVersion , NetworkID : TestProtocolNetworkID , Addr : NewAddrFromNodeID ( id ) } ,
)
)
if err != nil {
if err != nil {
t . Fatal ( err )
t . Fatal ( err )
}
}
}
}
func TestBzzHandshakeLightNode ( t * testing . T ) {
var lightNodeTests = [ ] struct {
name string
lightNode bool
} {
{ "on" , true } ,
{ "off" , false } ,
}
for _ , test := range lightNodeTests {
t . Run ( test . name , func ( t * testing . T ) {
randomAddr := RandomAddr ( )
pt := newBzzHandshakeTester ( t , 1 , randomAddr , false )
id := pt . IDs [ 0 ]
addr := NewAddrFromNodeID ( id )
err := pt . testHandshake (
correctBzzHandshake ( randomAddr , false ) ,
& HandshakeMsg { Version : TestProtocolVersion , NetworkID : TestProtocolNetworkID , Addr : addr , LightNode : test . lightNode } ,
)
if err != nil {
t . Fatal ( err )
}
if pt . bzz . handshakes [ id ] . LightNode != test . lightNode {
t . Fatalf ( "peer LightNode flag is %v, should be %v" , pt . bzz . handshakes [ id ] . LightNode , test . lightNode )
}
} )
}
}