github.com/kiali/kiali@v1.84.0/tracing/tempo/grpc_client_test.go (about) 1 package tempo 2 3 import ( 4 "context" 5 "io" 6 "net" 7 "net/http" 8 "net/url" 9 "os" 10 "strings" 11 "testing" 12 13 "github.com/stretchr/testify/assert" 14 "google.golang.org/grpc" 15 "google.golang.org/grpc/credentials/insecure" 16 "google.golang.org/grpc/test/bufconn" 17 18 "github.com/kiali/kiali/log" 19 "github.com/kiali/kiali/tracing/tempo/tempopb" 20 ) 21 22 func getgRPCBaseUrl() *url.URL { 23 baseUrl, _ := url.Parse(tracingUrl) 24 return baseUrl 25 } 26 27 type mockgRPCServer struct { 28 streamingClient tempopb.UnimplementedStreamingQuerierServer 29 } 30 31 func (s *mockgRPCServer) Search(req *tempopb.SearchRequest, srv tempopb.StreamingQuerier_SearchServer) error { 32 return s.streamingClient.Search(req, srv) 33 } 34 35 func dialer() func(context.Context, string) (net.Conn, error) { 36 listener := bufconn.Listen(1024 * 1024) 37 38 server := grpc.NewServer() 39 40 tempopb.RegisterStreamingQuerierServer(server, &mockgRPCServer{}) 41 42 go func() { 43 if err := server.Serve(listener); err != nil { 44 log.Fatal(err) 45 } 46 }() 47 48 return func(context.Context, string) (net.Conn, error) { 49 return listener.Dial() 50 } 51 } 52 53 func TestCreateGRPCClient(t *testing.T) { 54 55 resp, err := os.Open(responseFile) 56 assert.Nil(t, err) 57 defer resp.Close() 58 59 byteValue, _ := io.ReadAll(resp) 60 61 httpClient := http.Client{Transport: RoundTripFunc(func(req *http.Request) *http.Response { 62 return &http.Response{ 63 StatusCode: http.StatusOK, 64 Body: io.NopCloser(strings.NewReader(string(byteValue))), 65 } 66 })} 67 68 ctx := context.Background() 69 clientConn, err := grpc.DialContext(ctx, "", grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithContextDialer(dialer())) 70 assert.Nil(t, err) 71 assert.NotNil(t, clientConn) 72 73 streamClient, err := NewgRPCClient(httpClient, getgRPCBaseUrl(), clientConn) 74 75 assert.Nil(t, err) 76 assert.NotNil(t, streamClient) 77 }