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 }