mirror of
https://github.com/hanzoai/telemetry.git
synced 2026-10-30 20:01:49 +00:00
Coming soon: The Renovate bot (GitHub App) will be renamed to Mend. PRs from Renovate will soon appear from 'Mend'. Learn more [here](https://redirect.github.com/renovatebot/renovate/discussions/37842). This PR contains the following updates: | Package | Change | Age | Confidence | |---|---|---|---| | [github.com/golangci/golangci-lint/v2](https://redirect.github.com/golangci/golangci-lint) | `v2.4.0` -> `v2.5.0` | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | --- > [!WARNING] > Some dependencies could not be looked up. Check the Dependency Dashboard for more information. --- ### Release Notes <details> <summary>golangci/golangci-lint (github.com/golangci/golangci-lint/v2)</summary> ### [`v2.5.0`](https://redirect.github.com/golangci/golangci-lint/blob/HEAD/CHANGELOG.md#v250) [Compare Source](https://redirect.github.com/golangci/golangci-lint/compare/v2.4.0...v2.5.0) 1. New linters - Add `godoclint` linter <https://github.com/godoc-lint/godoc-lint> - Add `unqueryvet` linter <https://github.com/MirrexOne/unqueryvet> - Add `iotamixing` linter <https://github.com/AdminBenni/iota-mixing> 2. Linters new features or changes - `embeddedstructfieldcheck`: from 0.3.0 to 0.4.0 (new option: `empty-line`) - `err113`: from [`aea10b5`](https://redirect.github.com/golangci/golangci-lint/commit/aea10b59be24) to 0.1.1 (skip internals of `Is` methods for `error` type) - `ginkgolinter`: from 0.20.0 to 0.21.0 (new option: `force-tonot`) - `gofumpt`: from 0.8.0 to 0.9.1 (new rule is to "clothe" naked returns for the sake of clarity) - `ineffassign`: from 0.1.0 to 0.2.0 (new option: `check-escaping-errors`) - `musttag`: from 0.13.1 to 0.14.0 (support interface methods) - `revive`: from 1.11.0 to 1.12.0 (new options: `identical-ifelseif-branches`, `identical-ifelseif-conditions`, `identical-switch-branches`, `identical-switch-conditions`, `package-directory-mismatch`, `unsecure-url-scheme`, `use-waitgroup-go`, `useless-fallthrough`) - `thelper`: from 0.6.3 to 0.7.1 (skip `t.Helper` in functions passed to `synctest.Test`) - `wsl`: from 5.1.1 to 5.2.0 (improvements related to subexpressions) 3. Linters bug fixes - `asciicheck`: from 0.4.1 to 0.5.0 - `errname`: from 1.1.0 to 1.1.1 - `fatcontext`: from 0.8.0 to 0.8.1 - `go-printf-func-name`: from 0.1.0 to 0.1.1 - `godot`: from 1.5.1 to 1.5.4 - `gosec`: from 2.22.7 to 2.22.8 - `nilerr`: from 0.1.1 to a temporary fork - `nilnil`: from 1.1.0 to 1.1.1 - `protogetter`: from 0.3.15 to 0.3.16 - `tagliatelle`: from 0.7.1 to 0.7.2 - `testifylint`: from 1.6.1 to 1.6.4 4. Misc. - fix: "no export data" errors are now handled as a standard typecheck error 5. Documentation - Improve nolint section about syntax </details> --- ### Configuration 📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/open-telemetry/opentelemetry-collector). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS45Ny4xMCIsInVwZGF0ZWRJblZlciI6IjQxLjk3LjEwIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiLCJyZW5vdmF0ZWJvdCJdfQ==--> --------- Signed-off-by: alex boten <[email protected]> Co-authored-by: Hanzo Dev <[email protected]> Co-authored-by: otelbot <[email protected]> Co-authored-by: Yang Song <[email protected]> Co-authored-by: Alex Boten <[email protected]>
114 lines
3.8 KiB
Go
114 lines
3.8 KiB
Go
// Copyright The OpenTelemetry Authors
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package metrics
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"net"
|
|
"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/status"
|
|
|
|
"go.opentelemetry.io/collector/component"
|
|
"go.opentelemetry.io/collector/consumer"
|
|
"go.opentelemetry.io/collector/consumer/consumererror"
|
|
"go.opentelemetry.io/collector/consumer/consumertest"
|
|
"go.opentelemetry.io/collector/pdata/pmetric/pmetricotlp"
|
|
"go.opentelemetry.io/collector/pdata/testdata"
|
|
"go.opentelemetry.io/collector/receiver/otlpreceiver/internal/metadata"
|
|
"go.opentelemetry.io/collector/receiver/receiverhelper"
|
|
"go.opentelemetry.io/collector/receiver/receivertest"
|
|
)
|
|
|
|
func TestExport(t *testing.T) {
|
|
md := testdata.GenerateMetrics(1)
|
|
req := pmetricotlp.NewExportRequestFromMetrics(md)
|
|
|
|
metricSink := new(consumertest.MetricsSink)
|
|
metricsClient := makeMetricsServiceClient(t, metricSink)
|
|
resp, err := metricsClient.Export(context.Background(), req)
|
|
|
|
require.NoError(t, err, "Failed to export metrics: %v", err)
|
|
require.NotNil(t, resp, "The response is missing")
|
|
|
|
mds := metricSink.AllMetrics()
|
|
require.Len(t, mds, 1)
|
|
assert.Equal(t, md, mds[0])
|
|
}
|
|
|
|
func TestExport_EmptyRequest(t *testing.T) {
|
|
metricSink := new(consumertest.MetricsSink)
|
|
metricsClient := makeMetricsServiceClient(t, metricSink)
|
|
resp, err := metricsClient.Export(context.Background(), pmetricotlp.NewExportRequest())
|
|
require.NoError(t, err)
|
|
require.NotNil(t, resp)
|
|
}
|
|
|
|
func TestExport_NonPermanentErrorConsumer(t *testing.T) {
|
|
md := testdata.GenerateMetrics(1)
|
|
req := pmetricotlp.NewExportRequestFromMetrics(md)
|
|
|
|
metricsClient := makeMetricsServiceClient(t, consumertest.NewErr(errors.New("my error")))
|
|
resp, err := metricsClient.Export(context.Background(), req)
|
|
require.EqualError(t, err, "rpc error: code = Unavailable desc = my error")
|
|
require.ErrorIs(t, err, status.Error(codes.Unavailable, "my error"))
|
|
assert.Equal(t, pmetricotlp.ExportResponse{}, resp)
|
|
}
|
|
|
|
func TestExport_PermanentErrorConsumer(t *testing.T) {
|
|
ld := testdata.GenerateMetrics(1)
|
|
req := pmetricotlp.NewExportRequestFromMetrics(ld)
|
|
|
|
metricsClient := makeMetricsServiceClient(t, consumertest.NewErr(consumererror.NewPermanent(errors.New("my error"))))
|
|
resp, err := metricsClient.Export(context.Background(), req)
|
|
require.EqualError(t, err, "rpc error: code = Internal desc = Permanent error: my error")
|
|
require.ErrorIs(t, err, status.Error(codes.Internal, "Permanent error: my error"))
|
|
assert.Equal(t, pmetricotlp.ExportResponse{}, resp)
|
|
}
|
|
|
|
func makeMetricsServiceClient(t *testing.T, mc consumer.Metrics) pmetricotlp.GRPCClient {
|
|
addr := otlpReceiverOnGRPCServer(t, mc)
|
|
|
|
cc, err := grpc.NewClient(addr.String(), grpc.WithTransportCredentials(insecure.NewCredentials()))
|
|
require.NoError(t, err, "Failed to create the MetricsServiceClient: %v", err)
|
|
t.Cleanup(func() {
|
|
require.NoError(t, cc.Close())
|
|
})
|
|
|
|
return pmetricotlp.NewGRPCClient(cc)
|
|
}
|
|
|
|
func otlpReceiverOnGRPCServer(t *testing.T, mc consumer.Metrics) net.Addr {
|
|
ln, err := net.Listen("tcp", "localhost:")
|
|
require.NoError(t, err, "Failed to find an available address to run the gRPC server: %v", err)
|
|
|
|
t.Cleanup(func() {
|
|
require.NoError(t, ln.Close())
|
|
})
|
|
|
|
set := receivertest.NewNopSettings(metadata.Type)
|
|
set.ID = component.MustNewIDWithName("otlp", "metrics")
|
|
obsreport, err := receiverhelper.NewObsReport(receiverhelper.ObsReportSettings{
|
|
ReceiverID: set.ID,
|
|
Transport: "grpc",
|
|
ReceiverCreateSettings: set,
|
|
})
|
|
require.NoError(t, err)
|
|
r := New(mc, obsreport)
|
|
// Now run it as a gRPC server
|
|
srv := grpc.NewServer()
|
|
pmetricotlp.RegisterGRPCServer(srv, r)
|
|
go func() {
|
|
_ = srv.Serve(ln)
|
|
}()
|
|
|
|
return ln.Addr()
|
|
}
|