diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 12:36:04 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 12:36:04 +0000 |
commit | b09c6d56832eb1718c07d74abf3bc6ae3fe4e030 (patch) | |
tree | d2caec2610d4ea887803ec9e9c3cd77136c448ba /dependencies/pkg/mod/golang.org/x/sys@v0.1.0/unix/mmap_zos_test.go | |
parent | Initial commit. (diff) | |
download | icingadb-upstream.tar.xz icingadb-upstream.zip |
Adding upstream version 1.1.0.upstream/1.1.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | dependencies/pkg/mod/golang.org/x/sys@v0.1.0/unix/mmap_zos_test.go | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/dependencies/pkg/mod/golang.org/x/sys@v0.1.0/unix/mmap_zos_test.go b/dependencies/pkg/mod/golang.org/x/sys@v0.1.0/unix/mmap_zos_test.go new file mode 100644 index 0000000..8d9303b --- /dev/null +++ b/dependencies/pkg/mod/golang.org/x/sys@v0.1.0/unix/mmap_zos_test.go @@ -0,0 +1,87 @@ +// Copyright 2020 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. + +//go:build zos && s390x +// +build zos,s390x + +// This test is based on mmap_unix_test, but tweaked for z/OS, which does not support memadvise +// or anonymous mmapping. + +package unix_test + +import ( + "fmt" + "io/ioutil" + "os" + "path/filepath" + "testing" + + "golang.org/x/sys/unix" +) + +func TestMmap(t *testing.T) { + tmpdir := mktmpdir(t) + filename := filepath.Join(filepath.Join(tmpdir, "testdata"), "memmapped_file") + destination, err := os.Create(filename) + if err != nil { + t.Fatal("os.Create:", err) + return + } + defer os.RemoveAll(tmpdir) + + fmt.Fprintf(destination, "%s\n", "0 <- Flipped between 0 and 1 when test runs successfully") + fmt.Fprintf(destination, "%s\n", "//Do not change contents - mmap test relies on this") + destination.Close() + fd, err := unix.Open(filename, unix.O_RDWR, 0777) + if err != nil { + t.Fatalf("Open: %v", err) + } + + b, err := unix.Mmap(fd, 0, 8, unix.PROT_READ, unix.MAP_SHARED) + if err != nil { + t.Fatalf("Mmap: %v", err) + } + + if err := unix.Mprotect(b, unix.PROT_READ|unix.PROT_WRITE); err != nil { + t.Fatalf("Mprotect: %v", err) + } + + // Flip flag in test file via mapped memory + flagWasZero := true + if b[0] == '0' { + b[0] = '1' + } else if b[0] == '1' { + b[0] = '0' + flagWasZero = false + } + + if err := unix.Msync(b, unix.MS_SYNC); err != nil { + t.Fatalf("Msync: %v", err) + } + + // Read file from FS to ensure flag flipped after msync + buf, err := ioutil.ReadFile(filename) + if err != nil { + t.Fatalf("Could not read mmapped file from disc for test: %v", err) + } + if flagWasZero && buf[0] != '1' || !flagWasZero && buf[0] != '0' { + t.Error("Flag flip in MAP_SHARED mmapped file not visible") + } + + if err := unix.Munmap(b); err != nil { + t.Fatalf("Munmap: %v", err) + } +} + +func mktmpdir(t *testing.T) string { + tmpdir, err := ioutil.TempDir("", "memmapped_file") + if err != nil { + t.Fatal("mktmpdir:", err) + } + if err := os.Mkdir(filepath.Join(tmpdir, "testdata"), 0700); err != nil { + os.RemoveAll(tmpdir) + t.Fatal("mktmpdir:", err) + } + return tmpdir +} |