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 }