diff --git a/clients/pkg/promtail/targets/gcplog/push_target_test.go b/clients/pkg/promtail/targets/gcplog/push_target_test.go index 7a514b5533..50075820fa 100644 --- a/clients/pkg/promtail/targets/gcplog/push_target_test.go +++ b/clients/pkg/promtail/targets/gcplog/push_target_test.go @@ -1,9 +1,7 @@ package gcplog_test import ( - "flag" "fmt" - "net" "net/http" "os" "strings" @@ -14,7 +12,6 @@ import ( "github.com/grafana/loki/clients/pkg/promtail/api" "github.com/go-kit/log" - "github.com/grafana/dskit/server" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/common/model" "github.com/prometheus/prometheus/model/relabel" @@ -162,7 +159,7 @@ func TestPushTarget(t *testing.T) { eh := fake.New(func() {}) defer eh.Stop() - serverConfig, port, err := getServerConfigWithAvailablePort() + serverConfig, port, err := gcplog.GetServerConfigWithAvailablePort() require.NoError(t, err, "error generating server config or finding open port") config := &scrapeconfig.GcplogTargetConfig{ Server: serverConfig, @@ -224,7 +221,7 @@ func TestPushTarget_UseIncomingTimestamp(t *testing.T) { eh := fake.New(func() {}) defer eh.Stop() - serverConfig, port, err := getServerConfigWithAvailablePort() + serverConfig, port, err := gcplog.GetServerConfigWithAvailablePort() require.NoError(t, err, "error generating server config or finding open port") config := &scrapeconfig.GcplogTargetConfig{ Server: serverConfig, @@ -268,7 +265,7 @@ func TestPushTarget_UseTenantIDHeaderIfPresent(t *testing.T) { eh := fake.New(func() {}) defer eh.Stop() - serverConfig, port, err := getServerConfigWithAvailablePort() + serverConfig, port, err := gcplog.GetServerConfigWithAvailablePort() require.NoError(t, err, "error generating server config or finding open port") config := &scrapeconfig.GcplogTargetConfig{ Server: serverConfig, @@ -321,7 +318,7 @@ func TestPushTarget_ErroneousPayloadsAreRejected(t *testing.T) { eh := fake.New(func() {}) defer eh.Stop() - serverConfig, port, err := getServerConfigWithAvailablePort() + serverConfig, port, err := gcplog.GetServerConfigWithAvailablePort() require.NoError(t, err, "error generating server config or finding open port") config := &scrapeconfig.GcplogTargetConfig{ Server: serverConfig, @@ -401,7 +398,7 @@ func TestPushTarget_UsePushTimeout(t *testing.T) { eh := newBlockingEntryHandler() defer eh.Stop() - serverConfig, port, err := getServerConfigWithAvailablePort() + serverConfig, port, err := gcplog.GetServerConfigWithAvailablePort() require.NoError(t, err, "error generating server config or finding open port") config := &scrapeconfig.GcplogTargetConfig{ Server: serverConfig, @@ -442,29 +439,3 @@ func waitForMessages(eh *fake.Client) { countdown-- } } - -func getServerConfigWithAvailablePort() (cfg server.Config, port int, err error) { - // Get a randomly available port by open and closing a TCP socket - addr, err := net.ResolveTCPAddr("tcp", localhost+":0") - if err != nil { - return - } - l, err := net.ListenTCP("tcp", addr) - if err != nil { - return - } - port = l.Addr().(*net.TCPAddr).Port - err = l.Close() - if err != nil { - return - } - - // Adjust some of the defaults - cfg.RegisterFlags(flag.NewFlagSet("empty", flag.ContinueOnError)) - cfg.HTTPListenAddress = localhost - cfg.HTTPListenPort = port - cfg.GRPCListenAddress = localhost - cfg.GRPCListenPort = 0 // Not testing GRPC, a random port will be assigned - - return -} diff --git a/clients/pkg/promtail/targets/gcplog/target_test.go b/clients/pkg/promtail/targets/gcplog/target_test.go index 89f4e604a2..1a7cec4713 100644 --- a/clients/pkg/promtail/targets/gcplog/target_test.go +++ b/clients/pkg/promtail/targets/gcplog/target_test.go @@ -1,7 +1,9 @@ package gcplog import ( + "flag" "fmt" + "net" "os" "reflect" "testing" @@ -13,6 +15,8 @@ import ( "golang.org/x/oauth2/google" "google.golang.org/api/option" + "github.com/grafana/dskit/server" + "github.com/grafana/loki/clients/pkg/promtail/api" "github.com/grafana/loki/clients/pkg/promtail/client/fake" "github.com/grafana/loki/clients/pkg/promtail/scrapeconfig" @@ -111,6 +115,11 @@ func TestNewGCPLogTarget(t *testing.T) { // Since the push target underlying http server registers metrics in the default registerer, we have to override it to prevent duplicate metrics errors. prometheus.DefaultRegisterer = prometheus.NewRegistry() + serverConfig, _, err := GetServerConfigWithAvailablePort() + if err != nil { + t.Fatal(err) + } + tt.args.config.Server = serverConfig got, err := NewGCPLogTarget(tt.args.metrics, tt.args.logger, tt.args.handler, tt.args.relabel, tt.args.jobName, tt.args.config, option.WithCredentials(&google.Credentials{})) // If the target was started, stop it after test if got != nil { @@ -126,3 +135,31 @@ func TestNewGCPLogTarget(t *testing.T) { }) } } + +const localhost = "127.0.0.1" + +func GetServerConfigWithAvailablePort() (cfg server.Config, port int, err error) { + // Get a randomly available port by open and closing a TCP socket + addr, err := net.ResolveTCPAddr("tcp", localhost+":0") + if err != nil { + return + } + l, err := net.ListenTCP("tcp", addr) + if err != nil { + return + } + port = l.Addr().(*net.TCPAddr).Port + err = l.Close() + if err != nil { + return + } + + // Adjust some of the defaults + cfg.RegisterFlags(flag.NewFlagSet("empty", flag.ContinueOnError)) + cfg.HTTPListenAddress = localhost + cfg.HTTPListenPort = port + cfg.GRPCListenAddress = localhost + cfg.GRPCListenPort = 0 // Not testing GRPC, a random port will be assigned + + return +}