diff options
author | Damien Neil <dneil@google.com> | 2024-04-25 11:53:45 -0700 |
---|---|---|
committer | Damien Neil <dneil@google.com> | 2024-04-26 18:12:56 +0000 |
commit | b384ee7cebe1b386e324dcca2c93beb96ea31c9e (patch) | |
tree | 16913efe13aedcfc2c2ae37433241c6296865361 /src/internal | |
parent | 196916299da7568a2a2165246e5164637df03fb9 (diff) | |
download | go-b384ee7cebe1b386e324dcca2c93beb96ea31c9e.tar.gz go-b384ee7cebe1b386e324dcca2c93beb96ea31c9e.zip |
net, os, internal/poll: test for use of sendfile
The net package's sendfile tests exercise various paths where
we expect sendfile to be used, but don't verify that sendfile
was in fact used.
Add a hook to internal/poll.SendFile to let us verify that
sendfile was called when expected. Update os package tests
(which use their own hook mechanism) to use this hook as well.
For #66988
Change-Id: I7afb130dcfe0063d60c6ea0f8560cf8665ad5a81
Reviewed-on: https://go-review.googlesource.com/c/go/+/581778
Reviewed-by: Ian Lance Taylor <iant@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Diffstat (limited to 'src/internal')
-rw-r--r-- | src/internal/poll/sendfile.go | 7 | ||||
-rw-r--r-- | src/internal/poll/sendfile_bsd.go | 3 | ||||
-rw-r--r-- | src/internal/poll/sendfile_linux.go | 3 | ||||
-rw-r--r-- | src/internal/poll/sendfile_solaris.go | 3 | ||||
-rw-r--r-- | src/internal/poll/sendfile_windows.go | 3 |
5 files changed, 19 insertions, 0 deletions
diff --git a/src/internal/poll/sendfile.go b/src/internal/poll/sendfile.go new file mode 100644 index 0000000000..41b0481c1a --- /dev/null +++ b/src/internal/poll/sendfile.go @@ -0,0 +1,7 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package poll + +var TestHookDidSendFile = func(dstFD *FD, src int, written int64, err error, handled bool) {} diff --git a/src/internal/poll/sendfile_bsd.go b/src/internal/poll/sendfile_bsd.go index 8fcdb1c22e..669df94cc1 100644 --- a/src/internal/poll/sendfile_bsd.go +++ b/src/internal/poll/sendfile_bsd.go @@ -14,6 +14,9 @@ const maxSendfileSize int = 4 << 20 // SendFile wraps the sendfile system call. func SendFile(dstFD *FD, src int, pos, remain int64) (written int64, err error, handled bool) { + defer func() { + TestHookDidSendFile(dstFD, src, written, err, handled) + }() if err := dstFD.writeLock(); err != nil { return 0, err, false } diff --git a/src/internal/poll/sendfile_linux.go b/src/internal/poll/sendfile_linux.go index c2a0653294..d1c4d5c0d3 100644 --- a/src/internal/poll/sendfile_linux.go +++ b/src/internal/poll/sendfile_linux.go @@ -12,6 +12,9 @@ const maxSendfileSize int = 4 << 20 // SendFile wraps the sendfile system call. func SendFile(dstFD *FD, src int, remain int64) (written int64, err error, handled bool) { + defer func() { + TestHookDidSendFile(dstFD, src, written, err, handled) + }() if err := dstFD.writeLock(); err != nil { return 0, err, false } diff --git a/src/internal/poll/sendfile_solaris.go b/src/internal/poll/sendfile_solaris.go index 1ba0c8d064..ec675833a2 100644 --- a/src/internal/poll/sendfile_solaris.go +++ b/src/internal/poll/sendfile_solaris.go @@ -17,6 +17,9 @@ const maxSendfileSize int = 4 << 20 // SendFile wraps the sendfile system call. func SendFile(dstFD *FD, src int, pos, remain int64) (written int64, err error, handled bool) { + defer func() { + TestHookDidSendFile(dstFD, src, written, err, handled) + }() if err := dstFD.writeLock(); err != nil { return 0, err, false } diff --git a/src/internal/poll/sendfile_windows.go b/src/internal/poll/sendfile_windows.go index 8c3353bc6f..2ae8a8d1d7 100644 --- a/src/internal/poll/sendfile_windows.go +++ b/src/internal/poll/sendfile_windows.go @@ -11,6 +11,9 @@ import ( // SendFile wraps the TransmitFile call. func SendFile(fd *FD, src syscall.Handle, n int64) (written int64, err error) { + defer func() { + TestHookDidSendFile(fd, 0, written, err, written > 0) + }() if fd.kind == kindPipe { // TransmitFile does not work with pipes return 0, syscall.ESPIPE |