144 lines
3.7 KiB
Go
144 lines
3.7 KiB
Go
package server
|
|
|
|
import (
|
|
"io"
|
|
"net/http"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/prometheus/common/expfmt"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/mattermost/mattermost/server/public/shared/mlog"
|
|
)
|
|
|
|
func TestMetricDisabled(t *testing.T) {
|
|
t.Log("Testing Metrics Enabled")
|
|
platform := "junk"
|
|
pushType := PushTypeMessage
|
|
|
|
fileName := FindConfigFile("mattermost-push-proxy.sample.json")
|
|
cfg, err := LoadConfig(fileName)
|
|
require.NoError(t, err)
|
|
cfg.AndroidPushSettings[0].AndroidAPIKey = platform
|
|
cfg.EnableMetrics = false
|
|
|
|
logger, err := mlog.NewLogger()
|
|
require.NoError(t, err)
|
|
|
|
srv := New(cfg, logger)
|
|
srv.Start()
|
|
|
|
time.Sleep(time.Second * 2)
|
|
defer func() {
|
|
srv.Stop()
|
|
time.Sleep(time.Second * 2)
|
|
}()
|
|
|
|
m := newMetrics()
|
|
defer m.shutdown()
|
|
|
|
m.incrementBadRequest()
|
|
m.incrementNotificationTotal(platform, pushType)
|
|
m.incrementSuccess(platform, pushType)
|
|
m.incrementRemoval(platform, pushType, "not registered")
|
|
m.incrementFailure(platform, pushType, "error")
|
|
m.observerNotificationResponse(PushNotifyApple, 1)
|
|
m.observerNotificationResponse(PushNotifyAndroid, 1)
|
|
m.observeServiceResponse(1)
|
|
|
|
resp, err := http.Get("http://localhost:8066/metrics")
|
|
if err != nil {
|
|
t.Fatalf("service should not return an http error")
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
data, err := io.ReadAll(resp.Body)
|
|
if err != nil {
|
|
t.Fatalf("service should return a parsable response")
|
|
}
|
|
if !strings.Contains(string(data), "404 page not found") {
|
|
t.Fatalf("service should return a 404")
|
|
}
|
|
}
|
|
|
|
func TestMetricEnabled(t *testing.T) {
|
|
t.Log("Testing Metrics Enabled")
|
|
platform := "junk"
|
|
pushType := PushTypeMessage
|
|
|
|
fileName := FindConfigFile("mattermost-push-proxy.sample.json")
|
|
cfg, err := LoadConfig(fileName)
|
|
require.NoError(t, err)
|
|
cfg.AndroidPushSettings[0].AndroidAPIKey = platform
|
|
cfg.EnableMetrics = true
|
|
|
|
logger, err := mlog.NewLogger()
|
|
require.NoError(t, err)
|
|
|
|
srv := New(cfg, logger)
|
|
srv.Start()
|
|
|
|
time.Sleep(time.Second * 2)
|
|
defer func() {
|
|
srv.Stop()
|
|
time.Sleep(time.Second * 2)
|
|
}()
|
|
|
|
srv.metrics.incrementBadRequest()
|
|
srv.metrics.incrementNotificationTotal(platform, pushType)
|
|
srv.metrics.incrementSuccess(platform, pushType)
|
|
srv.metrics.incrementRemoval(platform, pushType, "not registered")
|
|
srv.metrics.incrementFailure(platform, pushType, "error")
|
|
srv.metrics.observerNotificationResponse(PushNotifyApple, 1)
|
|
srv.metrics.observerNotificationResponse(PushNotifyAndroid, 1)
|
|
srv.metrics.observeServiceResponse(1)
|
|
|
|
resp, err := http.Get("http://localhost:8066/metrics")
|
|
if err != nil {
|
|
t.Fatalf("failed to get metrics endpoint - %s", err.Error())
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
parser := &expfmt.TextParser{}
|
|
metrics, _ := parser.TextToMetricFamilies(resp.Body)
|
|
|
|
counters := []string{metricSuccessName, metricFailureName, metricFailureWithReasonName, metricRemovalName, metricBadRequestName, metricNotificationsTotalName}
|
|
for _, cn := range counters {
|
|
if m, ok := metrics[cn]; !ok {
|
|
t.Fatalf("metric not found. name: %s", cn)
|
|
} else {
|
|
val := m.Metric[0].Counter.Value
|
|
result := float64(1)
|
|
|
|
if cn == metricFailureName {
|
|
result = float64(2)
|
|
}
|
|
|
|
if val == nil {
|
|
t.Fatalf("no metric value. name: %s", cn)
|
|
}
|
|
if *val != result {
|
|
t.Fatalf("metric value does not match. mame: %s, got: %v, expected: %v",
|
|
cn, *val, result)
|
|
}
|
|
}
|
|
}
|
|
|
|
histograms := []string{metricAPNSResponseName, metricFCMResponseName, metricServiceResponseName, metricNotificationResponseName}
|
|
for _, hn := range histograms {
|
|
if m, ok := metrics[hn]; !ok {
|
|
t.Fatalf("metric not found. name: %s", hn)
|
|
} else {
|
|
val := m.Metric[0].Histogram.SampleCount
|
|
if val == nil {
|
|
t.Fatalf("no metric value. name: %s", hn)
|
|
}
|
|
if *val != 1 {
|
|
t.Fatalf("metric value does not match. mame: %s, got: %v, expected: %v",
|
|
hn, *val, 1)
|
|
}
|
|
}
|
|
}
|
|
}
|