forked from cerc-io/plugeth
swarm/network/simulation: fix New function for-loop scope (#18161)
This commit is contained in:
parent
f0515800e6
commit
93854bbad4
@ -160,6 +160,41 @@ func TestAddNodeWithService(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestAddNodeMultipleServices(t *testing.T) {
|
||||||
|
sim := New(map[string]ServiceFunc{
|
||||||
|
"noop1": noopServiceFunc,
|
||||||
|
"noop2": noopService2Func,
|
||||||
|
})
|
||||||
|
defer sim.Close()
|
||||||
|
|
||||||
|
id, err := sim.AddNode()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
n := sim.Net.GetNode(id).Node.(*adapters.SimNode)
|
||||||
|
if n.Service("noop1") == nil {
|
||||||
|
t.Error("service noop1 not found on node")
|
||||||
|
}
|
||||||
|
if n.Service("noop2") == nil {
|
||||||
|
t.Error("service noop2 not found on node")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestAddNodeDuplicateServiceError(t *testing.T) {
|
||||||
|
sim := New(map[string]ServiceFunc{
|
||||||
|
"noop1": noopServiceFunc,
|
||||||
|
"noop2": noopServiceFunc,
|
||||||
|
})
|
||||||
|
defer sim.Close()
|
||||||
|
|
||||||
|
wantErr := "duplicate service: *simulation.noopService"
|
||||||
|
_, err := sim.AddNode()
|
||||||
|
if err.Error() != wantErr {
|
||||||
|
t.Errorf("got error %q, want %q", err, wantErr)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestAddNodes(t *testing.T) {
|
func TestAddNodes(t *testing.T) {
|
||||||
sim := New(noopServiceFuncMap)
|
sim := New(noopServiceFuncMap)
|
||||||
defer sim.Close()
|
defer sim.Close()
|
||||||
|
@ -68,6 +68,10 @@ type ServiceFunc func(ctx *adapters.ServiceContext, bucket *sync.Map) (s node.Se
|
|||||||
|
|
||||||
// New creates a new Simulation instance with new
|
// New creates a new Simulation instance with new
|
||||||
// simulations.Network initialized with provided services.
|
// simulations.Network initialized with provided services.
|
||||||
|
// Services map must have unique keys as service names and
|
||||||
|
// every ServiceFunc must return a node.Service of the unique type.
|
||||||
|
// This restriction is required by node.Node.Start() function
|
||||||
|
// which is used to start node.Service returned by ServiceFunc.
|
||||||
func New(services map[string]ServiceFunc) (s *Simulation) {
|
func New(services map[string]ServiceFunc) (s *Simulation) {
|
||||||
s = &Simulation{
|
s = &Simulation{
|
||||||
buckets: make(map[enode.ID]*sync.Map),
|
buckets: make(map[enode.ID]*sync.Map),
|
||||||
@ -76,6 +80,9 @@ func New(services map[string]ServiceFunc) (s *Simulation) {
|
|||||||
|
|
||||||
adapterServices := make(map[string]adapters.ServiceFunc, len(services))
|
adapterServices := make(map[string]adapters.ServiceFunc, len(services))
|
||||||
for name, serviceFunc := range services {
|
for name, serviceFunc := range services {
|
||||||
|
// Scope this variables correctly
|
||||||
|
// as they will be in the adapterServices[name] function accessed later.
|
||||||
|
name, serviceFunc := name, serviceFunc
|
||||||
s.serviceNames = append(s.serviceNames, name)
|
s.serviceNames = append(s.serviceNames, name)
|
||||||
adapterServices[name] = func(ctx *adapters.ServiceContext) (node.Service, error) {
|
adapterServices[name] = func(ctx *adapters.ServiceContext) (node.Service, error) {
|
||||||
b := new(sync.Map)
|
b := new(sync.Map)
|
||||||
|
@ -205,3 +205,16 @@ func (t *noopService) Start(server *p2p.Server) error {
|
|||||||
func (t *noopService) Stop() error {
|
func (t *noopService) Stop() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// a helper function for most basic noop service
|
||||||
|
// of a different type then noopService to test
|
||||||
|
// multiple services on one node.
|
||||||
|
func noopService2Func(ctx *adapters.ServiceContext, b *sync.Map) (node.Service, func(), error) {
|
||||||
|
return new(noopService2), nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// noopService2 is the service that does not do anything
|
||||||
|
// but implements node.Service interface.
|
||||||
|
type noopService2 struct {
|
||||||
|
noopService
|
||||||
|
}
|
||||||
|
@ -255,7 +255,7 @@ func (d *Delivery) RequestFromPeers(ctx context.Context, req *network.Request) (
|
|||||||
}
|
}
|
||||||
sp = d.getPeer(id)
|
sp = d.getPeer(id)
|
||||||
if sp == nil {
|
if sp == nil {
|
||||||
log.Warn("Delivery.RequestFromPeers: peer not found", "id", id)
|
//log.Warn("Delivery.RequestFromPeers: peer not found", "id", id)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
spID = &id
|
spID = &id
|
||||||
|
Loading…
Reference in New Issue
Block a user