p2p/simulations: Ensure nodes don't already exist

Signed-off-by: Lewis Marshall <lewis@lmars.net>
This commit is contained in:
Lewis Marshall 2017-06-14 11:05:45 +02:00
parent b56a7fb5ef
commit 8ac9af986c

View file

@ -207,9 +207,15 @@ func (self *Network) NewNodeWithConfig(conf *adapters.NodeConfig) (*Node, error)
conf.PrivateKey = c.PrivateKey conf.PrivateKey = c.PrivateKey
} }
id := conf.ID id := conf.ID
if node := self.getNode(id); node != nil {
return nil, fmt.Errorf("node already exists: %q", id)
}
if conf.Name == "" { if conf.Name == "" {
conf.Name = fmt.Sprintf("node%02d", len(self.Nodes)+1) conf.Name = fmt.Sprintf("node%02d", len(self.Nodes)+1)
} }
if node := self.getNodeByName(conf.Name); node != nil {
return nil, fmt.Errorf("node already exists: %q", conf.Name)
}
if len(conf.Services) == 0 { if len(conf.Services) == 0 {
conf.Services = []string{self.DefaultService} conf.Services = []string{self.DefaultService}
} }
@ -533,6 +539,10 @@ func (self *Network) GetNode(id discover.NodeID) *Node {
func (self *Network) GetNodeByName(name string) *Node { func (self *Network) GetNodeByName(name string) *Node {
self.lock.Lock() self.lock.Lock()
defer self.lock.Unlock() defer self.lock.Unlock()
return self.getNodeByName(name)
}
func (self *Network) getNodeByName(name string) *Node {
for _, node := range self.Nodes { for _, node := range self.Nodes {
if node.Config.Name == name { if node.Config.Name == name {
return node return node