Source file
src/syscall/syscall_freebsd_test.go
1
2
3
4
5
6
7 package syscall_test
8
9 import (
10 "fmt"
11 "os"
12 "syscall"
13 "testing"
14 "unsafe"
15 )
16
17 func TestConvertFromDirent11(t *testing.T) {
18 const (
19 filenameFmt = "%04d"
20 numFiles = 64
21 fixedHdrSize = int(unsafe.Offsetof(syscall.Dirent_freebsd11{}.Name))
22 )
23
24 namlen := len(fmt.Sprintf(filenameFmt, 0))
25 reclen := syscall.Roundup(fixedHdrSize+namlen+1, 4)
26 old := make([]byte, numFiles*reclen)
27 for i := 0; i < numFiles; i++ {
28 dent := syscall.Dirent_freebsd11{
29 Fileno: uint32(i + 1),
30 Reclen: uint16(reclen),
31 Type: syscall.DT_REG,
32 Namlen: uint8(namlen),
33 }
34 rec := make([]byte, reclen)
35 copy(rec, (*[fixedHdrSize]byte)(unsafe.Pointer(&dent))[:])
36 copy(rec[fixedHdrSize:], fmt.Sprintf(filenameFmt, i+1))
37 copy(old[i*reclen:], rec)
38 }
39
40 buf := make([]byte, 2*len(old))
41 n := syscall.ConvertFromDirents11(buf, old)
42
43 names := make([]string, 0, numFiles)
44 _, _, names = syscall.ParseDirent(buf[:n], -1, names)
45
46 if len(names) != numFiles {
47 t.Errorf("expected %d files, have %d; names: %q", numFiles, len(names), names)
48 }
49
50 for i, name := range names {
51 if expected := fmt.Sprintf(filenameFmt, i+1); name != expected {
52 t.Errorf("expected names[%d] to be %q; got %q", i, expected, name)
53 }
54 }
55 }
56
57 func TestMain(m *testing.M) {
58 if os.Getenv("GO_DEATHSIG_PARENT") == "1" {
59 deathSignalParent()
60 } else if os.Getenv("GO_DEATHSIG_CHILD") == "1" {
61 deathSignalChild()
62 }
63
64 os.Exit(m.Run())
65 }
66
View as plain text