okami.mom/ultraviolet
git clone https://git.nkp.pet/okami.mom/ultraviolet
27c57c1
upstream
1//go:build !windows 2// +build !windows 3 4package uv 5 6import ( 7"os" 8"testing" 9"time" 10) 11 12func TestReader (t * testing.T ) { 13pr ,pw ,err := os .Pipe () 14if err != nil { 15t .Errorf ("expected no error, but got %s" ,err ) 16 } 17defer pw .Close () 18defer pr .Close () 19 20pollReader ,err := newPollReader (pr ) 21if err != nil { 22t .Errorf ("expected no error, but got %s" ,err ) 23 } 24 25// Don't write anything to the pipe yet so the read below blocks and 26// cannot complete before the cancellation. 27done := make (chan struct {}) 28var n int 29go func () { 30defer close (done ) 31p := make ([]byte ,1 ) 32n ,err = pollReader .Read (p ) 33 }() 34 35if ! pollReader .Cancel () { 36t .Errorf ("expected cancellation to be success" ) 37 } 38 39select { 40case <- done : 41case <- time .After (100 * time .Millisecond ): 42t .Errorf ("expected cancellation to unblock reader" ) 43 } 44if n != 0 { 45t .Errorf ("expected 0 bytes read but got %d" ,n ) 46 } 47if err != ErrCanceled { 48t .Errorf ("expected cancel error but got %s" ,err ) 49 } 50 51// Test that read is still possible after cancellation. 52pollReader ,err = newPollReader (pr ) 53if err != nil { 54t .Errorf ("expected no error, but got %s" ,err ) 55 } 56msg := "hello" 57n ,err = pw .Write ([]byte (msg )) 58if n != 5 { 59t .Errorf ("expected 5 bytes written but got %d" ,n ) 60 } 61if err != nil { 62t .Errorf ("expected no error, but got %s" ,err ) 63 } 64p := make ([]byte ,5 ) 65n ,err = pollReader .Read (p ) 66if n != 5 { 67t .Errorf ("expected 5 bytes written but got %d" ,n ) 68 } 69if err != nil { 70t .Errorf ("expected no error, but got %s" ,err ) 71 } 72if string (p [:n ])!= msg [:n ] { 73t .Errorf ("expected to read %q but got %q" ,msg [:n ],string (p [:n ])) 74 } 75}