Path: blob/main/pkg/integrations/v2/metricsutils/metricshandler_integration_test.go
5340 views
package metricsutils12import (3"fmt"4"net/http"5"net/url"6"testing"78"github.com/go-kit/log"9"github.com/grafana/agent/pkg/integrations/v2"10"github.com/grafana/agent/pkg/integrations/v2/common"11"github.com/prometheus/common/model"12"github.com/prometheus/prometheus/discovery/targetgroup"13"github.com/prometheus/prometheus/model/labels"14"github.com/stretchr/testify/require"15)1617func TestMetricsHandlerIntegration_Targets(t *testing.T) {18globals := integrations.Globals{19AgentIdentifier: "testagent",20AgentBaseURL: func() *url.URL {21u, err := url.Parse("http://testagent/")22require.NoError(t, err)23return u24}(),25SubsystemOpts: integrations.DefaultSubsystemOptions,26}2728t.Run("Targets", func(t *testing.T) {29var cfg common.MetricsConfig30cfg.ApplyDefaults(globals.SubsystemOpts.Metrics.Autoscrape)3132i, err := NewMetricsHandlerIntegration(nil, fakeConfig{}, cfg, globals, http.NotFoundHandler())33require.NoError(t, err)3435actual := i.Targets(integrations.Endpoint{Host: "test", Prefix: "/test/"})36expect := []*targetgroup.Group{{37Source: "fake/testagent",38Labels: model.LabelSet{39"instance": "testagent",40"job": "integrations/fake",41"agent_hostname": "testagent",4243"__meta_agent_integration_name": "fake",44"__meta_agent_integration_instance": "testagent",45"__meta_agent_integration_autoscrape": "1",46},47Targets: []model.LabelSet{{48"__address__": "test",49"__metrics_path__": "/test/metrics",50}},51}}52require.Equal(t, expect, actual)5354t.Run("Extra labels", func(t *testing.T) {55cfg := common.MetricsConfig{56ExtraLabels: labels.FromMap(map[string]string{"foo": "bar", "fizz": "buzz"}),57}58cfg.ApplyDefaults(globals.SubsystemOpts.Metrics.Autoscrape)5960i, err := NewMetricsHandlerIntegration(nil, fakeConfig{}, cfg, globals, http.NotFoundHandler())61require.NoError(t, err)62actual := i.Targets(integrations.Endpoint{Host: "test", Prefix: "/test/"})63require.Len(t, actual, 1)6465for _, lbl := range cfg.ExtraLabels {66val, ok := actual[0].Labels[model.LabelName(lbl.Name)]67require.True(t, ok, "target does not have extra label %s", lbl.Name)68require.Equal(t, lbl.Value, string(val), "extra label %s does not match expectation", lbl.Name)69}70})71})72}7374type fakeConfig struct{}7576func (fakeConfig) Name() string { return "fake" }77func (fakeConfig) ApplyDefaults(_ integrations.Globals) error { return nil }78func (fakeConfig) Identifier(g integrations.Globals) (string, error) { return g.AgentIdentifier, nil }79func (fakeConfig) NewIntegration(_ log.Logger, _ integrations.Globals) (integrations.Integration, error) {80return nil, fmt.Errorf("not implemented")81}828384