From c071447900c316545a12f18fc2ced20e99ed03e3 Mon Sep 17 00:00:00 2001 From: Kevin Burke Date: Wed, 11 Oct 2023 05:15:19 -0700 Subject: [PATCH] clients/pkg/promtail/targets/gcplog: avoid listening on 0.0.0.0 (#10411) **What this PR does / why we need it**: Previously on Mac, running these tests triggers a dialog box asking me to accept all incoming network connections. Edit the test to listen on localhost only. **Which issue(s) this PR fixes**: Updates #10407 **Special notes for your reviewer**: **Checklist** - [x] Reviewed the [`CONTRIBUTING.md`](https://github.com/grafana/loki/blob/main/CONTRIBUTING.md) guide (**required**) - [x] Documentation added (Just test changes, no documentation changes) - [X] Tests updated - [x] `CHANGELOG.md` updated (Not worth adding to CHANGELOG) - [x] If the change is worth mentioning in the release notes, add `add-to-release-notes` label (Not worth adding to release notes) - [x] Changes that require user attention or interaction to upgrade are documented in `docs/sources/setup/upgrade/_index.md` (No user attention required) - [x] For Helm chart changes bump the Helm chart version in `production/helm/loki/Chart.yaml` and update `production/helm/loki/CHANGELOG.md` and `production/helm/loki/README.md`. [Example PR](https://github.com/grafana/loki/commit/d10549e3ece02120974929894ee333d07755d213) (No need to do this) --- .../targets/gcplog/push_target_test.go | 39 +++---------------- .../promtail/targets/gcplog/target_test.go | 37 ++++++++++++++++++ 2 files changed, 42 insertions(+), 34 deletions(-) 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 +}