github.com/codingeasygo/util@v0.0.0-20231206062002-1ce2f004b7d9/xio/print_test.go (about) 1 package xio 2 3 import ( 4 "bytes" 5 "fmt" 6 "io" 7 "net" 8 "testing" 9 "time" 10 ) 11 12 type printConnTest struct { 13 data chan []byte 14 err error 15 } 16 17 func (p *printConnTest) Read(b []byte) (n int, err error) { 18 if p.err == nil { 19 data := <-p.data 20 n = copy(b, data) 21 } 22 err = p.err 23 return 24 } 25 26 func (p *printConnTest) Write(b []byte) (n int, err error) { 27 if p.err == nil { 28 p.data <- b 29 n = len(b) 30 } 31 err = p.err 32 return 33 } 34 35 // LocalAddr returns the local network address. 36 func (p *printConnTest) LocalAddr() net.Addr { 37 return p 38 } 39 40 // RemoteAddr returns the remote network address. 41 func (p *printConnTest) RemoteAddr() net.Addr { 42 return p 43 } 44 45 // SetDeadline for net.Conn 46 func (p *printConnTest) SetDeadline(t time.Time) error { 47 return nil 48 } 49 50 // SetReadDeadline for net.Conn 51 func (p *printConnTest) SetReadDeadline(t time.Time) error { 52 return nil 53 } 54 55 // SetWriteDeadline for net.Conn 56 func (p *printConnTest) SetWriteDeadline(t time.Time) error { 57 return nil 58 } 59 60 //Network impl net.Addr 61 func (p *printConnTest) Network() string { 62 return "print" 63 } 64 65 func (p *printConnTest) String() string { 66 return "test" 67 } 68 69 func (p *printConnTest) Close() (err error) { 70 return 71 } 72 73 func TestPrint(t *testing.T) { 74 test := &printConnTest{ 75 data: make(chan []byte, 1024), 76 } 77 print := NewPrintConn("testing", test) 78 // 79 print.Mode = 0 80 print.Write([]byte("abc")) 81 print.Read(make([]byte, 1024)) 82 // 83 print.Mode = 0x10 84 print.Write([]byte("abc")) 85 print.Read(make([]byte, 1024)) 86 // 87 test.err = fmt.Errorf("closed") 88 print.Write([]byte("abc")) 89 print.Read(make([]byte, 1024)) 90 // 91 print.Close() 92 // 93 print.SetDeadline(time.Now()) 94 print.SetReadDeadline(time.Now()) 95 print.SetWriteDeadline(time.Now()) 96 print.LocalAddr() 97 print.RemoteAddr() 98 print.Network() 99 fmt.Println(print.String()) 100 // 101 test1 := bytes.NewBuffer(nil) 102 print1 := NewPrintConn("testing", NewCombinedReadWriteCloser(test1, test1, nil)) 103 print1.SetDeadline(time.Now()) 104 print1.SetReadDeadline(time.Now()) 105 print1.SetWriteDeadline(time.Now()) 106 print1.LocalAddr() 107 print1.RemoteAddr() 108 // 109 print2 := NewPrintPiper("testing", PiperF(func(conn io.ReadWriteCloser, target string) (err error) { 110 err = fmt.Errorf("error") 111 return 112 })) 113 print2.PipeConn(nil, "") 114 print2.Close() 115 }