// 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
}
