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](d10549e3ec)
(No need to do this)
pull/10798/head
Kevin Burke 2 years ago committed by GitHub
parent c182940201
commit c071447900
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 39
      clients/pkg/promtail/targets/gcplog/push_target_test.go
  2. 37
      clients/pkg/promtail/targets/gcplog/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
}

@ -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
}

Loading…
Cancel
Save