diff --git a/p2p/simulations/adapters/inproc.go b/p2p/simulations/adapters/inproc.go index d80f7051d9..b75538ee9f 100644 --- a/p2p/simulations/adapters/inproc.go +++ b/p2p/simulations/adapters/inproc.go @@ -35,9 +35,8 @@ import ( // SimAdapter is a NodeAdapter which creates in-memory nodes and connects them // using an in-memory p2p.MsgReadWriter pipe type SimAdapter struct { - mtx sync.RWMutex - nodes map[discover.NodeID]*SimNode - services map[string]ServiceFunc + mtx sync.RWMutex + nodes map[discover.NodeID]*SimNode } // NewSimAdapter creates a SimAdapter which is capable of running in-memory @@ -45,8 +44,7 @@ type SimAdapter struct { // node is passed to the NewNode function in the NodeConfig) func NewSimAdapter(services map[string]ServiceFunc) *SimAdapter { return &SimAdapter{ - nodes: make(map[discover.NodeID]*SimNode), - services: services, + nodes: make(map[discover.NodeID]*SimNode), } } @@ -88,12 +86,6 @@ func (s *SimAdapter) NewNode(config *NodeConfig) (Node, error) { //} //service := serviceFunc(id) - for _, service := range s.services[config.Service](id, nil) { - for _, proto := range service.Protocols() { - nodeprotos = append(nodeprotos, proto) - } - } - _, err := node.New(&node.Config{ P2P: p2p.Config{ PrivateKey: config.PrivateKey, @@ -103,15 +95,20 @@ func (s *SimAdapter) NewNode(config *NodeConfig) (Node, error) { Dialer: s, EnableMsgEvents: true, }, - NoUSB: true, }) if err != nil { return nil, err } + for _, service := range serviceFuncs[config.Service](id, nil) { + for _, proto := range service.Protocols() { + nodeprotos = append(nodeprotos, proto) + } + } + simnode := &SimNode{ Id: id, - serviceFunc: s.services[config.Service], + serviceFunc: serviceFuncs[config.Service], adapter: s, config: config, running: []node.Service{}, @@ -284,7 +281,7 @@ func (self *SimNode) Stop() error { return nil } -// Service returns the underlying running node.Service matching the supplied servuce type +// Service returns the underlying running node.Service matching the supplied service type func (self *SimNode) Service(servicetype interface{}) node.Service { self.lock.Lock() defer self.lock.Unlock() diff --git a/p2p/simulations/adapters/types.go b/p2p/simulations/adapters/types.go index 9d2249651b..4c89a05f0b 100644 --- a/p2p/simulations/adapters/types.go +++ b/p2p/simulations/adapters/types.go @@ -20,6 +20,7 @@ import ( "crypto/ecdsa" "encoding/hex" "encoding/json" + "fmt" "net" "os" @@ -215,11 +216,9 @@ var serviceFuncs = make(Services) // start devp2p nodes func RegisterServices(services Services) { for name, f := range services { - // TODO: FIXME: protocol tester if called more than once, throws an error so for now - // just overwrite - // if _, exists := serviceFuncs[name]; exists { - // panic(fmt.Sprintf("node service already exists: %q", name)) - // } + if _, exists := serviceFuncs[name]; exists { + panic(fmt.Sprintf("node service already exists: %q", name)) + } serviceFuncs[name] = f } diff --git a/p2p/testing/protocoltester.go b/p2p/testing/protocoltester.go index a328cb06d7..069d5bc6f1 100644 --- a/p2p/testing/protocoltester.go +++ b/p2p/testing/protocoltester.go @@ -19,8 +19,8 @@ type ProtocolTester struct { } func NewProtocolTester(t *testing.T, id *adapters.NodeId, n int, run func(*p2p.Peer, p2p.MsgReadWriter) error) *ProtocolTester { -//func NewProtocolTester(t *testing.T, id *adapters.NodeId, n int, run func(*p2p.Peer, p2p.MsgReadWriter) error) *ProtocolTester { - services := adapters.Services { + //func NewProtocolTester(t *testing.T, id *adapters.NodeId, n int, run func(*p2p.Peer, p2p.MsgReadWriter) error) *ProtocolTester { + services := adapters.Services{ "test": func(id *adapters.NodeId, _ []byte) []node.Service { return []node.Service{&testNode{run}} }, @@ -28,7 +28,6 @@ func NewProtocolTester(t *testing.T, id *adapters.NodeId, n int, run func(*p2p.P return []node.Service{newMockNode()} }, } - adapters.RegisterServices(services) adapter := adapters.NewSimAdapter(services) net := simulations.NewNetwork(adapter, &simulations.NetworkConfig{}) if _, err := net.NewNodeWithConfig(&adapters.NodeConfig{Id: id, Service: "test"}); err != nil {