Files
7fbfa0dc29 fix(deps): update module github.com/golangci/golangci-lint/v2 to v2.5.0 (#13884)
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` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fgolangci%2fgolangci-lint%2fv2/v2.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fgolangci%2fgolangci-lint%2fv2/v2.4.0/v2.5.0?slim=true)](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]>
2025-09-24 16:26:30 +00:00

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()
}