xref: /aosp_15_r20/external/libcap/psx/psx_cgo_test.go (revision 2810ac1b38eead2603277920c78344c84ddf3aff)
1*2810ac1bSKiyoung Kim// +build cgo
2*2810ac1bSKiyoung Kim
3*2810ac1bSKiyoung Kimpackage psx
4*2810ac1bSKiyoung Kim
5*2810ac1bSKiyoung Kimimport (
6*2810ac1bSKiyoung Kim	"runtime"
7*2810ac1bSKiyoung Kim	"syscall"
8*2810ac1bSKiyoung Kim	"testing"
9*2810ac1bSKiyoung Kim)
10*2810ac1bSKiyoung Kim
11*2810ac1bSKiyoung Kim// The man page for errno indicates that it is never set to zero, so
12*2810ac1bSKiyoung Kim// validate that it retains its value over a successful Syscall[36]()
13*2810ac1bSKiyoung Kim// and is overwritten on a failing syscall.
14*2810ac1bSKiyoung Kimfunc TestErrno(t *testing.T) {
15*2810ac1bSKiyoung Kim	// This testing is much easier if we don't have to guess which
16*2810ac1bSKiyoung Kim	// thread is running this Go code.
17*2810ac1bSKiyoung Kim	runtime.LockOSThread()
18*2810ac1bSKiyoung Kim	defer runtime.UnlockOSThread()
19*2810ac1bSKiyoung Kim
20*2810ac1bSKiyoung Kim	// Start from a known bad state and clean up afterwards.
21*2810ac1bSKiyoung Kim	setErrno(int(syscall.EPERM))
22*2810ac1bSKiyoung Kim	defer setErrno(0)
23*2810ac1bSKiyoung Kim
24*2810ac1bSKiyoung Kim	v3, _, errno := Syscall3(syscall.SYS_GETUID, 0, 0, 0)
25*2810ac1bSKiyoung Kim	if errno != 0 {
26*2810ac1bSKiyoung Kim		t.Fatalf("psx getuid failed: %v", errno)
27*2810ac1bSKiyoung Kim	}
28*2810ac1bSKiyoung Kim	v6, _, errno := Syscall6(syscall.SYS_GETUID, 0, 0, 0, 0, 0, 0)
29*2810ac1bSKiyoung Kim	if errno != 0 {
30*2810ac1bSKiyoung Kim		t.Fatalf("psx getuid failed: %v", errno)
31*2810ac1bSKiyoung Kim	}
32*2810ac1bSKiyoung Kim
33*2810ac1bSKiyoung Kim	if v3 != v6 {
34*2810ac1bSKiyoung Kim		t.Errorf("psx getuid failed to match v3=%d, v6=%d", v3, v6)
35*2810ac1bSKiyoung Kim	}
36*2810ac1bSKiyoung Kim
37*2810ac1bSKiyoung Kim	if v := setErrno(-1); v != int(syscall.EPERM) {
38*2810ac1bSKiyoung Kim		t.Errorf("psx changes prevailing errno got=%v(%d) want=%v", syscall.Errno(v), v, syscall.EPERM)
39*2810ac1bSKiyoung Kim	}
40*2810ac1bSKiyoung Kim}
41