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 }