From: Jonathan Amsterdam Date: Wed, 13 Sep 2023 19:58:25 +0000 (-0400) Subject: net/http: add test for registration errors X-Git-Tag: go1.22rc1~847 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=e2774551645e5417c130ca56e56d71bd1d70d7b5;p=gostls13.git net/http: add test for registration errors Change-Id: Ice378e2f1c4cce180f020683d25070c5ae1edbad Reviewed-on: https://go-review.googlesource.com/c/go/+/528255 Run-TryBot: Jonathan Amsterdam Reviewed-by: Damien Neil TryBot-Result: Gopher Robot --- diff --git a/src/net/http/server.go b/src/net/http/server.go index 6fe917e086..7ce078ced4 100644 --- a/src/net/http/server.go +++ b/src/net/http/server.go @@ -2605,7 +2605,7 @@ func (mux *ServeMux) registerErr(pattern string, handler Handler) error { pat, err := parsePattern(pattern) if err != nil { - return err + return fmt.Errorf("parsing %q: %w", pattern, err) } // Get the caller's location, for better conflict error messages. diff --git a/src/net/http/server_test.go b/src/net/http/server_test.go index 0e7bdb2f37..b0cc093d43 100644 --- a/src/net/http/server_test.go +++ b/src/net/http/server_test.go @@ -9,6 +9,7 @@ package http import ( "fmt" "net/url" + "regexp" "testing" "time" ) @@ -117,6 +118,35 @@ func TestFindHandler(t *testing.T) { } } +func TestRegisterErr(t *testing.T) { + mux := NewServeMux() + h := &handler{} + mux.Handle("/a", h) + + for _, test := range []struct { + pattern string + handler Handler + wantRegexp string + }{ + {"", h, "invalid pattern"}, + {"/", nil, "nil handler"}, + {"/", HandlerFunc(nil), "nil handler"}, + {"/{x", h, `parsing "/\{x": bad wildcard segment`}, + {"/a", h, `conflicts with pattern.* \(registered at .*/server_test.go:\d+`}, + } { + t.Run(fmt.Sprintf("%s:%#v", test.pattern, test.handler), func(t *testing.T) { + err := mux.registerErr(test.pattern, test.handler) + if err == nil { + t.Fatal("got nil error") + } + re := regexp.MustCompile(test.wantRegexp) + if g := err.Error(); !re.MatchString(g) { + t.Errorf("\ngot %q\nwant string matching %q", g, test.wantRegexp) + } + }) + } +} + func TestExactMatch(t *testing.T) { for _, test := range []struct { pattern string