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  }