github.com/annwntech/go-micro/v2@v2.9.5/transport/grpc/grpc_test.go (about)

     1  package grpc
     2  
     3  import (
     4  	"net"
     5  	"testing"
     6  
     7  	"github.com/annwntech/go-micro/v2/transport"
     8  )
     9  
    10  func expectedPort(t *testing.T, expected string, lsn transport.Listener) {
    11  	_, port, err := net.SplitHostPort(lsn.Addr())
    12  	if err != nil {
    13  		t.Errorf("Expected address to be `%s`, got error: %v", expected, err)
    14  	}
    15  
    16  	if port != expected {
    17  		lsn.Close()
    18  		t.Errorf("Expected address to be `%s`, got `%s`", expected, port)
    19  	}
    20  }
    21  
    22  func TestGRPCTransportPortRange(t *testing.T) {
    23  	tp := NewTransport()
    24  
    25  	lsn1, err := tp.Listen(":44444-44448")
    26  	if err != nil {
    27  		t.Errorf("Did not expect an error, got %s", err)
    28  	}
    29  	expectedPort(t, "44444", lsn1)
    30  
    31  	lsn2, err := tp.Listen(":44444-44448")
    32  	if err != nil {
    33  		t.Errorf("Did not expect an error, got %s", err)
    34  	}
    35  	expectedPort(t, "44445", lsn2)
    36  
    37  	lsn, err := tp.Listen(":0")
    38  	if err != nil {
    39  		t.Errorf("Did not expect an error, got %s", err)
    40  	}
    41  
    42  	lsn.Close()
    43  	lsn1.Close()
    44  	lsn2.Close()
    45  }
    46  
    47  func TestGRPCTransportCommunication(t *testing.T) {
    48  	tr := NewTransport()
    49  
    50  	l, err := tr.Listen(":0")
    51  	if err != nil {
    52  		t.Errorf("Unexpected listen err: %v", err)
    53  	}
    54  	defer l.Close()
    55  
    56  	fn := func(sock transport.Socket) {
    57  		defer sock.Close()
    58  
    59  		for {
    60  			var m transport.Message
    61  			if err := sock.Recv(&m); err != nil {
    62  				return
    63  			}
    64  
    65  			if err := sock.Send(&m); err != nil {
    66  				return
    67  			}
    68  		}
    69  	}
    70  
    71  	done := make(chan bool)
    72  
    73  	go func() {
    74  		if err := l.Accept(fn); err != nil {
    75  			select {
    76  			case <-done:
    77  			default:
    78  				t.Errorf("Unexpected accept err: %v", err)
    79  			}
    80  		}
    81  	}()
    82  
    83  	c, err := tr.Dial(l.Addr())
    84  	if err != nil {
    85  		t.Errorf("Unexpected dial err: %v", err)
    86  	}
    87  	defer c.Close()
    88  
    89  	m := transport.Message{
    90  		Header: map[string]string{
    91  			"X-Content-Type": "application/json",
    92  		},
    93  		Body: []byte(`{"message": "Hello World"}`),
    94  	}
    95  
    96  	if err := c.Send(&m); err != nil {
    97  		t.Errorf("Unexpected send err: %v", err)
    98  	}
    99  
   100  	var rm transport.Message
   101  
   102  	if err := c.Recv(&rm); err != nil {
   103  		t.Errorf("Unexpected recv err: %v", err)
   104  	}
   105  
   106  	if string(rm.Body) != string(m.Body) {
   107  		t.Errorf("Expected %v, got %v", m.Body, rm.Body)
   108  	}
   109  
   110  	close(done)
   111  }