@ -29,10 +29,13 @@ import (
"github.com/ethereum/go-ethereum/node"
"github.com/ethereum/go-ethereum/p2p"
"github.com/ethereum/go-ethereum/p2p/enode"
"github.com/ethereum/go-ethereum/p2p/protocols"
"github.com/ethereum/go-ethereum/p2p/simulations/adapters"
p2ptest "github.com/ethereum/go-ethereum/p2p/testing"
"github.com/ethereum/go-ethereum/swarm/log"
"github.com/ethereum/go-ethereum/swarm/network"
pq "github.com/ethereum/go-ethereum/swarm/network/priorityqueue"
"github.com/ethereum/go-ethereum/swarm/network/simulation"
"github.com/ethereum/go-ethereum/swarm/state"
"github.com/ethereum/go-ethereum/swarm/storage"
@ -274,6 +277,86 @@ func TestStreamerUpstreamRetrieveRequestMsgExchange(t *testing.T) {
}
}
// if there is one peer in the Kademlia, RequestFromPeers should return it
func TestRequestFromPeers ( t * testing . T ) {
dummyPeerID := enode . HexID ( "3431c3939e1ee2a6345e976a8234f9870152d64879f30bc272a074f6859e75e8" )
addr := network . RandomAddr ( )
to := network . NewKademlia ( addr . OAddr , network . NewKadParams ( ) )
delivery := NewDelivery ( to , nil )
protocolsPeer := protocols . NewPeer ( p2p . NewPeer ( dummyPeerID , "dummy" , nil ) , nil , nil )
peer := network . NewPeer ( & network . BzzPeer {
BzzAddr : network . RandomAddr ( ) ,
LightNode : false ,
Peer : protocolsPeer ,
} , to )
to . On ( peer )
r := NewRegistry ( addr . ID ( ) , delivery , nil , nil , nil )
// an empty priorityQueue has to be created to prevent a goroutine being called after the test has finished
sp := & Peer {
Peer : protocolsPeer ,
pq : pq . New ( int ( PriorityQueue ) , PriorityQueueCap ) ,
streamer : r ,
}
r . setPeer ( sp )
req := network . NewRequest (
storage . Address ( hash0 [ : ] ) ,
true ,
& sync . Map { } ,
)
ctx := context . Background ( )
id , _ , err := delivery . RequestFromPeers ( ctx , req )
if err != nil {
t . Fatal ( err )
}
if * id != dummyPeerID {
t . Fatalf ( "Expected an id, got %v" , id )
}
}
// RequestFromPeers should not return light nodes
func TestRequestFromPeersWithLightNode ( t * testing . T ) {
dummyPeerID := enode . HexID ( "3431c3939e1ee2a6345e976a8234f9870152d64879f30bc272a074f6859e75e8" )
addr := network . RandomAddr ( )
to := network . NewKademlia ( addr . OAddr , network . NewKadParams ( ) )
delivery := NewDelivery ( to , nil )
protocolsPeer := protocols . NewPeer ( p2p . NewPeer ( dummyPeerID , "dummy" , nil ) , nil , nil )
// setting up a lightnode
peer := network . NewPeer ( & network . BzzPeer {
BzzAddr : network . RandomAddr ( ) ,
LightNode : true ,
Peer : protocolsPeer ,
} , to )
to . On ( peer )
r := NewRegistry ( addr . ID ( ) , delivery , nil , nil , nil )
// an empty priorityQueue has to be created to prevent a goroutine being called after the test has finished
sp := & Peer {
Peer : protocolsPeer ,
pq : pq . New ( int ( PriorityQueue ) , PriorityQueueCap ) ,
streamer : r ,
}
r . setPeer ( sp )
req := network . NewRequest (
storage . Address ( hash0 [ : ] ) ,
true ,
& sync . Map { } ,
)
ctx := context . Background ( )
// making a request which should return with "no peer found"
_ , _ , err := delivery . RequestFromPeers ( ctx , req )
expectedError := "no peer found"
if err . Error ( ) != expectedError {
t . Fatalf ( "expected '%v', got %v" , expectedError , err )
}
}
func TestStreamerDownstreamChunkDeliveryMsgExchange ( t * testing . T ) {
tester , streamer , localStore , teardown , err := newStreamerTester ( t , & RegistryOptions {
Retrieval : RetrievalDisabled ,