p2p/enode: mock DNS resolver in URL parsing test (#20252)
This commit is contained in:
parent
4b8f56cf98
commit
adf007dadc
@ -31,7 +31,10 @@ import (
|
|||||||
"github.com/ethereum/go-ethereum/p2p/enr"
|
"github.com/ethereum/go-ethereum/p2p/enr"
|
||||||
)
|
)
|
||||||
|
|
||||||
var incompleteNodeURL = regexp.MustCompile("(?i)^(?:enode://)?([0-9a-f]+)$")
|
var (
|
||||||
|
incompleteNodeURL = regexp.MustCompile("(?i)^(?:enode://)?([0-9a-f]+)$")
|
||||||
|
lookupIPFunc = net.LookupIP
|
||||||
|
)
|
||||||
|
|
||||||
// MustParseV4 parses a node URL. It panics if the URL is not valid.
|
// MustParseV4 parses a node URL. It panics if the URL is not valid.
|
||||||
func MustParseV4(rawurl string) *Node {
|
func MustParseV4(rawurl string) *Node {
|
||||||
@ -107,7 +110,6 @@ func isNewV4(n *Node) bool {
|
|||||||
func parseComplete(rawurl string) (*Node, error) {
|
func parseComplete(rawurl string) (*Node, error) {
|
||||||
var (
|
var (
|
||||||
id *ecdsa.PublicKey
|
id *ecdsa.PublicKey
|
||||||
ip net.IP
|
|
||||||
tcpPort, udpPort uint64
|
tcpPort, udpPort uint64
|
||||||
)
|
)
|
||||||
u, err := url.Parse(rawurl)
|
u, err := url.Parse(rawurl)
|
||||||
@ -125,11 +127,14 @@ func parseComplete(rawurl string) (*Node, error) {
|
|||||||
return nil, fmt.Errorf("invalid public key (%v)", err)
|
return nil, fmt.Errorf("invalid public key (%v)", err)
|
||||||
}
|
}
|
||||||
// Parse the IP address.
|
// Parse the IP address.
|
||||||
ips, err := net.LookupIP(u.Hostname())
|
ip := net.ParseIP(u.Hostname())
|
||||||
if err != nil {
|
if ip == nil {
|
||||||
return nil, err
|
ips, err := lookupIPFunc(u.Hostname())
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
ip = ips[0]
|
||||||
}
|
}
|
||||||
ip = ips[0]
|
|
||||||
// Ensure the IP is 4 bytes long for IPv4 addresses.
|
// Ensure the IP is 4 bytes long for IPv4 addresses.
|
||||||
if ipv4 := ip.To4(); ipv4 != nil {
|
if ipv4 := ip.To4(); ipv4 != nil {
|
||||||
ip = ipv4
|
ip = ipv4
|
||||||
|
@ -18,6 +18,7 @@ package enode
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"crypto/ecdsa"
|
"crypto/ecdsa"
|
||||||
|
"errors"
|
||||||
"net"
|
"net"
|
||||||
"reflect"
|
"reflect"
|
||||||
"strings"
|
"strings"
|
||||||
@ -27,6 +28,15 @@ import (
|
|||||||
"github.com/ethereum/go-ethereum/p2p/enr"
|
"github.com/ethereum/go-ethereum/p2p/enr"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
lookupIPFunc = func(name string) ([]net.IP, error) {
|
||||||
|
if name == "node.example.org" {
|
||||||
|
return []net.IP{{33, 44, 55, 66}}, nil
|
||||||
|
}
|
||||||
|
return nil, errors.New("no such host")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var parseNodeTests = []struct {
|
var parseNodeTests = []struct {
|
||||||
input string
|
input string
|
||||||
wantError string
|
wantError string
|
||||||
|
Loading…
Reference in New Issue
Block a user