1 package metrics_test
2
3 import (
4 "context"
5 "errors"
6 "testing"
7
8 "github.com/cybertec-postgresql/pgwatch/v6/internal/metrics"
9 "github.com/stretchr/testify/assert"
10 )
11
12 func TestGetDefaultBuiltInMetrics(t *testing.T) {
13 expectedMetrics := []string{"sproc_changes", "table_changes", "index_changes", "privilege_changes", "object_changes", "configuration_changes"}
14 metrics := metrics.GetDefaultBuiltInMetrics()
15 assert.Equal(t, expectedMetrics, metrics, "The default built-in metrics should match the expected list")
16 }
17
18 func TestNewDefaultMetricReader(t *testing.T) {
19 reader, err := metrics.NewDefaultMetricReader(context.Background())
20 assert.NoError(t, err, "Creating a new default metric reader should not produce an error")
21 assert.NotNil(t, reader, "The metric reader should not be nil")
22 }
23
24 func TestDefaultMetricReaderUnsupportedOperations(t *testing.T) {
25 reader, _ := metrics.NewDefaultMetricReader(context.Background())
26 err := reader.WriteMetrics(nil)
27 assert.Equal(t, errors.ErrUnsupported, err, "WriteMetrics should return ErrUnsupported")
28
29 err = reader.DeleteMetric("")
30 assert.Equal(t, errors.ErrUnsupported, err, "DeleteMetric should return ErrUnsupported")
31
32 err = reader.UpdateMetric("", metrics.Metric{})
33 assert.Equal(t, errors.ErrUnsupported, err, "UpdateMetric should return ErrUnsupported")
34
35 err = reader.DeletePreset("")
36 assert.Equal(t, errors.ErrUnsupported, err, "DeletePreset should return ErrUnsupported")
37
38 err = reader.UpdatePreset("", metrics.Preset{})
39 assert.Equal(t, errors.ErrUnsupported, err, "UpdatePreset should return ErrUnsupported")
40
41 metrics, err := reader.GetMetrics()
42 assert.NotNil(t, metrics, "The metrics object should not be nil")
43 assert.NoError(t, err, "GetMetrics should return default metrics")
44 }
45
46
47 func TestDefaultMetrics_PostgresExporterBasicPreset(t *testing.T) {
48 m := metrics.GetDefaultMetrics()
49 if !assert.NotNil(t, m, "GetDefaultMetrics must not return nil") {
50 return
51 }
52
53 preset, ok := m.PresetDefs["postgres-exporter-basic"]
54 if !assert.True(t, ok, "preset 'postgres-exporter-basic' must exist in default metrics") {
55 return
56 }
57
58 requiredFamilies := []string{
59 "pg_stat_activity_count",
60 "pg_stat_bgwriter_checkpoints_timed",
61 "pg_stat_replication_pg_wal_lsn_diff",
62 }
63 for _, family := range requiredFamilies {
64 assert.Contains(t, preset.Metrics, family,
65 "preset 'postgres-exporter-basic' must include metric family %q", family)
66 }
67 }
68