Skip to content

Commit

Permalink
Fix flaky integration tests caused by prometheus metrics conflict (#4…
Browse files Browse the repository at this point in the history
…8248)

* Fix flaky test because of prometheus metrics: blackhole metrics

* lint
  • Loading branch information
hugoShaka authored Nov 1, 2024
1 parent bf8d6cb commit 6faa20b
Showing 1 changed file with 20 additions and 0 deletions.
20 changes: 20 additions & 0 deletions integration/tctl_terraform_env_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import (

"github.com/alecthomas/kingpin/v2"
"github.com/google/uuid"
"github.com/prometheus/client_golang/prometheus"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"

Expand All @@ -52,6 +53,7 @@ import (
// service and generates valid credentials Terraform can use to connect to Teleport.
func TestTCTLTerraformCommand_ProxyJoin(t *testing.T) {
testDir := t.TempDir()
prometheus.DefaultRegisterer = metricRegistryBlackHole{}

// Test setup: creating a teleport instance running auth and proxy
clusterName := "root.example.com"
Expand Down Expand Up @@ -127,6 +129,7 @@ func TestTCTLTerraformCommand_ProxyJoin(t *testing.T) {
func TestTCTLTerraformCommand_AuthJoin(t *testing.T) {
t.Parallel()
testDir := t.TempDir()
prometheus.DefaultRegisterer = metricRegistryBlackHole{}

// Test setup: creating a teleport instance running auth and proxy
clusterName := "root.example.com"
Expand Down Expand Up @@ -348,3 +351,20 @@ func connectWithCredentialsFromVars(t *testing.T, vars map[string]string, clt *a
_, err = botClt.Ping(ctx)
require.NoError(t, err)
}

// metricRegistryBlackHole is a fake prometheus.Registerer that accepts every metric and do nothing.
// This is a workaround for different teleport component using the global registry but registering incompatible metrics.
// Those issues can surface during integration tests starting Teleport auth, proxy, and tbot.
// The long-term fix is to have every component use its own registry instead of the global one.
type metricRegistryBlackHole struct {
}

func (m metricRegistryBlackHole) Register(_ prometheus.Collector) error {
return nil
}

func (m metricRegistryBlackHole) MustRegister(_ ...prometheus.Collector) {}

func (m metricRegistryBlackHole) Unregister(_ prometheus.Collector) bool {
return true
}

0 comments on commit 6faa20b

Please sign in to comment.