From 43c8130f73b9c47b0224b699071f8fcb2099c044 Mon Sep 17 00:00:00 2001 From: "Kyle J. Burda" <47502769+kylejb@users.noreply.github.com> Date: Wed, 14 Dec 2022 23:15:51 -0500 Subject: [PATCH] testutils: revert to call url.Parse and update doc --- internal/testutils/parse_url.go | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/internal/testutils/parse_url.go b/internal/testutils/parse_url.go index defa9c4eef53..835f3a0de076 100644 --- a/internal/testutils/parse_url.go +++ b/internal/testutils/parse_url.go @@ -20,32 +20,24 @@ package testutils import ( "fmt" - "net" "net/url" "strings" ) -// Assume url.Parse may fail when rawTarget represents IPV4 or IPV6. -func parseTargetAsIP(rawTarget string, urlParseError error) *url.URL { - ip := net.ParseIP(rawTarget) // TODO (easwars): should this be added to grpc.parseTarget? - if ip == nil { - panic(fmt.Sprintf("Error parsing target(%s): %v", rawTarget, urlParseError)) - } - return &url.URL{ - Path: ip.String(), - } -} - -// MustParseURL helps create URL struct for resolver.Target by parsing target. -// Target can be represented as either URL, IPV4, or IPV6. +// MustParseURL uses RFC 3986 semantics to parse given target into a +// `URL` struct for `resolver.Target.URL`. The leading "/" are stripped +// to avoid breaking existing resolver implementations. +// See resolver.Target.ToEndpoint() for more information. +// +// rawTarget represents either URL, IPv4, or IPv6 string. func MustParseURL(rawTarget string) *url.URL { u, err := url.Parse(rawTarget) if err != nil { - return parseTargetAsIP(rawTarget, err) + panic(fmt.Sprintf("Error parsing target(%s): %v", rawTarget, err)) } return &url.URL{ Scheme: u.Scheme, Path: strings.TrimPrefix(u.Path, "/"), - Opaque: u.Opaque, + Opaque: strings.TrimPrefix(u.Opaque, "/"), } }