Skip to content

Commit e9db537

Browse files
Use %w to wrap errors (#1175)
1 parent 7db0597 commit e9db537

File tree

14 files changed

+83
-74
lines changed

14 files changed

+83
-74
lines changed

brotli_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ func testBrotliBytesSingleCase(s string) error {
4242

4343
unbrotliedS, err := AppendUnbrotliBytes(prefix, brotlipedS[len(prefix):])
4444
if err != nil {
45-
return fmt.Errorf("unexpected error when uncompressing %q: %s", s, err)
45+
return fmt.Errorf("unexpected error when uncompressing %q: %w", s, err)
4646
}
4747
if !bytes.Equal(unbrotliedS[:len(prefix)], prefix) {
4848
return fmt.Errorf("unexpected prefix when uncompressing %q: %q. Expecting %q", s, unbrotliedS[:len(prefix)], prefix)
@@ -83,17 +83,17 @@ func testBrotliCompressSingleCase(s string) error {
8383
var buf bytes.Buffer
8484
zw := acquireStacklessBrotliWriter(&buf, CompressDefaultCompression)
8585
if _, err := zw.Write([]byte(s)); err != nil {
86-
return fmt.Errorf("unexpected error: %s. s=%q", err, s)
86+
return fmt.Errorf("unexpected error: %w. s=%q", err, s)
8787
}
8888
releaseStacklessBrotliWriter(zw, CompressDefaultCompression)
8989

9090
zr, err := acquireBrotliReader(&buf)
9191
if err != nil {
92-
return fmt.Errorf("unexpected error: %s. s=%q", err, s)
92+
return fmt.Errorf("unexpected error: %w. s=%q", err, s)
9393
}
9494
body, err := ioutil.ReadAll(zr)
9595
if err != nil {
96-
return fmt.Errorf("unexpected error: %s. s=%q", err, s)
96+
return fmt.Errorf("unexpected error: %w. s=%q", err, s)
9797
}
9898
if string(body) != s {
9999
return fmt.Errorf("unexpected string after decompression: %q. Expecting %q", body, s)

bytesconv.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ func ParseIPv4(dst net.IP, ipStr []byte) (net.IP, error) {
9898
}
9999
v, err := ParseUint(b[:n])
100100
if err != nil {
101-
return dst, fmt.Errorf("cannot parse ipStr %q: %s", ipStr, err)
101+
return dst, fmt.Errorf("cannot parse ipStr %q: %w", ipStr, err)
102102
}
103103
if v > 255 {
104104
return dst, fmt.Errorf("cannot parse ipStr %q: ip part cannot exceed 255: parsed %d", ipStr, v)
@@ -108,7 +108,7 @@ func ParseIPv4(dst net.IP, ipStr []byte) (net.IP, error) {
108108
}
109109
v, err := ParseUint(b)
110110
if err != nil {
111-
return dst, fmt.Errorf("cannot parse ipStr %q: %s", ipStr, err)
111+
return dst, fmt.Errorf("cannot parse ipStr %q: %w", ipStr, err)
112112
}
113113
if v > 255 {
114114
return dst, fmt.Errorf("cannot parse ipStr %q: ip part cannot exceed 255: parsed %d", ipStr, v)

client_test.go

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -626,6 +626,10 @@ func TestClientHeaderCase(t *testing.T) {
626626
}
627627

628628
func TestClientReadTimeout(t *testing.T) {
629+
if runtime.GOOS == "windows" {
630+
t.SkipNow()
631+
}
632+
629633
t.Parallel()
630634

631635
ln := fasthttputil.NewInmemoryListener()
@@ -814,14 +818,14 @@ func TestClientDoWithCustomHeaders(t *testing.T) {
814818
go func() {
815819
conn, err := ln.Accept()
816820
if err != nil {
817-
ch <- fmt.Errorf("cannot accept client connection: %s", err)
821+
ch <- fmt.Errorf("cannot accept client connection: %w", err)
818822
return
819823
}
820824
br := bufio.NewReader(conn)
821825

822826
var req Request
823827
if err = req.Read(br); err != nil {
824-
ch <- fmt.Errorf("cannot read client request: %s", err)
828+
ch <- fmt.Errorf("cannot read client request: %w", err)
825829
return
826830
}
827831
if string(req.Header.Method()) != MethodPost {
@@ -854,11 +858,11 @@ func TestClientDoWithCustomHeaders(t *testing.T) {
854858
var resp Response
855859
bw := bufio.NewWriter(conn)
856860
if err = resp.Write(bw); err != nil {
857-
ch <- fmt.Errorf("cannot send response: %s", err)
861+
ch <- fmt.Errorf("cannot send response: %w", err)
858862
return
859863
}
860864
if err = bw.Flush(); err != nil {
861-
ch <- fmt.Errorf("cannot flush response: %s", err)
865+
ch <- fmt.Errorf("cannot flush response: %w", err)
862866
return
863867
}
864868

@@ -1221,7 +1225,7 @@ func TestHostClientPendingRequests(t *testing.T) {
12211225
resp := AcquireResponse()
12221226

12231227
if err := c.DoTimeout(req, resp, 10*time.Second); err != nil {
1224-
resultCh <- fmt.Errorf("unexpected error: %s", err)
1228+
resultCh <- fmt.Errorf("unexpected error: %w", err)
12251229
return
12261230
}
12271231

compress_test.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ func testGzipBytesSingleCase(s string) error {
7878

7979
gunzippedS, err := AppendGunzipBytes(prefix, gzippedS[len(prefix):])
8080
if err != nil {
81-
return fmt.Errorf("unexpected error when uncompressing %q: %s", s, err)
81+
return fmt.Errorf("unexpected error when uncompressing %q: %w", s, err)
8282
}
8383
if !bytes.Equal(gunzippedS[:len(prefix)], prefix) {
8484
return fmt.Errorf("unexpected prefix when uncompressing %q: %q. Expecting %q", s, gunzippedS[:len(prefix)], prefix)
@@ -99,7 +99,7 @@ func testDeflateBytesSingleCase(s string) error {
9999

100100
inflatedS, err := AppendInflateBytes(prefix, deflatedS[len(prefix):])
101101
if err != nil {
102-
return fmt.Errorf("unexpected error when uncompressing %q: %s", s, err)
102+
return fmt.Errorf("unexpected error when uncompressing %q: %w", s, err)
103103
}
104104
if !bytes.Equal(inflatedS[:len(prefix)], prefix) {
105105
return fmt.Errorf("unexpected prefix when uncompressing %q: %q. Expecting %q", s, inflatedS[:len(prefix)], prefix)
@@ -165,17 +165,17 @@ func testGzipCompressSingleCase(s string) error {
165165
var buf bytes.Buffer
166166
zw := acquireStacklessGzipWriter(&buf, CompressDefaultCompression)
167167
if _, err := zw.Write([]byte(s)); err != nil {
168-
return fmt.Errorf("unexpected error: %s. s=%q", err, s)
168+
return fmt.Errorf("unexpected error: %w. s=%q", err, s)
169169
}
170170
releaseStacklessGzipWriter(zw, CompressDefaultCompression)
171171

172172
zr, err := acquireGzipReader(&buf)
173173
if err != nil {
174-
return fmt.Errorf("unexpected error: %s. s=%q", err, s)
174+
return fmt.Errorf("unexpected error: %w. s=%q", err, s)
175175
}
176176
body, err := ioutil.ReadAll(zr)
177177
if err != nil {
178-
return fmt.Errorf("unexpected error: %s. s=%q", err, s)
178+
return fmt.Errorf("unexpected error: %w. s=%q", err, s)
179179
}
180180
if string(body) != s {
181181
return fmt.Errorf("unexpected string after decompression: %q. Expecting %q", body, s)
@@ -188,17 +188,17 @@ func testFlateCompressSingleCase(s string) error {
188188
var buf bytes.Buffer
189189
zw := acquireStacklessDeflateWriter(&buf, CompressDefaultCompression)
190190
if _, err := zw.Write([]byte(s)); err != nil {
191-
return fmt.Errorf("unexpected error: %s. s=%q", err, s)
191+
return fmt.Errorf("unexpected error: %w. s=%q", err, s)
192192
}
193193
releaseStacklessDeflateWriter(zw, CompressDefaultCompression)
194194

195195
zr, err := acquireFlateReader(&buf)
196196
if err != nil {
197-
return fmt.Errorf("unexpected error: %s. s=%q", err, s)
197+
return fmt.Errorf("unexpected error: %w. s=%q", err, s)
198198
}
199199
body, err := ioutil.ReadAll(zr)
200200
if err != nil {
201-
return fmt.Errorf("unexpected error: %s. s=%q", err, s)
201+
return fmt.Errorf("unexpected error: %w. s=%q", err, s)
202202
}
203203
if string(body) != s {
204204
return fmt.Errorf("unexpected string after decompression: %q. Expecting %q", body, s)
@@ -213,7 +213,7 @@ func testConcurrent(concurrency int, f func() error) error {
213213
go func(idx int) {
214214
err := f()
215215
if err != nil {
216-
ch <- fmt.Errorf("error in goroutine %d: %s", idx, err)
216+
ch <- fmt.Errorf("error in goroutine %d: %w", idx, err)
217217
}
218218
ch <- nil
219219
}(i)

expvarhandler/expvar.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ func getExpvarRegexp(ctx *fasthttp.RequestCtx) (*regexp.Regexp, error) {
5858
}
5959
rr, err := regexp.Compile(r)
6060
if err != nil {
61-
return nil, fmt.Errorf("cannot parse r=%q: %s", r, err)
61+
return nil, fmt.Errorf("cannot parse r=%q: %w", r, err)
6262
}
6363
return rr, nil
6464
}

fasthttpproxy/proxy_env.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ func FasthttpProxyHTTPDialerTimeout(timeout time.Duration) fasthttp.DialFunc {
4949

5050
port, _, err := net.SplitHostPort(addr)
5151
if err != nil {
52-
return nil, fmt.Errorf("unexpected addr format: %v", err)
52+
return nil, fmt.Errorf("unexpected addr format: %w", err)
5353
}
5454

5555
reqURL := &url.URL{Host: addr, Scheme: httpScheme}
@@ -108,14 +108,14 @@ func FasthttpProxyHTTPDialerTimeout(timeout time.Duration) fasthttp.DialFunc {
108108

109109
if err := res.Read(bufio.NewReader(conn)); err != nil {
110110
if connErr := conn.Close(); connErr != nil {
111-
return nil, fmt.Errorf("conn close err %v followed by read conn err %v", connErr, err)
111+
return nil, fmt.Errorf("conn close err %v precede by read conn err %w", connErr, err)
112112
}
113113
return nil, err
114114
}
115115
if res.Header.StatusCode() != 200 {
116116
if connErr := conn.Close(); connErr != nil {
117117
return nil, fmt.Errorf(
118-
"conn close err %v followed by connect to proxy: code: %d body %s",
118+
"conn close err %w precede by connect to proxy: code: %d body %s",
119119
connErr, res.StatusCode(), string(res.Body()))
120120
}
121121
return nil, fmt.Errorf("could not connect to proxy: code: %d body %s", res.StatusCode(), string(res.Body()))

fasthttputil/pipeconns_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ func testPipeConnsCloseWhileReadWrite(t *testing.T) {
164164
var err error
165165
if _, err = io.Copy(ioutil.Discard, c1); err != nil {
166166
if err != errConnectionClosed {
167-
err = fmt.Errorf("unexpected error: %s", err)
167+
err = fmt.Errorf("unexpected error: %w", err)
168168
} else {
169169
err = nil
170170
}
@@ -178,7 +178,7 @@ func testPipeConnsCloseWhileReadWrite(t *testing.T) {
178178
for {
179179
if _, err = c2.Write([]byte("foobar")); err != nil {
180180
if err != errConnectionClosed {
181-
err = fmt.Errorf("unexpected error: %s", err)
181+
err = fmt.Errorf("unexpected error: %w", err)
182182
} else {
183183
err = nil
184184
}

fs.go

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -524,7 +524,7 @@ func (ff *fsFile) bigFileReader() (io.Reader, error) {
524524

525525
f, err := os.Open(ff.f.Name())
526526
if err != nil {
527-
return nil, fmt.Errorf("cannot open already opened file: %s", err)
527+
return nil, fmt.Errorf("cannot open already opened file: %w", err)
528528
}
529529
return &bigFileReader{
530530
f: f,
@@ -981,7 +981,7 @@ func (h *fsHandler) openIndexFile(ctx *RequestCtx, dirPath string, mustCompress
981981
return ff, nil
982982
}
983983
if !os.IsNotExist(err) {
984-
return nil, fmt.Errorf("cannot open file %q: %s", indexFilePath, err)
984+
return nil, fmt.Errorf("cannot open file %q: %w", indexFilePath, err)
985985
}
986986
}
987987

@@ -1100,7 +1100,7 @@ func (h *fsHandler) compressAndOpenFSFile(filePath string, fileEncoding string)
11001100
fileInfo, err := f.Stat()
11011101
if err != nil {
11021102
f.Close()
1103-
return nil, fmt.Errorf("cannot obtain info for file %q: %s", filePath, err)
1103+
return nil, fmt.Errorf("cannot obtain info for file %q: %w", filePath, err)
11041104
}
11051105

11061106
if fileInfo.IsDir() {
@@ -1146,7 +1146,7 @@ func (h *fsHandler) compressFileNolock(f *os.File, fileInfo os.FileInfo, filePat
11461146
if err != nil {
11471147
f.Close()
11481148
if !os.IsPermission(err) {
1149-
return nil, fmt.Errorf("cannot create temporary file %q: %s", tmpFilePath, err)
1149+
return nil, fmt.Errorf("cannot create temporary file %q: %w", tmpFilePath, err)
11501150
}
11511151
return nil, errNoCreatePermission
11521152
}
@@ -1168,27 +1168,27 @@ func (h *fsHandler) compressFileNolock(f *os.File, fileInfo os.FileInfo, filePat
11681168
zf.Close()
11691169
f.Close()
11701170
if err != nil {
1171-
return nil, fmt.Errorf("error when compressing file %q to %q: %s", filePath, tmpFilePath, err)
1171+
return nil, fmt.Errorf("error when compressing file %q to %q: %w", filePath, tmpFilePath, err)
11721172
}
11731173
if err = os.Chtimes(tmpFilePath, time.Now(), fileInfo.ModTime()); err != nil {
11741174
return nil, fmt.Errorf("cannot change modification time to %s for tmp file %q: %s",
11751175
fileInfo.ModTime(), tmpFilePath, err)
11761176
}
11771177
if err = os.Rename(tmpFilePath, compressedFilePath); err != nil {
1178-
return nil, fmt.Errorf("cannot move compressed file from %q to %q: %s", tmpFilePath, compressedFilePath, err)
1178+
return nil, fmt.Errorf("cannot move compressed file from %q to %q: %w", tmpFilePath, compressedFilePath, err)
11791179
}
11801180
return h.newCompressedFSFile(compressedFilePath, fileEncoding)
11811181
}
11821182

11831183
func (h *fsHandler) newCompressedFSFile(filePath string, fileEncoding string) (*fsFile, error) {
11841184
f, err := os.Open(filePath)
11851185
if err != nil {
1186-
return nil, fmt.Errorf("cannot open compressed file %q: %s", filePath, err)
1186+
return nil, fmt.Errorf("cannot open compressed file %q: %w", filePath, err)
11871187
}
11881188
fileInfo, err := f.Stat()
11891189
if err != nil {
11901190
f.Close()
1191-
return nil, fmt.Errorf("cannot obtain info for compressed file %q: %s", filePath, err)
1191+
return nil, fmt.Errorf("cannot obtain info for compressed file %q: %w", filePath, err)
11921192
}
11931193
return h.newFSFile(f, fileInfo, true, fileEncoding)
11941194
}
@@ -1210,7 +1210,7 @@ func (h *fsHandler) openFSFile(filePath string, mustCompress bool, fileEncoding
12101210
fileInfo, err := f.Stat()
12111211
if err != nil {
12121212
f.Close()
1213-
return nil, fmt.Errorf("cannot obtain info for file %q: %s", filePath, err)
1213+
return nil, fmt.Errorf("cannot obtain info for file %q: %w", filePath, err)
12141214
}
12151215

12161216
if fileInfo.IsDir() {
@@ -1226,7 +1226,7 @@ func (h *fsHandler) openFSFile(filePath string, mustCompress bool, fileEncoding
12261226
fileInfoOriginal, err := os.Stat(filePathOriginal)
12271227
if err != nil {
12281228
f.Close()
1229-
return nil, fmt.Errorf("cannot obtain info for original file %q: %s", filePathOriginal, err)
1229+
return nil, fmt.Errorf("cannot obtain info for original file %q: %w", filePathOriginal, err)
12301230
}
12311231

12321232
// Only re-create the compressed file if there was more than a second between the mod times.
@@ -1257,7 +1257,7 @@ func (h *fsHandler) newFSFile(f *os.File, fileInfo os.FileInfo, compressed bool,
12571257
if len(contentType) == 0 {
12581258
data, err := readFileHeader(f, compressed, fileEncoding)
12591259
if err != nil {
1260-
return nil, fmt.Errorf("cannot read header of the file %q: %s", f.Name(), err)
1260+
return nil, fmt.Errorf("cannot read header of the file %q: %w", f.Name(), err)
12611261
}
12621262
contentType = http.DetectContentType(data)
12631263
}

header.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1797,11 +1797,11 @@ func (h *ResponseHeader) tryRead(r *bufio.Reader, n int) error {
17971797
}
17981798
}
17991799
return &ErrSmallBuffer{
1800-
error: fmt.Errorf("error when reading response headers: %s", errSmallBuffer),
1800+
error: fmt.Errorf("error when reading response headers: %w", errSmallBuffer),
18011801
}
18021802
}
18031803

1804-
return fmt.Errorf("error when reading response headers: %s", err)
1804+
return fmt.Errorf("error when reading response headers: %w", err)
18051805
}
18061806
b = mustPeekBuffered(r)
18071807
headersLen, errParse := h.parse(b)
@@ -1849,11 +1849,11 @@ func (h *ResponseHeader) tryReadTrailer(r *bufio.Reader, n int) error {
18491849
}
18501850
}
18511851
return &ErrSmallBuffer{
1852-
error: fmt.Errorf("error when reading response trailer: %s", errSmallBuffer),
1852+
error: fmt.Errorf("error when reading response trailer: %w", errSmallBuffer),
18531853
}
18541854
}
18551855

1856-
return fmt.Errorf("error when reading response trailer: %s", err)
1856+
return fmt.Errorf("error when reading response trailer: %w", err)
18571857
}
18581858
b = mustPeekBuffered(r)
18591859
headersLen, errParse := h.parseTrailer(b)
@@ -1891,9 +1891,9 @@ func headerError(typ string, err, errParse error, b []byte, secureErrorLogMessag
18911891

18921892
func headerErrorMsg(typ string, err error, b []byte, secureErrorLogMessage bool) error {
18931893
if secureErrorLogMessage {
1894-
return fmt.Errorf("error when reading %s headers: %s. Buffer size=%d", typ, err, len(b))
1894+
return fmt.Errorf("error when reading %s headers: %w. Buffer size=%d", typ, err, len(b))
18951895
}
1896-
return fmt.Errorf("error when reading %s headers: %s. Buffer size=%d, contents: %s", typ, err, len(b), bufferSnippet(b))
1896+
return fmt.Errorf("error when reading %s headers: %w. Buffer size=%d, contents: %s", typ, err, len(b), bufferSnippet(b))
18971897
}
18981898

18991899
// Read reads request header from r.
@@ -1958,11 +1958,11 @@ func (h *RequestHeader) tryReadTrailer(r *bufio.Reader, n int) error {
19581958
}
19591959
}
19601960
return &ErrSmallBuffer{
1961-
error: fmt.Errorf("error when reading request trailer: %s", errSmallBuffer),
1961+
error: fmt.Errorf("error when reading request trailer: %w", errSmallBuffer),
19621962
}
19631963
}
19641964

1965-
return fmt.Errorf("error when reading request trailer: %s", err)
1965+
return fmt.Errorf("error when reading request trailer: %w", err)
19661966
}
19671967
b = mustPeekBuffered(r)
19681968
headersLen, errParse := h.parseTrailer(b)
@@ -1991,7 +1991,7 @@ func (h *RequestHeader) tryRead(r *bufio.Reader, n int) error {
19911991
// This is for go 1.6 bug. See https://github.com/golang/go/issues/14121 .
19921992
if err == bufio.ErrBufferFull {
19931993
return &ErrSmallBuffer{
1994-
error: fmt.Errorf("error when reading request headers: %s", errSmallBuffer),
1994+
error: fmt.Errorf("error when reading request headers: %w", errSmallBuffer),
19951995
}
19961996
}
19971997

@@ -2001,7 +2001,7 @@ func (h *RequestHeader) tryRead(r *bufio.Reader, n int) error {
20012001
return ErrNothingRead{err}
20022002
}
20032003

2004-
return fmt.Errorf("error when reading request headers: %s", err)
2004+
return fmt.Errorf("error when reading request headers: %w", err)
20052005
}
20062006
b = mustPeekBuffered(r)
20072007
headersLen, errParse := h.parse(b)
@@ -2499,9 +2499,9 @@ func (h *ResponseHeader) parseFirstLine(buf []byte) (int, error) {
24992499
h.statusCode, n, err = parseUintBuf(b)
25002500
if err != nil {
25012501
if h.secureErrorLogMessage {
2502-
return 0, fmt.Errorf("cannot parse response status code: %s", err)
2502+
return 0, fmt.Errorf("cannot parse response status code: %w", err)
25032503
}
2504-
return 0, fmt.Errorf("cannot parse response status code: %s. Response %q", err, buf)
2504+
return 0, fmt.Errorf("cannot parse response status code: %w. Response %q", err, buf)
25052505
}
25062506
if len(b) > n && b[n] != ' ' {
25072507
if h.secureErrorLogMessage {

0 commit comments

Comments
 (0)