mirror of
https://github.com/hanzoai/telemetry.git
synced 2026-10-30 20:01:49 +00:00
Follows the normal procedure with the release of [go 1.26](https://go.dev/doc/devel/release#go1.26.0) --------- Signed-off-by: alex boten <[email protected]> Co-authored-by: Pablo Baeyens <[email protected]>
107 lines
2.7 KiB
Go
107 lines
2.7 KiB
Go
// Copyright The OpenTelemetry Authors
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package pmetricotlp
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"net"
|
|
"sync"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
"google.golang.org/grpc"
|
|
"google.golang.org/grpc/codes"
|
|
"google.golang.org/grpc/credentials/insecure"
|
|
"google.golang.org/grpc/resolver"
|
|
"google.golang.org/grpc/status"
|
|
"google.golang.org/grpc/test/bufconn"
|
|
|
|
"go.opentelemetry.io/collector/pdata/pmetric"
|
|
)
|
|
|
|
func TestGrpc(t *testing.T) {
|
|
lis := bufconn.Listen(1024 * 1024)
|
|
s := grpc.NewServer()
|
|
RegisterGRPCServer(s, &fakeMetricsServer{t: t})
|
|
wg := sync.WaitGroup{}
|
|
wg.Go(func() {
|
|
assert.NoError(t, s.Serve(lis))
|
|
})
|
|
t.Cleanup(func() {
|
|
s.Stop()
|
|
wg.Wait()
|
|
})
|
|
|
|
resolver.SetDefaultScheme("passthrough")
|
|
cc, err := grpc.NewClient("bufnet",
|
|
grpc.WithContextDialer(func(context.Context, string) (net.Conn, error) {
|
|
return lis.Dial()
|
|
}),
|
|
grpc.WithTransportCredentials(insecure.NewCredentials()))
|
|
require.NoError(t, err)
|
|
t.Cleanup(func() {
|
|
assert.NoError(t, cc.Close())
|
|
})
|
|
|
|
logClient := NewGRPCClient(cc)
|
|
|
|
resp, err := logClient.Export(context.Background(), generateMetricsRequest())
|
|
require.NoError(t, err)
|
|
assert.Equal(t, NewExportResponse(), resp)
|
|
}
|
|
|
|
func TestGrpcError(t *testing.T) {
|
|
lis := bufconn.Listen(1024 * 1024)
|
|
s := grpc.NewServer()
|
|
RegisterGRPCServer(s, &fakeMetricsServer{t: t, err: errors.New("my error")})
|
|
wg := sync.WaitGroup{}
|
|
wg.Go(func() {
|
|
assert.NoError(t, s.Serve(lis))
|
|
})
|
|
t.Cleanup(func() {
|
|
s.Stop()
|
|
wg.Wait()
|
|
})
|
|
|
|
cc, err := grpc.NewClient("bufnet",
|
|
grpc.WithContextDialer(func(context.Context, string) (net.Conn, error) {
|
|
return lis.Dial()
|
|
}),
|
|
grpc.WithTransportCredentials(insecure.NewCredentials()))
|
|
require.NoError(t, err)
|
|
t.Cleanup(func() {
|
|
assert.NoError(t, cc.Close())
|
|
})
|
|
|
|
logClient := NewGRPCClient(cc)
|
|
resp, err := logClient.Export(context.Background(), generateMetricsRequest())
|
|
require.Error(t, err)
|
|
st, okSt := status.FromError(err)
|
|
require.True(t, okSt)
|
|
assert.Equal(t, "my error", st.Message())
|
|
assert.Equal(t, codes.Unknown, st.Code())
|
|
assert.Equal(t, ExportResponse{}, resp)
|
|
}
|
|
|
|
type fakeMetricsServer struct {
|
|
UnimplementedGRPCServer
|
|
t *testing.T
|
|
err error
|
|
}
|
|
|
|
func (f fakeMetricsServer) Export(_ context.Context, request ExportRequest) (ExportResponse, error) {
|
|
assert.Equal(f.t, generateMetricsRequest(), request)
|
|
return NewExportResponse(), f.err
|
|
}
|
|
|
|
func generateMetricsRequest() ExportRequest {
|
|
md := pmetric.NewMetrics()
|
|
m := md.ResourceMetrics().AppendEmpty().ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
|
|
m.SetName("test_metric")
|
|
m.SetEmptyGauge().DataPoints().AppendEmpty()
|
|
return NewExportRequestFromMetrics(md)
|
|
}
|