diff options
author | John Cai <jcai@gitlab.com> | 2021-11-17 20:24:41 +0300 |
---|---|---|
committer | John Cai <jcai@gitlab.com> | 2021-11-17 23:09:44 +0300 |
commit | 954b4f5ed0e069d6cd739c113d3d599678306248 (patch) | |
tree | fe3d4cbe7ac958123eb8ff485dfcbbfd82fde920 /cmd | |
parent | 7e74b7333ca6f2d1e55e7a17350cccc7c856c847 (diff) |
praefect: add test to ensure database metrics collector registration
Add a test to ensure that the
PrometheusExcludeDatabaseFromDefaultMetrics controls whether or not it
gets registered in the main metrics registry.
Diffstat (limited to 'cmd')
-rw-r--r-- | cmd/praefect/main_test.go | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/cmd/praefect/main_test.go b/cmd/praefect/main_test.go index cdbea8f2a..25a615876 100644 --- a/cmd/praefect/main_test.go +++ b/cmd/praefect/main_test.go @@ -2,12 +2,18 @@ package main import ( "errors" + "fmt" "testing" + "github.com/prometheus/client_golang/prometheus" + dto "github.com/prometheus/client_model/go" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "gitlab.com/gitlab-org/gitaly/v14/internal/bootstrap" "gitlab.com/gitlab-org/gitaly/v14/internal/bootstrap/starter" "gitlab.com/gitlab-org/gitaly/v14/internal/praefect/config" + "gitlab.com/gitlab-org/gitaly/v14/internal/praefect/datastore" + "gitlab.com/gitlab-org/gitaly/v14/internal/praefect/datastore/glsql" "gitlab.com/gitlab-org/gitaly/v14/internal/testhelper" ) @@ -148,3 +154,85 @@ func TestGetStarterConfigs(t *testing.T) { }) } } + +func newMockRegisterer() *mockRegisterer { + return &mockRegisterer{} +} + +type mockRegisterer struct { + repositoryCollectorRegistered bool +} + +func (m *mockRegisterer) Register(c prometheus.Collector) error { + if _, ok := c.(*datastore.RepositoryStoreCollector); ok { + m.repositoryCollectorRegistered = true + } + + return nil +} + +func (m *mockRegisterer) MustRegister(collectors ...prometheus.Collector) { + for _, c := range collectors { + if _, ok := c.(*datastore.RepositoryStoreCollector); ok { + m.repositoryCollectorRegistered = true + } + } +} + +func (m *mockRegisterer) Unregister(c prometheus.Collector) bool { + return false +} + +func (m *mockRegisterer) Gather() ([]*dto.MetricFamily, error) { + return nil, nil +} + +func TestExcludeDatabaseMetricsFromDefaultMetrics(t *testing.T) { + t.Parallel() + + db := glsql.NewDB(t) + dbConf := glsql.GetDBConfig(t, db.Name) + + conf := config.Config{ + SocketPath: testhelper.GetTemporaryGitalySocketFileName(t), + VirtualStorages: []*config.VirtualStorage{ + { + Name: "praefect", + Nodes: []*config.Node{ + {Storage: "storage-0", Address: "tcp://someaddress"}, + }, + }, + }, + DB: dbConf, + Failover: config.Failover{ + Enabled: true, + ElectionStrategy: config.ElectionStrategyPerRepository, + }, + MemoryQueueEnabled: true, + } + + starterConfigs, err := getStarterConfigs(conf) + require.NoError(t, err) + + excludeDatabaseMetricsSettings := []bool{true, false} + for _, excludeDatabaseMetrics := range excludeDatabaseMetricsSettings { + t.Run(fmt.Sprintf("exclude database metrics %v", excludeDatabaseMetrics), func(t *testing.T) { + conf.PrometheusExcludeDatabaseFromDefaultMetrics = excludeDatabaseMetrics + + stopped := make(chan struct{}) + bootstrapper := bootstrap.NewNoop() + + metricRegisterer, dbMetricsRegisterer := newMockRegisterer(), newMockRegisterer() + go func() { + defer close(stopped) + assert.NoError(t, run(starterConfigs, conf, bootstrapper, metricRegisterer, dbMetricsRegisterer)) + }() + + bootstrapper.Terminate() + <-stopped + + assert.True(t, dbMetricsRegisterer.repositoryCollectorRegistered) + assert.Equal(t, excludeDatabaseMetrics, !metricRegisterer.repositoryCollectorRegistered) + }) + } +} |