diff --git a/cmd/query/app/grpc_handler.go b/cmd/query/app/grpc_handler.go index 6954de45520..598df0a4bcc 100644 --- a/cmd/query/app/grpc_handler.go +++ b/cmd/query/app/grpc_handler.go @@ -84,6 +84,9 @@ func (g *GRPCHandler) ArchiveTrace(ctx context.Context, r *api_v2.ArchiveTraceRe // FindTraces is the gRPC handler to fetch traces based on TraceQueryParameters. func (g *GRPCHandler) FindTraces(r *api_v2.FindTracesRequest, stream api_v2.QueryService_FindTracesServer) error { query := r.GetQuery() + if query == nil { + return status.Errorf(codes.InvalidArgument, "missing query") + } queryParams := spanstore.TraceQueryParameters{ ServiceName: query.ServiceName, OperationName: query.OperationName, diff --git a/cmd/query/app/grpc_handler_test.go b/cmd/query/app/grpc_handler_test.go index 99a81f7264d..98d922e6c11 100644 --- a/cmd/query/app/grpc_handler_test.go +++ b/cmd/query/app/grpc_handler_test.go @@ -363,6 +363,19 @@ func TestSearchSuccess_SpanStreamingGRPC(t *testing.T) { }) } +func TestSearchInvalid_GRPC(t *testing.T) { + withServerAndClient(t, func(server *grpcServer, client *grpcClient) { + res, err := client.FindTraces(context.Background(), &api_v2.FindTracesRequest{ + Query: nil, + }) + assert.NoError(t, err) + + spanResChunk, err := res.Recv() + assert.Error(t, err) + assert.Nil(t, spanResChunk) + }) +} + func TestSearchFailure_GRPC(t *testing.T) { withServerAndClient(t, func(server *grpcServer, client *grpcClient) { mockErrorGRPC := fmt.Errorf("whatsamattayou")