fixup! util/vizerror: add new package for visible errors
Signed-off-by: Will Norris <will@tailscale.com>
This commit is contained in:
+11
-1
@@ -32,6 +32,7 @@ import (
|
||||
"tailscale.com/net/tsaddr"
|
||||
"tailscale.com/types/logger"
|
||||
"tailscale.com/util/strs"
|
||||
"tailscale.com/util/vizerror"
|
||||
"tailscale.com/version"
|
||||
)
|
||||
|
||||
@@ -263,7 +264,16 @@ func (h retHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
lw := &loggingResponseWriter{ResponseWriter: w, logf: h.opts.Logf}
|
||||
err := h.rh.ServeHTTPReturn(lw, r)
|
||||
hErr, hErrOK := err.(HTTPError)
|
||||
|
||||
var hErr HTTPError
|
||||
var vizErr vizerror.Error
|
||||
var hErrOK bool
|
||||
if errors.As(err, &hErr) {
|
||||
hErrOK = true
|
||||
} else if errors.As(err, &vizErr) {
|
||||
hErrOK = true
|
||||
hErr = HTTPError{Msg: vizErr.Error()}
|
||||
}
|
||||
|
||||
if lw.code == 0 && err == nil && !lw.hijacked {
|
||||
// If the handler didn't write and didn't send a header, that still means 200.
|
||||
|
||||
@@ -21,6 +21,7 @@ import (
|
||||
"github.com/google/go-cmp/cmp"
|
||||
"tailscale.com/metrics"
|
||||
"tailscale.com/tstest"
|
||||
"tailscale.com/util/vizerror"
|
||||
"tailscale.com/version"
|
||||
)
|
||||
|
||||
@@ -151,6 +152,23 @@ func TestStdHandler(t *testing.T) {
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
name: "handler returns user visible error",
|
||||
rh: handlerErr(0, vizerror.New("visible error")),
|
||||
r: req(bgCtx, "http://example.com/foo"),
|
||||
wantCode: 500,
|
||||
wantLog: AccessLogRecord{
|
||||
When: clock.Start,
|
||||
Seconds: 1.0,
|
||||
Proto: "HTTP/1.1",
|
||||
Host: "example.com",
|
||||
Method: "GET",
|
||||
RequestURI: "/foo",
|
||||
Err: "visible error",
|
||||
Code: 500,
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
name: "handler returns generic error",
|
||||
rh: handlerErr(0, testErr),
|
||||
|
||||
Reference in New Issue
Block a user