Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
authorJohn Cai <jcai@gitlab.com>2021-11-17 20:24:41 +0300
committerJohn Cai <jcai@gitlab.com>2021-11-17 23:09:44 +0300
commit954b4f5ed0e069d6cd739c113d3d599678306248 (patch)
treefe3d4cbe7ac958123eb8ff485dfcbbfd82fde920 /cmd
parent7e74b7333ca6f2d1e55e7a17350cccc7c856c847 (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.go88
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)
+ })
+ }
+}