mirror of
https://gitlab.com/pulsechaincom/prysm-pulse.git
synced 2025-01-01 07:51:21 +00:00
66 lines
1.7 KiB
Go
66 lines
1.7 KiB
Go
package metric
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"net/http"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
|
|
pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1"
|
|
"github.com/prysmaticlabs/prysm/shared/p2p"
|
|
"github.com/prysmaticlabs/prysm/shared/prometheus"
|
|
)
|
|
|
|
const addr = "127.0.0.1:8989"
|
|
|
|
func TestMessageMetrics_OK(t *testing.T) {
|
|
service := prometheus.NewPrometheusService(addr, nil)
|
|
go service.Start()
|
|
defer service.Stop()
|
|
|
|
adapter := New()
|
|
if adapter == nil {
|
|
t.Error("Expected metric adapter")
|
|
}
|
|
data := &pb.Attestation{
|
|
AggregationBitfield: []byte{99},
|
|
Data: &pb.AttestationData{
|
|
Slot: 0,
|
|
},
|
|
}
|
|
h := adapter(func(p2p.Message) { time.Sleep(10 * time.Millisecond) })
|
|
h(p2p.Message{Ctx: context.Background(), Data: data})
|
|
h = adapter(func(p2p.Message) { time.Sleep(100 * time.Microsecond) })
|
|
h(p2p.Message{Ctx: context.Background(), Data: data})
|
|
|
|
metrics := getMetrics(t)
|
|
testMetricExists(t, metrics, fmt.Sprintf("p2p_message_sent_total{message=\"%T\"} 2", data))
|
|
testMetricExists(t, metrics, fmt.Sprintf("p2p_message_sent_latency_seconds_bucket{message=\"%T\",le=\"0.005\"} 1", data))
|
|
testMetricExists(t, metrics, fmt.Sprintf("p2p_message_sent_latency_seconds_bucket{message=\"%T\",le=\"0.01\"} 1", data))
|
|
}
|
|
|
|
func getMetrics(t *testing.T) []string {
|
|
resp, err := http.Get(fmt.Sprintf("http://%s/metrics", addr))
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
body, err := ioutil.ReadAll(resp.Body)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
return strings.Split(string(body), "\n")
|
|
}
|
|
|
|
func testMetricExists(t *testing.T, metrics []string, pattern string) string {
|
|
for _, line := range metrics {
|
|
if strings.HasPrefix(line, pattern) {
|
|
return line
|
|
}
|
|
}
|
|
t.Errorf("Pattern \"%s\" not found in metrics", pattern)
|
|
return ""
|
|
}
|