1
2
3
4
5 package poll_test
6
7 import (
8 "os"
9 "runtime"
10 "sync"
11 "testing"
12 "time"
13 )
14
15 func TestRead(t *testing.T) {
16 t.Run("SpecialFile", func(t *testing.T) {
17 var wg sync.WaitGroup
18 for _, p := range specialFiles() {
19 for i := 0; i < 4; i++ {
20 wg.Add(1)
21 go func(p string) {
22 defer wg.Done()
23 for i := 0; i < 100; i++ {
24 if _, err := os.ReadFile(p); err != nil {
25 t.Error(err)
26 return
27 }
28 time.Sleep(time.Nanosecond)
29 }
30 }(p)
31 }
32 }
33 wg.Wait()
34 })
35 }
36
37 func specialFiles() []string {
38 var ps []string
39 switch runtime.GOOS {
40 case "darwin", "ios", "dragonfly", "freebsd", "netbsd", "openbsd":
41 ps = []string{
42 "/dev/null",
43 }
44 case "linux":
45 ps = []string{
46 "/dev/null",
47 "/proc/stat",
48 "/sys/devices/system/cpu/online",
49 }
50 }
51 nps := ps[:0]
52 for _, p := range ps {
53 f, err := os.Open(p)
54 if err != nil {
55 continue
56 }
57 f.Close()
58 nps = append(nps, p)
59 }
60 return nps
61 }
62
View as plain text