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  }