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  }