github.com/codingeasygo/util@v0.0.0-20231206062002-1ce2f004b7d9/xio/query_test.go (about)

     1  package xio
     2  
     3  import (
     4  	"bytes"
     5  	"context"
     6  	"fmt"
     7  	"io"
     8  	"sync"
     9  	"testing"
    10  	"time"
    11  )
    12  
    13  func TestQueryConn(t *testing.T) {
    14  	query := NewQueryConn()
    15  	waiter := sync.WaitGroup{}
    16  	waiter.Add(1)
    17  	go func() {
    18  		defer waiter.Done()
    19  		io.Copy(query, query)
    20  	}()
    21  	response, err := query.Query(context.Background(), []byte("abc"))
    22  	if err != nil || !bytes.Equal(response, []byte("abc")) {
    23  		t.Error(err)
    24  		return
    25  	}
    26  	query.Close()
    27  	waiter.Wait()
    28  
    29  	_, err = query.Query(context.Background(), []byte("abc"))
    30  	if err == nil {
    31  		t.Error(err)
    32  		return
    33  	}
    34  
    35  	//not response
    36  	query = NewQueryConn()
    37  	ctx, cancel := context.WithTimeout(context.Background(), 100*time.Millisecond)
    38  	_, err = query.Query(ctx, []byte("abc"))
    39  	cancel()
    40  	if err == nil {
    41  		t.Error(err)
    42  		return
    43  	}
    44  
    45  	//not request
    46  	query = NewQueryConn()
    47  	query.sendData <- []byte("data")
    48  	ctx, cancel = context.WithTimeout(context.Background(), 100*time.Millisecond)
    49  	_, err = query.Query(ctx, []byte("abc"))
    50  	cancel()
    51  	if err == nil {
    52  		t.Error(err)
    53  		return
    54  	}
    55  
    56  	//write twice
    57  	query.recvWait <- 1
    58  	query.Write([]byte("abc"))
    59  	query.Write([]byte("abc"))
    60  
    61  	//close twice
    62  	query.Close()
    63  	query.Close()
    64  	query.clearSend()
    65  	query.clearSend()
    66  
    67  	//cover
    68  	query.LocalAddr()
    69  	query.RemoteAddr()
    70  	query.SetDeadline(time.Now())
    71  	query.SetReadDeadline(time.Now())
    72  	query.SetWriteDeadline(time.Now())
    73  	query.Network()
    74  	fmt.Println(query.String())
    75  }