p2p/simulations: WIP make sim compatible with enode/enr

This commit is contained in:
lash 2019-02-26 17:40:19 +01:00
parent 216bd2ceba
commit 5697731c0c
4 changed files with 12 additions and 3 deletions

View file

@ -117,6 +117,7 @@ func (s *SimAdapter) NewNode(config *NodeConfig) (Node, error) {
// an in-memory net.Pipe // an in-memory net.Pipe
func (s *SimAdapter) Dial(dest *enode.Node) (conn net.Conn, err error) { func (s *SimAdapter) Dial(dest *enode.Node) (conn net.Conn, err error) {
node, ok := s.GetNode(dest.ID()) node, ok := s.GetNode(dest.ID())
log.Debug("destnode", "dest", dest)
if !ok { if !ok {
return nil, fmt.Errorf("unknown node: %s", dest.ID()) return nil, fmt.Errorf("unknown node: %s", dest.ID())
} }
@ -132,7 +133,7 @@ func (s *SimAdapter) Dial(dest *enode.Node) (conn net.Conn, err error) {
// this is simulated 'listening' // this is simulated 'listening'
// asynchronously call the dialed destination node's p2p server // asynchronously call the dialed destination node's p2p server
// to set up connection on the 'listening' side // to set up connection on the 'listening' side
go srv.SetupConn(pipe1, 0, nil) go srv.SetupConn(pipe1, 0, dest)
return pipe2, nil return pipe2, nil
} }

View file

@ -103,6 +103,8 @@ type NodeConfig struct {
Reachable func(id enode.ID) bool Reachable func(id enode.ID) bool
Port uint16 Port uint16
EnodeFunc func() *enode.Node
} }
// nodeConfigJSON is used to encode and decode NodeConfig as JSON by encoding // nodeConfigJSON is used to encode and decode NodeConfig as JSON by encoding
@ -168,6 +170,9 @@ func (n *NodeConfig) UnmarshalJSON(data []byte) error {
// Node returns the node descriptor represented by the config. // Node returns the node descriptor represented by the config.
func (n *NodeConfig) Node() *enode.Node { func (n *NodeConfig) Node() *enode.Node {
if n.EnodeFunc != nil {
return n.EnodeFunc()
}
return enode.NewV4(&n.PrivateKey.PublicKey, net.IP{127, 0, 0, 1}, int(n.Port), int(n.Port)) return enode.NewV4(&n.PrivateKey.PublicKey, net.IP{127, 0, 0, 1}, int(n.Port), int(n.Port))
} }

View file

@ -303,17 +303,19 @@ func (net *Network) Connect(oneID, otherID enode.ID) error {
} }
func (net *Network) connect(oneID, otherID enode.ID) error { func (net *Network) connect(oneID, otherID enode.ID) error {
log.Debug("Connecting nodes with addPeer", "id", oneID, "other", otherID)
conn, err := net.initConn(oneID, otherID) conn, err := net.initConn(oneID, otherID)
if err != nil { if err != nil {
log.Error("connect", "init", err.Error())
return err return err
} }
client, err := conn.one.Client() client, err := conn.one.Client()
if err != nil { if err != nil {
log.Error("connect", "client", err.Error())
return err return err
} }
net.events.Send(ControlEvent(conn)) net.events.Send(ControlEvent(conn))
return client.Call(nil, "admin_addPeer", string(conn.other.Addr())) s := string(conn.other.Addr())
return client.Call(nil, "admin_addPeer", s)
} }
// Disconnect disconnects two nodes by calling the "admin_removePeer" RPC // Disconnect disconnects two nodes by calling the "admin_removePeer" RPC

View file

@ -405,6 +405,7 @@ func decodeByteSlice(s *Stream, val reflect.Value) error {
} }
func decodeByteArray(s *Stream, val reflect.Value) error { func decodeByteArray(s *Stream, val reflect.Value) error {
log.Warn("in decodebytarray", "v", val)
kind, size, err := s.Kind() kind, size, err := s.Kind()
if err != nil { if err != nil {
return err return err