github.com/lzhfromustc/gofuzz@v0.0.0-20211116160056-151b3108bbd1/runtime/runtime_linux_test.go (about) 1 // Copyright 2012 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package runtime_test 6 7 import ( 8 . "runtime" 9 "syscall" 10 "testing" 11 "time" 12 "unsafe" 13 ) 14 15 var pid, tid int 16 17 func init() { 18 // Record pid and tid of init thread for use during test. 19 // The call to LockOSThread is just to exercise it; 20 // we can't test that it does anything. 21 // Instead we're testing that the conditions are good 22 // for how it is used in init (must be on main thread). 23 pid, tid = syscall.Getpid(), syscall.Gettid() 24 LockOSThread() 25 26 sysNanosleep = func(d time.Duration) { 27 // Invoke a blocking syscall directly; calling time.Sleep() 28 // would deschedule the goroutine instead. 29 ts := syscall.NsecToTimespec(d.Nanoseconds()) 30 for { 31 if err := syscall.Nanosleep(&ts, &ts); err != syscall.EINTR { 32 return 33 } 34 } 35 } 36 } 37 38 func TestLockOSThread(t *testing.T) { 39 if pid != tid { 40 t.Fatalf("pid=%d but tid=%d", pid, tid) 41 } 42 } 43 44 // Test that error values are negative. 45 // Use a misaligned pointer to get -EINVAL. 46 func TestMincoreErrorSign(t *testing.T) { 47 var dst byte 48 v := Mincore(Add(unsafe.Pointer(new(int32)), 1), 1, &dst) 49 50 const EINVAL = 0x16 51 if v != -EINVAL { 52 t.Errorf("mincore = %v, want %v", v, -EINVAL) 53 } 54 } 55 56 func TestEpollctlErrorSign(t *testing.T) { 57 v := Epollctl(-1, 1, -1, unsafe.Pointer(&EpollEvent{})) 58 59 const EBADF = 0x09 60 if v != -EBADF { 61 t.Errorf("epollctl = %v, want %v", v, -EBADF) 62 } 63 }