github.com/nibnait/go-learn@v0.0.0-20220227013611-dfa47ea6d2da/src/pkg/mod/golang.org/x/sys@v0.0.0-20210630005230-0f9fa26af87c/unix/syscall_aix_test.go (about)

     1  // Copyright 2018 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  //go:build aix
     6  // +build aix
     7  
     8  package unix_test
     9  
    10  import (
    11  	"os"
    12  	"runtime"
    13  	"testing"
    14  	"time"
    15  
    16  	"golang.org/x/sys/unix"
    17  )
    18  
    19  func TestIoctlGetInt(t *testing.T) {
    20  	f, err := os.Open("/dev/random")
    21  	if err != nil {
    22  		t.Fatalf("failed to open device: %v", err)
    23  	}
    24  	defer f.Close()
    25  
    26  	v, err := unix.IoctlGetInt(int(f.Fd()), unix.RNDGETENTCNT)
    27  	if err != nil {
    28  		t.Fatalf("failed to perform ioctl: %v", err)
    29  	}
    30  
    31  	t.Logf("%d bits of entropy available", v)
    32  }
    33  
    34  func TestTime(t *testing.T) {
    35  	var ut unix.Time_t
    36  	ut2, err := unix.Time(&ut)
    37  	if err != nil {
    38  		t.Fatalf("Time: %v", err)
    39  	}
    40  	if ut != ut2 {
    41  		t.Errorf("Time: return value %v should be equal to argument %v", ut2, ut)
    42  	}
    43  
    44  	var now time.Time
    45  
    46  	for i := 0; i < 10; i++ {
    47  		ut, err = unix.Time(nil)
    48  		if err != nil {
    49  			t.Fatalf("Time: %v", err)
    50  		}
    51  
    52  		now = time.Now()
    53  		diff := int64(ut) - now.Unix()
    54  		if -1 <= diff && diff <= 1 {
    55  			return
    56  		}
    57  	}
    58  
    59  	t.Errorf("Time: return value %v should be nearly equal to time.Now().Unix() %v±1", ut, now.Unix())
    60  }
    61  
    62  func TestUtime(t *testing.T) {
    63  	defer chtmpdir(t)()
    64  
    65  	touch(t, "file1")
    66  
    67  	buf := &unix.Utimbuf{
    68  		Modtime: 12345,
    69  	}
    70  
    71  	err := unix.Utime("file1", buf)
    72  	if err != nil {
    73  		t.Fatalf("Utime: %v", err)
    74  	}
    75  
    76  	fi, err := os.Stat("file1")
    77  	if err != nil {
    78  		t.Fatal(err)
    79  	}
    80  
    81  	if fi.ModTime().Unix() != 12345 {
    82  		t.Errorf("Utime: failed to change modtime: expected %v, got %v", 12345, fi.ModTime().Unix())
    83  	}
    84  }
    85  
    86  func TestPselect(t *testing.T) {
    87  	if runtime.GOARCH == "ppc64" {
    88  		t.Skip("pselect issue with structure timespec on AIX 7.2 tl0, skipping test")
    89  	}
    90  
    91  	_, err := unix.Pselect(0, nil, nil, nil, &unix.Timespec{Sec: 0, Nsec: 0}, nil)
    92  	if err != nil {
    93  		t.Fatalf("Pselect: %v", err)
    94  	}
    95  
    96  	dur := 2500 * time.Microsecond
    97  	ts := unix.NsecToTimespec(int64(dur))
    98  	start := time.Now()
    99  	_, err = unix.Pselect(0, nil, nil, nil, &ts, nil)
   100  	took := time.Since(start)
   101  	if err != nil {
   102  		t.Fatalf("Pselect: %v", err)
   103  	}
   104  
   105  	if took < dur {
   106  		t.Errorf("Pselect: timeout should have been at least %v, got %v", dur, took)
   107  	}
   108  }