// 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 ( "fmt" "io/fs" "net" "os" "testing" "time" ) func TestReadError(t *testing.T) { t.Run("ErrNotPollable", func(t *testing.T) { f, err := badStateFile() if err != nil { t.Skip(err) } defer f.Close() // Give scheduler a chance to have two separated // goroutines: an event poller and an event waiter. time.Sleep(100 * time.Millisecond) var b [1]byte _, err = f.Read(b[:]) if perr := parseReadError(err, isBadStateFileError); perr != nil { t.Fatal(perr) } }) } func parseReadError(nestedErr error, verify func(error) (string, bool)) error { err := nestedErr if nerr, ok := err.(*net.OpError); ok { err = nerr.Err } if nerr, ok := err.(*fs.PathError); ok { err = nerr.Err } if nerr, ok := err.(*os.SyscallError); ok { err = nerr.Err } if s, ok := verify(err); !ok { return fmt.Errorf("got %v; want %s", nestedErr, s) } return nil }