mirror of
https://github.com/golang/sys.git
synced 2026-02-09 12:16:04 +03:00
OpenBSD 6.9 changed the definition of Clockinfo, leading TestSysctlClockinfo to fail on OpenBSD 6.9 onwards. Since OpenBSD 6.8 is no longer supported upstream, regenerate Clockinfo on that release and test that SysctlClockInfo fails gracefully on OpenBSD 6.8 and earlier. Fixes golang/go#47629 For golang/go#48977 Change-Id: Ia511b8601af11f70ffcce0f96764c69a67d626b8 Reviewed-on: https://go-review.googlesource.com/c/sys/+/360694 Trust: Tobias Klauser <tobias.klauser@gmail.com> Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Bryan C. Mills <bcmills@google.com> Reviewed-by: Joel Sing <joel@sing.id.au>
94 lines
2.1 KiB
Go
94 lines
2.1 KiB
Go
// Copyright 2014 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 darwin || dragonfly || freebsd || openbsd
|
|
// +build darwin dragonfly freebsd openbsd
|
|
|
|
package unix_test
|
|
|
|
import (
|
|
"os/exec"
|
|
"runtime"
|
|
"testing"
|
|
"time"
|
|
|
|
"golang.org/x/sys/unix"
|
|
)
|
|
|
|
func TestGetfsstat(t *testing.T) {
|
|
n, err := unix.Getfsstat(nil, unix.MNT_NOWAIT)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
data := make([]unix.Statfs_t, n)
|
|
n2, err := unix.Getfsstat(data, unix.MNT_NOWAIT)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if n != n2 {
|
|
t.Errorf("Getfsstat(nil) = %d, but subsequent Getfsstat(slice) = %d", n, n2)
|
|
}
|
|
for i, stat := range data {
|
|
if stat == (unix.Statfs_t{}) {
|
|
t.Errorf("index %v is an empty Statfs_t struct", i)
|
|
}
|
|
}
|
|
if t.Failed() {
|
|
for i, stat := range data[:n2] {
|
|
t.Logf("data[%v] = %+v", i, stat)
|
|
}
|
|
mount, err := exec.Command("mount").CombinedOutput()
|
|
if err != nil {
|
|
t.Logf("mount: %v\n%s", err, mount)
|
|
} else {
|
|
t.Logf("mount: %s", mount)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestSysctlRaw(t *testing.T) {
|
|
if runtime.GOOS == "openbsd" {
|
|
t.Skip("kern.proc.pid does not exist on OpenBSD")
|
|
}
|
|
|
|
_, err := unix.SysctlRaw("kern.proc.pid", unix.Getpid())
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
|
|
func TestSysctlUint32(t *testing.T) {
|
|
maxproc, err := unix.SysctlUint32("kern.maxproc")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
t.Logf("kern.maxproc: %v", maxproc)
|
|
}
|
|
|
|
func TestSysctlClockinfo(t *testing.T) {
|
|
ci, err := unix.SysctlClockinfo("kern.clockrate")
|
|
if err != nil {
|
|
if runtime.GOOS == "openbsd" && (err == unix.ENOMEM || err == unix.EIO) {
|
|
if osrev, _ := unix.SysctlUint32("kern.osrevision"); osrev <= 202010 {
|
|
// SysctlClockinfo should fail gracefully due to a struct size
|
|
// mismatch on OpenBSD 6.8 and earlier, see
|
|
// https://golang.org/issue/47629
|
|
return
|
|
}
|
|
}
|
|
t.Fatal(err)
|
|
}
|
|
t.Logf("tick = %v, hz = %v, profhz = %v, stathz = %v",
|
|
ci.Tick, ci.Hz, ci.Profhz, ci.Stathz)
|
|
}
|
|
|
|
func TestSysctlTimeval(t *testing.T) {
|
|
tv, err := unix.SysctlTimeval("kern.boottime")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
t.Logf("boottime = %v", time.Unix(tv.Unix()))
|
|
}
|