github.com/tickoalcantara12/micro/v3@v3.0.0-20221007104245-9d75b9bcbab9/service/network/transport/grpc/grpc_test.go (about)

     1  // Licensed under the Apache License, Version 2.0 (the "License");
     2  // you may not use this file except in compliance with the License.
     3  // You may obtain a copy of the License at
     4  //
     5  //     https://www.apache.org/licenses/LICENSE-2.0
     6  //
     7  // Unless required by applicable law or agreed to in writing, software
     8  // distributed under the License is distributed on an "AS IS" BASIS,
     9  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    10  // See the License for the specific language governing permissions and
    11  // limitations under the License.
    12  //
    13  // Original source: github.com/micro/go-micro/v3/network/transport/grpc/grpc_test.go
    14  package grpc
    15  
    16  import (
    17  	"net"
    18  	"testing"
    19  
    20  	"github.com/tickoalcantara12/micro/v3/service/network/transport"
    21  )
    22  
    23  func expectedPort(t *testing.T, expected string, lsn transport.Listener) {
    24  	_, port, err := net.SplitHostPort(lsn.Addr())
    25  	if err != nil {
    26  		t.Errorf("Expected address to be `%s`, got error: %v", expected, err)
    27  	}
    28  
    29  	if port != expected {
    30  		lsn.Close()
    31  		t.Errorf("Expected address to be `%s`, got `%s`", expected, port)
    32  	}
    33  }
    34  
    35  func TestGRPCTransportPortRange(t *testing.T) {
    36  	tp := NewTransport()
    37  
    38  	lsn1, err := tp.Listen(":44444-44448")
    39  	if err != nil {
    40  		t.Errorf("Did not expect an error, got %s", err)
    41  	}
    42  	expectedPort(t, "44444", lsn1)
    43  
    44  	lsn2, err := tp.Listen(":44444-44448")
    45  	if err != nil {
    46  		t.Errorf("Did not expect an error, got %s", err)
    47  	}
    48  	expectedPort(t, "44445", lsn2)
    49  
    50  	lsn, err := tp.Listen(":0")
    51  	if err != nil {
    52  		t.Errorf("Did not expect an error, got %s", err)
    53  	}
    54  
    55  	lsn.Close()
    56  	lsn1.Close()
    57  	lsn2.Close()
    58  }
    59  
    60  func TestGRPCTransportCommunication(t *testing.T) {
    61  	tr := NewTransport()
    62  
    63  	l, err := tr.Listen(":0")
    64  	if err != nil {
    65  		t.Errorf("Unexpected listen err: %v", err)
    66  	}
    67  	defer l.Close()
    68  
    69  	fn := func(sock transport.Socket) {
    70  		defer sock.Close()
    71  
    72  		for {
    73  			var m transport.Message
    74  			if err := sock.Recv(&m); err != nil {
    75  				return
    76  			}
    77  
    78  			if err := sock.Send(&m); err != nil {
    79  				return
    80  			}
    81  		}
    82  	}
    83  
    84  	done := make(chan bool)
    85  
    86  	go func() {
    87  		if err := l.Accept(fn); err != nil {
    88  			select {
    89  			case <-done:
    90  			default:
    91  				t.Errorf("Unexpected accept err: %v", err)
    92  			}
    93  		}
    94  	}()
    95  
    96  	c, err := tr.Dial(l.Addr())
    97  	if err != nil {
    98  		t.Errorf("Unexpected dial err: %v", err)
    99  	}
   100  	defer c.Close()
   101  
   102  	m := transport.Message{
   103  		Header: map[string]string{
   104  			"X-Content-Type": "application/json",
   105  		},
   106  		Body: []byte(`{"message": "Hello World"}`),
   107  	}
   108  
   109  	if err := c.Send(&m); err != nil {
   110  		t.Errorf("Unexpected send err: %v", err)
   111  	}
   112  
   113  	var rm transport.Message
   114  
   115  	if err := c.Recv(&rm); err != nil {
   116  		t.Errorf("Unexpected recv err: %v", err)
   117  	}
   118  
   119  	if string(rm.Body) != string(m.Body) {
   120  		t.Errorf("Expected %v, got %v", m.Body, rm.Body)
   121  	}
   122  
   123  	close(done)
   124  }