aboutsummaryrefslogtreecommitdiff
path: root/src/os/readfrom_linux_test.go
diff options
context:
space:
mode:
authorFilippo Valsorda <filippo@golang.org>2021-03-23 16:43:18 +0100
committerFilippo Valsorda <filippo@golang.org>2021-03-23 16:43:18 +0100
commit229a39e347178614d2b5c103cbdc96b7f30a015a (patch)
tree74cd619fe213fe2047d4ae31d8a99cdee9e84208 /src/os/readfrom_linux_test.go
parent055f1da6e6b96d4de842fd80773dea6d977fc025 (diff)
parentdcffdac515a1d409bcb61783d57ddb137b4741b9 (diff)
downloadgo-229a39e347178614d2b5c103cbdc96b7f30a015a.tar.gz
go-229a39e347178614d2b5c103cbdc96b7f30a015a.zip
[dev.boringcrypto.go1.15] all: merge go1.15.10 into dev.boringcrypto.go1.15
Change-Id: I2ac6b45dbfcfdaf956f2f4b11b60f8d24130141b
Diffstat (limited to 'src/os/readfrom_linux_test.go')
-rw-r--r--src/os/readfrom_linux_test.go32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/os/readfrom_linux_test.go b/src/os/readfrom_linux_test.go
index 00faf39fe5..aa3f050667 100644
--- a/src/os/readfrom_linux_test.go
+++ b/src/os/readfrom_linux_test.go
@@ -361,3 +361,35 @@ func (h *copyFileRangeHook) install() {
func (h *copyFileRangeHook) uninstall() {
*PollCopyFileRangeP = h.original
}
+
+// On some kernels copy_file_range fails on files in /proc.
+func TestProcCopy(t *testing.T) {
+ const cmdlineFile = "/proc/self/cmdline"
+ cmdline, err := ioutil.ReadFile(cmdlineFile)
+ if err != nil {
+ t.Skipf("can't read /proc file: %v", err)
+ }
+ in, err := Open(cmdlineFile)
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer in.Close()
+ outFile := filepath.Join(t.TempDir(), "cmdline")
+ out, err := Create(outFile)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if _, err := io.Copy(out, in); err != nil {
+ t.Fatal(err)
+ }
+ if err := out.Close(); err != nil {
+ t.Fatal(err)
+ }
+ copy, err := ioutil.ReadFile(outFile)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if !bytes.Equal(cmdline, copy) {
+ t.Errorf("copy of %q got %q want %q\n", cmdlineFile, copy, cmdline)
+ }
+}