github.com/cosmos/cosmos-sdk@v0.50.10/telemetry/metrics_test.go (about) 1 package telemetry 2 3 import ( 4 "encoding/json" 5 "strings" 6 "testing" 7 "time" 8 9 "github.com/hashicorp/go-metrics" 10 "github.com/stretchr/testify/require" 11 ) 12 13 func TestMetrics_Disabled(t *testing.T) { 14 m, err := New(Config{Enabled: false}) 15 require.Nil(t, m) 16 require.Nil(t, err) 17 } 18 19 func TestMetrics_InMem(t *testing.T) { 20 m, err := New(Config{ 21 MetricsSink: MetricSinkInMem, 22 Enabled: true, 23 EnableHostname: false, 24 ServiceName: "test", 25 }) 26 require.NoError(t, err) 27 require.NotNil(t, m) 28 29 emitMetrics() 30 31 gr, err := m.Gather(FormatText) 32 require.NoError(t, err) 33 require.Equal(t, gr.ContentType, "application/json") 34 35 jsonMetrics := make(map[string]interface{}) 36 require.NoError(t, json.Unmarshal(gr.Metrics, &jsonMetrics)) 37 38 counters := jsonMetrics["Counters"].([]interface{}) 39 require.Equal(t, counters[0].(map[string]interface{})["Count"].(float64), 10.0) 40 require.Equal(t, counters[0].(map[string]interface{})["Name"].(string), "test.dummy_counter") 41 } 42 43 func TestMetrics_Prom(t *testing.T) { 44 m, err := New(Config{ 45 MetricsSink: MetricSinkInMem, 46 Enabled: true, 47 EnableHostname: false, 48 ServiceName: "test", 49 PrometheusRetentionTime: 60, 50 EnableHostnameLabel: false, 51 }) 52 require.NoError(t, err) 53 require.NotNil(t, m) 54 require.True(t, m.prometheusEnabled) 55 56 emitMetrics() 57 58 gr, err := m.Gather(FormatPrometheus) 59 require.NoError(t, err) 60 require.Equal(t, gr.ContentType, ContentTypeText) 61 62 require.True(t, strings.Contains(string(gr.Metrics), "test_dummy_counter 30")) 63 } 64 65 func emitMetrics() { 66 ticker := time.NewTicker(time.Second) 67 timeout := time.After(30 * time.Second) 68 69 for { 70 select { 71 case <-ticker.C: 72 metrics.IncrCounter([]string{"dummy_counter"}, 1.0) 73 case <-timeout: 74 return 75 } 76 } 77 }