// Copyright 2019 The Go Authors. All rights reserved. | |
// Use of this source code is governed by a BSD-style | |
// license that can be found in the LICENSE file. | |
package poll_test | |
import ( | |
"os" | |
"runtime" | |
"sync" | |
"testing" | |
"time" | |
) | |
func TestRead(t *testing.T) { | |
t.Run("SpecialFile", func(t *testing.T) { | |
var wg sync.WaitGroup | |
for _, p := range specialFiles() { | |
for i := 0; i < 4; i++ { | |
wg.Add(1) | |
go func(p string) { | |
defer wg.Done() | |
for i := 0; i < 100; i++ { | |
if _, err := os.ReadFile(p); err != nil { | |
t.Error(err) | |
return | |
} | |
time.Sleep(time.Nanosecond) | |
} | |
}(p) | |
} | |
} | |
wg.Wait() | |
}) | |
} | |
func specialFiles() []string { | |
var ps []string | |
switch runtime.GOOS { | |
case "darwin", "ios", "dragonfly", "freebsd", "netbsd", "openbsd": | |
ps = []string{ | |
"/dev/null", | |
} | |
case "linux": | |
ps = []string{ | |
"/dev/null", | |
"/proc/stat", | |
"/sys/devices/system/cpu/online", | |
} | |
} | |
nps := ps[:0] | |
for _, p := range ps { | |
f, err := os.Open(p) | |
if err != nil { | |
continue | |
} | |
f.Close() | |
nps = append(nps, p) | |
} | |
return nps | |
} |