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  }