go-micro.dev/v5@v5.12.0/transport/http_client_test.go (about) 1 package transport 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/pkg/errors" 8 ) 9 10 func TestHttpTransportClient(t *testing.T) { 11 // arrange 12 l, c, err := echoHttpTransportClient("127.0.0.1:") 13 if err != nil { 14 t.Error(err) 15 } 16 defer l.Close() 17 defer c.Close() 18 19 // act + assert 20 N := cap(c.req) 21 // Send N+1 messages to overflow the buffered channel and place the extra message in the internal buffer 22 for i := 0; i < N+1; i++ { 23 body := fmt.Sprintf("msg-%d", i) 24 if err := c.Send(&Message{Body: []byte(body)}); err != nil { 25 t.Errorf("Unexpected send err: %v", err) 26 } 27 } 28 29 // consume all requests from the buffered channel 30 for i := 0; i < N; i++ { 31 msg := Message{} 32 if err := c.Recv(&msg); err != nil { 33 t.Errorf("Unexpected recv err: %v", err) 34 } 35 } 36 37 if len(c.reqList) != 1 { 38 t.Error("Unexpected reqList") 39 } 40 41 msg := Message{} 42 if err := c.Recv(&msg); err != nil { 43 t.Errorf("Unexpected recv err: %v", err) 44 } 45 want := fmt.Sprintf("msg-%d", N) 46 got := string(msg.Body) 47 if want != got { 48 t.Errorf("Unexpected message: got %q, want %q", got, want) 49 } 50 } 51 52 func echoHttpTransportClient(addr string) (*httpTransportListener, *httpTransportClient, error) { 53 tr := NewHTTPTransport() 54 l, err := tr.Listen(addr) 55 if err != nil { 56 return nil, nil, errors.Errorf("Unexpected listen err: %v", err) 57 } 58 c, err := tr.Dial(l.Addr()) 59 if err != nil { 60 return nil, nil, errors.Errorf("Unexpected dial err: %v", err) 61 } 62 go l.Accept(echoHandler) 63 return l.(*httpTransportListener), c.(*httpTransportClient), nil 64 } 65 66 func echoHandler(sock Socket) { 67 defer sock.Close() 68 for { 69 var msg Message 70 if err := sock.Recv(&msg); err != nil { 71 return 72 } 73 if err := sock.Send(&msg); err != nil { 74 return 75 } 76 } 77 }