github.com/codingeasygo/util@v0.0.0-20231206062002-1ce2f004b7d9/xio/pipe_test.go (about) 1 package xio 2 3 import ( 4 "fmt" 5 "io" 6 "testing" 7 "time" 8 ) 9 10 func TestPipe(t *testing.T) { 11 a, b, err := Pipe() 12 if err != nil { 13 t.Error(err) 14 return 15 } 16 go io.Copy(b, b) 17 go func() { 18 fmt.Fprintf(a, "abc") 19 fmt.Printf("--->write0\n") 20 fmt.Fprintf(a, "123") 21 fmt.Printf("--->write1\n") 22 time.Sleep(10 * time.Millisecond) 23 b.Close() 24 fmt.Printf("--->close0\n") 25 }() 26 var n int 27 buf := make([]byte, 1024) 28 n, err = a.Read(buf) 29 if err != nil || n != 3 || string(buf[0:3]) != "abc" { 30 t.Error(err) 31 return 32 } 33 fmt.Printf("--->read0\n") 34 n, err = a.Read(buf) 35 if err != nil || n != 3 || string(buf[0:3]) != "123" { 36 t.Error(err) 37 return 38 } 39 fmt.Printf("--->read1\n") 40 _, err = a.Read(buf) 41 if err == nil { 42 t.Error(err) 43 return 44 } 45 fmt.Printf("--->close0\n") 46 a.Close() 47 a.Read(nil) 48 a.Write(nil) 49 } 50 51 func TestPipe2(t *testing.T) { 52 for i := 0; i < 10000; i++ { 53 a, _, err := Pipe() 54 if err != nil { 55 t.Error(err) 56 return 57 } 58 a.Close() 59 } 60 } 61 62 func TestPipedConne(t *testing.T) { 63 a, b, err := CreatePipedConn() 64 if err != nil { 65 t.Error(err) 66 return 67 } 68 a.RemoteAddr() 69 a.LocalAddr() 70 a.SetDeadline(time.Now()) 71 a.SetReadDeadline(time.Now()) 72 a.SetWriteDeadline(time.Now()) 73 a.Network() 74 fmt.Printf("-->%v\n", a) 75 b.Close() 76 } 77 78 func TestPipedListener(t *testing.T) { 79 listener := NewPipedListener() 80 go func() { 81 for { 82 conn, err := listener.Accept() 83 if err != nil { 84 break 85 } 86 go io.Copy(conn, conn) 87 } 88 }() 89 conn, err := listener.Dial() 90 if err != nil { 91 return 92 } 93 fmt.Fprintf(conn, "abc") 94 buf := make([]byte, 1024) 95 n, err := conn.Read(buf) 96 if err != nil { 97 return 98 } 99 if string(buf[0:n]) != "abc" { 100 t.Error("error") 101 return 102 } 103 conn.Close() 104 listener.Close() 105 time.Sleep(100 * time.Millisecond) 106 listener.Addr() 107 listener.Network() 108 fmt.Printf("listener %v\n", listener) 109 }